diff options
-rw-r--r-- | Swift/Controllers/MainController.cpp | 1 | ||||
-rw-r--r-- | Swift/QtUI/QtLoginWindow.cpp | 42 | ||||
-rw-r--r-- | Swift/QtUI/QtLoginWindow.h | 15 |
3 files changed, 45 insertions, 13 deletions
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index 15ca5f4..1de4011 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -200,6 +200,7 @@ void MainController::handleLoginRequest(const String &username, const String &pa profileSettings->storeString("jid", username); profileSettings->storeString("certificate", certificateFile); profileSettings->storeString("pass", remember ? password : ""); + loginWindow_->addAvailableAccount(profileSettings->getStringSetting("jid"), profileSettings->getStringSetting("pass"), profileSettings->getStringSetting("certificate")); delete profileSettings; resetClient(); diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp index d25f732..e9e135c 100644 --- a/Swift/QtUI/QtLoginWindow.cpp +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -6,6 +6,7 @@ #include <QApplication> #include <QBoxLayout> +#include <QComboBox> #include <QFileDialog> #include <QStatusBar> #include <QToolButton> @@ -38,7 +39,8 @@ QtLoginWindow::QtLoginWindow() : QMainWindow() { layout->addWidget(logo); layout->addStretch(); - username_ = new QLineEdit(this); + username_ = new QComboBox(this); + username_->setEditable(true); layout->addWidget(username_); QWidget* w = new QWidget(this); @@ -51,8 +53,8 @@ QtLoginWindow::QtLoginWindow() : QMainWindow() { password_ = new QLineEdit(this); password_->setEchoMode(QLineEdit::Password); connect(password_, SIGNAL(returnPressed()), this, SLOT(loginClicked())); - connect(username_, SIGNAL(returnPressed()), password_, SLOT(setFocus())); - connect(username_, SIGNAL(returnPressed()), password_, SLOT(selectAll())); + connect(username_->lineEdit(), SIGNAL(returnPressed()), password_, SLOT(setFocus())); + connect(username_, SIGNAL(editTextChanged(const QString&)), this, SLOT(handleUsernameTextChanged())); credentialsLayout->addWidget(password_); certificateButton_ = new QToolButton(this); @@ -100,13 +102,37 @@ QtLoginWindow::QtLoginWindow() : QMainWindow() { } void QtLoginWindow::addAvailableAccount(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate) { - username_->setText(P2QSTRING(defaultJID)); - password_->setText(P2QSTRING(defaultPassword)); - certificateFile_ = P2QSTRING(defaultCertificate); + QString username = P2QSTRING(defaultJID); + int index = -1; + for (int i = 0; i < usernames_.count(); i++) { + if (username_->currentText() == usernames_[i]) { + index = i; + } + } + if (index == -1) { + usernames_.append(username); + passwords_.append(P2QSTRING(defaultPassword)); + certificateFiles_.append(P2QSTRING(defaultCertificate)); + username_->addItem(username); + } else { + usernames_[index] = username; + passwords_[index] = P2QSTRING(defaultPassword); + certificateFiles_[index] = P2QSTRING(defaultCertificate); + } +} + +void QtLoginWindow::handleUsernameTextChanged() { + QString username = username_->currentText(); + for (int i = 0; i < usernames_.count(); i++) { + if (username_->currentText() == usernames_[i]) { + certificateFile_ == certificateFiles_[i]; + password_->setText(passwords_[i]); + } + } if (!certificateFile_.isEmpty()) { certificateButton_->setChecked(true); } - remember_->setChecked(defaultPassword != ""); + remember_->setChecked(password_->text() != ""); } void QtLoginWindow::loggedOut() { @@ -121,7 +147,7 @@ void QtLoginWindow::loggedOut() { void QtLoginWindow::loginClicked() { setEnabled(false); - onLoginRequest(Q2PSTRING(username_->text()), Q2PSTRING(password_->text()), Q2PSTRING(certificateFile_), remember_->isChecked()); + onLoginRequest(Q2PSTRING(username_->currentText()), Q2PSTRING(password_->text()), Q2PSTRING(certificateFile_), remember_->isChecked()); } void QtLoginWindow::handleCertficateChecked(bool checked) { diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h index a4ec606..ea40c71 100644 --- a/Swift/QtUI/QtLoginWindow.h +++ b/Swift/QtUI/QtLoginWindow.h @@ -15,6 +15,7 @@ class QLabel; class QToolButton; +class QComboBox; namespace Swift { class QtLoginWindow : public QMainWindow, public LoginWindow { @@ -32,14 +33,18 @@ namespace Swift { void handleQuit(); void handleAbout(); void bringToFront(); + void handleUsernameTextChanged(); private: void setInitialMenus(); - QLineEdit *username_; - QLineEdit *password_; - QPushButton *loginButton_; - QCheckBox *remember_; - QStackedWidget *stack_; + QStringList usernames_; + QStringList passwords_; + QStringList certificateFiles_; + QComboBox* username_; + QLineEdit* password_; + QPushButton* loginButton_; + QCheckBox* remember_; + QStackedWidget* stack_; QLabel* message_; QString certificateFile_; QToolButton* certificateButton_; |