summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/WindowsNotifier.cpp')
-rw-r--r--Swift/QtUI/WindowsNotifier.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/Swift/QtUI/WindowsNotifier.cpp b/Swift/QtUI/WindowsNotifier.cpp
new file mode 100644
index 0000000..8c113c5
--- /dev/null
+++ b/Swift/QtUI/WindowsNotifier.cpp
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include "WindowsNotifier.h"
+
+#include <QSystemTrayIcon>
+#include <cassert>
+#include <iostream>
+#include <boost/bind.hpp>
+
+#include "QtWin32NotifierWindow.h"
+
+namespace Swift {
+
+WindowsNotifier::WindowsNotifier(const String& name, const boost::filesystem::path& icon, QSystemTrayIcon* tray) : tray(tray) {
+ notifierWindow = new QtWin32NotifierWindow();
+ snarlNotifier = new SnarlNotifier(name, notifierWindow, icon);
+ connect(tray, SIGNAL(messageClicked()), SLOT(handleMessageClicked()));
+}
+
+WindowsNotifier::~WindowsNotifier() {
+ delete snarlNotifier;
+ delete notifierWindow;
+}
+
+void WindowsNotifier::showMessage(Type type, const String& subject, const String& description, const boost::filesystem::path& picture, boost::function<void()> callback) {
+ if (snarlNotifier->isAvailable()) {
+ snarlNotifier->showMessage(type, subject, description, picture, callback);
+ return;
+ }
+ std::vector<Notifier::Type> defaultTypes = getDefaultTypes();
+ if (std::find(defaultTypes.begin(), defaultTypes.end(), type) == defaultTypes.end()) {
+ return;
+ }
+ lastCallback = callback;
+ int timeout = (type == IncomingMessage || type == SystemMessage) ? DEFAULT_MESSAGE_NOTIFICATION_TIMEOUT_SECONDS : DEFAULT_STATUS_NOTIFICATION_TIMEOUT_SECONDS;
+ tray->showMessage(subject.getUTF8Data(), description.getUTF8Data(), type == SystemMessage ? QSystemTrayIcon::Information : QSystemTrayIcon::NoIcon, timeout * 1000);
+}
+
+void WindowsNotifier::handleMessageClicked() {
+ lastCallback();
+}
+
+}