tray latest
Cross-platform, super tiny C99 implementation of a system tray icon with a popup menu and notifications.
QtTrayMenu.h
Go to the documentation of this file.
1
5#ifndef TRAYMENU_H
6#define TRAYMENU_H
7
8// qt includes
9#include <QMenu>
10#include <QObject>
11#include <QString>
12#include <QSystemTrayIcon>
13
14// local includes
15#include "tray.h"
16
20class QtTrayMenu: public QObject {
21 Q_OBJECT
22
23public:
29 explicit QtTrayMenu(QObject *parent = nullptr, bool debug = false);
30
38 explicit QtTrayMenu(int argc, char **argv, QObject *parent = nullptr, bool debug = false);
39
40 ~QtTrayMenu() override;
48 bool eventFilter(QObject *watched, QEvent *event) override;
49
56 int init(struct tray *tray, bool notification = true);
57
63 int loop(int blocking);
64
71 void configureAppMetadata(const QString &appName, const QString &appDisplayName, const QString &desktopName) const;
72
81 void showMessage(const QString &title, const QString &msg, std::function<void()> callback = nullptr, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int msecs = 10000);
82
91 void showMessage(const QString &title, const QString &msg, const QString &iconPath, std::function<void()> callback = nullptr, int msecs = 10000);
92
97 void clickMenuItem(int index) const;
98
102 void clickMessage() const;
103
108 static bool supportsMessages();
109
110signals:
114 void exit();
115
121 void update(struct tray *tray, bool notify = true);
122
126 void showMenu() const;
127
128private:
129 void createMenu(struct tray_menu *items, QMenu *menu);
130 void createNotification();
131 void updateMenu(struct tray_menu *items);
132 QIcon lookupIcon(QString icon) const;
133 QApplication *app = nullptr;
134 QSystemTrayIcon *trayIcon = nullptr;
135 QMenu *trayTopMenu = nullptr;
136 struct tray *trayStruct = nullptr;
137 bool running = false;
138 bool blockingEventLoop = false;
139 struct tray_menu *getTrayMenuItem(QAction *action);
140 std::function<void()> notificationCallback = nullptr;
141
142private slots:
143 void onExitRequested();
144 void onMessageClicked() const;
145 void onMenuItemTriggered();
146 void onTrayActivated(QSystemTrayIcon::ActivationReason reason);
147 void onShowMenu() const;
148 void onUpdate(struct tray *tray, bool notify);
149};
150#endif // TRAYMENU_H
Wrapper class for platfrom-independent Qt-based tray menu.
Definition QtTrayMenu.h:20
bool eventFilter(QObject *watched, QEvent *event) override
QObject override to filter events on watched object.
Definition QtTrayMenu.cpp:223
int loop(int blocking)
Process tray loop events.
Definition QtTrayMenu.cpp:115
QtTrayMenu(QObject *parent=nullptr, bool debug=false)
Create a QtTrayMenu instance.
Definition QtTrayMenu.cpp:24
void configureAppMetadata(const QString &appName, const QString &appDisplayName, const QString &desktopName) const
Configure metadata for QApplication.
Definition QtTrayMenu.cpp:258
static bool supportsMessages()
Check if QtTrayMenu supports messages.
Definition QtTrayMenu.cpp:301
void clickMessage() const
Simulate click on popup message.
Definition QtTrayMenu.cpp:344
void update(struct tray *tray, bool notify=true)
Update tray configuration.
void clickMenuItem(int index) const
Simulate click on menu item.
Definition QtTrayMenu.cpp:325
void showMenu() const
Show tray context menu.
void exit()
Exit tray and cleanup resources.
int init(struct tray *tray, bool notification=true)
Initialize tray with given structure.
Definition QtTrayMenu.cpp:60
void showMessage(const QString &title, const QString &msg, std::function< void()> callback=nullptr, QSystemTrayIcon::MessageIcon icon=QSystemTrayIcon::Information, int msecs=10000)
Show tray message popup.
Definition QtTrayMenu.cpp:305
Tray menu item.
Definition tray.h:40
Tray icon.
Definition tray.h:24
Definition of the tray API.