From 4674aad12500ddf94dc36cb2b479bbbd121ff088 Mon Sep 17 00:00:00 2001 From: Taeyeon Mori Date: Wed, 16 Apr 2014 16:19:12 +0200 Subject: Create a new login dialog --- gui/dialogs/LoginDialog.h | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 gui/dialogs/LoginDialog.h (limited to 'gui/dialogs/LoginDialog.h') diff --git a/gui/dialogs/LoginDialog.h b/gui/dialogs/LoginDialog.h new file mode 100644 index 00000000..e7dbf52b --- /dev/null +++ b/gui/dialogs/LoginDialog.h @@ -0,0 +1,61 @@ +/* Copyright 2014 MultiMC Contributors + * + * Authors: + * Taeyeon Mori + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include + +#include "logic/auth/MojangAccount.h" + +namespace Ui +{ +class LoginDialog; +} + +class LoginDialog : public QDialog +{ + Q_OBJECT + +public: + ~LoginDialog(); + + static MojangAccountPtr newAccount(QWidget *parent, QString message); + +private: + explicit LoginDialog(QWidget *parent = 0); + + void setUserInputsEnabled(bool enable); + +protected +slots: + void accept(); + void reject(); + + void onTaskFailed(QString); + void onTaskSucceeded(); + void onTaskStatus(QString); + void onTaskProgress(qint64, qint64); + + void on_userTextBox_textEdited(QString); + void on_passTextBox_textEdited(QString); + +private: + Ui::LoginDialog *ui; + QEventLoop loop; +}; -- cgit From 3ed5b1570bbd7a9b8060ffc5ee5ae7bc63975098 Mon Sep 17 00:00:00 2001 From: Jan Dalheimer Date: Wed, 16 Apr 2014 17:38:26 +0200 Subject: LoginDialog changes --- gui/dialogs/LoginDialog.cpp | 90 ++++++++++++--------------------------------- gui/dialogs/LoginDialog.h | 13 +++---- 2 files changed, 30 insertions(+), 73 deletions(-) (limited to 'gui/dialogs/LoginDialog.h') diff --git a/gui/dialogs/LoginDialog.cpp b/gui/dialogs/LoginDialog.cpp index 5344ead8..483a096d 100644 --- a/gui/dialogs/LoginDialog.cpp +++ b/gui/dialogs/LoginDialog.cpp @@ -29,8 +29,6 @@ LoginDialog::LoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::LoginDia ui->progressBar->setVisible(false); ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); - setAttribute(Qt::WA_ShowModal); - connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); } @@ -43,14 +41,16 @@ LoginDialog::~LoginDialog() // Stage 1: User interaction void LoginDialog::accept() { - setResult(Accepted); - loop.quit(); -} - -void LoginDialog::reject() -{ - setResult(Rejected); - loop.quit(); + setUserInputsEnabled(false); + ui->progressBar->setVisible(true); + + m_account = MojangAccount::createFromUsername(ui->userTextBox->text()); + auto task = m_account->login(nullptr, ui->passTextBox->text()); + connect(task.get(), &Task::failed, this, &LoginDialog::onTaskFailed); + connect(task.get(), &Task::succeeded, this, &LoginDialog::onTaskSucceeded); + connect(task.get(), &Task::status, this, &LoginDialog::onTaskStatus); + connect(task.get(), &Task::progress, this, &LoginDialog::onTaskProgress); + task->start(); } void LoginDialog::setUserInputsEnabled(bool enable) @@ -61,92 +61,50 @@ void LoginDialog::setUserInputsEnabled(bool enable) } // Enable the OK button only when both textboxes contain something. -void LoginDialog::on_userTextBox_textEdited(QString newText) +void LoginDialog::on_userTextBox_textEdited(const QString &newText) { ui->buttonBox->button(QDialogButtonBox::Ok) ->setEnabled(!newText.isEmpty() && !ui->passTextBox->text().isEmpty()); } - -void LoginDialog::on_passTextBox_textEdited(QString newText) +void LoginDialog::on_passTextBox_textEdited(const QString &newText) { ui->buttonBox->button(QDialogButtonBox::Ok) ->setEnabled(!newText.isEmpty() && !ui->userTextBox->text().isEmpty()); } -// Stage 2: Task interaction -void LoginDialog::onTaskFailed(QString failure) +void LoginDialog::onTaskFailed(const QString &reason) { // Set message - ui->label->setText("" + failure + ""); + ui->label->setText("" + reason + ""); - // Return - setResult(Rejected); - loop.quit(); + setUserInputsEnabled(true); + ui->progressBar->setVisible(false); } void LoginDialog::onTaskSucceeded() { - setResult(Accepted); - loop.quit(); + QDialog::accept(); } -void LoginDialog::onTaskStatus(QString status) +void LoginDialog::onTaskStatus(const QString &status) { ui->label->setText(status); } -void LoginDialog::onTaskProgress(qint64 current, qint64 total) +void LoginDialog::onTaskProgress(qint64 value, qint64 max) { - ui->progressBar->setMaximum(total); - ui->progressBar->setValue(current); + ui->progressBar->setMaximum(max); + ui->progressBar->setValue(value); } // Public interface MojangAccountPtr LoginDialog::newAccount(QWidget *parent, QString msg) { LoginDialog dlg(parent); - dlg.show(); dlg.ui->label->setText(msg); - - while (1) + if (dlg.exec() == QDialog::Accepted) { - // Show dialog - dlg.loop.exec(); - - // Close if cancel was clicked - if (dlg.result() == Rejected) - return nullptr; - - // Read values - QString username(dlg.ui->userTextBox->text()); - QString password(dlg.ui->passTextBox->text()); - - // disable inputs - dlg.setUserInputsEnabled(false); - dlg.ui->progressBar->setVisible(true); - - // Start login process - MojangAccountPtr account = MojangAccount::createFromUsername(username); - auto task = account->login(nullptr, password); - - // show progess - connect(task.get(), &ProgressProvider::failed, &dlg, &LoginDialog::onTaskFailed); - connect(task.get(), &ProgressProvider::succeeded, &dlg, &LoginDialog::onTaskSucceeded); - connect(task.get(), &ProgressProvider::status, &dlg, &LoginDialog::onTaskStatus); - connect(task.get(), &ProgressProvider::progress, &dlg, &LoginDialog::onTaskProgress); - - // Start task - if (!task->isRunning()) - task->start(); - if (task->isRunning()) - dlg.loop.exec(); - - // Be done - if (dlg.result() == Accepted) - return account; - - // Otherwise, re-enable user inputs and begin anew - dlg.setUserInputsEnabled(true); - dlg.ui->progressBar->setVisible(false); + return dlg.m_account; } + return 0; } diff --git a/gui/dialogs/LoginDialog.h b/gui/dialogs/LoginDialog.h index e7dbf52b..2fa863dd 100644 --- a/gui/dialogs/LoginDialog.h +++ b/gui/dialogs/LoginDialog.h @@ -45,17 +45,16 @@ private: protected slots: void accept(); - void reject(); - void onTaskFailed(QString); + void onTaskFailed(const QString &reason); void onTaskSucceeded(); - void onTaskStatus(QString); - void onTaskProgress(qint64, qint64); + void onTaskStatus(const QString &status); + void onTaskProgress(qint64 value, qint64 max); - void on_userTextBox_textEdited(QString); - void on_passTextBox_textEdited(QString); + void on_userTextBox_textEdited(const QString &newText); + void on_passTextBox_textEdited(const QString &newText); private: Ui::LoginDialog *ui; - QEventLoop loop; + MojangAccountPtr m_account; }; -- cgit From f67ca674c4157737196d05fb5d1c80006c3cd361 Mon Sep 17 00:00:00 2001 From: Jan Dalheimer Date: Wed, 16 Apr 2014 17:54:07 +0200 Subject: Fix bug --- gui/dialogs/LoginDialog.cpp | 21 +++++++++------------ gui/dialogs/LoginDialog.h | 6 ++---- 2 files changed, 11 insertions(+), 16 deletions(-) (limited to 'gui/dialogs/LoginDialog.h') diff --git a/gui/dialogs/LoginDialog.cpp b/gui/dialogs/LoginDialog.cpp index 483a096d..0e5f17b3 100644 --- a/gui/dialogs/LoginDialog.cpp +++ b/gui/dialogs/LoginDialog.cpp @@ -1,7 +1,4 @@ /* Copyright 2014 MultiMC Contributors - * - * Authors: - * Taeyeon Mori * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,12 +42,12 @@ void LoginDialog::accept() ui->progressBar->setVisible(true); m_account = MojangAccount::createFromUsername(ui->userTextBox->text()); - auto task = m_account->login(nullptr, ui->passTextBox->text()); - connect(task.get(), &Task::failed, this, &LoginDialog::onTaskFailed); - connect(task.get(), &Task::succeeded, this, &LoginDialog::onTaskSucceeded); - connect(task.get(), &Task::status, this, &LoginDialog::onTaskStatus); - connect(task.get(), &Task::progress, this, &LoginDialog::onTaskProgress); - task->start(); + m_loginTask = m_account->login(nullptr, ui->passTextBox->text()); + connect(m_loginTask.get(), &ProgressProvider::failed, this, &LoginDialog::onTaskFailed); + connect(m_loginTask.get(), &ProgressProvider::succeeded, this, &LoginDialog::onTaskSucceeded); + connect(m_loginTask.get(), &ProgressProvider::status, this, &LoginDialog::onTaskStatus); + connect(m_loginTask.get(), &ProgressProvider::progress, this, &LoginDialog::onTaskProgress); + m_loginTask->start(); } void LoginDialog::setUserInputsEnabled(bool enable) @@ -91,10 +88,10 @@ void LoginDialog::onTaskStatus(const QString &status) ui->label->setText(status); } -void LoginDialog::onTaskProgress(qint64 value, qint64 max) +void LoginDialog::onTaskProgress(qint64 current, qint64 total) { - ui->progressBar->setMaximum(max); - ui->progressBar->setValue(value); + ui->progressBar->setMaximum(total); + ui->progressBar->setValue(current); } // Public interface diff --git a/gui/dialogs/LoginDialog.h b/gui/dialogs/LoginDialog.h index 2fa863dd..560ed5ec 100644 --- a/gui/dialogs/LoginDialog.h +++ b/gui/dialogs/LoginDialog.h @@ -1,7 +1,4 @@ /* Copyright 2014 MultiMC Contributors - * - * Authors: - * Taeyeon Mori * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -49,7 +46,7 @@ slots: void onTaskFailed(const QString &reason); void onTaskSucceeded(); void onTaskStatus(const QString &status); - void onTaskProgress(qint64 value, qint64 max); + void onTaskProgress(qint64 current, qint64 total); void on_userTextBox_textEdited(const QString &newText); void on_passTextBox_textEdited(const QString &newText); @@ -57,4 +54,5 @@ slots: private: Ui::LoginDialog *ui; MojangAccountPtr m_account; + std::shared_ptr m_loginTask; }; -- cgit