diff options
| author | Kevin Smith <git@kismith.co.uk> | 2009-10-15 20:26:00 (GMT) | 
|---|---|---|
| committer | Kevin Smith <git@kismith.co.uk> | 2009-10-15 20:26:00 (GMT) | 
| commit | 87775c50a1c9a223f554c37e549ea8a2b03c9a89 (patch) | |
| tree | 030ca4b9919f48cadaf1a7822d1f3e8917af119b | |
| parent | 47f27c607a7fb04495d402c6059664250d452a81 (diff) | |
| download | swift-87775c50a1c9a223f554c37e549ea8a2b03c9a89.zip swift-87775c50a1c9a223f554c37e549ea8a2b03c9a89.tar.bz2 | |
Save the geometry of the chat and roster windows.
| -rw-r--r-- | Swift/QtUI/QtChatTabs.cpp | 13 | ||||
| -rw-r--r-- | Swift/QtUI/QtChatTabs.h | 6 | ||||
| -rw-r--r-- | Swift/QtUI/QtChatWindowFactory.cpp | 15 | ||||
| -rw-r--r-- | Swift/QtUI/QtChatWindowFactory.h | 10 | ||||
| -rw-r--r-- | Swift/QtUI/QtLoginWindow.cpp | 35 | ||||
| -rw-r--r-- | Swift/QtUI/QtLoginWindow.h | 7 | ||||
| -rw-r--r-- | Swift/QtUI/QtLoginWindowFactory.cpp | 24 | ||||
| -rw-r--r-- | Swift/QtUI/QtLoginWindowFactory.h | 9 | ||||
| -rw-r--r-- | Swift/QtUI/QtSettingsProvider.cpp | 4 | ||||
| -rw-r--r-- | Swift/QtUI/QtSettingsProvider.h | 1 | ||||
| -rw-r--r-- | Swift/QtUI/QtSwift.cpp | 14 | 
11 files changed, 122 insertions, 16 deletions
| diff --git a/Swift/QtUI/QtChatTabs.cpp b/Swift/QtUI/QtChatTabs.cpp index 00d07c8..2dbeed7 100644 --- a/Swift/QtUI/QtChatTabs.cpp +++ b/Swift/QtUI/QtChatTabs.cpp @@ -1,6 +1,9 @@  #include "QtChatTabs.h" +#include <algorithm> +  #include <QCloseEvent> +#include <QDesktopWidget>  #include <QtGlobal>  #include <QTabWidget>  #include <QLayout> @@ -20,7 +23,7 @@ QtChatTabs::QtChatTabs() : QWidget() {  	layout->setContentsMargins(0, 3, 0, 0);  	layout->addWidget(tabs_);  	setLayout(layout); -	resize(400, 300); +	//resize(400, 300);  }  void QtChatTabs::closeEvent(QCloseEvent* event) { @@ -99,4 +102,12 @@ void QtChatTabs::handleTabTitleUpdated() {  	}  } +void QtChatTabs::resizeEvent(QResizeEvent* event) { +	emit geometryChanged(); +} + +void QtChatTabs::moveEvent(QMoveEvent* event) { +	emit geometryChanged();	 +} +  } diff --git a/Swift/QtUI/QtChatTabs.h b/Swift/QtUI/QtChatTabs.h index 87b8b10..feb8ebc 100644 --- a/Swift/QtUI/QtChatTabs.h +++ b/Swift/QtUI/QtChatTabs.h @@ -2,6 +2,8 @@  #include "QtTabbable.h"  #include <QWidget> +#include <QRect> +  class QTabWidget;  namespace Swift { @@ -11,9 +13,13 @@ namespace Swift {  			QtChatTabs();  			void addTab(QtTabbable* tab);  			void minimise(); +		signals: +			void geometryChanged();  		protected slots:  			void closeEvent(QCloseEvent* event); +			void resizeEvent(QResizeEvent* event); +			void moveEvent(QMoveEvent* event);  		private slots:  			void handleTabClosing(); diff --git a/Swift/QtUI/QtChatWindowFactory.cpp b/Swift/QtUI/QtChatWindowFactory.cpp index b3efeac..c0f1e09 100644 --- a/Swift/QtUI/QtChatWindowFactory.cpp +++ b/Swift/QtUI/QtChatWindowFactory.cpp @@ -1,5 +1,7 @@  #include "QtChatWindowFactory.h" +#include <QDesktopWidget> +  #include "QtChatTabs.h"  #include "QtChatWindow.h"  #include "QtSwiftUtil.h" @@ -7,10 +9,17 @@  namespace Swift { -QtChatWindowFactory::QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter) : treeWidgetFactory_(treeWidgetFactory) { +QtChatWindowFactory::QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings) : treeWidgetFactory_(treeWidgetFactory) { +	settings_ = settings;  	tabs_ = new QtChatTabs();  	if (splitter) {  		splitter->addWidget(tabs_); +	} else { +		QVariant chatTabsGeometryVariant = settings_->getQSettings()->value("chatTabsGeometry"); +		if (chatTabsGeometryVariant.isValid()) { +			tabs_->restoreGeometry(chatTabsGeometryVariant.toByteArray()); +		} +		connect(tabs_, SIGNAL(geometryChanged()), this, SLOT(handleWindowGeometryChanged()));  	}  } @@ -25,4 +34,8 @@ ChatWindow* QtChatWindowFactory::createChatWindow(const JID &contact) {  	return chatWindow;  } +void QtChatWindowFactory::handleWindowGeometryChanged() { +	settings_->getQSettings()->setValue("chatTabsGeometry", tabs_->saveGeometry()); +} +  } diff --git a/Swift/QtUI/QtChatWindowFactory.h b/Swift/QtUI/QtChatWindowFactory.h index 1205164..4a5a7fb 100644 --- a/Swift/QtUI/QtChatWindowFactory.h +++ b/Swift/QtUI/QtChatWindowFactory.h @@ -3,17 +3,23 @@  #include "Swift/Controllers/ChatWindowFactory.h"  #include "Swiften/JID/JID.h" +#include "QtSettingsProvider.h" +#include <QObject>  #include <QSplitter>  namespace Swift {  	class QtTreeWidgetFactory;  	class QtChatTabs; -	class QtChatWindowFactory : public ChatWindowFactory { +	class QtChatWindowFactory : public QObject, public ChatWindowFactory { +		Q_OBJECT  		public: -			QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter); +			QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings);  			ChatWindow* createChatWindow(const JID &contact); +		private slots: +			void handleWindowGeometryChanged();  		private:  			QtTreeWidgetFactory* treeWidgetFactory_; +			QtSettingsProvider* settings_;  			QtChatTabs* tabs_;  	};  } diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp index 23eece6..e84e316 100644 --- a/Swift/QtUI/QtLoginWindow.cpp +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -4,9 +4,12 @@  #include "QtSwiftUtil.h"  #include "QtMainWindow.h" +#include <algorithm> +  #include <QApplication>  #include <QBoxLayout>  #include <QComboBox> +#include <QDesktopWidget>  #include <QFileDialog>  #include <QStatusBar>  #include <QToolButton> @@ -101,6 +104,29 @@ QtLoginWindow::QtLoginWindow() : QMainWindow() {  	this->show();  } +/** + * Move and resize the window, but respect minimum sizes. + * (Like QWidget::setGeometry, only that will truncate the window + *  the setGeometry docs say that it shouldn't do this, but I've just seen it + *  maybe we can remove this method if that's a Qt bug (or I'm misusing it)). + */ +void QtLoginWindow::setGentleGeometry(const QRect& rect) { +	resize(rect.size()); +	move(rect.topLeft()); +} + +QRect QtLoginWindow::defaultPosition() { +	QDesktopWidget desktop; +	int windowWidth = 200; +	int windowHeight = 500; +	QRect screen = desktop.screenGeometry(-1); //appear on default screen +	windowWidth = std::min(windowWidth, screen.width()); +	windowHeight = std::min(windowHeight, screen.height()); +	int left = (screen.width() - windowWidth) / 2; +	int height = (screen.height() - windowHeight) / 2; +	return QRect(left, height, windowWidth, windowHeight); +} +  void QtLoginWindow::addAvailableAccount(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate) {  	QString username = P2QSTRING(defaultJID);  	int index = -1; @@ -216,4 +242,13 @@ void QtLoginWindow::bringToFront() {  	}  } +void QtLoginWindow::resizeEvent(QResizeEvent* event) { +	emit geometryChanged(); +} + +void QtLoginWindow::moveEvent(QMoveEvent* event) { +	emit geometryChanged();	 +} + +  } diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h index ea40c71..5abb10a 100644 --- a/Swift/QtUI/QtLoginWindow.h +++ b/Swift/QtUI/QtLoginWindow.h @@ -27,6 +27,11 @@ namespace Swift {  			virtual void loggedOut();  			virtual void setMessage(const String& message);  			virtual void addAvailableAccount(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate); +			static QRect defaultPosition(); +			void setGentleGeometry(const QRect&); +		signals: +			void geometryChanged(); +  		private slots:  			void loginClicked();  			void handleCertficateChecked(bool); @@ -34,6 +39,8 @@ namespace Swift {  			void handleAbout();  			void bringToFront();  			void handleUsernameTextChanged(); +			void resizeEvent(QResizeEvent* event); +			void moveEvent(QMoveEvent* event);  		private:  			void setInitialMenus(); diff --git a/Swift/QtUI/QtLoginWindowFactory.cpp b/Swift/QtUI/QtLoginWindowFactory.cpp index e351f43..c395c57 100644 --- a/Swift/QtUI/QtLoginWindowFactory.cpp +++ b/Swift/QtUI/QtLoginWindowFactory.cpp @@ -1,19 +1,33 @@  #include "QtLoginWindowFactory.h"  #include "QtLoginWindow.h" +#include <QDesktopWidget> +  namespace Swift { -QtLoginWindowFactory::QtLoginWindowFactory(QSplitter* splitter, QtSystemTray* systemTray) : QObject() { +QtLoginWindowFactory::QtLoginWindowFactory(QSplitter* splitter, QtSystemTray* systemTray, QtSettingsProvider* settings) : QObject() { +	settings_ = settings;  	splitter_ = splitter;  	systemTray_ = systemTray;  }  LoginWindow* QtLoginWindowFactory::createLoginWindow() { -	QtLoginWindow* window = new QtLoginWindow(); +	window_ = new QtLoginWindow();  	if (splitter_) { -		splitter_->insertWidget(0, window); +		splitter_->insertWidget(0, window_); +		return window_; +	} +	connect(systemTray_, SIGNAL(clicked()), window_, SLOT(bringToFront())); +	QVariant loginWindowGeometryVariant = settings_->getQSettings()->value("loginWindowGeometry"); +	if (loginWindowGeometryVariant.isValid()) { +		window_->restoreGeometry(loginWindowGeometryVariant.toByteArray());  	} -	connect(systemTray_, SIGNAL(clicked()), window, SLOT(bringToFront())); -	return window; +	connect(window_, SIGNAL(geometryChanged()), this, SLOT(handleWindowGeometryChanged())); +	return window_;  } + +void QtLoginWindowFactory::handleWindowGeometryChanged() { +	settings_->getQSettings()->setValue("loginWindowGeometry", window_->saveGeometry()); +} +  } diff --git a/Swift/QtUI/QtLoginWindowFactory.h b/Swift/QtUI/QtLoginWindowFactory.h index 0ae8284..dd5bc57 100644 --- a/Swift/QtUI/QtLoginWindowFactory.h +++ b/Swift/QtUI/QtLoginWindowFactory.h @@ -6,15 +6,22 @@  #include <QSplitter> +#include "QtSettingsProvider.h" +  namespace Swift { +	class QtLoginWindow;  	class QtLoginWindowFactory : public QObject, public LoginWindowFactory {  		Q_OBJECT  		public: -			QtLoginWindowFactory(QSplitter* splitter, QtSystemTray* systemTray); +			QtLoginWindowFactory(QSplitter* splitter, QtSystemTray* systemTray, QtSettingsProvider* settings);  			LoginWindow* createLoginWindow(); +		private slots: +			void handleWindowGeometryChanged();  		private:  			QSplitter* splitter_;  			QtSystemTray* systemTray_; +			QtSettingsProvider* settings_; +			QtLoginWindow* window_;  	};  } diff --git a/Swift/QtUI/QtSettingsProvider.cpp b/Swift/QtUI/QtSettingsProvider.cpp index 7012288..767e41b 100644 --- a/Swift/QtUI/QtSettingsProvider.cpp +++ b/Swift/QtUI/QtSettingsProvider.cpp @@ -45,5 +45,9 @@ void QtSettingsProvider::createProfile(const String& profile) {  	settings_.setValue("profileList", stringList);  } +QSettings* QtSettingsProvider::getQSettings() { +	return &settings_; +} +  } diff --git a/Swift/QtUI/QtSettingsProvider.h b/Swift/QtUI/QtSettingsProvider.h index a8d5bcc..359e537 100644 --- a/Swift/QtUI/QtSettingsProvider.h +++ b/Swift/QtUI/QtSettingsProvider.h @@ -17,6 +17,7 @@ class QtSettingsProvider : public SettingsProvider {  		virtual void storeBool(const String &settingPath, bool settingValue);  		virtual std::vector<String> getAvailableProfiles();  		virtual void createProfile(const String& profile); +		QSettings* getQSettings();  	private:  		QSettings settings_;  }; diff --git a/Swift/QtUI/QtSwift.cpp b/Swift/QtUI/QtSwift.cpp index a949b7d..656e8ce 100644 --- a/Swift/QtUI/QtSwift.cpp +++ b/Swift/QtUI/QtSwift.cpp @@ -2,6 +2,8 @@  #include "QtLoginWindowFactory.h"  #include "QtChatWindowFactory.h" +#include "QtLoginWindow.h" +#include "QtChatTabs.h"  #include "QtMainWindowFactory.h"  #include "Roster/QtTreeWidgetFactory.h"  #include "QtSystemTray.h" @@ -27,18 +29,18 @@ QtSwift::QtSwift(bool netbookMode) {  	} else {  		splitter_ = NULL;  	} -	treeWidgetFactory_ = new QtTreeWidgetFactory();  -	systemTray_ = new QtSystemTray(); -	loginWindowFactory_ = new QtLoginWindowFactory(splitter_, systemTray_); -	chatWindowFactory_ = new QtChatWindowFactory(treeWidgetFactory_, splitter_); -	rosterWindowFactory_ = new QtMainWindowFactory(treeWidgetFactory_); -	soundPlayer_ = new QtSoundPlayer();  	QCoreApplication::setApplicationName("Swift");  	QCoreApplication::setOrganizationName("Swift");  	QCoreApplication::setOrganizationDomain("swift.im");  	QCoreApplication::setApplicationVersion(buildVersion);  	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_); +	rosterWindowFactory_ = new QtMainWindowFactory(treeWidgetFactory_); +	soundPlayer_ = new QtSoundPlayer();  	if (splitter_) {  		splitter_->show();  	} | 
 Swift
 Swift