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