From 326cd32e2c9e3ec9bac54f5bb952928680c93749 Mon Sep 17 00:00:00 2001 From: Kevin Smith Date: Mon, 5 Apr 2010 00:14:37 +0100 Subject: Allow sounds to be toggled. Doesn't persist option yet. Resolves: #192 diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index d042115..ccce0bb 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -71,7 +71,7 @@ MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowF eventController_->onEventQueueLengthChange.connect(boost::bind(&MainController::handleEventQueueLengthChange, this, _1)); systemTrayController_ = new SystemTrayController(eventController_, systemTray); - soundEventController_ = new SoundEventController(eventController_, soundPlayer, settings->getBoolSetting("playSounds", true)); + soundEventController_ = new SoundEventController(eventController_, soundPlayer, settings->getBoolSetting("playSounds", true), uiEventStream_); loginWindow_ = loginWindowFactory_->createLoginWindow(uiEventStream_); foreach (String profile, settings->getAvailableProfiles()) { ProfileSettingsProvider* profileSettings = new ProfileSettingsProvider(profile, settings); diff --git a/Swift/Controllers/SoundEventController.cpp b/Swift/Controllers/SoundEventController.cpp index 456de44..29f7fbf 100644 --- a/Swift/Controllers/SoundEventController.cpp +++ b/Swift/Controllers/SoundEventController.cpp @@ -4,14 +4,18 @@ #include "Swift/Controllers/EventController.h" #include "Swift/Controllers/SoundPlayer.h" +#include "Swift/Controllers/UIEvents/UIEventStream.h" +#include "Swift/Controllers/UIEvents/ToggleSoundsUIEvent.h" namespace Swift { -SoundEventController::SoundEventController(EventController* eventController, SoundPlayer* soundPlayer, bool playSounds) { +SoundEventController::SoundEventController(EventController* eventController, SoundPlayer* soundPlayer, bool playSounds, UIEventStream* uiEvents) { eventController_ = eventController; eventController_->onEventQueueEventAdded.connect(boost::bind(&SoundEventController::handleEventQueueEventAdded, this, _1)); soundPlayer_ = soundPlayer; playSounds_ = playSounds; + uiEvents_ = uiEvents; + uiEvents_->onUIEvent.connect(boost::bind(&SoundEventController::handleUIEvent, this, _1)); } void SoundEventController::handleEventQueueEventAdded(boost::shared_ptr) { @@ -22,4 +26,11 @@ void SoundEventController::setPlaySounds(bool playSounds) { playSounds_ = playSounds; } +void SoundEventController::handleUIEvent(boost::shared_ptr event) { + boost::shared_ptr soundEvent = boost::dynamic_pointer_cast(event); + if (soundEvent) { + setPlaySounds(soundEvent->getEnabled()); + } +} + } diff --git a/Swift/Controllers/SoundEventController.h b/Swift/Controllers/SoundEventController.h index 07ac667..34499d4 100644 --- a/Swift/Controllers/SoundEventController.h +++ b/Swift/Controllers/SoundEventController.h @@ -4,17 +4,22 @@ #include "Swiften/Events/StanzaEvent.h" +#include "Swift/Controllers/UIEvents/UIEvent.h" + namespace Swift { class EventController; class SoundPlayer; + class UIEventStream; class SoundEventController { public: - SoundEventController(EventController* eventController, SoundPlayer* soundPlayer, bool playSounds); + SoundEventController(EventController* eventController, SoundPlayer* soundPlayer, bool playSounds, UIEventStream* uiEvents); void setPlaySounds(bool playSounds); private: + void handleUIEvent(boost::shared_ptr event); void handleEventQueueEventAdded(boost::shared_ptr event); EventController* eventController_; SoundPlayer* soundPlayer_; bool playSounds_; + UIEventStream* uiEvents_; }; } diff --git a/Swift/Controllers/UIEvents/ToggleSoundsUIEvent.h b/Swift/Controllers/UIEvents/ToggleSoundsUIEvent.h new file mode 100644 index 0000000..826ee09 --- /dev/null +++ b/Swift/Controllers/UIEvents/ToggleSoundsUIEvent.h @@ -0,0 +1,13 @@ +#pragma once + +#include "Swift/Controllers/UIEvents/UIEvent.h" + +namespace Swift { + class ToggleSoundsUIEvent : public UIEvent { + public: + ToggleSoundsUIEvent(bool enable) : enabled_(enable) {}; + bool getEnabled() {return enabled_;}; + private: + bool enabled_; + }; +} diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp index da23ea0..4f6b423 100644 --- a/Swift/QtUI/QtLoginWindow.cpp +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -2,6 +2,7 @@ #include "Swift/Controllers/UIEvents/UIEventStream.h" #include "Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h" +#include "Swift/Controllers/UIEvents/ToggleSoundsUIEvent.h" #include "Swiften/Base/Platform.h" #include "QtAboutWidget.h" @@ -115,6 +116,13 @@ QtLoginWindow::QtLoginWindow(UIEventStream* uiEventStream) : QMainWindow() { QAction* xmlConsoleAction = new QAction(tr("Show Debug Console"), this); connect(xmlConsoleAction, SIGNAL(activated()), SLOT(handleShowXMLConsole())); toolsMenu_->addAction(xmlConsoleAction); + + QAction* toggleSoundsAction = new QAction(tr("Toggle Sounds"), this); + toggleSoundsAction->setCheckable(true); + toggleSoundsAction->setChecked(true); + connect(toggleSoundsAction, SIGNAL(toggled(bool)), SLOT(handleToggleSounds(bool))); + swiftMenu_->addAction(toggleSoundsAction); + QAction* quitAction = new QAction("Quit", this); connect(quitAction, SIGNAL(activated()), SLOT(handleQuit())); @@ -234,6 +242,11 @@ void QtLoginWindow::handleShowXMLConsole() { uiEventStream_->send(boost::shared_ptr(new RequestXMLConsoleUIEvent())); } +void QtLoginWindow::handleToggleSounds(bool enabled) { + uiEventStream_->send(boost::shared_ptr(new ToggleSoundsUIEvent(enabled))); +} + + void QtLoginWindow::handleQuit() { QApplication::quit(); } diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h index 38852ce..40ea4ec 100644 --- a/Swift/QtUI/QtLoginWindow.h +++ b/Swift/QtUI/QtLoginWindow.h @@ -39,6 +39,7 @@ namespace Swift { void handleCertficateChecked(bool); void handleQuit(); void handleShowXMLConsole(); + void handleToggleSounds(bool enabled); void handleAbout(); void bringToFront(); void handleUsernameTextChanged(); -- cgit v0.10.2-6-g49f6