X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsystemtray.h;h=c5fee1994b32a0b88012dd0550a39b79e503cc42;hp=b27d81ca375d4e0a935b80ba60e729221449c373;hb=ddfb1d2574c4bffd180361a80df9b1cd584bb040;hpb=3cc8b9030841cc3084ec6707a01f3b44ee58b8b9 diff --git a/src/qtui/systemtray.h b/src/qtui/systemtray.h index b27d81ca..c5fee199 100644 --- a/src/qtui/systemtray.h +++ b/src/qtui/systemtray.h @@ -20,7 +20,9 @@ #pragma once -#include +#include +#include +#include class Action; class QMenu; @@ -60,32 +62,42 @@ public: MiddleClick }; + enum class AttentionBehavior { + DoNothing, + ChangeColor, + Blink + }; + explicit SystemTray(QWidget *parent); ~SystemTray() override; - virtual void init(); Mode mode() const; State state() const; + bool isVisible() const; bool isAlerted() const; - void setAlert(bool alerted); - virtual bool isVisible() const; virtual bool isSystemTrayAvailable() const; QWidget *associatedWidget() const; public slots: - virtual void setState(State); - virtual void setVisible(bool visible = true); - virtual void setToolTip(const QString &title, const QString &subtitle); + 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); virtual void closeMessage(uint notificationId); signals: - void activated(SystemTray::ActivationReason); - void iconChanged(const QIcon &icon); - void animationEnabledChanged(bool); + 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 messageClicked(uint notificationId); void messageClosed(uint notificationId); @@ -93,30 +105,37 @@ protected slots: virtual void activate(SystemTray::ActivationReason = Trigger); protected: - virtual void setMode(Mode mode); - bool shouldBeVisible() const; + void setMode(Mode mode); - virtual QIcon stateIcon() const; - QIcon stateIcon(State state) const; QString toolTipTitle() const; QString toolTipSubTitle() const; QMenu *trayMenu() const; - bool animationEnabled() 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 enableChangeColorChanged(const QVariant &); + void enableBlinkChanged(const QVariant &); + + void onBlinkTimeout(); private: + bool _isVisible{false}; Mode _mode{Mode::Invalid}; State _state{State::Passive}; - bool _shouldBeVisible{true}; - bool _animationEnabled{true}; + bool _trayIconInverted{false}; + AttentionBehavior _attentionBehavior{AttentionBehavior::ChangeColor}; + + QTimer _blinkTimer; + bool _blinkState{false}; - QString _toolTipTitle, _toolTipSubTitle; - QIcon _passiveIcon, _activeIcon, _needsAttentionIcon; + QString _toolTipTitle; + QString _toolTipSubTitle; QMenu *_trayMenu{nullptr}; QWidget *_associatedWidget{nullptr};