diff options
28 files changed, 223 insertions, 21 deletions
| diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index e030a31..0705eb4 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -7,25 +7,28 @@  #include "Swiften/Application/Application.h"  #include "Swiften/Application/ApplicationMessageDisplay.h"  #include "Swift/Controllers/ChatController.h"  #include "Swift/Controllers/ChatWindowFactory.h"  #include "Swift/Controllers/EventController.h" -#include "Swift/Controllers/LoginWindow.h" -#include "Swift/Controllers/LoginWindowFactory.h" +#include "Swift/Controllers/UIInterfaces/LoginWindow.h" +#include "Swift/Controllers/UIInterfaces/LoginWindowFactory.h"  #include "Swift/Controllers/MainWindow.h"  #include "Swift/Controllers/MainWindowFactory.h"  #include "Swift/Controllers/MUCController.h"  #include "Swift/Controllers/NickResolver.h"  #include "Swift/Controllers/ProfileSettingsProvider.h"  #include "Swift/Controllers/RosterController.h"  #include "Swift/Controllers/SoundEventController.h"  #include "Swift/Controllers/SoundPlayer.h"  #include "Swift/Controllers/SystemTray.h"  #include "Swift/Controllers/SystemTrayController.h" +#include "Swift/Controllers/XMLConsoleController.h"  #include "Swift/Controllers/XMPPRosterController.h" +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h" +#include "Swift/Controllers/UIEvents/UIEventStream.h"  #include "Swiften/Base/foreach.h"  #include "Swiften/Base/String.h"  #include "Swiften/Client/Client.h"  #include "Swiften/Presence/PresenceSender.h"  #include "Swiften/Elements/Presence.h"  #include "Swiften/Elements/VCardUpdate.h" @@ -57,47 +60,52 @@ static const String CLIENT_NAME = "Swift";  static const String CLIENT_VERSION = "0.3";  static const String CLIENT_NODE = "http://swift.im";  typedef std::pair<JID, ChatController*> JIDChatControllerPair;  typedef std::pair<JID, MUCController*> JIDMUCControllerPair; -MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory *treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer) +MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory *treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer, XMLConsoleWidgetFactory* xmlConsoleWidgetFactory)  		: timerFactory_(&boostIOServiceThread_.getIOService()), idleDetector_(&idleQuerier_, &timerFactory_, 100), client_(NULL), presenceSender_(NULL), chatWindowFactory_(chatWindowFactory), mainWindowFactory_(mainWindowFactory), loginWindowFactory_(loginWindowFactory), treeWidgetFactory_(treeWidgetFactory), settings_(settings), xmppRosterController_(NULL), rosterController_(NULL), loginWindow_(NULL), clientVersionResponder_(NULL), nickResolver_(NULL), discoResponder_(NULL) {  	application_ = application;  	presenceOracle_ = NULL;  	avatarManager_ = NULL; +	uiEventStream_ = new UIEventStream();  	avatarStorage_ = new AvatarFileStorage(application_->getAvatarDir());  	eventController_ = new EventController();  	eventController_->onEventQueueLengthChange.connect(boost::bind(&MainController::handleEventQueueLengthChange, this, _1));  	systemTrayController_ = new SystemTrayController(eventController_, systemTray);  	soundEventController_ = new SoundEventController(eventController_, soundPlayer, settings->getBoolSetting("playSounds", true)); -	loginWindow_ = loginWindowFactory_->createLoginWindow(); +	loginWindow_ = loginWindowFactory_->createLoginWindow(uiEventStream_);  	foreach (String profile, settings->getAvailableProfiles()) {  		ProfileSettingsProvider* profileSettings = new ProfileSettingsProvider(profile, settings);  		loginWindow_->addAvailableAccount(profileSettings->getStringSetting("jid"), profileSettings->getStringSetting("pass"), profileSettings->getStringSetting("certificate"));  		delete profileSettings;  	}  	loginWindow_->onLoginRequest.connect(boost::bind(&MainController::handleLoginRequest, this, _1, _2, _3, _4));  	loginWindow_->onCancelLoginRequest.connect(boost::bind(&MainController::handleCancelLoginRequest, this));  	idleDetector_.setIdleTimeSeconds(600);  	idleDetector_.onIdleChanged.connect(boost::bind(&MainController::handleInputIdleChanged, this, _1)); + +	xmlConsoleController_ = new XMLConsoleController(uiEventStream_, xmlConsoleWidgetFactory);  }  MainController::~MainController() {  	foreach (JIDChatControllerPair controllerPair, chatControllers_) {  		delete controllerPair.second;  	}  	foreach (JIDMUCControllerPair controllerPair, mucControllers_) {  		delete controllerPair.second;  	}  	delete systemTrayController_;  	delete soundEventController_;  	delete avatarStorage_; +	delete xmlConsoleController_; +	delete uiEventStream_;  	resetClient();  }  void MainController::resetClient() {  	serverDiscoInfo_ = boost::shared_ptr<DiscoInfo>();  	xmppRoster_ = boost::shared_ptr<XMPPRoster>(); diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h index 78e49a2..c260f33 100644 --- a/Swift/Controllers/MainController.h +++ b/Swift/Controllers/MainController.h @@ -44,16 +44,19 @@ namespace Swift {  	class MUCController;  	class PresenceOracle;  	class SystemTray;  	class SystemTrayController;  	class SoundEventController;  	class SoundPlayer; +	class XMLConsoleController; +	class UIEventStream; +	class XMLConsoleWidgetFactory;  	class MainController : public MUCRegistry {  		public: -			MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory* treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer); +			MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory* treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer, XMLConsoleWidgetFactory* xmlConsoleWidgetFactory);  			~MainController();  		private:  			void resetClient(); @@ -100,12 +103,14 @@ namespace Swift {  			RosterController* rosterController_;  			EventController* eventController_;  			LoginWindow* loginWindow_;  			SoftwareVersionResponder* clientVersionResponder_;  			NickResolver* nickResolver_;  			DiscoInfoResponder* discoResponder_; +			UIEventStream* uiEventStream_; +			XMLConsoleController* xmlConsoleController_;  			boost::shared_ptr<CapsInfo> capsInfo_;  			std::map<JID, MUCController*> mucControllers_;  			std::map<JID, ChatController*> chatControllers_;  			boost::shared_ptr<DiscoInfo> serverDiscoInfo_;  			boost::shared_ptr<XMPPRoster> xmppRoster_;;  			JID jid_; diff --git a/Swift/Controllers/SConscript b/Swift/Controllers/SConscript index dfcf878..6c9b049 100644 --- a/Swift/Controllers/SConscript +++ b/Swift/Controllers/SConscript @@ -14,13 +14,15 @@ myenv.StaticLibrary("SwiftControllers", [  		"NickResolver.cpp",  		"RosterController.cpp",  		"XMPPRosterController.cpp",  		"MUCController.cpp",  		"EventController.cpp",  		"SoundEventController.cpp", -		"SystemTrayController.cpp" +		"SystemTrayController.cpp", +		"XMLConsoleController.cpp", +		"UIEvents/UIEvent.cpp"  	])  env.Append(UNITTEST_SOURCES = [  		File("UnitTest/NickResolverTest.cpp"),  		File("UnitTest/RosterControllerTest.cpp"),  		File("UnitTest/XMPPRosterControllerTest.cpp") diff --git a/Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h b/Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h new file mode 100644 index 0000000..63492b3 --- /dev/null +++ b/Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h @@ -0,0 +1,9 @@ +#pragma once + +#include "Swift/Controllers/UIEvents/UIEvent.h" + +namespace Swift { +	class RequestXMLConsoleUIEvent : public UIEvent { + +	}; +} diff --git a/Swift/Controllers/UIEvents/UIEvent.cpp b/Swift/Controllers/UIEvents/UIEvent.cpp new file mode 100644 index 0000000..7d29a19 --- /dev/null +++ b/Swift/Controllers/UIEvents/UIEvent.cpp @@ -0,0 +1,7 @@ +#include "Swift/Controllers/UIEvents/UIEvent.h" + +namespace Swift { +UIEvent::~UIEvent() { + +} +} diff --git a/Swift/Controllers/UIEvents/UIEvent.h b/Swift/Controllers/UIEvents/UIEvent.h new file mode 100644 index 0000000..7e06255 --- /dev/null +++ b/Swift/Controllers/UIEvents/UIEvent.h @@ -0,0 +1,8 @@ +#pragma once + +namespace Swift { +	class UIEvent { +		public: +			virtual ~UIEvent(); +	}; +} diff --git a/Swift/Controllers/UIEvents/UIEventStream.h b/Swift/Controllers/UIEvents/UIEventStream.h new file mode 100644 index 0000000..a20c578 --- /dev/null +++ b/Swift/Controllers/UIEvents/UIEventStream.h @@ -0,0 +1,15 @@ +#pragma once + +#include <boost/signals.hpp> +#include <boost/shared_ptr.hpp> + + +#include "Swift/Controllers/UIEvents/UIEvent.h" + +namespace Swift { +	class UIEventStream { +		public: +			boost::signal<void (boost::shared_ptr<UIEvent>)> onUIEvent; +			void send(boost::shared_ptr<UIEvent> event) {onUIEvent(event);}; +	}; +} diff --git a/Swift/Controllers/LoginWindow.h b/Swift/Controllers/UIInterfaces/LoginWindow.h index cfa20c7..cfa20c7 100644 --- a/Swift/Controllers/LoginWindow.h +++ b/Swift/Controllers/UIInterfaces/LoginWindow.h diff --git a/Swift/Controllers/LoginWindowFactory.h b/Swift/Controllers/UIInterfaces/LoginWindowFactory.h index 79ad5c0..d2dc31b 100644 --- a/Swift/Controllers/LoginWindowFactory.h +++ b/Swift/Controllers/UIInterfaces/LoginWindowFactory.h @@ -2,21 +2,22 @@  #define SWIFTEN_LoginWindowFactory_H  namespace Swift {  	class LoginWindow; -		class String; +	class String; +	class UIEventStream;  	class LoginWindowFactory {  		public:  			virtual ~LoginWindowFactory() {};  			/**  			 * Transfers ownership of result.  			 */ -			virtual LoginWindow* createLoginWindow() = 0; +			virtual LoginWindow* createLoginWindow(UIEventStream* uiEventStream) = 0;  	};  }  #endif diff --git a/Swift/Controllers/UIInterfaces/XMLConsoleWidget.h b/Swift/Controllers/UIInterfaces/XMLConsoleWidget.h new file mode 100644 index 0000000..69628df --- /dev/null +++ b/Swift/Controllers/UIInterfaces/XMLConsoleWidget.h @@ -0,0 +1,7 @@ +#pragma once + +namespace Swift { +	class XMLConsoleWidget { + +	}; +} diff --git a/Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h b/Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h new file mode 100644 index 0000000..fa7707a --- /dev/null +++ b/Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h @@ -0,0 +1,12 @@ +#pragma once + +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidget.h" + +namespace Swift { +	class UIEventStream; +	class XMLConsoleWidgetFactory { +		public: +			virtual XMLConsoleWidget* createXMLConsoleWidget() = 0; +			virtual ~XMLConsoleWidgetFactory() {}; +	}; +} diff --git a/Swift/Controllers/XMLConsoleController.cpp b/Swift/Controllers/XMLConsoleController.cpp new file mode 100644 index 0000000..8bd79ed --- /dev/null +++ b/Swift/Controllers/XMLConsoleController.cpp @@ -0,0 +1,21 @@ +#include "Swift/Controllers/XMLConsoleController.h" + +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h" + +#include "Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h" + +namespace Swift { +XMLConsoleController::XMLConsoleController(UIEventStream* uiEventStream, XMLConsoleWidgetFactory* xmlConsoleWidgetFactory) { +	uiEventStream_ = uiEventStream; +	xmlConsoleWidgetFactory_ = xmlConsoleWidgetFactory; +	uiEventStream_->onUIEvent.connect(boost::bind(&XMLConsoleController::handleUIEvent, this, _1)); +} + +void XMLConsoleController::handleUIEvent(boost::shared_ptr<UIEvent> rawEvent) { +	boost::shared_ptr<RequestXMLConsoleUIEvent> event = boost::dynamic_pointer_cast<RequestXMLConsoleUIEvent>(rawEvent); +	if (event != NULL) { +		xmlConsoleWidget_ = xmlConsoleWidgetFactory_->createXMLConsoleWidget(); +	} +} + +} diff --git a/Swift/Controllers/XMLConsoleController.h b/Swift/Controllers/XMLConsoleController.h new file mode 100644 index 0000000..f97e6c1 --- /dev/null +++ b/Swift/Controllers/XMLConsoleController.h @@ -0,0 +1,21 @@ +#pragma once + +#include <boost/signals.hpp> +#include <boost/bind.hpp> +#include <boost/shared_ptr.hpp> + +#include "Swift/Controllers/UIEvents/UIEventStream.h" + +namespace Swift { +	class XMLConsoleWidgetFactory; +	class XMLConsoleWidget; +	class XMLConsoleController { +		public: +			XMLConsoleController(UIEventStream* uiEventStream, XMLConsoleWidgetFactory* xmlConsoleWidgetFactory); +		private: +			void handleUIEvent(boost::shared_ptr<UIEvent> event); +			UIEventStream* uiEventStream_; +			XMLConsoleWidgetFactory* xmlConsoleWidgetFactory_; +			XMLConsoleWidget* xmlConsoleWidget_; +	}; +} diff --git a/Swift/QtUI/QtChatWindowFactory.cpp b/Swift/QtUI/QtChatWindowFactory.cpp index c0f1e09..ff927c9 100644 --- a/Swift/QtUI/QtChatWindowFactory.cpp +++ b/Swift/QtUI/QtChatWindowFactory.cpp @@ -6,15 +6,15 @@  #include "QtChatWindow.h"  #include "QtSwiftUtil.h"  #include "Roster/QtTreeWidgetFactory.h"  namespace Swift { -QtChatWindowFactory::QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings) : treeWidgetFactory_(treeWidgetFactory) { +QtChatWindowFactory::QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings, QtChatTabs* tabs) : treeWidgetFactory_(treeWidgetFactory) {  	settings_ = settings; -	tabs_ = new QtChatTabs(); +	tabs_ = tabs;  	if (splitter) {  		splitter->addWidget(tabs_);  	} else {  		QVariant chatTabsGeometryVariant = settings_->getQSettings()->value("chatTabsGeometry");  		if (chatTabsGeometryVariant.isValid()) {  			tabs_->restoreGeometry(chatTabsGeometryVariant.toByteArray()); diff --git a/Swift/QtUI/QtChatWindowFactory.h b/Swift/QtUI/QtChatWindowFactory.h index 4a5a7fb..0c8a092 100644 --- a/Swift/QtUI/QtChatWindowFactory.h +++ b/Swift/QtUI/QtChatWindowFactory.h @@ -10,13 +10,13 @@  namespace Swift {  	class QtTreeWidgetFactory;  	class QtChatTabs;  	class QtChatWindowFactory : public QObject, public ChatWindowFactory {  		Q_OBJECT  		public: -			QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings); +			QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings, QtChatTabs* tabs);  			ChatWindow* createChatWindow(const JID &contact);  		private slots:  			void handleWindowGeometryChanged();  		private:  			QtTreeWidgetFactory* treeWidgetFactory_;  			QtSettingsProvider* settings_; diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp index 6466692..2fd27c6 100644 --- a/Swift/QtUI/QtLoginWindow.cpp +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -1,8 +1,10 @@  #include "QtLoginWindow.h" +#include "Swift/Controllers/UIEvents/UIEventStream.h" +#include "Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h"  #include "QtAboutWidget.h"  #include "QtSwiftUtil.h"  #include "QtMainWindow.h"  #include <algorithm> @@ -17,13 +19,14 @@  #include <QMenuBar>  #include <cassert>  namespace Swift{ -QtLoginWindow::QtLoginWindow() : QMainWindow() { +QtLoginWindow::QtLoginWindow(UIEventStream* uiEventStream) : QMainWindow() { +	uiEventStream_ = uiEventStream;  	setWindowTitle("Swift");  	resize(200, 500);  	setContentsMargins(0,0,0,0);  	QWidget *centralWidget = new QWidget(this);  	setCentralWidget(centralWidget);  	QBoxLayout *topLayout = new QBoxLayout(QBoxLayout::TopToBottom, centralWidget); @@ -101,12 +104,18 @@ QtLoginWindow::QtLoginWindow() : QMainWindow() {  	swiftMenu_ = new QMenu(tr("Swift"), this);  	QAction* aboutAction = new QAction("About Swift", this);  	connect(aboutAction, SIGNAL(activated()), SLOT(handleAbout()));  	swiftMenu_->addAction(aboutAction); + +	toolsMenu_ = new QMenu(tr("Tools"), this); + +	QAction* xmlConsoleAction = new QAction(tr("Show Debug Console"), this); +	connect(xmlConsoleAction, SIGNAL(activated()), SLOT(handleShowXMLConsole())); +	toolsMenu_->addAction(xmlConsoleAction);  	QAction* quitAction = new QAction("Quit", this);  	connect(quitAction, SIGNAL(activated()), SLOT(handleQuit()));  	swiftMenu_->addAction(quitAction);  	setInitialMenus(); @@ -207,19 +216,24 @@ void QtLoginWindow::handleAbout() {  		aboutDialog_->show();  		aboutDialog_->raise();  		aboutDialog_->activateWindow();  	}  } +void QtLoginWindow::handleShowXMLConsole() { +	uiEventStream_->send(boost::shared_ptr<RequestXMLConsoleUIEvent>(new RequestXMLConsoleUIEvent())); +} +  void QtLoginWindow::handleQuit() {  	QApplication::quit();  }  void QtLoginWindow::setInitialMenus() {  	menuBar_->clear();  	menuBar_->addMenu(swiftMenu_); +	menuBar_->addMenu(toolsMenu_);  }  void QtLoginWindow::morphInto(MainWindow *mainWindow) {  	QtMainWindow *qtMainWindow = dynamic_cast<QtMainWindow*>(mainWindow);  	assert(qtMainWindow);  	stack_->addWidget(qtMainWindow); diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h index 5abb10a..491521b 100644 --- a/Swift/QtUI/QtLoginWindow.h +++ b/Swift/QtUI/QtLoginWindow.h @@ -6,25 +6,26 @@  #include <QLineEdit>  #include <QPushButton>  #include <QCheckBox>  #include <QStackedWidget>  #include <QMenuBar> -#include "Swift/Controllers/LoginWindow.h" +#include "Swift/Controllers/UIInterfaces/LoginWindow.h"  #include "Swift/Controllers/MainWindow.h"  #include "QtAboutWidget.h"  class QLabel;  class QToolButton;  class QComboBox;  namespace Swift { +	class UIEventStream;  	class QtLoginWindow : public QMainWindow, public LoginWindow {  		Q_OBJECT  		public: -			QtLoginWindow(); +			QtLoginWindow(UIEventStream* uiEventStream);  			void morphInto(MainWindow *mainWindow);  			virtual void loggedOut();  			virtual void setMessage(const String& message);  			virtual void addAvailableAccount(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate);  			static QRect defaultPosition(); @@ -33,12 +34,13 @@ namespace Swift {  			void geometryChanged();  		private slots:  			void loginClicked();  			void handleCertficateChecked(bool);  			void handleQuit(); +			void handleShowXMLConsole();  			void handleAbout();  			void bringToFront();  			void handleUsernameTextChanged();  			void resizeEvent(QResizeEvent* event);  			void moveEvent(QMoveEvent* event); @@ -54,11 +56,13 @@ namespace Swift {  			QStackedWidget* stack_;  			QLabel* message_;  			QString certificateFile_;  			QToolButton* certificateButton_;  			QMenuBar* menuBar_;  			QMenu* swiftMenu_; +			QMenu* toolsMenu_; +			UIEventStream* uiEventStream_;  			QPointer<QtAboutWidget> aboutDialog_;  	};  }  #endif diff --git a/Swift/QtUI/QtLoginWindowFactory.cpp b/Swift/QtUI/QtLoginWindowFactory.cpp index c395c57..0453d0f 100644 --- a/Swift/QtUI/QtLoginWindowFactory.cpp +++ b/Swift/QtUI/QtLoginWindowFactory.cpp @@ -8,14 +8,14 @@ namespace Swift {  QtLoginWindowFactory::QtLoginWindowFactory(QSplitter* splitter, QtSystemTray* systemTray, QtSettingsProvider* settings) : QObject() {  	settings_ = settings;  	splitter_ = splitter;  	systemTray_ = systemTray;  } -LoginWindow* QtLoginWindowFactory::createLoginWindow() { -	window_ = new QtLoginWindow(); +LoginWindow* QtLoginWindowFactory::createLoginWindow(UIEventStream* uiEventStream) { +	window_ = new QtLoginWindow(uiEventStream);  	if (splitter_) {  		splitter_->insertWidget(0, window_);  		return window_;  	}  	connect(systemTray_, SIGNAL(clicked()), window_, SLOT(bringToFront()));  	QVariant loginWindowGeometryVariant = settings_->getQSettings()->value("loginWindowGeometry"); diff --git a/Swift/QtUI/QtLoginWindowFactory.h b/Swift/QtUI/QtLoginWindowFactory.h index dd5bc57..5af8b76 100644 --- a/Swift/QtUI/QtLoginWindowFactory.h +++ b/Swift/QtUI/QtLoginWindowFactory.h @@ -1,23 +1,23 @@  #ifndef SWIFT_QtLoginWindowFactory_H  #define SWIFT_QtLoginWindowFactory_H -#include "Swift/Controllers/LoginWindowFactory.h" +#include "Swift/Controllers/UIInterfaces/LoginWindowFactory.h"  #include "Swift/QtUI/QtSystemTray.h"  #include <QSplitter>  #include "QtSettingsProvider.h"  namespace Swift {  	class QtLoginWindow;  	class QtLoginWindowFactory : public QObject, public LoginWindowFactory {  		Q_OBJECT  		public:  			QtLoginWindowFactory(QSplitter* splitter, QtSystemTray* systemTray, QtSettingsProvider* settings); -			LoginWindow* createLoginWindow(); +			LoginWindow* createLoginWindow(UIEventStream* uiEventStream);  		private slots:  			void handleWindowGeometryChanged();  		private:  			QSplitter* splitter_;  			QtSystemTray* systemTray_;  			QtSettingsProvider* settings_; diff --git a/Swift/QtUI/QtSwift.cpp b/Swift/QtUI/QtSwift.cpp index 2aaa27e..7e204e9 100644 --- a/Swift/QtUI/QtSwift.cpp +++ b/Swift/QtUI/QtSwift.cpp @@ -5,12 +5,13 @@  #include "QtLoginWindow.h"  #include "QtChatTabs.h"  #include "QtMainWindowFactory.h"  #include "Roster/QtTreeWidgetFactory.h"  #include "QtSystemTray.h"  #include "QtSoundPlayer.h" +#include "QtXMLConsoleWidgetFactory.h"  #include <boost/bind.hpp>  #include <QSplitter>  #include "Swiften/Application/Application.h"  #include "Swiften/Application/Platform/PlatformApplication.h"  #include "Swiften/Base/String.h" @@ -29,24 +30,27 @@ QtSwift::QtSwift(bool netbookMode) {  		splitter_ = NULL;  	}  	QCoreApplication::setApplicationName("Swift");  	QCoreApplication::setOrganizationName("Swift");  	QCoreApplication::setOrganizationDomain("swift.im");  	QCoreApplication::setApplicationVersion(buildVersion); + +	tabs_ = new QtChatTabs();  	settings_ = new QtSettingsProvider();  	application_ = new PlatformApplication("Swift");  	treeWidgetFactory_ = new QtTreeWidgetFactory();   	systemTray_ = new QtSystemTray();  	loginWindowFactory_ = new QtLoginWindowFactory(splitter_, systemTray_, settings_); -	chatWindowFactory_ = new QtChatWindowFactory(treeWidgetFactory_, splitter_, settings_); +	chatWindowFactory_ = new QtChatWindowFactory(treeWidgetFactory_, splitter_, settings_, tabs_);  	rosterWindowFactory_ = new QtMainWindowFactory(treeWidgetFactory_); +	xmlConsoleWidgetFactory_ = new QtXMLConsoleWidgetFactory(tabs_);  	soundPlayer_ = new QtSoundPlayer();  	if (splitter_) {  		splitter_->show();  	} -	mainController_ = new MainController(chatWindowFactory_, rosterWindowFactory_, loginWindowFactory_, treeWidgetFactory_, settings_, application_, systemTray_, soundPlayer_); +	mainController_ = new MainController(chatWindowFactory_, rosterWindowFactory_, loginWindowFactory_, treeWidgetFactory_, settings_, application_, systemTray_, soundPlayer_, xmlConsoleWidgetFactory_);  }  QtSwift::~QtSwift() {  	delete chatWindowFactory_;  	delete rosterWindowFactory_;  	delete loginWindowFactory_; @@ -54,9 +58,11 @@ QtSwift::~QtSwift() {  	delete mainController_;  	delete settings_;  	delete application_;  	delete systemTray_;  	delete splitter_;  	delete soundPlayer_; +	delete tabs_; +	delete xmlConsoleWidgetFactory_;  }  } diff --git a/Swift/QtUI/QtSwift.h b/Swift/QtUI/QtSwift.h index 263dc05..ad113d6 100644 --- a/Swift/QtUI/QtSwift.h +++ b/Swift/QtUI/QtSwift.h @@ -14,30 +14,33 @@ namespace Swift {  	class Application;  	class MainController;  	class QtChatWindowFactory;  	class QtMainWindowFactory;  	class QtLoginWindowFactory;  	class QtTreeWidgetFactory; +	class QtXMLConsoleWidgetFactory;  	class QtSystemTray;  	class QtSoundPlayer; -	 +		  	class QtSwift : public QObject {  		Q_OBJECT  		public:  			QtSwift(bool netbookMode);  			~QtSwift();  		private:  			MainController *mainController_;  			QtTreeWidgetFactory *treeWidgetFactory_;  			QtChatWindowFactory *chatWindowFactory_;  			QtMainWindowFactory *rosterWindowFactory_;  			QtLoginWindowFactory *loginWindowFactory_; +			QtXMLConsoleWidgetFactory* xmlConsoleWidgetFactory_;  			QtEventLoop clientMainThreadCaller_;  			QtSettingsProvider *settings_;  			QtSystemTray* systemTray_;  			QSplitter* splitter_;  			QtSoundPlayer* soundPlayer_; +			QtChatTabs* tabs_;  			Application* application_;  	};  }  #endif diff --git a/Swift/QtUI/QtXMLConsole.cpp b/Swift/QtUI/QtXMLConsole.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Swift/QtUI/QtXMLConsole.cpp diff --git a/Swift/QtUI/QtXMLConsole.h b/Swift/QtUI/QtXMLConsole.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Swift/QtUI/QtXMLConsole.h diff --git a/Swift/QtUI/QtXMLConsoleWidget.cpp b/Swift/QtUI/QtXMLConsoleWidget.cpp new file mode 100644 index 0000000..d2ebb06 --- /dev/null +++ b/Swift/QtUI/QtXMLConsoleWidget.cpp @@ -0,0 +1,7 @@ +#include "QtXMLConsoleWidget.h" + +namespace Swift { +QtXMLConsoleWidget::QtXMLConsoleWidget() { + +} +} diff --git a/Swift/QtUI/QtXMLConsoleWidget.h b/Swift/QtUI/QtXMLConsoleWidget.h new file mode 100644 index 0000000..f545e18 --- /dev/null +++ b/Swift/QtUI/QtXMLConsoleWidget.h @@ -0,0 +1,12 @@ +#pragma once + +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidget.h" +#include "QtTabbable.h" + +namespace Swift { +	class QtXMLConsoleWidget : public QtTabbable, public XMLConsoleWidget { +		Q_OBJECT +		public: +			QtXMLConsoleWidget(); +	}; +} diff --git a/Swift/QtUI/QtXMLConsoleWidgetFactory.cpp b/Swift/QtUI/QtXMLConsoleWidgetFactory.cpp new file mode 100644 index 0000000..9e32b0a --- /dev/null +++ b/Swift/QtUI/QtXMLConsoleWidgetFactory.cpp @@ -0,0 +1,22 @@ +#include "QtXMLConsoleWidgetFactory.h" + +#include "QtXMLConsoleWidget.h" +#include "QtChatTabs.h" + +namespace Swift { + +QtXMLConsoleWidgetFactory::QtXMLConsoleWidgetFactory(QtChatTabs* tabs) { +	tabs_ = tabs; +} + +XMLConsoleWidget* QtXMLConsoleWidgetFactory::createXMLConsoleWidget() { +	QtXMLConsoleWidget* widget = new QtXMLConsoleWidget(); +	tabs_->addTab(widget); +	if (!tabs_->isVisible()) { +		tabs_->show(); +	} +	widget->show(); +	return widget; +} + +} diff --git a/Swift/QtUI/QtXMLConsoleWidgetFactory.h b/Swift/QtUI/QtXMLConsoleWidgetFactory.h new file mode 100644 index 0000000..5158949 --- /dev/null +++ b/Swift/QtUI/QtXMLConsoleWidgetFactory.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h" + +#include "QtXMLConsoleWidget.h" + +namespace Swift { +	class QtChatTabs; +	class QtXMLConsoleWidgetFactory : public XMLConsoleWidgetFactory { +		public: +			QtXMLConsoleWidgetFactory(QtChatTabs* tabs); +			XMLConsoleWidget* createXMLConsoleWidget(); +		private: +			QtChatTabs* tabs_; +	}; +} diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript index 42cf07a..b70832a 100644 --- a/Swift/QtUI/SConscript +++ b/Swift/QtUI/SConscript @@ -65,12 +65,14 @@ sources = [  		"QtChatView.cpp",  		"QtChatTabs.cpp",  		"QtSoundPlayer.cpp",  		"QtSystemTray.cpp",  		"QtTabbable.cpp",  		"QtTextEdit.cpp", +		"QtXMLConsoleWidgetFactory.cpp", +		"QtXMLConsoleWidget.cpp",  		"ChatSnippet.cpp",  		"MessageSnippet.cpp",  		"SystemMessageSnippet.cpp",  		"Roster/RosterModel.cpp",  		"Roster/QtTreeWidget.cpp",  		"Roster/QtTreeWidgetItem.cpp", | 
 Swift
 Swift