notificator.h
1 // Copyright (c) 2011-present The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #ifndef BITCOIN_QT_NOTIFICATOR_H 6 #define BITCOIN_QT_NOTIFICATOR_H 7 8 #include <bitcoin-build-config.h> // IWYU pragma: keep 9 10 #include <QIcon> 11 #include <QObject> 12 13 QT_BEGIN_NAMESPACE 14 class QSystemTrayIcon; 15 16 #ifdef USE_DBUS 17 class QDBusInterface; 18 #endif 19 QT_END_NAMESPACE 20 21 /** Cross-platform desktop notification client. */ 22 class Notificator: public QObject 23 { 24 Q_OBJECT 25 26 public: 27 /** Create a new notificator. 28 @note Ownership of trayIcon is not transferred to this object. 29 */ 30 Notificator(const QString &programName, QSystemTrayIcon *trayIcon, QWidget *parent); 31 ~Notificator(); 32 33 // Message class 34 enum Class 35 { 36 Information, /**< Informational message */ 37 Warning, /**< Notify user of potential problem */ 38 Critical /**< An error occurred */ 39 }; 40 41 public Q_SLOTS: 42 /** Show notification message. 43 @param[in] cls general message class 44 @param[in] title title shown with message 45 @param[in] text message content 46 @param[in] icon optional icon to show with message 47 @param[in] millisTimeout notification timeout in milliseconds (defaults to 10 seconds) 48 @note Platform implementations are free to ignore any of the provided fields except for \a text. 49 */ 50 void notify(Class cls, const QString &title, const QString &text, 51 const QIcon &icon = QIcon(), int millisTimeout = 10000); 52 53 private: 54 QWidget *parent; 55 enum Mode { 56 None, /**< Ignore informational notifications, and show a modal pop-up dialog for Critical notifications. */ 57 Freedesktop, /**< Use DBus org.freedesktop.Notifications */ 58 QSystemTray, /**< Use QSystemTrayIcon::showMessage() */ 59 UserNotificationCenter /**< Use the 10.8+ User Notification Center (Mac only) */ 60 }; 61 QString programName; 62 Mode mode{None}; 63 QSystemTrayIcon *trayIcon; 64 #ifdef USE_DBUS 65 QDBusInterface* interface{nullptr}; 66 67 void notifyDBus(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout); 68 #endif 69 void notifySystray(Class cls, const QString &title, const QString &text, int millisTimeout); 70 #ifdef Q_OS_MACOS 71 void notifyMacUserNotificationCenter(const QString &title, const QString &text); 72 #endif 73 }; 74 75 #endif // BITCOIN_QT_NOTIFICATOR_H