/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #pragma once #include #include #include #include #include #include #include #include "Slimber/Menulet.h" #include "Slimber/Qt/QtAboutDialog.h" class QtMenulet : public QObject, public Menulet { Q_OBJECT public: QtMenulet() { trayIcon.setIcon(QPixmap(":/icons/UsersOffline.png")); trayIcon.setContextMenu(&menu); trayIcon.show(); } void clear() { menu.clear(); } void addItem(const Swift::String& name, const Swift::String& icon) { menu.addAction(getIcon(icon), QString::fromUtf8(name.getUTF8Data())); } void addAboutItem() { menu.addAction("About", this, SLOT(showAboutDialog())); } void addRestartItem() { menu.addAction("Restart", this, SLOT(restart())); } void addExitItem() { menu.addAction("Exit", qApp, SLOT(quit())); } void addSeparator() { menu.addSeparator(); } void setIcon(const Swift::String& icon) { trayIcon.setIcon(getIcon(icon)); } private: QPixmap getIcon(const Swift::String& name) { return QPixmap(":/icons/" + QString::fromUtf8(name.getUTF8Data()) + ".png"); } private slots: void showAboutDialog() { if (aboutDialog) { aboutDialog->raise(); aboutDialog->activateWindow(); } else { aboutDialog = new QtAboutDialog(); aboutDialog->show(); } } void restart() { onRestartClicked(); } private: QMenu menu; QSystemTrayIcon trayIcon; QPointer aboutDialog; };