From 326cd32e2c9e3ec9bac54f5bb952928680c93749 Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
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<StanzaEvent>) {
@@ -22,4 +26,11 @@ void SoundEventController::setPlaySounds(bool playSounds) {
 	playSounds_ = playSounds;
 }
 
+void SoundEventController::handleUIEvent(boost::shared_ptr<UIEvent> event) {
+	boost::shared_ptr<ToggleSoundsUIEvent> soundEvent = boost::dynamic_pointer_cast<ToggleSoundsUIEvent>(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<UIEvent> event);
 			void handleEventQueueEventAdded(boost::shared_ptr<StanzaEvent> 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<RequestXMLConsoleUIEvent>(new RequestXMLConsoleUIEvent()));
 }
 
+void QtLoginWindow::handleToggleSounds(bool enabled) {
+	uiEventStream_->send(boost::shared_ptr<ToggleSoundsUIEvent>(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