diff options
Diffstat (limited to 'Swift/QtUI')
31 files changed, 314 insertions, 282 deletions
diff --git a/Swift/QtUI/ChatList/QtChatListWindow.cpp b/Swift/QtUI/ChatList/QtChatListWindow.cpp index 8de5720..5181040 100644 --- a/Swift/QtUI/ChatList/QtChatListWindow.cpp +++ b/Swift/QtUI/ChatList/QtChatListWindow.cpp @@ -6,6 +6,8 @@  #include "Swift/QtUI/ChatList/QtChatListWindow.h" +#include <Boost/bind.hpp> +  #include <QMenu>  #include <QContextMenuEvent> @@ -13,22 +15,24 @@  #include <Swift/QtUI/ChatList/ChatListRecentItem.h>  #include <Swift/QtUI/QtAddBookmarkWindow.h>  #include <Swift/QtUI/QtEditBookmarkWindow.h> +#include <Swift/QtUI/QtUISettingConstants.h>  #include <Swift/Controllers/UIEvents/JoinMUCUIEvent.h>  #include <Swift/Controllers/UIEvents/RequestChatUIEvent.h>  #include <Swift/Controllers/UIEvents/AddMUCBookmarkUIEvent.h>  #include <Swift/Controllers/UIEvents/RemoveMUCBookmarkUIEvent.h>  #include <Swift/Controllers/UIEvents/EditMUCBookmarkUIEvent.h> -#include <Swift/QtUI/QtUIPreferences.h> +#include <Swift/Controllers/Settings/SettingsProvider.h> +  namespace Swift { -QtChatListWindow::QtChatListWindow(UIEventStream *uiEventStream, QtUIPreferences* uiPreferences, QWidget* parent) : QTreeView(parent) { +QtChatListWindow::QtChatListWindow(UIEventStream *uiEventStream, SettingsProvider* settings, QWidget* parent) : QTreeView(parent) {  	eventStream_ = uiEventStream; -	uiPreferences_ = uiPreferences; +	settings_ = settings;;  	bookmarksEnabled_ = false;  	model_ = new ChatListModel();  	setModel(model_); -	delegate_ = new ChatListDelegate(uiPreferences_->getCompactRosters()); +	delegate_ = new ChatListDelegate(settings_->getSetting(QtUISettingConstants::COMPACT_ROSTER));  	setItemDelegate(delegate_);  	setHeaderHidden(true);  #ifdef SWIFT_PLATFORM_MACOSX @@ -41,19 +45,23 @@ QtChatListWindow::QtChatListWindow(UIEventStream *uiEventStream, QtUIPreferences  	setupContextMenus();  	connect(this, SIGNAL(activated(const QModelIndex&)), this, SLOT(handleItemActivated(const QModelIndex&)));  	connect(this, SIGNAL(clicked(const QModelIndex&)), this, SLOT(handleClicked(const QModelIndex&))); -	connect(uiPreferences_, SIGNAL(onCompactRostersChanged(bool)), this, SLOT(handleCompactRostersToggled(bool))); + +	settings_->onSettingChanged.connect(boost::bind(&QtChatListWindow::handleSettingChanged, this, _1));  }  QtChatListWindow::~QtChatListWindow() { +	settings_->onSettingChanged.disconnect(boost::bind(&QtChatListWindow::handleSettingChanged, this, _1));  	delete model_;  	delete delegate_;  	delete mucMenu_;  	delete emptyMenu_;  } -void QtChatListWindow::handleCompactRostersToggled(bool compact) { -	delegate_->setCompact(compact); -	repaint(); +void QtChatListWindow::handleSettingChanged(const std::string& setting) { +	if (setting == QtUISettingConstants::COMPACT_ROSTER.getKey()) { +		delegate_->setCompact(settings_->getSetting(QtUISettingConstants::COMPACT_ROSTER)); +		repaint(); +	}  }  void QtChatListWindow::setBookmarksEnabled(bool enabled) { diff --git a/Swift/QtUI/ChatList/QtChatListWindow.h b/Swift/QtUI/ChatList/QtChatListWindow.h index af37015..33131ce 100644 --- a/Swift/QtUI/ChatList/QtChatListWindow.h +++ b/Swift/QtUI/ChatList/QtChatListWindow.h @@ -14,11 +14,11 @@  #include "Swift/QtUI/ChatList/ChatListDelegate.h"  namespace Swift { -	class QtUIPreferences; +	class SettingsProvider;  	class QtChatListWindow : public QTreeView, public ChatListWindow {  		Q_OBJECT  		public: -			QtChatListWindow(UIEventStream *uiEventStream, QtUIPreferences* uiPreferences, QWidget* parent = NULL); +			QtChatListWindow(UIEventStream *uiEventStream, SettingsProvider* settings, QWidget* parent = NULL);  			virtual ~QtChatListWindow();  			void addMUCBookmark(const MUCBookmark& bookmark);  			void removeMUCBookmark(const MUCBookmark& bookmark); @@ -35,7 +35,7 @@ namespace Swift {  			void handleEditBookmark();  			void handleRemoveBookmark();  			void handleClicked(const QModelIndex& index); -			void handleCompactRostersToggled(bool); +			void handleSettingChanged(const std::string& setting);  		protected:  			void contextMenuEvent(QContextMenuEvent* event); @@ -49,7 +49,7 @@ namespace Swift {  			QMenu* mucMenu_;  			QMenu* emptyMenu_;  			ChatListItem* contextMenuItem_; -			QtUIPreferences* uiPreferences_; +			SettingsProvider* settings_;  	};  } diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp index 4cf606c..dd33e28 100644 --- a/Swift/QtUI/QtChatWindow.cpp +++ b/Swift/QtUI/QtChatWindow.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2011 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -45,13 +45,13 @@  #include <QPushButton>  #include <QFileDialog>  #include <QMenu> -#include <Swift/QtUI/QtUIPreferences.h> +#include <Swift/Controllers/Settings/SettingsProvider.h>  #include <QDebug>  namespace Swift { -QtChatWindow::QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventStream* eventStream, QtUIPreferences* uiPreferences) : QtTabbable(), contact_(contact), previousMessageWasSelf_(false), previousMessageWasSystem_(false), previousMessageWasPresence_(false), previousMessageWasFileTransfer_(false), eventStream_(eventStream) { -	uiPreferences_ = uiPreferences; +QtChatWindow::QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventStream* eventStream, SettingsProvider* settings) : QtTabbable(), contact_(contact), previousMessageWasSelf_(false), previousMessageWasSystem_(false), previousMessageWasPresence_(false), previousMessageWasFileTransfer_(false), eventStream_(eventStream) { +	settings_ = settings;  	unreadCount_ = 0;  	idCounter_ = 0;  	inputEnabled_ = true; @@ -61,7 +61,6 @@ QtChatWindow::QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventSt  	isCorrection_ = false;  	correctionEnabled_ = Maybe;  	updateTitleWithUnreadCount(); -	QtSettingsProvider settings;  #ifdef SWIFT_EXPERIMENTAL_FT  	setAcceptDrops(true); @@ -110,7 +109,7 @@ QtChatWindow::QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventSt  	messageLog_ = new QtChatView(theme, this);  	logRosterSplitter_->addWidget(messageLog_); -	treeWidget_ = new QtOccupantListWidget(eventStream_, uiPreferences_, this); +	treeWidget_ = new QtOccupantListWidget(eventStream_, settings_, this);  	treeWidget_->hide();  	logRosterSplitter_->addWidget(treeWidget_);  	logRosterSplitter_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); diff --git a/Swift/QtUI/QtChatWindow.h b/Swift/QtUI/QtChatWindow.h index 4f997c0..9203068 100644 --- a/Swift/QtUI/QtChatWindow.h +++ b/Swift/QtUI/QtChatWindow.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2011 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -32,12 +32,12 @@ namespace Swift {  	class QtTextEdit;  	class UIEventStream;  	class QtFileTransferJSBridge; -	class QtUIPreferences; +	class SettingsProvider;  	class QtChatWindow : public QtTabbable, public ChatWindow {  		Q_OBJECT  		public: -			QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventStream* eventStream, QtUIPreferences* uiPreferences); +			QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventStream* eventStream, SettingsProvider* settings);  			~QtChatWindow();  			std::string addMessage(const std::string &message, const std::string &senderName, bool senderIsSelf, boost::shared_ptr<SecurityLabel> label, const std::string& avatarPath, const boost::posix_time::ptime& time);  			std::string addAction(const std::string &message, const std::string &senderName, bool senderIsSelf, boost::shared_ptr<SecurityLabel> label, const std::string& avatarPath, const boost::posix_time::ptime& time); @@ -162,6 +162,6 @@ namespace Swift {  			QPointer<QtMUCConfigurationWindow> mucConfigurationWindow_;  			QPointer<QtAffiliationEditor> affiliationEditor_;  			int idCounter_; -			QtUIPreferences* uiPreferences_; +			SettingsProvider* settings_;  	};  } diff --git a/Swift/QtUI/QtChatWindowFactory.cpp b/Swift/QtUI/QtChatWindowFactory.cpp index b860dae..7610082 100644 --- a/Swift/QtUI/QtChatWindowFactory.cpp +++ b/Swift/QtUI/QtChatWindowFactory.cpp @@ -20,15 +20,15 @@ namespace Swift {  static const QString SPLITTER_STATE = "mucSplitterState";  static const QString CHAT_TABS_GEOMETRY = "chatTabsGeometry"; -QtChatWindowFactory::QtChatWindowFactory(QSplitter* splitter, QtSettingsProvider* settings, QtChatTabs* tabs, const QString& themePath, QtUIPreferences* uiPreferences) : themePath_(themePath) { +QtChatWindowFactory::QtChatWindowFactory(QSplitter* splitter, SettingsProvider* settings, QtSettingsProvider* qtSettings, QtChatTabs* tabs, const QString& themePath) : themePath_(themePath) { +	qtOnlySettings_ = qtSettings;  	settings_ = settings;  	tabs_ = tabs; -	uiPreferences_ = uiPreferences;  	theme_ = NULL;  	if (splitter) {  		splitter->addWidget(tabs_);  	} else if (tabs_) { -		QVariant chatTabsGeometryVariant = settings_->getQSettings()->value(CHAT_TABS_GEOMETRY); +		QVariant chatTabsGeometryVariant = qtOnlySettings_->getQSettings()->value(CHAT_TABS_GEOMETRY);  		if (chatTabsGeometryVariant.isValid()) {  			tabs_->restoreGeometry(chatTabsGeometryVariant.toByteArray());  		} @@ -49,11 +49,11 @@ ChatWindow* QtChatWindowFactory::createChatWindow(const JID &contact,UIEventStre  		}  	} -	QtChatWindow *chatWindow = new QtChatWindow(P2QSTRING(contact.toString()), theme_, eventStream, uiPreferences_); +	QtChatWindow *chatWindow = new QtChatWindow(P2QSTRING(contact.toString()), theme_, eventStream, settings_);  	connect(chatWindow, SIGNAL(splitterMoved()), this, SLOT(handleSplitterMoved()));  	connect(this, SIGNAL(changeSplitterState(QByteArray)), chatWindow, SLOT(handleChangeSplitterState(QByteArray))); -	QVariant splitterState = settings_->getQSettings()->value(SPLITTER_STATE); +	QVariant splitterState = qtOnlySettings_->getQSettings()->value(SPLITTER_STATE);  	if(splitterState.isValid()) {  		chatWindow->handleChangeSplitterState(splitterState.toByteArray());  	} @@ -61,7 +61,7 @@ ChatWindow* QtChatWindowFactory::createChatWindow(const JID &contact,UIEventStre  	if (tabs_) {  		tabs_->addTab(chatWindow);  	} else { -		QVariant chatGeometryVariant = settings_->getQSettings()->value(CHAT_TABS_GEOMETRY); +		QVariant chatGeometryVariant = qtOnlySettings_->getQSettings()->value(CHAT_TABS_GEOMETRY);  		if (chatGeometryVariant.isValid()) {  			chatWindow->restoreGeometry(chatGeometryVariant.toByteArray());  		} @@ -71,12 +71,12 @@ ChatWindow* QtChatWindowFactory::createChatWindow(const JID &contact,UIEventStre  }  void QtChatWindowFactory::handleWindowGeometryChanged() { -	settings_->getQSettings()->setValue(CHAT_TABS_GEOMETRY, qobject_cast<QWidget*>(sender())->saveGeometry()); +	qtOnlySettings_->getQSettings()->setValue(CHAT_TABS_GEOMETRY, qobject_cast<QWidget*>(sender())->saveGeometry());  }  void QtChatWindowFactory::handleSplitterMoved() {  	QByteArray splitterState = qobject_cast<QtChatWindow*>(sender())->getSplitterState(); -	settings_->getQSettings()->setValue(SPLITTER_STATE, QVariant(splitterState)); +	qtOnlySettings_->getQSettings()->setValue(SPLITTER_STATE, QVariant(splitterState));  	emit changeSplitterState(splitterState);  } diff --git a/Swift/QtUI/QtChatWindowFactory.h b/Swift/QtUI/QtChatWindowFactory.h index f664c43..2a16c3b 100644 --- a/Swift/QtUI/QtChatWindowFactory.h +++ b/Swift/QtUI/QtChatWindowFactory.h @@ -20,7 +20,7 @@ namespace Swift {  	class QtChatWindowFactory : public QObject, public ChatWindowFactory {  		Q_OBJECT  		public: -			QtChatWindowFactory(QSplitter* splitter, QtSettingsProvider* settings, QtChatTabs* tabs, const QString& themePath, QtUIPreferences* uiPreferences); +			QtChatWindowFactory(QSplitter* splitter, SettingsProvider* settings, QtSettingsProvider* qtSettings, QtChatTabs* tabs, const QString& themePath);  			~QtChatWindowFactory();  			ChatWindow* createChatWindow(const JID &contact, UIEventStream* eventStream);  		signals: @@ -30,10 +30,10 @@ namespace Swift {  			void handleSplitterMoved();  		private:  			QString themePath_; -			QtSettingsProvider* settings_; +			SettingsProvider* settings_; +			QtSettingsProvider* qtOnlySettings_;  			QtChatTabs* tabs_;  			QtChatTheme* theme_; -			QtUIPreferences* uiPreferences_;  	};  } diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp index fc99633..aafdef8 100644 --- a/Swift/QtUI/QtLoginWindow.cpp +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2011 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -27,22 +27,23 @@  #include <QMessageBox>  #include <QKeyEvent> -#include "Swift/Controllers/UIEvents/UIEventStream.h" -#include "Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h" -#include "Swift/Controllers/UIEvents/RequestFileTransferListUIEvent.h" -#include "Swift/Controllers/UIEvents/ToggleSoundsUIEvent.h" -#include "Swift/Controllers/UIEvents/ToggleNotificationsUIEvent.h" -#include "Swiften/Base/Platform.h" -#include "Swiften/Base/Paths.h" - -#include "QtAboutWidget.h" -#include "QtSwiftUtil.h" -#include "QtMainWindow.h" -#include "QtUtilities.h" +#include <Swift/Controllers/UIEvents/UIEventStream.h> +#include <Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h> +#include <Swift/Controllers/UIEvents/RequestFileTransferListUIEvent.h> +#include <Swift/Controllers/Settings/SettingsProvider.h> +#include <Swift/Controllers/SettingConstants.h> +#include <Swift/QtUI/QtUISettingConstants.h> +#include <Swiften/Base/Platform.h> +#include <Swiften/Base/Paths.h> + +#include <QtAboutWidget.h> +#include <QtSwiftUtil.h> +#include <QtMainWindow.h> +#include <QtUtilities.h>  namespace Swift{ -QtLoginWindow::QtLoginWindow(UIEventStream* uiEventStream, bool eagleMode) : QMainWindow(), eagleMode_(eagleMode) { +QtLoginWindow::QtLoginWindow(UIEventStream* uiEventStream, SettingsProvider* settings) : QMainWindow(), settings_(settings) {  	uiEventStream_ = uiEventStream;  	setWindowTitle("Swift"); @@ -199,13 +200,13 @@ QtLoginWindow::QtLoginWindow(UIEventStream* uiEventStream, bool eagleMode) : QMa  	swiftMenu_->addAction(quitAction);  	setInitialMenus(); -	uiEventStream_->onUIEvent.connect(boost::bind(&QtLoginWindow::handleUIEvent, this, _1)); +	settings_->onSettingChanged.connect(boost::bind(&QtLoginWindow::handleSettingChanged, this, _1)); - -	remember_->setEnabled(!eagleMode_); -	loginAutomatically_->setEnabled(!eagleMode_); -	xmlConsoleAction_->setEnabled(!eagleMode_); -	if (eagleMode_) { +	bool eagle = settings_->getSetting(SettingConstants::FORGET_PASSWORDS); +	remember_->setEnabled(!eagle); +	loginAutomatically_->setEnabled(!eagle); +	xmlConsoleAction_->setEnabled(!eagle); +	if (eagle) {  		remember_->setChecked(false);  		loginAutomatically_->setChecked(false);  	} @@ -237,14 +238,12 @@ bool QtLoginWindow::eventFilter(QObject *obj, QEvent *event) {  	return QObject::eventFilter(obj, event);  } -void QtLoginWindow::handleUIEvent(boost::shared_ptr<UIEvent> event) { -	boost::shared_ptr<ToggleSoundsUIEvent> soundEvent = boost::dynamic_pointer_cast<ToggleSoundsUIEvent>(event); -	if (soundEvent) { -		toggleSoundsAction_->setChecked(soundEvent->getEnabled()); +void QtLoginWindow::handleSettingChanged(const std::string& settingPath) { +	if (settingPath == SettingConstants::PLAY_SOUNDS.getKey()) { +		toggleSoundsAction_->setChecked(settings_->getSetting(SettingConstants::PLAY_SOUNDS));  	} -	boost::shared_ptr<ToggleNotificationsUIEvent> notificationsEvent = boost::dynamic_pointer_cast<ToggleNotificationsUIEvent>(event); -	if (notificationsEvent) { -		toggleNotificationsAction_->setChecked(notificationsEvent->getEnabled()); +	if (settingPath == SettingConstants::SHOW_NOTIFICATIONS.getKey()) { +		toggleNotificationsAction_->setChecked(settings_->getSetting(SettingConstants::SHOW_NOTIFICATIONS));  	}  } @@ -323,36 +322,27 @@ void QtLoginWindow::setIsLoggingIn(bool loggingIn) {  	for (int i = 0; i < 5; i++) {  		widgets[i]->setEnabled(!loggingIn);  	} -	remember_->setEnabled(!eagleMode_); -	loginAutomatically_->setEnabled(!eagleMode_); +	bool eagle = settings_->getSetting(SettingConstants::FORGET_PASSWORDS); +	remember_->setEnabled(!eagle); +	loginAutomatically_->setEnabled(!eagle);  }  void QtLoginWindow::loginClicked() {  	if (username_->isEnabled()) { -		if (eagleMode_) { -			QString clickThroughPath(P2QSTRING((Paths::getExecutablePath() / "eagle-banner.txt").string())); -			QFile clickThroughFile(clickThroughPath); -			if (clickThroughFile.exists() && clickThroughFile.open(QIODevice::ReadOnly)) { -				QString banner; -				while (!clickThroughFile.atEnd()) { -					QByteArray line = clickThroughFile.readLine(); -					banner += line + "\n"; -				} -				if (!banner.isEmpty()) { -					QMessageBox msgBox; -					msgBox.setWindowTitle(tr("Confirm terms of use")); -					msgBox.setText(""); -					msgBox.setInformativeText(banner); -					msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); -					msgBox.setDefaultButton(QMessageBox::No); -					if (msgBox.exec() != QMessageBox::Yes) { -						return; -					} -				} +		std::string banner = settings_->getSetting(QtUISettingConstants::CLICKTHROUGH_BANNER); +		if (!banner.empty()) { +			QMessageBox msgBox; +			msgBox.setWindowTitle(tr("Confirm terms of use")); +			msgBox.setText(""); +			msgBox.setInformativeText(P2QSTRING(banner)); +			msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); +			msgBox.setDefaultButton(QMessageBox::No); +			if (msgBox.exec() != QMessageBox::Yes) { +				return;  			}  		}  		onLoginRequest(Q2PSTRING(username_->currentText()), Q2PSTRING(password_->text()), Q2PSTRING(certificateFile_), remember_->isChecked(), loginAutomatically_->isChecked()); -		if (eagleMode_) { /* Mustn't remember logins */ +		if (settings_->getSetting(SettingConstants::FORGET_PASSWORDS)) { /* Mustn't remember logins */  			username_->clearEditText();  			password_->setText("");  		} @@ -398,11 +388,11 @@ void QtLoginWindow::handleShowFileTransferOverview() {  }  void QtLoginWindow::handleToggleSounds(bool enabled) { -	uiEventStream_->send(boost::shared_ptr<ToggleSoundsUIEvent>(new ToggleSoundsUIEvent(enabled))); +	settings_->storeSetting(SettingConstants::PLAY_SOUNDS, enabled);  }  void QtLoginWindow::handleToggleNotifications(bool enabled) { -	uiEventStream_->send(boost::shared_ptr<ToggleNotificationsUIEvent>(new ToggleNotificationsUIEvent(enabled))); +	settings_->storeSetting(SettingConstants::SHOW_NOTIFICATIONS, enabled);  }  void QtLoginWindow::handleQuit() { diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h index df133b1..dcd7c18 100644 --- a/Swift/QtUI/QtLoginWindow.h +++ b/Swift/QtUI/QtLoginWindow.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2011 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -14,16 +14,17 @@  #include <QStackedWidget>  #include <QMenuBar> -#include "Swift/Controllers/UIInterfaces/LoginWindow.h" -#include "Swift/Controllers/UIEvents/UIEventStream.h" -#include "Swift/Controllers/UIInterfaces/MainWindow.h" -#include "QtAboutWidget.h" +#include <Swift/Controllers/UIInterfaces/LoginWindow.h> +#include <Swift/Controllers/UIEvents/UIEventStream.h> +#include <Swift/Controllers/UIInterfaces/MainWindow.h> +#include <QtAboutWidget.h>  class QLabel;  class QToolButton;  class QComboBox;  namespace Swift { +	class SettingsProvider;  	class QtLoginWindow : public QMainWindow, public LoginWindow {  		Q_OBJECT  		public: @@ -34,7 +35,7 @@ namespace Swift {  			};  		public: -			QtLoginWindow(UIEventStream* uiEventStream, bool eagleMode); +			QtLoginWindow(UIEventStream* uiEventStream, SettingsProvider* settings);  			void morphInto(MainWindow *mainWindow);  			virtual void loggedOut(); @@ -66,7 +67,7 @@ namespace Swift {  			void handleUsernameTextChanged();  			void resizeEvent(QResizeEvent* event);  			void moveEvent(QMoveEvent* event); -			void handleUIEvent(boost::shared_ptr<UIEvent> event); +			void handleSettingChanged(const std::string& settingPath);  		protected:  			bool eventFilter(QObject *obj, QEvent *event); @@ -94,7 +95,7 @@ namespace Swift {  			QAction* toggleNotificationsAction_;  			UIEventStream* uiEventStream_;  			QPointer<QtAboutWidget> aboutDialog_; -			bool eagleMode_; +			SettingsProvider* settings_;  			QAction* xmlConsoleAction_;  			QAction* fileTransferOverviewAction_;  	}; diff --git a/Swift/QtUI/QtMainWindow.cpp b/Swift/QtUI/QtMainWindow.cpp index 199e388..9f66b31 100644 --- a/Swift/QtUI/QtMainWindow.cpp +++ b/Swift/QtUI/QtMainWindow.cpp @@ -24,7 +24,6 @@  #include <Swift/QtUI/QtSwiftUtil.h>  #include <Swift/QtUI/QtTabWidget.h>  #include <Swift/QtUI/QtSettingsProvider.h> -#include <Swift/QtUI/QtUIPreferences.h>  #include <Swift/QtUI/QtLoginWindow.h>  #include <Roster/QtRosterWidget.h>  #include <Swift/Controllers/UIEvents/RequestJoinMUCUIEvent.h> @@ -32,17 +31,14 @@  #include <Swift/Controllers/UIEvents/RequestChatWithUserDialogUIEvent.h>  #include <Swift/Controllers/UIEvents/RequestProfileEditorUIEvent.h>  #include <Swift/Controllers/UIEvents/JoinMUCUIEvent.h> -#include <Swift/Controllers/UIEvents/ToggleShowOfflineUIEvent.h>  #include <Swift/Controllers/UIEvents/RequestAdHocUIEvent.h> -#include <Swift/Controllers/UIEvents/ToggleRequestDeliveryReceiptsUIEvent.h> +#include <Swift/QtUI/QtUISettingConstants.h> +#include <Swift/Controllers/SettingConstants.h>  namespace Swift { -#define CURRENT_ROSTER_TAB "current_roster_tab" - -QtMainWindow::QtMainWindow(QtSettingsProvider* settings, UIEventStream* uiEventStream, QtUIPreferences* uiPreferences, QtLoginWindow::QtMenus loginMenus) : QWidget(), MainWindow(false), loginMenus_(loginMenus) { +QtMainWindow::QtMainWindow(SettingsProvider* settings, UIEventStream* uiEventStream, QtLoginWindow::QtMenus loginMenus) : QWidget(), MainWindow(false), loginMenus_(loginMenus) {  	uiEventStream_ = uiEventStream; -	uiPreferences_ = uiPreferences;  	settings_ = settings;  	setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));  	QBoxLayout *mainLayout = new QBoxLayout(QBoxLayout::TopToBottom, this); @@ -66,7 +62,7 @@ QtMainWindow::QtMainWindow(QtSettingsProvider* settings, UIEventStream* uiEventS  	contactTabLayout->setSpacing(0);  	contactTabLayout->setContentsMargins(0, 0, 0, 0); -	treeWidget_ = new QtRosterWidget(uiEventStream_, uiPreferences_, this); +	treeWidget_ = new QtRosterWidget(uiEventStream_, settings_, this);  	contactTabLayout->addWidget(treeWidget_);  	tabs_->addTab(contactsTabWidget_, tr("&Contacts")); @@ -74,13 +70,13 @@ QtMainWindow::QtMainWindow(QtSettingsProvider* settings, UIEventStream* uiEventS  	eventWindow_ = new QtEventWindow(uiEventStream_);  	connect(eventWindow_, SIGNAL(onNewEventCountUpdated(int)), this, SLOT(handleEventCountUpdated(int))); -	chatListWindow_ = new QtChatListWindow(uiEventStream_, uiPreferences_); +	chatListWindow_ = new QtChatListWindow(uiEventStream_, settings_);  	connect(chatListWindow_, SIGNAL(onCountUpdated(int)), this, SLOT(handleChatCountUpdated(int)));  	tabs_->addTab(chatListWindow_, tr("C&hats"));  	tabs_->addTab(eventWindow_, tr("&Notices")); -	tabs_->setCurrentIndex(settings_->getIntSetting(CURRENT_ROSTER_TAB, 0)); +	tabs_->setCurrentIndex(settings_->getSetting(QtUISettingConstants::CURRENT_ROSTER_TAB));  	connect(tabs_, SIGNAL(currentChanged(int)), this, SLOT(handleTabChanged(int))); @@ -140,19 +136,20 @@ QtMainWindow::QtMainWindow(QtSettingsProvider* settings, UIEventStream* uiEventS  	serverAdHocCommandActions_.append(adHocAction);  	lastOfflineState_ = false; -	uiEventStream_->onUIEvent.connect(boost::bind(&QtMainWindow::handleUIEvent, this, _1)); + +	settings_->onSettingChanged.connect(boost::bind(&QtMainWindow::handleSettingChanged, this, _1));  }  QtMainWindow::~QtMainWindow() { -	uiEventStream_->onUIEvent.disconnect(boost::bind(&QtMainWindow::handleUIEvent, this, _1)); +	settings_->onSettingChanged.disconnect(boost::bind(&QtMainWindow::handleSettingChanged, this, _1));  }  void QtMainWindow::handleTabChanged(int index) { -	settings_->storeInt(CURRENT_ROSTER_TAB, index); +	settings_->storeSetting(QtUISettingConstants::CURRENT_ROSTER_TAB, index);  }  void QtMainWindow::handleToggleRequestDeliveryReceipts(bool enabled) { -	uiEventStream_->send(boost::make_shared<ToggleRequestDeliveryReceiptsUIEvent>(enabled)); +	settings_->storeSetting(SettingConstants::REQUEST_DELIVERYRECEIPTS, enabled);  }  QtEventWindow* QtMainWindow::getEventWindow() { @@ -220,14 +217,12 @@ void QtMainWindow::handleStatusChanged(StatusShow::Type showType, const QString  	onChangeStatusRequest(showType, Q2PSTRING(statusMessage));  } -void QtMainWindow::handleUIEvent(boost::shared_ptr<UIEvent> event) { -	boost::shared_ptr<ToggleShowOfflineUIEvent> toggleEvent = boost::dynamic_pointer_cast<ToggleShowOfflineUIEvent>(event); -	if (toggleEvent) { -		handleShowOfflineToggled(toggleEvent->getShow()); +void QtMainWindow::handleSettingChanged(const std::string& settingPath) { +	if (settingPath == SettingConstants::SHOW_OFFLINE.getKey()) { +		handleShowOfflineToggled(settings_->getSetting(SettingConstants::SHOW_OFFLINE));  	} -	boost::shared_ptr<ToggleRequestDeliveryReceiptsUIEvent> deliveryReceiptEvent = boost::dynamic_pointer_cast<ToggleRequestDeliveryReceiptsUIEvent>(event); -	if (deliveryReceiptEvent) { -		toggleRequestDeliveryReceipts_->setChecked(deliveryReceiptEvent->getEnabled()); +	if (settingPath == SettingConstants::REQUEST_DELIVERYRECEIPTS.getKey()) { +		toggleRequestDeliveryReceipts_->setChecked(settings_->getSetting(SettingConstants::REQUEST_DELIVERYRECEIPTS));  	}  } @@ -235,7 +230,7 @@ void QtMainWindow::handleShowOfflineToggled(bool state) {  	if (state != lastOfflineState_) {  		lastOfflineState_ = state;  		showOfflineAction_->setChecked(state); -		uiEventStream_->onUIEvent(boost::shared_ptr<UIEvent>(new ToggleShowOfflineUIEvent(state))); +		settings_->storeSetting(SettingConstants::SHOW_OFFLINE, state);  	}  } diff --git a/Swift/QtUI/QtMainWindow.h b/Swift/QtUI/QtMainWindow.h index 3c8bdec..44f8a25 100644 --- a/Swift/QtUI/QtMainWindow.h +++ b/Swift/QtUI/QtMainWindow.h @@ -30,13 +30,13 @@ namespace Swift {  	class TreeWidget;  	class UIEventStream;  	class QtTabWidget; -	class QtSettingsProvider; +	class SettingsProvider;  	class QtUIPreferences;  	class QtMainWindow : public QWidget, public MainWindow {  		Q_OBJECT  		public: -			QtMainWindow(QtSettingsProvider*, UIEventStream* eventStream, QtUIPreferences* uiPreferences, QtLoginWindow::QtMenus loginMenus); +			QtMainWindow(SettingsProvider*, UIEventStream* eventStream, QtLoginWindow::QtMenus loginMenus);  			virtual ~QtMainWindow();  			std::vector<QMenu*> getMenus() {return menus_;}  			void setMyNick(const std::string& name); @@ -51,7 +51,7 @@ namespace Swift {  			void setAvailableAdHocCommands(const std::vector<DiscoItems::Item>& commands);  		private slots:  			void handleStatusChanged(StatusShow::Type showType, const QString &statusMessage); -			void handleUIEvent(boost::shared_ptr<UIEvent> event); +			void handleSettingChanged(const std::string& settingPath);  			void handleShowOfflineToggled(bool);  			void handleJoinMUCAction();  			void handleSignOutAction(); @@ -66,7 +66,7 @@ namespace Swift {  			void handleToggleRequestDeliveryReceipts(bool enabled);  		private: -			QtSettingsProvider* settings_; +			SettingsProvider* settings_;  			QtLoginWindow::QtMenus loginMenus_;  			std::vector<QMenu*> menus_;  			QtRosterWidget* treeWidget_; @@ -86,6 +86,5 @@ namespace Swift {  			bool lastOfflineState_;  			std::vector<DiscoItems::Item> serverAdHocCommands_;  			QList<QAction*> serverAdHocCommandActions_; -			QtUIPreferences* uiPreferences_;  	};  } diff --git a/Swift/QtUI/QtNameWidget.cpp b/Swift/QtUI/QtNameWidget.cpp index 96f9c0d..08e32f5 100644 --- a/Swift/QtUI/QtNameWidget.cpp +++ b/Swift/QtUI/QtNameWidget.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2012 Remko Tronçon   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -13,15 +13,16 @@  #include <Swift/QtUI/QtElidingLabel.h>  #include <Swift/QtUI/QtSettingsProvider.h> +#include <Swift/QtUI/QtUISettingConstants.h>  namespace Swift { -QtNameWidget::QtNameWidget(QtSettingsProvider* settings, QWidget *parent) : QWidget(parent), settings(settings) { +QtNameWidget::QtNameWidget(SettingsProvider* settings, QWidget *parent) : QWidget(parent), settings(settings) {  	QHBoxLayout* mainLayout = new QHBoxLayout(this);  	mainLayout->setSpacing(0);  	mainLayout->setContentsMargins(0,0,0,0); -	mode = settings->getBoolSetting("showNickInRosterHeader", true) ? ShowNick : ShowJID; +	mode = settings->getSetting(QtUISettingConstants::SHOW_NICK_IN_ROSTER_HEADER) ? ShowNick : ShowJID;  	textLabel = new QtElidingLabel(this);  	QFont font = textLabel->font(); @@ -72,7 +73,7 @@ void QtNameWidget::mousePressEvent(QMouseEvent* event) {  	else if (result == editProfile) {  		emit onChangeNickRequest();  	} -	settings->storeBool("showNickInRosterHeader", mode == ShowNick); +	settings->storeSetting(QtUISettingConstants::SHOW_NICK_IN_ROSTER_HEADER, mode == ShowNick);  	updateText();  } diff --git a/Swift/QtUI/QtNameWidget.h b/Swift/QtUI/QtNameWidget.h index 674d55c..0f00c41 100644 --- a/Swift/QtUI/QtNameWidget.h +++ b/Swift/QtUI/QtNameWidget.h @@ -10,13 +10,13 @@  namespace Swift {  	class QtElidingLabel; -	class QtSettingsProvider; +	class SettingsProvider;  	class QtNameWidget : public QWidget {  			Q_OBJECT  		public: -			QtNameWidget(QtSettingsProvider* settings, QWidget *parent); +			QtNameWidget(SettingsProvider* settings, QWidget *parent);  			void setNick(const QString& text);  			void setJID(const QString& jid); @@ -34,7 +34,7 @@ namespace Swift {  				ShowJID,  			}; -			QtSettingsProvider* settings; +			SettingsProvider* settings;  			Mode mode;  			QtElidingLabel* textLabel;  			QString jid; diff --git a/Swift/QtUI/QtRosterHeader.cpp b/Swift/QtUI/QtRosterHeader.cpp index 5fb4d1a..98e75c2 100644 --- a/Swift/QtUI/QtRosterHeader.cpp +++ b/Swift/QtUI/QtRosterHeader.cpp @@ -23,7 +23,7 @@  #include "QtScaledAvatarCache.h"  namespace Swift { -QtRosterHeader::QtRosterHeader(QtSettingsProvider* settings, QWidget* parent) : QWidget(parent) { +QtRosterHeader::QtRosterHeader(SettingsProvider* settings, QWidget* parent) : QWidget(parent) {  	QHBoxLayout* topLayout = new QHBoxLayout();  	topLayout->setSpacing(3);  	topLayout->setContentsMargins(4,4,4,4); diff --git a/Swift/QtUI/QtRosterHeader.h b/Swift/QtUI/QtRosterHeader.h index 3380610..050460c 100644 --- a/Swift/QtUI/QtRosterHeader.h +++ b/Swift/QtUI/QtRosterHeader.h @@ -23,12 +23,12 @@ namespace Swift {  	class QtClickableLabel;  	class QtStatusWidget;  	class QtNameWidget; -	class QtSettingsProvider; +	class SettingsProvider;  	class QtRosterHeader : public QWidget {  		Q_OBJECT  	public: -		QtRosterHeader(QtSettingsProvider* settings, QWidget* parent = NULL); +		QtRosterHeader(SettingsProvider* settings, QWidget* parent = NULL);  		void setAvatar(const QString& path);  		void setJID(const QString& jid); diff --git a/Swift/QtUI/QtSettingsProvider.cpp b/Swift/QtUI/QtSettingsProvider.cpp index b8ef9bb..0c4d49b 100644 --- a/Swift/QtUI/QtSettingsProvider.cpp +++ b/Swift/QtUI/QtSettingsProvider.cpp @@ -1,10 +1,10 @@  /* - * Copyright (c) 2010 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#include "QtSettingsProvider.h" +#include <QtSettingsProvider.h>  #include <QStringList>  #include <QFile> @@ -18,33 +18,54 @@ QtSettingsProvider::~QtSettingsProvider() {  } -std::string QtSettingsProvider::getStringSetting(const std::string &settingPath) { -	QVariant setting = settings_.value(settingPath.c_str()); -	return setting.isNull() ? "" : std::string(setting.toString().toUtf8()); +std::string QtSettingsProvider::getSetting(const Setting<std::string>& setting) { +	QVariant variant = settings_.value(setting.getKey().c_str()); +	return variant.isNull() ? setting.getDefaultValue() : std::string(variant.toString().toUtf8());  } -void QtSettingsProvider::storeString(const std::string &settingPath, const std::string &settingValue) { -	settings_.setValue(settingPath.c_str(), settingValue.c_str()); +void QtSettingsProvider::storeSetting(const Setting<std::string>& setting, const std::string& settingValue) { +	bool changed = false; +	if (getSetting(setting) != settingValue) { +		changed = true; +	} +	settings_.setValue(setting.getKey().c_str(), settingValue.c_str()); +	if (changed) { +		onSettingChanged(setting.getKey()); +	}  	updatePermissions();  } -bool QtSettingsProvider::getBoolSetting(const std::string &settingPath, bool defaultValue) { -	QVariant setting = settings_.value(settingPath.c_str()); -	return setting.isNull() ? defaultValue : setting.toBool(); +bool QtSettingsProvider::getSetting(const Setting<bool>& setting) { +	QVariant variant = settings_.value(setting.getKey().c_str()); +	return variant.isNull() ? setting.getDefaultValue() : variant.toBool();  } -void QtSettingsProvider::storeBool(const std::string &settingPath, bool settingValue) { -	settings_.setValue(settingPath.c_str(), settingValue); +void QtSettingsProvider::storeSetting(const Setting<bool>& setting, const bool& settingValue) { +	bool changed = false; +	if (getSetting(setting) != settingValue) { +		changed = true; +	} +	settings_.setValue(setting.getKey().c_str(), settingValue); +	if (changed) { +		onSettingChanged(setting.getKey()); +	}  	updatePermissions();  } -int QtSettingsProvider::getIntSetting(const std::string &settingPath, int defaultValue) { -	QVariant setting = settings_.value(settingPath.c_str()); -	return setting.isNull() ? defaultValue : setting.toInt(); +int QtSettingsProvider::getSetting(const Setting<int>& setting) { +	QVariant variant = settings_.value(setting.getKey().c_str()); +	return variant.isNull() ? setting.getDefaultValue() : variant.toInt();  } -void QtSettingsProvider::storeInt(const std::string &settingPath, int settingValue) { -	settings_.setValue(settingPath.c_str(), settingValue); +void QtSettingsProvider::storeSetting(const Setting<int>& setting, const int& settingValue) { +	bool changed = false; +	if (getSetting(setting) != settingValue) { +		changed = true; +	} +	settings_.setValue(setting.getKey().c_str(), settingValue); +	if (changed) { +		onSettingChanged(setting.getKey()); +	}  	updatePermissions();  } @@ -90,5 +111,9 @@ void QtSettingsProvider::updatePermissions() {  #endif  } +bool QtSettingsProvider::getIsSettingFinal(const std::string& /*settingPath*/) { +	return false; +} +  } diff --git a/Swift/QtUI/QtSettingsProvider.h b/Swift/QtUI/QtSettingsProvider.h index 8eeb854..ececa6e 100644 --- a/Swift/QtUI/QtSettingsProvider.h +++ b/Swift/QtUI/QtSettingsProvider.h @@ -1,13 +1,12 @@  /* - * Copyright (c) 2010 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFT_QtSettingsProvider_H -#define SWIFT_QtSettingsProvider_H +#pragma once -#include "Swift/Controllers/Settings/SettingsProvider.h" +#include <Swift/Controllers/Settings/SettingsProvider.h>  #include <QSettings> @@ -17,16 +16,18 @@ class QtSettingsProvider : public SettingsProvider {  	public:  		QtSettingsProvider();  		virtual ~QtSettingsProvider(); -		virtual std::string getStringSetting(const std::string &settingPath); -		virtual void storeString(const std::string &settingPath, const std::string &settingValue); -		virtual bool getBoolSetting(const std::string &settingPath, bool defaultValue); -		virtual void storeBool(const std::string &settingPath, bool settingValue); -		virtual int getIntSetting(const std::string &settingPath, int defaultValue); -		virtual void storeInt(const std::string &settingPath, int settingValue); +		virtual std::string getSetting(const Setting<std::string>& setting); +		virtual void storeSetting(const Setting<std::string>& setting, const std::string& value); +		virtual bool getSetting(const Setting<bool>& setting); +		virtual void storeSetting(const Setting<bool>& setting, const bool& value); +		virtual int getSetting(const Setting<int>& setting); +		virtual void storeSetting(const Setting<int>& setting, const int& value);  		virtual std::vector<std::string> getAvailableProfiles();  		virtual void createProfile(const std::string& profile);  		virtual void removeProfile(const std::string& profile);  		QSettings* getQSettings(); +	protected: +		virtual bool getIsSettingFinal(const std::string& settingPath);  	private:  		void updatePermissions(); @@ -36,7 +37,7 @@ class QtSettingsProvider : public SettingsProvider {  };  } -#endif + diff --git a/Swift/QtUI/QtSwift.cpp b/Swift/QtUI/QtSwift.cpp index f706deb..066d22e 100644 --- a/Swift/QtUI/QtSwift.cpp +++ b/Swift/QtUI/QtSwift.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2011 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -12,27 +12,31 @@  #include <boost/bind.hpp>  #include <QMessageBox>  #include <QApplication> - -#include "QtLoginWindow.h" -#include "QtChatTabs.h" -#include "QtSystemTray.h" -#include "QtSoundPlayer.h" -#include "QtSwiftUtil.h" -#include "QtUIFactory.h" -#include "QtChatWindowFactory.h" +#include <qDebug.h> + +#include <QtLoginWindow.h> +#include <QtChatTabs.h> +#include <QtSystemTray.h> +#include <QtSoundPlayer.h> +#include <QtSwiftUtil.h> +#include <QtUIFactory.h> +#include <QtChatWindowFactory.h>  #include <Swiften/Base/Log.h>  #include <Swift/Controllers/Storages/CertificateFileStorageFactory.h> -#include "Swift/Controllers/Storages/FileStoragesFactory.h" -#include "SwifTools/Application/PlatformApplicationPathProvider.h" +#include <Swift/Controllers/Storages/FileStoragesFactory.h> +#include <SwifTools/Application/PlatformApplicationPathProvider.h>  #include <string> -#include "Swiften/Base/Platform.h" -#include "Swiften/Elements/Presence.h" -#include "Swiften/Client/Client.h" -#include "Swift/Controllers/MainController.h" -#include "Swift/Controllers/ApplicationInfo.h" -#include "Swift/Controllers/BuildVersion.h" -#include "SwifTools/AutoUpdater/AutoUpdater.h" -#include "SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.h" +#include <Swiften/Base/Platform.h> +#include <Swiften/Elements/Presence.h> +#include <Swiften/Client/Client.h> +#include <Swift/Controllers/Settings/XMLSettingsProvider.h> +#include <Swift/Controllers/Settings/SettingsProviderHierachy.h> +#include <Swift/Controllers/MainController.h> +#include <Swift/Controllers/ApplicationInfo.h> +#include <Swift/Controllers/BuildVersion.h> +#include <SwifTools/AutoUpdater/AutoUpdater.h> +#include <SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.h> +#include "Swiften/Base/Paths.h"  #if defined(SWIFTEN_PLATFORM_WINDOWS)  #include "WindowsNotifier.h" @@ -77,11 +81,22 @@ po::options_description QtSwift::getOptionsDescription() {  		("latency-debug", "Use latency debugging (unsupported)")  		("multi-account", po::value<int>()->default_value(1), "Number of accounts to open windows for (unsupported)")  		("start-minimized", "Don't show the login/roster window at startup") -		("eagle-mode", "Settings more suitable for military/secure deployments")  		;  	return result;  } +XMLSettingsProvider* QtSwift::loadSettingsFile(const QString& fileName) { +	QFile configFile(fileName); +	if (configFile.exists() && configFile.open(QIODevice::ReadOnly)) { +		QString xmlString; +		while (!configFile.atEnd()) { +			QByteArray line = configFile.readLine(); +			xmlString += line + "\n"; +		} +		return new XMLSettingsProvider(Q2PSTRING(xmlString)); +	} +	return new XMLSettingsProvider(""); +}  QtSwift::QtSwift(const po::variables_map& options) : networkFactories_(&clientMainThreadCaller_), autoUpdater_(NULL), idleDetector_(&idleQuerier_, networkFactories_.getTimerFactory(), 1000) {  	if (options.count("netbook-mode")) { @@ -94,6 +109,12 @@ QtSwift::QtSwift(const po::variables_map& options) : networkFactories_(&clientMa  	QCoreApplication::setOrganizationDomain(SWIFT_ORGANIZATION_DOMAIN);  	QCoreApplication::setApplicationVersion(buildVersion); +	qtSettings_ = new QtSettingsProvider(); +	xmlSettings_ = loadSettingsFile(P2QSTRING((Paths::getExecutablePath() / "system-settings.xml").string())); +	settingsHierachy_ = new SettingsProviderHierachy(); +	settingsHierachy_->addProviderToTopOfStack(xmlSettings_); +	settingsHierachy_->addProviderToTopOfStack(qtSettings_); +  	int numberOfAccounts = 1;  	try {  		numberOfAccounts = options["multi-account"].as<int>(); @@ -108,12 +129,10 @@ QtSwift::QtSwift(const po::variables_map& options) : networkFactories_(&clientMa  	tabs_ = options.count("no-tabs") && !(splitter_ > 0) ? NULL : new QtChatTabs();  	bool startMinimized = options.count("start-minimized") > 0; -	bool eagleMode = options.count("eagle-mode") > 0; -	settings_ = new QtSettingsProvider();  	applicationPathProvider_ = new PlatformApplicationPathProvider(SWIFT_APPLICATION_NAME);  	storagesFactory_ = new FileStoragesFactory(applicationPathProvider_->getDataDir());  	certificateStorageFactory_ = new CertificateFileStorageFactory(applicationPathProvider_->getDataDir(), tlsFactories_.getCertificateFactory()); -	chatWindowFactory_ = new QtChatWindowFactory(splitter_, settings_, tabs_, "", &uiPreferences_); +	chatWindowFactory_ = new QtChatWindowFactory(splitter_, settingsHierachy_, qtSettings_, tabs_, "");  	soundPlayer_ = new QtSoundPlayer(applicationPathProvider_);  	// Ugly, because the dock depends on the tray, but the temporary @@ -154,13 +173,13 @@ QtSwift::QtSwift(const po::variables_map& options) : networkFactories_(&clientMa  			// Don't add the first tray (see note above)  			systemTrays_.push_back(new QtSystemTray());  		} -		QtUIFactory* uiFactory = new QtUIFactory(settings_, tabs_, splitter_, systemTrays_[i], chatWindowFactory_, startMinimized, eagleMode, &uiPreferences_); +		QtUIFactory* uiFactory = new QtUIFactory(settingsHierachy_, qtSettings_, tabs_, splitter_, systemTrays_[i], chatWindowFactory_, startMinimized);  		uiFactories_.push_back(uiFactory);  		MainController* mainController = new MainController(  				&clientMainThreadCaller_,  				&networkFactories_,  				uiFactory, -				settings_, +				settingsHierachy_,  				systemTrays_[i],  				soundPlayer_,  				storagesFactory_, @@ -169,8 +188,7 @@ QtSwift::QtSwift(const po::variables_map& options) : networkFactories_(&clientMa  				notifier_,  				uriHandler_,  				&idleDetector_, -				options.count("latency-debug") > 0, -				eagleMode); +				options.count("latency-debug") > 0);  		mainControllers_.push_back(mainController);  	} @@ -191,7 +209,9 @@ QtSwift::~QtSwift() {  	foreach (MainController* controller, mainControllers_) {  		delete controller;  	} -	delete settings_; +	delete settingsHierachy_; +	delete qtSettings_; +	delete xmlSettings_;  	foreach (QtSystemTray* tray, systemTrays_) {  		delete tray;  	} diff --git a/Swift/QtUI/QtSwift.h b/Swift/QtUI/QtSwift.h index c808fa0..7a49fa7 100644 --- a/Swift/QtUI/QtSwift.h +++ b/Swift/QtUI/QtSwift.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -23,7 +23,6 @@  #endif  #include "SwifTools/Idle/PlatformIdleQuerier.h"  #include "SwifTools/Idle/ActualIdleDetector.h" -#include <Swift/QtUI/QtUIPreferences.h>  namespace po = boost::program_options; @@ -48,6 +47,8 @@ namespace Swift {  	class QtUserSearchWindowFactory;  	class EventLoop;  	class URIHandler; +	class SettingsProviderHierachy; +	class XMLSettingsProvider;  	class QtSwift : public QObject {  		Q_OBJECT @@ -56,6 +57,8 @@ namespace Swift {  			static po::options_description getOptionsDescription();  			~QtSwift();  		private: +			XMLSettingsProvider* loadSettingsFile(const QString& fileName); +		private:  			QtEventLoop clientMainThreadCaller_;  			PlatformTLSFactories tlsFactories_;  			BoostNetworkFactories networkFactories_; @@ -63,7 +66,9 @@ namespace Swift {  			std::vector<MainController*> mainControllers_;  			std::vector<QtSystemTray*> systemTrays_;  			std::vector<QtUIFactory*> uiFactories_; -			QtSettingsProvider *settings_; +			QtSettingsProvider* qtSettings_; +			XMLSettingsProvider* xmlSettings_; +			SettingsProviderHierachy* settingsHierachy_;  			QSplitter* splitter_;  			QtSoundPlayer* soundPlayer_;  			Dock* dock_; @@ -76,7 +81,6 @@ namespace Swift {  			Notifier* notifier_;  			PlatformIdleQuerier idleQuerier_;  			ActualIdleDetector idleDetector_; -			QtUIPreferences uiPreferences_;  #if defined(SWIFTEN_PLATFORM_MACOSX)  			CocoaApplication cocoaApplication_;  #endif diff --git a/Swift/QtUI/QtUIFactory.cpp b/Swift/QtUI/QtUIFactory.cpp index 88da781..c686442 100644 --- a/Swift/QtUI/QtUIFactory.cpp +++ b/Swift/QtUI/QtUIFactory.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2012 Remko Tronçon   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -25,13 +25,13 @@  #include "QtContactEditWindow.h"  #include "QtAdHocCommandWindow.h"  #include "QtFileTransferListWidget.h" - -#define CHATWINDOW_FONT_SIZE "chatWindowFontSize" +#include <Swift/Controllers/Settings/SettingsProviderHierachy.h> +#include <Swift/QtUI/QtUISettingConstants.h>  namespace Swift { -QtUIFactory::QtUIFactory(QtSettingsProvider* settings, QtChatTabs* tabs, QSplitter* netbookSplitter, QtSystemTray* systemTray, QtChatWindowFactory* chatWindowFactory, bool startMinimized, bool eagleMode, QtUIPreferences* uiPreferences) : settings(settings), tabs(tabs), netbookSplitter(netbookSplitter), systemTray(systemTray), chatWindowFactory(chatWindowFactory), lastMainWindow(NULL), loginWindow(NULL), startMinimized(startMinimized), eagleMode(eagleMode), uiPreferences(uiPreferences)  { -	chatFontSize = settings->getIntSetting(CHATWINDOW_FONT_SIZE, 0); +QtUIFactory::QtUIFactory(SettingsProviderHierachy* settings, QtSettingsProvider* qtOnlySettings, QtChatTabs* tabs, QSplitter* netbookSplitter, QtSystemTray* systemTray, QtChatWindowFactory* chatWindowFactory, bool startMinimized) : settings(settings), qtOnlySettings(qtOnlySettings), tabs(tabs), netbookSplitter(netbookSplitter), systemTray(systemTray), chatWindowFactory(chatWindowFactory), lastMainWindow(NULL), loginWindow(NULL), startMinimized(startMinimized) { +	chatFontSize = settings->getSetting(QtUISettingConstants::CHATWINDOW_FONT_SIZE);  }  XMLConsoleWidget* QtUIFactory::createXMLConsoleWidget() { @@ -55,19 +55,19 @@ FileTransferListWidget* QtUIFactory::createFileTransferListWidget() {  }  MainWindow* QtUIFactory::createMainWindow(UIEventStream* eventStream) { -	lastMainWindow  = new QtMainWindow(settings, eventStream, uiPreferences, loginWindow->getMenus()); +	lastMainWindow  = new QtMainWindow(settings, eventStream, loginWindow->getMenus());  	return lastMainWindow;  }  LoginWindow* QtUIFactory::createLoginWindow(UIEventStream* eventStream) { -	loginWindow = new QtLoginWindow(eventStream, eagleMode); +	loginWindow = new QtLoginWindow(eventStream, settings);  	if (netbookSplitter) {  		netbookSplitter->insertWidget(0, loginWindow);  	}  	connect(systemTray, SIGNAL(clicked()), loginWindow, SLOT(bringToFront()));  #ifndef SWIFT_MOBILE -	QVariant loginWindowGeometryVariant = settings->getQSettings()->value("loginWindowGeometry"); +	QVariant loginWindowGeometryVariant = qtOnlySettings->getQSettings()->value("loginWindowGeometry");  	if (loginWindowGeometryVariant.isValid()) {  		loginWindow->restoreGeometry(loginWindowGeometryVariant.toByteArray());  	} @@ -78,7 +78,7 @@ LoginWindow* QtUIFactory::createLoginWindow(UIEventStream* eventStream) {  }  void QtUIFactory::handleLoginWindowGeometryChanged() { -	settings->getQSettings()->setValue("loginWindowGeometry", loginWindow->saveGeometry()); +	qtOnlySettings->getQSettings()->setValue("loginWindowGeometry", loginWindow->saveGeometry());  }  EventWindow* QtUIFactory::createEventWindow() { @@ -115,7 +115,7 @@ ChatWindow* QtUIFactory::createChatWindow(const JID& contact, UIEventStream* eve  void QtUIFactory::handleChatWindowFontResized(int size) {  	chatFontSize = size; -	settings->storeInt(CHATWINDOW_FONT_SIZE, size); +	settings->storeSetting(QtUISettingConstants::CHATWINDOW_FONT_SIZE, size);  }  UserSearchWindow* QtUIFactory::createUserSearchWindow(UserSearchWindow::Type type, UIEventStream* eventStream, const std::set<std::string>& groups) { diff --git a/Swift/QtUI/QtUIFactory.h b/Swift/QtUI/QtUIFactory.h index db33365..c9e2f2e 100644 --- a/Swift/QtUI/QtUIFactory.h +++ b/Swift/QtUI/QtUIFactory.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2012 Remko Tronçon   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -10,12 +10,12 @@  #include <QPointer>  #include <Swift/Controllers/UIInterfaces/UIFactory.h> -#include <Swift/QtUI/QtUIPreferences.h>  class QSplitter;  namespace Swift {  	class QtSettingsProvider; +	class SettingsProviderHierachy;  	class QtChatTabs;  	class QtSystemTray;  	class QtLoginWindow; @@ -27,7 +27,7 @@ namespace Swift {  	class QtUIFactory : public QObject, public UIFactory {  			Q_OBJECT  		public: -			QtUIFactory(QtSettingsProvider* settings, QtChatTabs* tabs, QSplitter* netbookSplitter, QtSystemTray* systemTray, QtChatWindowFactory* chatWindowFactory, bool startMinimized, bool eagleMode, QtUIPreferences* uiPreferences); +			QtUIFactory(SettingsProviderHierachy* settings, QtSettingsProvider* qtOnlySettings, QtChatTabs* tabs, QSplitter* netbookSplitter, QtSystemTray* systemTray, QtChatWindowFactory* chatWindowFactory, bool startMinimized);  			virtual XMLConsoleWidget* createXMLConsoleWidget();  			virtual MainWindow* createMainWindow(UIEventStream* eventStream); @@ -48,7 +48,8 @@ namespace Swift {  			void handleChatWindowFontResized(int);  		private: -			QtSettingsProvider* settings; +			SettingsProviderHierachy* settings; +			QtSettingsProvider* qtOnlySettings;  			QtChatTabs* tabs;  			QSplitter* netbookSplitter;  			QtSystemTray* systemTray; @@ -58,7 +59,5 @@ namespace Swift {  			std::vector<QPointer<QtChatWindow> > chatWindows;  			bool startMinimized;  			int chatFontSize; -			bool eagleMode; -			QtUIPreferences* uiPreferences;  	};  } diff --git a/Swift/QtUI/QtUIPreferences.cpp b/Swift/QtUI/QtUIPreferences.cpp deleted file mode 100644 index 6662e71..0000000 --- a/Swift/QtUI/QtUIPreferences.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2011 Kevin Smith - * Licensed under the GNU General Public License v3. - * See Documentation/Licenses/GPLv3.txt for more information. - */ - -#include <Swift/QtUI/QtUIPreferences.h> - -namespace Swift { -QtUIPreferences::QtUIPreferences() : compactRosters_(false) { -	 -} - -QtUIPreferences::~QtUIPreferences() { -	 -} - -void QtUIPreferences::setCompactRosters(bool compact) { -	compactRosters_ = compact; -	emit onCompactRostersChanged(compact); -} - -bool QtUIPreferences::getCompactRosters() { -	return compactRosters_; -} - -} diff --git a/Swift/QtUI/QtUIPreferences.h b/Swift/QtUI/QtUIPreferences.h deleted file mode 100644 index e537e80..0000000 --- a/Swift/QtUI/QtUIPreferences.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2011 Kevin Smith - * Licensed under the GNU General Public License v3. - * See Documentation/Licenses/GPLv3.txt for more information. - */ - -#pragma once - -#include <QObject> - -namespace Swift { -	class QtUIPreferences : public QObject { -		Q_OBJECT -		public: -			QtUIPreferences(); -			~QtUIPreferences(); -			bool getCompactRosters(); -		public slots: -			void setCompactRosters(bool compact); -		signals: -			void onCompactRostersChanged(bool /*now*/); -		private: -			bool compactRosters_; -	}; -}
\ No newline at end of file diff --git a/Swift/QtUI/QtUISettingConstants.cpp b/Swift/QtUI/QtUISettingConstants.cpp new file mode 100644 index 0000000..046ccc1 --- /dev/null +++ b/Swift/QtUI/QtUISettingConstants.cpp @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2012 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swift/QtUI/QtUISettingConstants.h> + +namespace Swift { + +const SettingsProvider::Setting<bool> QtUISettingConstants::COMPACT_ROSTER("compactRoster", false); +const SettingsProvider::Setting<std::string> QtUISettingConstants::CLICKTHROUGH_BANNER("clickthroughBanner", ""); +const SettingsProvider::Setting<int> QtUISettingConstants::CURRENT_ROSTER_TAB("currentRosterTab", 0); +const SettingsProvider::Setting<bool> QtUISettingConstants::SHOW_NICK_IN_ROSTER_HEADER("showNickInRosterHeader", true); +const SettingsProvider::Setting<int> QtUISettingConstants::CHATWINDOW_FONT_SIZE("chatWindowFontSize", 0); +} diff --git a/Swift/QtUI/QtUISettingConstants.h b/Swift/QtUI/QtUISettingConstants.h new file mode 100644 index 0000000..82f98bb --- /dev/null +++ b/Swift/QtUI/QtUISettingConstants.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2012 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include <Swift/Controllers/Settings/SettingsProvider.h> + +namespace Swift { +	class QtUISettingConstants { +		public: +			static const SettingsProvider::Setting<bool> COMPACT_ROSTER; +			static const SettingsProvider::Setting<std::string> CLICKTHROUGH_BANNER; +			static const SettingsProvider::Setting<int> CURRENT_ROSTER_TAB; +			static const SettingsProvider::Setting<bool> SHOW_NICK_IN_ROSTER_HEADER; +			static const SettingsProvider::Setting<int> CHATWINDOW_FONT_SIZE; +	}; +} diff --git a/Swift/QtUI/Roster/QtOccupantListWidget.cpp b/Swift/QtUI/Roster/QtOccupantListWidget.cpp index f864919..0b3722c 100644 --- a/Swift/QtUI/Roster/QtOccupantListWidget.cpp +++ b/Swift/QtUI/Roster/QtOccupantListWidget.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2011 Kevin Smith + * Copyright (c) 2011-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -19,7 +19,7 @@  namespace Swift { -QtOccupantListWidget::QtOccupantListWidget(UIEventStream* eventStream, QtUIPreferences* uiPreferences, QWidget* parent) : QtTreeWidget(eventStream, uiPreferences, parent) { +QtOccupantListWidget::QtOccupantListWidget(UIEventStream* eventStream, SettingsProvider* settings, QWidget* parent) : QtTreeWidget(eventStream, settings, parent) {  } diff --git a/Swift/QtUI/Roster/QtOccupantListWidget.h b/Swift/QtUI/Roster/QtOccupantListWidget.h index da7c463..729115a 100644 --- a/Swift/QtUI/Roster/QtOccupantListWidget.h +++ b/Swift/QtUI/Roster/QtOccupantListWidget.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2011 Kevin Smith + * Copyright (c) 2011-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -12,12 +12,12 @@  #include "Swift/Controllers/UIInterfaces/ChatWindow.h"  namespace Swift { -class QtUIPreferences; +class SettingsProvider;  class QtOccupantListWidget : public QtTreeWidget {  	Q_OBJECT  	public: -		QtOccupantListWidget(UIEventStream* eventStream, QtUIPreferences* uiPreferences, QWidget* parent = 0); +		QtOccupantListWidget(UIEventStream* eventStream, SettingsProvider* settings, QWidget* parent = 0);  		virtual ~QtOccupantListWidget();  		void setAvailableOccupantActions(const std::vector<ChatWindow::OccupantAction>& actions);  		boost::signal<void (ChatWindow::OccupantAction, ContactRosterItem*)> onOccupantActionSelected; diff --git a/Swift/QtUI/Roster/QtRosterWidget.cpp b/Swift/QtUI/Roster/QtRosterWidget.cpp index ac4b500..e3fee24 100644 --- a/Swift/QtUI/Roster/QtRosterWidget.cpp +++ b/Swift/QtUI/Roster/QtRosterWidget.cpp @@ -23,7 +23,7 @@  namespace Swift { -QtRosterWidget::QtRosterWidget(UIEventStream* eventStream, QtUIPreferences* uiPreferences, QWidget* parent) : QtTreeWidget(eventStream, uiPreferences, parent) { +QtRosterWidget::QtRosterWidget(UIEventStream* eventStream, SettingsProvider* settings, QWidget* parent) : QtTreeWidget(eventStream, settings, parent) {  } diff --git a/Swift/QtUI/Roster/QtRosterWidget.h b/Swift/QtUI/Roster/QtRosterWidget.h index 01f4726..549fe92 100644 --- a/Swift/QtUI/Roster/QtRosterWidget.h +++ b/Swift/QtUI/Roster/QtRosterWidget.h @@ -14,7 +14,7 @@ class QtUIPreferences;  class QtRosterWidget : public QtTreeWidget {  	Q_OBJECT  	public: -		QtRosterWidget(UIEventStream* eventStream, QtUIPreferences* uiPreferences, QWidget* parent = 0); +		QtRosterWidget(UIEventStream* eventStream, SettingsProvider* settings, QWidget* parent = 0);  		virtual ~QtRosterWidget();  	public slots:  		void handleEditUserActionTriggered(bool checked); diff --git a/Swift/QtUI/Roster/QtTreeWidget.cpp b/Swift/QtUI/Roster/QtTreeWidget.cpp index 4382125..5fdf138 100644 --- a/Swift/QtUI/Roster/QtTreeWidget.cpp +++ b/Swift/QtUI/Roster/QtTreeWidget.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -7,6 +7,7 @@  #include "Roster/QtTreeWidget.h"  #include <boost/smart_ptr/make_shared.hpp> +#include <boost/bind.hpp>  #include <QUrl> @@ -17,16 +18,17 @@  #include <Swift/Controllers/UIEvents/RequestChatUIEvent.h>  #include <Swift/Controllers/UIEvents/SendFileUIEvent.h>  #include <QtSwiftUtil.h> -#include <Swift/QtUI/QtUIPreferences.h> +#include <Swift/Controllers/Settings/SettingsProvider.h> +#include <Swift/QtUI/QtUISettingConstants.h>  namespace Swift { -QtTreeWidget::QtTreeWidget(UIEventStream* eventStream, QtUIPreferences* uiPreferences, QWidget* parent) : QTreeView(parent) { +QtTreeWidget::QtTreeWidget(UIEventStream* eventStream, SettingsProvider* settings, QWidget* parent) : QTreeView(parent) {  	eventStream_ = eventStream; -	uiPreferences_ = uiPreferences; +	settings_ = settings;  	model_ = new RosterModel(this);  	setModel(model_); -	delegate_ = new RosterDelegate(this, uiPreferences_->getCompactRosters()); +	delegate_ = new RosterDelegate(this, settings_->getSetting(QtUISettingConstants::COMPACT_ROSTER));  	setItemDelegate(delegate_);  	setHeaderHidden(true);  #ifdef SWIFT_PLATFORM_MACOSX @@ -45,17 +47,21 @@ QtTreeWidget::QtTreeWidget(UIEventStream* eventStream, QtUIPreferences* uiPrefer  	connect(this, SIGNAL(expanded(const QModelIndex&)), this, SLOT(handleExpanded(const QModelIndex&)));  	connect(this, SIGNAL(collapsed(const QModelIndex&)), this, SLOT(handleCollapsed(const QModelIndex&)));  	connect(this, SIGNAL(clicked(const QModelIndex&)), this, SLOT(handleClicked(const QModelIndex&))); -	connect(uiPreferences_, SIGNAL(onCompactRostersChanged(bool)), this, SLOT(handleCompactRostersToggled(bool))); + +	settings_->onSettingChanged.connect(boost::bind(&QtTreeWidget::handleSettingChanged, this, _1));  }  QtTreeWidget::~QtTreeWidget() { +	settings_->onSettingChanged.disconnect(boost::bind(&QtTreeWidget::handleSettingChanged, this, _1));  	delete model_;  	delete delegate_;  } -void QtTreeWidget::handleCompactRostersToggled(bool compact) { -	delegate_->setCompact(compact); -	repaint(); +void QtTreeWidget::handleSettingChanged(const std::string& setting) { +	if (setting == QtUISettingConstants::COMPACT_ROSTER.getKey()) { +		delegate_->setCompact(settings_->getSetting(QtUISettingConstants::COMPACT_ROSTER)); +		repaint(); +	}  }  void QtTreeWidget::setRosterModel(Roster* roster) { diff --git a/Swift/QtUI/Roster/QtTreeWidget.h b/Swift/QtUI/Roster/QtTreeWidget.h index 705c039..7c10a6a 100644 --- a/Swift/QtUI/Roster/QtTreeWidget.h +++ b/Swift/QtUI/Roster/QtTreeWidget.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -16,12 +16,12 @@  namespace Swift {  class UIEventStream; -class QtUIPreferences; +class SettingsProvider;  class QtTreeWidget : public QTreeView{  	Q_OBJECT  	public: -		QtTreeWidget(UIEventStream* eventStream, QtUIPreferences* uiPreferences, QWidget* parent = 0); +		QtTreeWidget(UIEventStream* eventStream, SettingsProvider* settings, QWidget* parent = 0);  		~QtTreeWidget();  		void show();  		QtTreeWidgetItem* getRoot(); @@ -35,7 +35,7 @@ class QtTreeWidget : public QTreeView{  		void handleExpanded(const QModelIndex&);  		void handleCollapsed(const QModelIndex&);  		void handleClicked(const QModelIndex&); -		void handleCompactRostersToggled(bool compact); +		void handleSettingChanged(const std::string& setting);  	protected:  		void dragEnterEvent(QDragEnterEvent* event);  		void dropEvent(QDropEvent* event); @@ -55,7 +55,7 @@ class QtTreeWidget : public QTreeView{  		Roster* roster_;  		RosterDelegate* delegate_;  		QtTreeWidgetItem* treeRoot_; -		QtUIPreferences* uiPreferences_; +		SettingsProvider* settings_;  };  } diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript index 2283001..d37958f 100644 --- a/Swift/QtUI/SConscript +++ b/Swift/QtUI/SConscript @@ -72,7 +72,7 @@ sources = [      "QtNameWidget.cpp",      "QtSettingsProvider.cpp",      "QtStatusWidget.cpp", -		"QtScaledAvatarCache.cpp", +    "QtScaledAvatarCache.cpp",      "QtSwift.cpp",      "QtURIHandler.cpp",      "QtChatView.cpp", @@ -99,7 +99,7 @@ sources = [      "SystemMessageSnippet.cpp",      "QtElidingLabel.cpp",      "QtFormWidget.cpp", -	"QtFormResultItemModel.cpp", +    "QtFormResultItemModel.cpp",      "QtLineEdit.cpp",      "QtJoinMUCWindow.cpp",      "Roster/RosterModel.cpp", @@ -140,7 +140,7 @@ sources = [      "QtFileTransferJSBridge.cpp",      "QtMUCConfigurationWindow.cpp",      "QtAffiliationEditor.cpp", -    "QtUIPreferences.cpp" +    "QtUISettingConstants.cpp"    ]  myenv["SWIFT_VERSION"] = Version.getBuildVersion(env.Dir("#").abspath, "swift")  | 
 Swift