summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2009-08-05 17:09:37 (GMT)
committerRemko Tronçon <git@el-tramo.be>2009-08-05 17:09:56 (GMT)
commit6f4fa16b1ddb0633771423a8e8d9520864ffb95d (patch)
tree3dd6c277616e72af0ae1b4704a1d608f4fe0740b /Slimber/Qt/QtMenulet.h
parent9b335b8ef317430a7551a8f2cb86a98b4c330882 (diff)
downloadswift-6f4fa16b1ddb0633771423a8e8d9520864ffb95d.zip
swift-6f4fa16b1ddb0633771423a8e8d9520864ffb95d.tar.bz2
Slimber: Add Qt implementation.
Diffstat (limited to 'Slimber/Qt/QtMenulet.h')
-rw-r--r--Slimber/Qt/QtMenulet.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/Slimber/Qt/QtMenulet.h b/Slimber/Qt/QtMenulet.h
new file mode 100644
index 0000000..4ac9140
--- /dev/null
+++ b/Slimber/Qt/QtMenulet.h
@@ -0,0 +1,65 @@
+#pragma once
+
+#include <QCoreApplication>
+#include <QMenu>
+#include <QString>
+#include <QSystemTrayIcon>
+#include <QObject>
+#include <QPixmap>
+
+#include "Slimber/Menulet.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");
+ }
+
+ 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() {
+ }
+
+ void restart() {
+ onRestartClicked();
+ }
+
+ private:
+ QMenu menu;
+ QSystemTrayIcon trayIcon;
+};