diff options
Diffstat (limited to 'Swift/QtUI/QtSingleWindow.cpp')
-rw-r--r-- | Swift/QtUI/QtSingleWindow.cpp | 71 |
1 files changed, 50 insertions, 21 deletions
diff --git a/Swift/QtUI/QtSingleWindow.cpp b/Swift/QtUI/QtSingleWindow.cpp index d53f247..6881c4f 100644 --- a/Swift/QtUI/QtSingleWindow.cpp +++ b/Swift/QtUI/QtSingleWindow.cpp @@ -8,2 +8,5 @@ +#include <QPushButton> +#include <QVBoxLayout> + #include <Swiften/Base/Platform.h> @@ -11,2 +14,3 @@ #include <Swift/QtUI/QtChatTabs.h> +#include <Swift/QtUI/QtLoginWindow.h> #include <Swift/QtUI/QtSettingsProvider.h> @@ -26,2 +30,21 @@ QtSingleWindow::QtSingleWindow(QtSettingsProvider* settings) : QSplitter() { setChildrenCollapsible(false); + + auto left = new QWidget(this); + list_ = new QListWidget(left); + auto addButton = new QPushButton("+", left); + QVBoxLayout* leftLayout = new QVBoxLayout(); + leftLayout->addWidget(list_); + leftLayout->addWidget(addButton); + left->setLayout(leftLayout); + QSplitter::addWidget(left); + loginWindows_ = new QStackedWidget(this); + QSplitter::addWidget(loginWindows_); + tabs_ = new QStackedWidget(this); + QSplitter::addWidget(tabs_); + restoreSplitters(); + setStretchFactor(0, 0); + setStretchFactor(1, 0); + setStretchFactor(2, 1); + connect(list_, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(handleListItemClicked(QListWidgetItem*))); + connect(addButton, SIGNAL(clicked()), this, SIGNAL(wantsToAddAccount())); #ifdef SWIFTEN_PLATFORM_MACOSX @@ -35,10 +58,2 @@ QtSingleWindow::~QtSingleWindow() { -void QtSingleWindow::addWidget(QWidget* widget) { - QtChatTabs* tabs = dynamic_cast<QtChatTabs*>(widget); - if (tabs) { - connect(tabs, SIGNAL(onTitleChanged(const QString&)), this, SLOT(handleTabsTitleChanged(const QString&))); - } - QSplitter::addWidget(widget); -} - void QtSingleWindow::handleTabsTitleChanged(const QString& title) { @@ -57,15 +72,10 @@ void QtSingleWindow::handleSplitterMoved() { void QtSingleWindow::restoreSplitters() { - QList<QVariant> variantValues = settings_->getQSettings()->value(SINGLE_WINDOW_SPLITS).toList(); - QList<int> intValues; - for (auto&& value : variantValues) { - intValues.append(value.toInt()); - } - setSizes(intValues); -} - -void QtSingleWindow::insertAtFront(QWidget* widget) { - insertWidget(0, widget); auto splitsVariant = settings_->getQSettings()->value(SINGLE_WINDOW_SPLITS); if (splitsVariant.isValid()) { - restoreSplitters(); + auto variantValues = splitsVariant.toList(); + QList<int> intValues; + for (auto&& value : variantValues) { + intValues.append(value.toInt()); + } + setSizes(intValues); } @@ -74,4 +84,2 @@ void QtSingleWindow::insertAtFront(QWidget* widget) { } - setStretchFactor(0, 0); - setStretchFactor(1, 1); } @@ -91,2 +99,23 @@ void QtSingleWindow::moveEvent(QMoveEvent*) { +void QtSingleWindow::addAccount(QtLoginWindow* loginWindow, QtChatTabs* tabs) { + if (!loginWindows_->count()) { + connect(tabs, SIGNAL(onTitleChanged(const QString&)), this, SLOT(handleTabsTitleChanged(const QString&))); + } + loginWindows_->addWidget(loginWindow); + tabs_->addWidget(tabs); + list_->addItem(QString("Account %1").arg(loginWindows_->count())); +} + +void QtSingleWindow::handleListItemClicked(QListWidgetItem* /*item*/) { + //FIXME: Should use a full model/view and do this properly (and render pretty things ourselves too) + auto currentTabs = tabs_->widget(tabs_->currentIndex()); + disconnect(currentTabs, SIGNAL(onTitleChanged(const QString&)), this, SLOT(handleTabsTitleChanged(const QString&))); + loginWindows_->setCurrentIndex(list_->currentRow()); + tabs_->setCurrentIndex(list_->currentRow()); + currentTabs = tabs_->widget(tabs_->currentIndex()); + connect(currentTabs, SIGNAL(onTitleChanged(const QString&)), this, SLOT(handleTabsTitleChanged(const QString&))); + //TODO change the title of the window. + handleTabsTitleChanged(QString("Swift")); +} + } |