#ifndef _NOTIFIERWINDOW_H_ #define _NOTIFIERWINDOW_H_ //============================================================================= // // File : NotifierWindow.h // Creation date : Tue Jul 6 2004 20:25:12 CEST by Szymon Stefanek // // This file is part of the KVIrc IRC client distribution // Copyright (C) 2004 Szymon Stefanek (pragma at kvirc dot net) // Copyright (C) 2005-2008 Iacopo Palazzi < iakko(at)siena(dot)linux(dot)it > // // This program is FREE software. You can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the HOPE that it will be USEFUL, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, write to the Free Software Foundation, // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // //============================================================================= #include "NotifierSettings.h" #include "kvi_settings.h" #include "KviQString.h" #include "KviPointerList.h" #include "KviTimeUtils.h" #include #include #include #include #include #include #include #include #include #include #include #include class QPainter; class KviWindow; class NotifierMessage; class NotifierWindowBorder; class KviNotifierWindowTabs; class KviThemedLineEdit; extern kvi_time_t g_tNotifierDisabledUntil; class NotifierWindow : public QWidget { Q_OBJECT public: NotifierWindow(); ~NotifierWindow(); protected: QTimer * m_pShowHideTimer = nullptr; QTimer * m_pBlinkTimer = nullptr; QTimer * m_pAutoHideTimer = nullptr; State m_eState = Hidden; bool m_bBlinkOn = false; double m_dOpacity = 0.0; bool m_bCloseDown = false; bool m_bPrevDown = false; bool m_bNextDown = false; bool m_bWriteDown = false; bool m_bCrashShowWorkAround; QRect m_wndRect; NotifierMessage * m_pCurrentMessage = nullptr; KviThemedLineEdit * m_pLineEdit = nullptr; bool m_bDragging = false; bool m_bLeftButtonIsPressed = false; bool m_bDiagonalResizing = false; bool m_bResizing = false; int m_whereResizing; QPoint m_pntDrag; QPoint m_pntPos; QPoint m_pntClick; int m_iBlinkCount; QMenu * m_pContextPopup = nullptr; QMenu * m_pDisablePopup = nullptr; KviWindow * m_pWindowToRaise = nullptr; kvi_time_t m_tAutoHideAt = 0; kvi_time_t m_tStartedAt = 0; QTime m_qtStartedAt; bool m_bDisableHideOnMainWindowGotAttention = false; QCursor m_cursor; QTabWidget * m_pWndTabs = nullptr; QProgressBar * m_pProgressBar = nullptr; NotifierWindowBorder * m_pWndBorder = nullptr; public: void doShow(bool bDoAnimate); void doHide(bool bDoAnimate); int textWidth(); void addMessage(KviWindow * pWnd, const QString & szImageId, const QString & szText, unsigned int uMessageTime); void setDisableHideOnMainWindowGotAttention(bool b) { m_bDisableHideOnMainWindowGotAttention = b; }; void showLineEdit(bool bShow); int countTabs() const { if(m_pWndTabs) return m_pWndTabs->count(); return 0; } State state() const { return m_eState; } protected: void showEvent(QShowEvent * e) override; void hideEvent(QHideEvent * e) override; void paintEvent(QPaintEvent * e) override; void mousePressEvent(QMouseEvent * e) override; void mouseReleaseEvent(QMouseEvent * e) override; void mouseMoveEvent(QMouseEvent * e) override; void leaveEvent(QEvent * e) override; #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) void enterEvent(QEvent * e) override; #else void enterEvent(QEnterEvent * e) override; #endif bool eventFilter(QObject * pEdit, QEvent * e) override; void keyPressEvent(QKeyEvent * e) override; public slots: void hideNow(); void toggleLineEdit(); void slotTabCloseRequested(int index); protected slots: void blink(); void heartbeat(); void returnPressed(); void updateGui(); void fillContextPopup(); void disableFor1Minute(); void disableFor5Minutes(); void disableFor15Minutes(); void disableFor30Minutes(); void disableFor60Minutes(); void disableUntilKVIrcRestarted(); void disablePermanently(); void progressUpdate(); private: void contextPopup(const QPoint & pos); void startBlinking(); // void computeRect(); void stopShowHideTimer(); void stopBlinkTimer(); void stopAutoHideTimer(); void startAutoHideTimer(); bool shouldHideIfMainWindowGotAttention(); void setCursor(int); void resize(QPoint p, bool = true); void redrawText(); bool checkResizing(QPoint); }; #endif //_NOTIFIERWINDOW_H_