diff options
Diffstat (limited to 'Swift/Controllers')
-rw-r--r-- | Swift/Controllers/EventNotifier.cpp | 18 | ||||
-rw-r--r-- | Swift/Controllers/EventNotifier.h | 8 | ||||
-rw-r--r-- | Swift/Controllers/MainController.cpp | 2 | ||||
-rw-r--r-- | Swift/Controllers/UIEvents/ToggleNotificationsUIEvent.h | 19 |
4 files changed, 44 insertions, 3 deletions
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<ToggleNotificationsUIEvent>(new ToggleNotificationsUIEvent(enabled))); } EventNotifier::~EventNotifier() { @@ -49,4 +55,14 @@ void EventNotifier::handleNotificationActivated(JID jid) { onNotificationActivated(jid); } +void EventNotifier::handleUIEvent(boost::shared_ptr<UIEvent> event) { + boost::shared_ptr<ToggleNotificationsUIEvent> notificationsEvent = boost::dynamic_pointer_cast<ToggleNotificationsUIEvent>(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<void (const JID&)> onNotificationActivated; @@ -30,11 +33,14 @@ namespace Swift { private: void handleEventAdded(boost::shared_ptr<StanzaEvent>); void handleNotificationActivated(JID jid); + void handleUIEvent(boost::shared_ptr<UIEvent> 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_; + }; +} |