#pragma once
-#include <QIcon>
+#include <QObject>
+#include <QString>
+#include <QTimer>
class Action;
class QMenu;
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);
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};