From bfeca3cc938e325bf2cc2d9105c719feb1fe28ee Mon Sep 17 00:00:00 2001 From: Kevin Smith Date: Tue, 5 Oct 2010 19:24:02 +0100 Subject: Create 'Enable notifications' menu on Linux. I've not actually tested this on Linux... Resolves: #594 diff --git a/SwifTools/Notifier/Notifier.h b/SwifTools/Notifier/Notifier.h index ad9b324..76d6382 100644 --- a/SwifTools/Notifier/Notifier.h +++ b/SwifTools/Notifier/Notifier.h @@ -33,6 +33,8 @@ namespace Swift { enabled = b; } + bool getEnabled() {return enabled;} + private: virtual void doShowMessage( Type type, diff --git a/Swift/Controllers/EventNotifier.cpp b/Swift/Controllers/EventNotifier.cpp index 7a293b6..7743d6f 100644 --- a/Swift/Controllers/EventNotifier.cpp +++ b/Swift/Controllers/EventNotifier.cpp @@ -16,11 +16,17 @@ #include "Swift/Controllers/XMPPEvents/MessageEvent.h" #include "Swift/Controllers/XMPPEvents/SubscriptionRequestEvent.h" #include "Swift/Controllers/XMPPEvents/ErrorEvent.h" +#include "Swift/Controllers/UIEvents/UIEventStream.h" +#include "Swift/Controllers/UIEvents/ToggleNotificationsUIEvent.h" +#include "Swiften/Settings/SettingsProvider.h" namespace Swift { -EventNotifier::EventNotifier(EventController* eventController, Notifier* notifier, AvatarManager* avatarManager, NickResolver* nickResolver) : eventController(eventController), notifier(notifier), avatarManager(avatarManager), nickResolver(nickResolver) { +EventNotifier::EventNotifier(EventController* eventController, Notifier* notifier, AvatarManager* avatarManager, NickResolver* nickResolver, UIEventStream* uiEvents, SettingsProvider* settings) : eventController(eventController), notifier(notifier), avatarManager(avatarManager), nickResolver(nickResolver), uiEvents(uiEvents), settings(settings) { eventController->onEventQueueEventAdded.connect(boost::bind(&EventNotifier::handleEventAdded, this, _1)); + bool enabled = settings->getBoolSetting("showNotifications", true); + notifier->setEnabled(enabled); + uiEvents->send(boost::shared_ptr(new ToggleNotificationsUIEvent(enabled))); } EventNotifier::~EventNotifier() { @@ -49,4 +55,14 @@ void EventNotifier::handleNotificationActivated(JID jid) { onNotificationActivated(jid); } +void EventNotifier::handleUIEvent(boost::shared_ptr event) { + boost::shared_ptr notificationsEvent = boost::dynamic_pointer_cast(event); + if (notificationsEvent) { + bool enabled = notificationsEvent->getEnabled(); + if (enabled != notifier->getEnabled()) { + notifier->setEnabled(enabled); + settings->storeBool("showNotifications", enabled); + } + } +} } diff --git a/Swift/Controllers/EventNotifier.h b/Swift/Controllers/EventNotifier.h index 8b4dc23..ae01f24 100644 --- a/Swift/Controllers/EventNotifier.h +++ b/Swift/Controllers/EventNotifier.h @@ -11,6 +11,7 @@ #include "SwifTools/Notifier/Notifier.h" #include "Swiften/Base/boost_bsignals.h" #include "Swift/Controllers/XMPPEvents/StanzaEvent.h" +#include "Swift/Controllers/UIEvents/UIEvent.h" #include "Swiften/JID/JID.h" namespace Swift { @@ -19,10 +20,12 @@ namespace Swift { class AvatarManager; class NickResolver; class JID; + class UIEventStream; + class SettingsProvider; class EventNotifier { public: - EventNotifier(EventController* eventController, Notifier* notifier, AvatarManager* avatarManager, NickResolver* nickResolver); + EventNotifier(EventController* eventController, Notifier* notifier, AvatarManager* avatarManager, NickResolver* nickResolver, UIEventStream* uiEvents, SettingsProvider* settings); ~EventNotifier(); boost::signal onNotificationActivated; @@ -30,11 +33,14 @@ namespace Swift { private: void handleEventAdded(boost::shared_ptr); void handleNotificationActivated(JID jid); + void handleUIEvent(boost::shared_ptr event); private: EventController* eventController; Notifier* notifier; AvatarManager* avatarManager; NickResolver* nickResolver; + UIEventStream* uiEvents; + SettingsProvider* settings; }; } diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index 3cf2907..ed28c52 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -402,7 +402,7 @@ void MainController::performLoginFromCachedCredentials() { entityCapsManager_ = new EntityCapsManager(capsManager_, client_); presenceNotifier_ = new PresenceNotifier(client_, notifier_, mucRegistry_, avatarManager_, nickResolver_, presenceOracle_, &timerFactory_); presenceNotifier_->onNotificationActivated.connect(boost::bind(&MainController::handleNotificationClicked, this, _1)); - eventNotifier_ = new EventNotifier(eventController_, notifier_, avatarManager_, nickResolver_); + eventNotifier_ = new EventNotifier(eventController_, notifier_, avatarManager_, nickResolver_, uiEventStream_, settings_); eventNotifier_->onNotificationActivated.connect(boost::bind(&MainController::handleNotificationClicked, this, _1)); client_->onDataRead.connect(boost::bind( &XMLConsoleController::handleDataRead, xmlConsoleController_, _1)); diff --git a/Swift/Controllers/UIEvents/ToggleNotificationsUIEvent.h b/Swift/Controllers/UIEvents/ToggleNotificationsUIEvent.h new file mode 100644 index 0000000..0f7acc8 --- /dev/null +++ b/Swift/Controllers/UIEvents/ToggleNotificationsUIEvent.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "Swift/Controllers/UIEvents/UIEvent.h" + +namespace Swift { + class ToggleNotificationsUIEvent : public UIEvent { + public: + ToggleNotificationsUIEvent(bool enable) : enabled_(enable) {}; + bool getEnabled() {return enabled_;}; + private: + bool enabled_; + }; +} diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp index 655e3b9..83a6ba0 100644 --- a/Swift/QtUI/QtLoginWindow.cpp +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -24,6 +24,7 @@ #include "Swift/Controllers/UIEvents/UIEventStream.h" #include "Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h" #include "Swift/Controllers/UIEvents/ToggleSoundsUIEvent.h" +#include "Swift/Controllers/UIEvents/ToggleNotificationsUIEvent.h" #include "Swiften/Base/Platform.h" #include "QtAboutWidget.h" @@ -149,6 +150,14 @@ QtLoginWindow::QtLoginWindow(UIEventStream* uiEventStream) : QMainWindow() { connect(toggleSoundsAction_, SIGNAL(toggled(bool)), SLOT(handleToggleSounds(bool))); generalMenu_->addAction(toggleSoundsAction_); + toggleNotificationsAction_ = new QAction(tr("Show Notifications"), this); + toggleNotificationsAction_->setCheckable(true); + toggleNotificationsAction_->setChecked(true); + connect(toggleNotificationsAction_, SIGNAL(toggled(bool)), SLOT(handleToggleNotifications(bool))); +#ifdef SWIFTEN_PLATFORM_LINUX + generalMenu_->addAction(toggleNotificationsAction_); +#endif + QAction* quitAction = new QAction("Quit", this); connect(quitAction, SIGNAL(triggered()), SLOT(handleQuit())); @@ -164,6 +173,10 @@ void QtLoginWindow::handleUIEvent(boost::shared_ptr event) { if (soundEvent) { toggleSoundsAction_->setChecked(soundEvent->getEnabled()); } + boost::shared_ptr notificationsEvent = boost::dynamic_pointer_cast(event); + if (notificationsEvent) { + toggleNotificationsAction_->setChecked(notificationsEvent->getEnabled()); + } } /** @@ -298,6 +311,9 @@ void QtLoginWindow::handleToggleSounds(bool enabled) { uiEventStream_->send(boost::shared_ptr(new ToggleSoundsUIEvent(enabled))); } +void QtLoginWindow::handleToggleNotifications(bool enabled) { + uiEventStream_->send(boost::shared_ptr(new ToggleNotificationsUIEvent(enabled))); +} void QtLoginWindow::handleQuit() { QApplication::quit(); diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h index c84033a..d9484b7 100644 --- a/Swift/QtUI/QtLoginWindow.h +++ b/Swift/QtUI/QtLoginWindow.h @@ -48,6 +48,7 @@ namespace Swift { void handleQuit(); void handleShowXMLConsole(); void handleToggleSounds(bool enabled); + void handleToggleNotifications(bool enabled); void handleAbout(); void bringToFront(); void handleUsernameTextChanged(); @@ -75,6 +76,7 @@ namespace Swift { QMenu* generalMenu_; QMenu* toolsMenu_; QAction* toggleSoundsAction_; + QAction* toggleNotificationsAction_; UIEventStream* uiEventStream_; QPointer aboutDialog_; }; -- cgit v0.10.2-6-g49f6