X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsystemtray.h;h=06c285dbe65be828475e919417fc1659520956b5;hp=d07edf104a409485506bdfc3ca98e8a533c6f32b;hb=e38846f054ad1766f2e91992a57bbaffd33c7c06;hpb=39dffd095bb5dbca49199d2173438c7f90c4e6fa diff --git a/src/qtui/systemtray.h b/src/qtui/systemtray.h index d07edf10..06c285db 100644 --- a/src/qtui/systemtray.h +++ b/src/qtui/systemtray.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2018 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This file is free software; you can redistribute it and/or modify * @@ -22,6 +22,7 @@ #include #include +#include class Action; class QMenu; @@ -32,20 +33,23 @@ class SystemTray : public QObject Q_ENUMS(State Mode MessageIcon ActivationReason) public: - enum State { + enum State + { Passive, Active, NeedsAttention }; - enum Mode { + enum Mode + { Invalid, Legacy, StatusNotifier }; // same as in QSystemTrayIcon - enum MessageIcon { + enum MessageIcon + { NoIcon, Information, Warning, @@ -53,7 +57,8 @@ public: }; // same as in QSystemTrayIcon - enum ActivationReason { + enum ActivationReason + { Unknown, Context, DoubleClick, @@ -61,7 +66,14 @@ public: MiddleClick }; - explicit SystemTray(QWidget *parent); + enum class AttentionBehavior + { + DoNothing, + ChangeColor, + Blink + }; + + explicit SystemTray(QWidget* parent); ~SystemTray() override; Mode mode() const; @@ -71,26 +83,27 @@ public: virtual bool isSystemTrayAvailable() const; - QWidget *associatedWidget() const; + QWidget* associatedWidget() const; public slots: void setVisible(bool visible = true); void setState(State); void setAlert(bool alerted); - void setToolTip(const QString &title, const QString &subtitle); - virtual void showMessage(const QString &title, const QString &message, MessageIcon icon = Information, int msTimeout = 10000, uint notificationId = 0); + void setToolTip(const QString& title, const QString& subtitle); + virtual void showMessage( + const QString& title, const QString& message, MessageIcon icon = Information, int msTimeout = 10000, uint notificationId = 0); virtual void closeMessage(uint notificationId); signals: void modeChanged(Mode mode); void stateChanged(State state); void visibilityChanged(bool isVisible); + void iconsChanged(); + void currentIconNameChanged(); + void toolTipChanged(const QString& title, const QString& subtitle); void activated(SystemTray::ActivationReason); - void iconChanged(const QIcon &icon); - void animationEnabledChanged(bool); - void toolTipChanged(const QString &title, const QString &subtitle); void messageClicked(uint notificationId); void messageClosed(uint notificationId); @@ -99,30 +112,38 @@ protected slots: protected: void setMode(Mode mode); - bool animationEnabled() const; QString toolTipTitle() const; QString toolTipSubTitle() const; - QMenu *trayMenu() const; + QMenu* trayMenu() const; QString iconName(State state) const; + QString currentIconName() const; + QString currentAttentionIconName() const; private slots: void minimizeRestore(); void trayMenuAboutToShow(); - void enableAnimationChanged(const QVariant &); - void invertTrayIconChanged(const QVariant &); + void invertTrayIconChanged(const QVariant&); + void enableChangeColorChanged(const QVariant&); + void enableBlinkChanged(const QVariant&); + + void onBlinkTimeout(); private: bool _isVisible{false}; Mode _mode{Mode::Invalid}; State _state{State::Passive}; - bool _animationEnabled{true}; bool _trayIconInverted{false}; + AttentionBehavior _attentionBehavior{AttentionBehavior::ChangeColor}; + + QTimer _blinkTimer; + bool _blinkState{false}; - QString _toolTipTitle, _toolTipSubTitle; + QString _toolTipTitle; + QString _toolTipSubTitle; - QMenu *_trayMenu{nullptr}; - QWidget *_associatedWidget{nullptr}; - Action *_minimizeRestoreAction{nullptr}; + QMenu* _trayMenu{nullptr}; + QWidget* _associatedWidget{nullptr}; + Action* _minimizeRestoreAction{nullptr}; };