diff options
Diffstat (limited to 'Swift/QtUI/QtLoginWindow.cpp')
-rw-r--r-- | Swift/QtUI/QtLoginWindow.cpp | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp new file mode 100644 index 0000000..a05d3bf --- /dev/null +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -0,0 +1,131 @@ +#include "QtLoginWindow.h" +#include "QtSwiftUtil.h" +#include "QtMainWindow.h" + +#include <QBoxLayout> +#include <QFileDialog> +#include <QStatusBar> +#include <QToolButton> +#include <QLabel> +#include <QMenuBar> + +#include <cassert> + +namespace Swift{ + +QtLoginWindow::QtLoginWindow(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate) : QMainWindow() { + setWindowTitle("Swift"); + resize(200, 500); + setContentsMargins(0,0,0,0); + QWidget *centralWidget = new QWidget(this); + setCentralWidget(centralWidget); + QBoxLayout *topLayout = new QBoxLayout(QBoxLayout::TopToBottom, centralWidget); + stack_ = new QStackedWidget(centralWidget); + topLayout->addWidget(stack_); + topLayout->setMargin(5); + QWidget *wrapperWidget = new QWidget(this); + wrapperWidget->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); + QBoxLayout *layout = new QBoxLayout(QBoxLayout::TopToBottom, wrapperWidget); + layout->addStretch(); + + QLabel* logo = new QLabel(this); + logo->setPixmap(QPixmap(":/logo-shaded-text.256.png")); + logo->setScaledContents(true); + logo->setFixedSize(192,192); + layout->addWidget(logo); + layout->addStretch(); + + username_ = new QLineEdit(this); + layout->addWidget(username_); + + QWidget* w = new QWidget(this); + w->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); + layout->addWidget(w); + + QHBoxLayout* credentialsLayout = new QHBoxLayout(w); + credentialsLayout->setMargin(0); + credentialsLayout->setSpacing(3); + password_ = new QLineEdit(this); + password_->setEchoMode(QLineEdit::Password); + credentialsLayout->addWidget(password_); + + certificateButton_ = new QToolButton(this); + certificateButton_->setCheckable(true); + certificateButton_->setIcon(QIcon(":/icons/certificate.png")); + certificateFile_ = P2QSTRING(defaultCertificate); + if (!certificateFile_.isEmpty()) { + certificateButton_->setChecked(true); + } + credentialsLayout->addWidget(certificateButton_); + connect(certificateButton_, SIGNAL(clicked(bool)), SLOT(handleCertficateChecked(bool))); + + loginButton_ = new QPushButton(this); + loginButton_->setText(tr("Connect")); + loginButton_->setAutoDefault(true); + loginButton_->setDefault(true); + layout->addWidget(loginButton_); + + username_->setText(P2QSTRING(defaultJID)); + password_->setText(P2QSTRING(defaultPassword)); + + message_ = new QLabel(this); + message_->setTextFormat(Qt::RichText); + message_->setWordWrap(true); + layout->addWidget(message_); + + layout->addStretch(); + remember_ = new QCheckBox(tr("Remember Password?"), this); + remember_->setChecked(defaultPassword != ""); + layout->addWidget(remember_); + connect(loginButton_, SIGNAL(clicked()), SLOT(loginClicked())); + stack_->addWidget(wrapperWidget); + this->show(); +} + +void QtLoginWindow::loggedOut() { + if (stack_->count() > 1) { + QWidget* current = stack_->currentWidget(); + stack_->setCurrentIndex(0); + stack_->removeWidget(current); + } + setEnabled(true); +} + +void QtLoginWindow::loginClicked() { + setEnabled(false); + onLoginRequest(Q2PSTRING(username_->text()), Q2PSTRING(password_->text()), Q2PSTRING(certificateFile_), remember_->isChecked()); +} + +void QtLoginWindow::handleCertficateChecked(bool checked) { + if (checked) { + certificateFile_ = QFileDialog::getOpenFileName(this, "Select an authentication certificate", QString(), QString("*.cert")); + if (certificateFile_.isEmpty()) { + certificateButton_->setChecked(false); + } + } + else { + certificateFile_ = ""; + } +} + +void QtLoginWindow::morphInto(MainWindow *mainWindow) { + QtMainWindow *qtMainWindow = dynamic_cast<QtMainWindow*>(mainWindow); + assert(qtMainWindow); + stack_->addWidget(qtMainWindow); + stack_->setCurrentWidget(qtMainWindow); + setEnabled(true); + foreach (QMenu* menu, qtMainWindow->getMenus()) { + menuBar()->addMenu(menu); + } +} + +void QtLoginWindow::setMessage(const String& message) { + if (!message.isEmpty()) { + message_->setText("<center><font color=\"red\">" + P2QSTRING(message) + "</font></center>"); + } + else { + message_->setText(""); + } +} + +} |