cmake: avoid de-duplication of user's CXXFLAGS
[quassel.git] / src / qtui / systemtray.h
index 733a6f0..bea3b93 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2018 by the Quassel Project                        *
+ *   Copyright (C) 2005-2022 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 <QObject>
 #include <QString>
+#include <QTimer>
 
 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,15 +83,16 @@ public:
 
     virtual bool isSystemTrayAvailable() const;
 
-    QWidget *associatedWidget() const;
+    QWidgetassociatedWidget() 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:
@@ -87,8 +100,8 @@ signals:
     void stateChanged(State state);
     void visibilityChanged(bool isVisible);
     void iconsChanged();
-    void animationEnabledChanged(bool);
-    void toolTipChanged(const QString &title, const QString &subtitle);
+    void currentIconNameChanged();
+    void toolTipChanged(const QString& title, const QString& subtitle);
 
     void activated(SystemTray::ActivationReason);
     void messageClicked(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;
+    QMenutrayMenu() 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};
 };