File indexing completed on 2024-04-28 04:37:33
0001 /* 0002 SPDX-FileCopyrightText: 2012 Dominik Haumann <dhaumann@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 // Forked from KTextEditor's KateMessageWidget at v5.66.0 0008 // Renamed class, dropped fading-enabling KateAnimation proxy 0009 0010 #ifndef KDEVPLATFORM_SUBLIME_MESSAGEWIDGET_H 0011 #define KDEVPLATFORM_SUBLIME_MESSAGEWIDGET_H 0012 0013 // Qt 0014 #include <QHash> 0015 #include <QPointer> 0016 #include <QWidget> 0017 #include <QVector> 0018 #include <QList> 0019 0020 class KMessageWidget; 0021 0022 namespace Sublime { 0023 0024 class Message; 0025 0026 /** 0027 * This class implements a message widget based on KMessageWidget. 0028 * It is used to show messages through the KTextEditior::MessageInterface. 0029 */ 0030 class MessageWidget : public QWidget 0031 { 0032 Q_OBJECT 0033 0034 public: 0035 /** 0036 * Constructor. By default, the widget is hidden. 0037 */ 0038 explicit MessageWidget(QWidget* parent = nullptr); 0039 0040 public: 0041 /** 0042 * Post a new incoming message. Show either directly, or queue 0043 */ 0044 void postMessage(Message* message, const QVector<QSharedPointer<QAction>>& actions); 0045 0046 // for unit test 0047 QString text() const; 0048 0049 protected Q_SLOTS: 0050 /** 0051 * Show the next message in the queue. 0052 */ 0053 void showNextMessage(); 0054 0055 /** 0056 * Helper that enables word wrap to avoid breaking the layout 0057 */ 0058 void setWordWrap(Message* message); 0059 0060 /** 0061 * catch when a message is deleted, then show next one, if applicable. 0062 */ 0063 void messageDestroyed(Message* message); 0064 /** 0065 * Start autoHide timer if requested 0066 */ 0067 void startAutoHideTimer(); 0068 /** 0069 * User hovers on a link in the message widget. 0070 */ 0071 void linkHovered(const QString& link); 0072 0073 private: 0074 // sorted list of pending messages 0075 QList<Message*> m_messageQueue; 0076 // pointer to current Message 0077 QPointer<Message> m_currentMessage; 0078 // shared pointers to QActions as guard 0079 QHash<Message*, QVector<QSharedPointer<QAction>>> m_messageHash; 0080 // the message widget, showing the actual contents 0081 KMessageWidget* m_messageWidget; 0082 0083 private: // some state variables 0084 // autoHide only once user interaction took place 0085 QTimer* m_autoHideTimer; 0086 // flag: save message's autohide time 0087 int m_autoHideTime = -1; 0088 }; 0089 0090 } 0091 0092 #endif