X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsystemtray.h;h=dabc7a24dfd0b1c45e997c039026ade76a1c64c2;hp=f25d597190906bcba8a982da5aaf223b9ef5f02c;hb=673ded0d543cbdc2cf6e746b6bee7c1d21af8f90;hpb=d0c0848307dab16108e855cab557be4a2f3d8d1b diff --git a/src/qtui/systemtray.h b/src/qtui/systemtray.h index f25d5971..dabc7a24 100644 --- a/src/qtui/systemtray.h +++ b/src/qtui/systemtray.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2020 by the Quassel Project * * devel@quassel-irc.org * * * * This file is free software; you can redistribute it and/or modify * @@ -18,10 +18,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef SYSTEMTRAY_H_ -#define SYSTEMTRAY_H_ +#pragma once -#include "icon.h" +#include +#include +#include class Action; class QMenu; @@ -31,21 +32,24 @@ class SystemTray : public QObject Q_OBJECT Q_ENUMS(State Mode MessageIcon ActivationReason) -public : - enum State { +public: + 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,32 +66,44 @@ public : MiddleClick }; - explicit SystemTray(QWidget *parent); - virtual ~SystemTray(); - virtual void init(); + enum class AttentionBehavior + { + DoNothing, + ChangeColor, + Blink + }; - inline Mode mode() const; - inline State state() const; - inline bool isAlerted() const; - virtual inline bool isSystemTrayAvailable() const; + explicit SystemTray(QWidget* parent); + ~SystemTray() override; - void setAlert(bool alerted); - virtual inline bool isVisible() const { return false; } + Mode mode() const; + State state() const; + bool isVisible() const; + bool isAlerted() const; + + virtual bool isSystemTrayAvailable() const; - QWidget *associatedWidget() 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); - virtual void showMessage(const QString &title, const QString &message, MessageIcon icon = Information, int msTimeout = 10000, uint notificationId = 0); - virtual void closeMessage(uint notificationId) { Q_UNUSED(notificationId) } + 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 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 Icon &); - void animationEnabledChanged(bool); - void toolTipChanged(const QString &title, const QString &subtitle); void messageClicked(uint notificationId); void messageClosed(uint notificationId); @@ -94,47 +111,39 @@ protected slots: virtual void activate(SystemTray::ActivationReason = Trigger); protected: - virtual void setMode(Mode mode); - inline bool shouldBeVisible() const; + void setMode(Mode mode); - virtual Icon stateIcon() const; - Icon stateIcon(State state) const; - inline QString toolTipTitle() const; - inline QString toolTipSubTitle() const; - inline QMenu *trayMenu() const; + QString toolTipTitle() const; + QString toolTipSubTitle() const; + QMenu* trayMenu() const; - inline 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&); -private: - Mode _mode; - State _state; - bool _shouldBeVisible; - - QString _toolTipTitle, _toolTipSubTitle; - Icon _passiveIcon, _activeIcon, _needsAttentionIcon; - bool _animationEnabled; - - QMenu *_trayMenu; - QWidget *_associatedWidget; - Action *_minimizeRestoreAction; -}; + void onBlinkTimeout(); +private: + bool _isVisible{false}; + Mode _mode{Mode::Invalid}; + State _state{State::Passive}; + bool _trayIconInverted{false}; + AttentionBehavior _attentionBehavior{AttentionBehavior::ChangeColor}; -// inlines + QTimer _blinkTimer; + bool _blinkState{false}; -bool SystemTray::isSystemTrayAvailable() const { return false; } -bool SystemTray::isAlerted() const { return state() == NeedsAttention; } -SystemTray::Mode SystemTray::mode() const { return _mode; } -SystemTray::State SystemTray::state() const { return _state; } -bool SystemTray::shouldBeVisible() const { return _shouldBeVisible; } -QMenu *SystemTray::trayMenu() const { return _trayMenu; } -QString SystemTray::toolTipTitle() const { return _toolTipTitle; } -QString SystemTray::toolTipSubTitle() const { return _toolTipSubTitle; } -bool SystemTray::animationEnabled() const { return _animationEnabled; } + QString _toolTipTitle; + QString _toolTipSubTitle; -#endif + QMenu* _trayMenu{nullptr}; + QWidget* _associatedWidget{nullptr}; + Action* _minimizeRestoreAction{nullptr}; +};