this should fix BR #377 - needs to be tested
[quassel.git] / src / qtui / desktopnotificationbackend.h
1 /***************************************************************************
2 *   Copyright (C) 2005-08 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 DESKTOPNOTIFICATIONBACKEND_H_
22 #define DESKTOPNOTIFICATIONBACKEND_H_
23
24 #include <QHash>
25
26 #include "abstractnotificationbackend.h"
27
28 #include "settingspage.h"
29
30 #include "desktopnotificationinterface.h"
31 #include "ui_desktopnotificationconfigwidget.h"
32
33 //! Implements the freedesktop.org notifications specification (via D-Bus)
34 /**
35  *  cf. http://www.galago-project.org/specs/notification/
36  *
37  *  This class will only be available if -DHAVE_DBUS is enabled
38  */
39 class DesktopNotificationBackend : public AbstractNotificationBackend {
40   Q_OBJECT
41
42 public:
43   DesktopNotificationBackend(QObject *parent = 0);
44   ~DesktopNotificationBackend();
45
46   void notify(const Notification &);
47   void close(uint notificationId);
48   SettingsPage *configWidget() const;
49
50 private slots:
51   void desktopNotificationClosed(uint id, uint reason);
52   void desktopNotificationInvoked(uint id, const QString &action);
53
54   void enabledChanged(const QVariant &);
55   void useHintsChanged(const QVariant &);
56   void xHintChanged(const QVariant &);
57   void yHintChanged(const QVariant &);
58   void queueNotificationsChanged(const QVariant &);
59   void timeoutChanged(const QVariant &);
60   void useTimeoutChanged(const QVariant &);
61
62 private:
63   class ConfigWidget;
64   SettingsPage *_configWidget;
65
66   org::freedesktop::Notifications *_dbusInterface;
67   bool _daemonSupportsMarkup;
68   quint32 _lastDbusId;
69   QHash<uint, uint> _idMap; ///< Maps our own notification Id to the D-Bus one
70
71   bool _enabled, _queueNotifications, _useHints;
72   int _xHint, _yHint;
73   int _timeout;
74   bool _useTimeout;
75
76 };
77
78 class DesktopNotificationBackend::ConfigWidget : public SettingsPage {
79   Q_OBJECT
80
81   public:
82     ConfigWidget(QWidget *parent = 0);
83     void save();
84     void load();
85     bool hasDefaults() const;
86     void defaults();
87
88   private slots:
89     void widgetChanged();
90
91   private:
92     Ui::DesktopNotificationConfigWidget ui;
93     int xHint, yHint;
94     bool useHints, queueNotifications;
95     int timeout;
96     bool useTimeout;
97     bool enabled;
98 };
99
100 #endif