Make tabcompletion key configurable via shortcuts. fixes 1018
[quassel.git] / src / qtui / systemtray.h
1 /***************************************************************************
2  *   Copyright (C) 2005-2010 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 #include "icon.h"
25
26 class Action;
27 class QMenu;
28
29 class SystemTray : public QObject {
30   Q_OBJECT
31   Q_ENUMS(State Mode MessageIcon ActivationReason)
32
33 public:
34   enum State {
35     Passive,
36     Active,
37     NeedsAttention
38   };
39
40   enum Mode {
41     Invalid,
42     Legacy,
43     StatusNotifier
44   };
45
46   // same as in QSystemTrayIcon
47   enum MessageIcon {
48     NoIcon,
49     Information,
50     Warning,
51     Critical
52   };
53
54   // same as in QSystemTrayIcon
55   enum ActivationReason {
56     Unknown,
57     Context,
58     DoubleClick,
59     Trigger,
60     MiddleClick
61   };
62
63   explicit SystemTray(QWidget *parent);
64   virtual ~SystemTray();
65   virtual void init();
66
67   inline Mode mode() const;
68   inline State state() const;
69   inline bool isAlerted() const;
70   virtual inline bool isSystemTrayAvailable() const;
71
72   void setAlert(bool alerted);
73   virtual inline bool isVisible() const { return false; }
74
75   QWidget *associatedWidget() const;
76
77 public slots:
78   virtual void setState(State);
79   virtual void setVisible(bool visible = true);
80   virtual void setToolTip(const QString &title, const QString &subtitle);
81   virtual void showMessage(const QString &title, const QString &message, MessageIcon icon = Information, int msTimeout = 10000, uint notificationId = 0);
82   virtual void closeMessage(uint notificationId) { Q_UNUSED(notificationId) }
83
84 signals:
85   void activated(SystemTray::ActivationReason);
86   void iconChanged(const Icon &);
87   void animationEnabledChanged(bool);
88   void toolTipChanged(const QString &title, const QString &subtitle);
89   void messageClicked(uint notificationId);
90   void messageClosed(uint notificationId);
91
92 protected slots:
93   virtual void activate(SystemTray::ActivationReason = Trigger);
94
95 protected:
96   virtual void setMode(Mode mode);
97   inline bool shouldBeVisible() const;
98
99   virtual Icon stateIcon() const;
100   Icon stateIcon(State state) const;
101   inline QString toolTipTitle() const;
102   inline QString toolTipSubTitle() const;
103   inline QMenu *trayMenu() const;
104
105   inline bool animationEnabled() const;
106
107 private slots:
108   void minimizeRestore();
109   void trayMenuAboutToShow();
110   void enableAnimationChanged(const QVariant &);
111
112 private:
113   Mode _mode;
114   State _state;
115   bool _shouldBeVisible;
116
117   QString _toolTipTitle, _toolTipSubTitle;
118   Icon _passiveIcon, _activeIcon, _needsAttentionIcon;
119   bool _animationEnabled;
120
121   QMenu *_trayMenu;
122   QWidget *_associatedWidget;
123   Action *_minimizeRestoreAction;
124 };
125
126 // inlines
127
128 bool SystemTray::isSystemTrayAvailable() const { return false; }
129 bool SystemTray::isAlerted() const { return state() == NeedsAttention; }
130 SystemTray::Mode SystemTray::mode() const { return _mode; }
131 SystemTray::State SystemTray::state() const { return _state; }
132 bool SystemTray::shouldBeVisible() const { return _shouldBeVisible; }
133 QMenu *SystemTray::trayMenu() const { return _trayMenu; }
134 QString SystemTray::toolTipTitle() const { return _toolTipTitle; }
135 QString SystemTray::toolTipSubTitle() const { return _toolTipSubTitle; }
136 bool SystemTray::animationEnabled() const { return _animationEnabled; }
137
138 #endif