X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fqtui%2Fsystemtray.h;h=733a6f09cab603e16e36ad199c8d5c1de51a33ce;hb=6a95ba6273599fa24e79fb008e38197448c29605;hp=cdb66d7dee30cb1a893fa03347e87ac6c38f8b5e;hpb=d76bb125c8dd275095409edd3426700a98d89f3a;p=quassel.git diff --git a/src/qtui/systemtray.h b/src/qtui/systemtray.h index cdb66d7d..733a6f09 100644 --- a/src/qtui/systemtray.h +++ b/src/qtui/systemtray.h @@ -1,102 +1,128 @@ /*************************************************************************** -* Copyright (C) 2005-09 by the Quassel Project * -* devel@quassel-irc.org * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) version 3. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with this program; if not, write to the * -* Free Software Foundation, Inc., * -* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ - -#ifndef SYSTEMTRAY_H_ -#define SYSTEMTRAY_H_ - -#ifndef QT_NO_SYSTEMTRAYICON - -#ifdef HAVE_KDE -# include -#else -# include -#endif - -#include - -#include "icon.h" - -class SystemTray : public QObject { - Q_OBJECT + * Copyright (C) 2005-2018 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This file is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License (LGPL) * + * as published by the Free Software Foundation; either version 2 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#pragma once + +#include +#include + +class Action; +class QMenu; + +class SystemTray : public QObject +{ + Q_OBJECT + Q_ENUMS(State Mode MessageIcon ActivationReason) public: - enum State { - Inactive, - Active - }; + enum State { + Passive, + Active, + NeedsAttention + }; + + enum Mode { + Invalid, + Legacy, + StatusNotifier + }; + + // same as in QSystemTrayIcon + enum MessageIcon { + NoIcon, + Information, + Warning, + Critical + }; + + // same as in QSystemTrayIcon + enum ActivationReason { + Unknown, + Context, + DoubleClick, + Trigger, + MiddleClick + }; + + explicit SystemTray(QWidget *parent); + ~SystemTray() override; + + Mode mode() const; + State state() const; + bool isVisible() const; + bool isAlerted() const; + + virtual bool isSystemTrayAvailable() const; + + QWidget *associatedWidget() const; - SystemTray(QObject *parent = 0); - ~SystemTray(); +public slots: + void setVisible(bool visible = true); + void setState(State); + void setAlert(bool alerted); - inline bool isSystemTrayAvailable() const; - inline bool isAlerted() const; + 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); - inline void setInhibitActivation(); +signals: + void modeChanged(Mode mode); + void stateChanged(State state); + void visibilityChanged(bool isVisible); + void iconsChanged(); + void animationEnabledChanged(bool); + void toolTipChanged(const QString &title, const QString &subtitle); -public slots: - void setState(State); - void setAlert(bool alert = true); - void setIconVisible(bool visible = true); - void setToolTip(const QString &tip); - void showMessage(const QString &title, const QString &message, - QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int millisecondsTimeoutHint = 10000); + void activated(SystemTray::ActivationReason); + void messageClicked(uint notificationId); + void messageClosed(uint notificationId); -signals: - void activated(QSystemTrayIcon::ActivationReason); - void iconChanged(const Icon &); - void messageClicked(); +protected slots: + virtual void activate(SystemTray::ActivationReason = Trigger); protected: - bool eventFilter(QObject *obj, QEvent *event); + void setMode(Mode mode); + bool animationEnabled() const; -private slots: - void nextPhase(); - void on_activated(QSystemTrayIcon::ActivationReason); + QString toolTipTitle() const; + QString toolTipSubTitle() const; + QMenu *trayMenu() const; -private: - void loadAnimations(); + QString iconName(State state) const; -#ifdef HAVE_KDE - KSystemTrayIcon *_trayIcon; -#else - QSystemTrayIcon *_trayIcon; -#endif +private slots: + void minimizeRestore(); + void trayMenuAboutToShow(); + void enableAnimationChanged(const QVariant &); + void invertTrayIconChanged(const QVariant &); - QMenu *_trayMenu; - State _state; - bool _alert; - bool _inhibitActivation; +private: + bool _isVisible{false}; + Mode _mode{Mode::Invalid}; + State _state{State::Passive}; + bool _animationEnabled{true}; + bool _trayIconInverted{false}; - int _idxOffStart, _idxOffEnd, _idxOnStart, _idxOnEnd, _idxAlertStart; - int _currentIdx; - QTimer _animationTimer; + QString _toolTipTitle, _toolTipSubTitle; - QList _phases; + QMenu *_trayMenu{nullptr}; + QWidget *_associatedWidget{nullptr}; + Action *_minimizeRestoreAction{nullptr}; }; - -// inlines - -bool SystemTray::isSystemTrayAvailable() const { return QSystemTrayIcon::isSystemTrayAvailable(); } -bool SystemTray::isAlerted() const { return _alert; } -void SystemTray::setInhibitActivation() { _inhibitActivation = true; } - -#endif /* QT_NO_SYSTEMTRAYICON */ - -#endif