Add SslInfoDlg as a nice way to show information about an SSL connection
[quassel.git] / src / qtui / desktopnotificationbackend.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 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
45   void notify(const Notification &);
46   void close(uint notificationId);
47   virtual SettingsPage *createConfigWidget() const;
48
49 private slots:
50   void desktopNotificationClosed(uint id, uint reason);
51   void desktopNotificationInvoked(uint id, const QString &action);
52
53   void enabledChanged(const QVariant &);
54   void useHintsChanged(const QVariant &);
55   void xHintChanged(const QVariant &);
56   void yHintChanged(const QVariant &);
57   void queueNotificationsChanged(const QVariant &);
58   void timeoutChanged(const QVariant &);
59   void useTimeoutChanged(const QVariant &);
60
61 private:
62   class ConfigWidget;
63
64   org::freedesktop::Notifications *_dbusInterface;
65   bool _daemonSupportsMarkup;
66   quint32 _lastDbusId;
67   QHash<uint, uint> _idMap; ///< Maps our own notification Id to the D-Bus one
68
69   bool _enabled, _queueNotifications, _useHints;
70   int _xHint, _yHint;
71   int _timeout;
72   bool _useTimeout;
73
74 };
75
76 class DesktopNotificationBackend::ConfigWidget : public SettingsPage {
77   Q_OBJECT
78
79 public:
80   ConfigWidget(QWidget *parent = 0);
81   void save();
82   void load();
83   bool hasDefaults() const;
84   void defaults();
85
86 private slots:
87   void widgetChanged();
88
89 private:
90   Ui::DesktopNotificationConfigWidget ui;
91   int xHint, yHint;
92   bool useHints, queueNotifications;
93   int timeout;
94   bool useTimeout;
95   bool enabled;
96 };
97
98 #endif