Add GPL header to mpris script
[quassel.git] / src / qtui / systemtray.h
1 /***************************************************************************
2 *   Copyright (C) 2005-09 by the Quassel Project                          *
3 *   devel@quassel-irc.org                                                 *
4 *                                                                         *
5 *   This program is free software; you can redistribute it and/or modify  *
6 *   it under the terms of the GNU General Public License as published by  *
7 *   the Free Software Foundation; either version 2 of the License, or     *
8 *   (at your option) version 3.                                           *
9 *                                                                         *
10 *   This program is distributed in the hope that it will be useful,       *
11 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13 *   GNU General Public License for more details.                          *
14 *                                                                         *
15 *   You should have received a copy of the GNU General Public License     *
16 *   along with this program; if not, write to the                         *
17 *   Free Software Foundation, Inc.,                                       *
18 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19 ***************************************************************************/
20
21 #ifndef SYSTEMTRAY_H_
22 #define SYSTEMTRAY_H_
23
24 #ifdef HAVE_KDE
25 #  include <KSystemTrayIcon>
26 #else
27 #  include <QSystemTrayIcon>
28 #endif
29
30 #include <QTimer>
31
32 #include "icon.h"
33
34 class SystemTray : public QObject {
35   Q_OBJECT
36
37 public:
38   enum State {
39     Inactive,
40     Active
41   };
42
43   SystemTray(QObject *parent = 0);
44   ~SystemTray();
45
46   inline bool isSystemTrayAvailable() const;
47   inline bool isAlerted() const;
48
49   inline void setInhibitActivation();
50
51 public slots:
52   void setState(State);
53   void setAlert(bool alert = true);
54   void setIconVisible(bool visible = true);
55   void setToolTip(const QString &tip);
56   void showMessage(const QString &title, const QString &message,
57                    QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int millisecondsTimeoutHint = 10000);
58
59 signals:
60   void activated(QSystemTrayIcon::ActivationReason);
61   void iconChanged(const Icon &);
62   void messageClicked();
63
64 protected:
65   bool eventFilter(QObject *obj, QEvent *event);
66
67 private slots:
68   void nextPhase();
69   void on_activated(QSystemTrayIcon::ActivationReason);
70
71 private:
72   void loadAnimations();
73
74 #ifdef HAVE_KDE
75   KSystemTrayIcon *_trayIcon;
76 #else
77   QSystemTrayIcon *_trayIcon;
78 #endif
79
80   QMenu *_trayMenu;
81   State _state;
82   bool _alert;
83   bool _inhibitActivation;
84
85   int _idxOffStart, _idxOffEnd, _idxOnStart, _idxOnEnd, _idxAlertStart;
86   int _currentIdx;
87   QTimer _animationTimer;
88
89   QList<QPixmap> _phases;
90 };
91
92 // inlines
93
94 bool SystemTray::isSystemTrayAvailable() const { return QSystemTrayIcon::isSystemTrayAvailable(); }
95 bool SystemTray::isAlerted() const { return _alert; }
96 void SystemTray::setInhibitActivation() { _inhibitActivation = true; }
97
98 #endif