From 89d28d3b69ea655052f51422855610153f558852 Mon Sep 17 00:00:00 2001 From: kirillpt Date: Mon, 23 Nov 2020 03:18:11 +0300 Subject: [PATCH 01/12] fixed issue 292, but removed wordWrap from error_label_, because hint looks bad with it --- src/LoginPage.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 9a920d1d..348cfa29 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -95,8 +95,6 @@ LoginPage::LoginPage(QWidget *parent) "address there, if your server doesn't support .well-known lookup.\nExample: " "@user:server.my\nIf Nheko fails to discover your homeserver, it will show you a " "field to enter the server manually.")); - matrixid_input_->setValidator( - new QRegularExpressionValidator(QRegularExpression("@.+?:.{3,}"), this)); spinner_ = new LoadingIndicator(this); spinner_->setFixedHeight(40); @@ -153,7 +151,6 @@ LoginPage::LoginPage(QWidget *parent) error_label_ = new QLabel(this); error_label_->setFont(font); - error_label_->setWordWrap(true); top_layout_->addLayout(top_bar_layout_); top_layout_->addStretch(1); @@ -186,6 +183,15 @@ LoginPage::loginError(const QString &msg) error_label_->setText(msg); } +bool +LoginPage::isMatrixIdValid() +{ + QRegularExpressionValidator v(QRegularExpression("@.+?:.{3,}"), this); + QString s = matrixid_input_->text(); + int pos = 0; + return v.validate(s, pos); +} + void LoginPage::onMatrixIdEntered() { @@ -193,6 +199,10 @@ LoginPage::onMatrixIdEntered() User user; + if (isMatrixIdValid() == 0) { + return loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + } + try { user = parse(matrixid_input_->text().toStdString()); } catch (const std::exception &e) { @@ -344,6 +354,9 @@ LoginPage::onLoginButtonClicked() error_label_->setText(""); User user; + if (isMatrixIdValid() == 0) { + return loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + } try { user = parse(matrixid_input_->text().toStdString()); From ec34af3d858d98e66a860ade8d5915c1e98fa558 Mon Sep 17 00:00:00 2001 From: kirillpt Date: Mon, 23 Nov 2020 03:20:37 +0300 Subject: [PATCH 02/12] make lint --- src/LoginPage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 348cfa29..719ba95c 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -188,7 +188,7 @@ LoginPage::isMatrixIdValid() { QRegularExpressionValidator v(QRegularExpression("@.+?:.{3,}"), this); QString s = matrixid_input_->text(); - int pos = 0; + int pos = 0; return v.validate(s, pos); } From 8a2cfddf7e4fa531210dfb556656b116dc35746c Mon Sep 17 00:00:00 2001 From: kirillpt Date: Mon, 23 Nov 2020 09:44:02 +0300 Subject: [PATCH 03/12] Added QLabel for matrixIdError output and added new function which output input id error, improve code like suggest @deepbluev7, return for error_label setWordWrap --- src/LoginPage.cpp | 33 +++++++++++++++++++++++++++------ src/LoginPage.h | 3 +++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 719ba95c..bcf15ad4 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -108,6 +108,14 @@ LoginPage::LoginPage(QWidget *parent) matrixidLayout_ = new QHBoxLayout(); matrixidLayout_->addWidget(matrixid_input_, 0, Qt::AlignVCenter); + QFont font; + + error_matrixid_label_ = new QLabel(this); + error_matrixid_label_->setFont(font); + + matrixid_error_layout_ = new QVBoxLayout(); + matrixid_error_layout_->addWidget(error_matrixid_label_, 0, Qt::AlignHCenter); + password_input_ = new TextField(this); password_input_->setLabel(tr("Password")); password_input_->setEchoMode(QLineEdit::Password); @@ -129,6 +137,7 @@ LoginPage::LoginPage(QWidget *parent) serverLayout_ = new QHBoxLayout(); serverLayout_->addWidget(serverInput_, 0, Qt::AlignVCenter); + form_layout_->addLayout(matrixid_error_layout_); form_layout_->addLayout(matrixidLayout_); form_layout_->addWidget(password_input_); form_layout_->addWidget(deviceName_, Qt::AlignHCenter); @@ -147,10 +156,9 @@ LoginPage::LoginPage(QWidget *parent) button_layout_->addWidget(login_button_); button_layout_->addStretch(1); - QFont font; - error_label_ = new QLabel(this); error_label_->setFont(font); + error_label_->setWordWrap(true); top_layout_->addLayout(top_bar_layout_); top_layout_->addStretch(1); @@ -183,6 +191,12 @@ LoginPage::loginError(const QString &msg) error_label_->setText(msg); } +void +LoginPage::matrixIdError(const QString &msg) +{ + error_matrixid_label_->setText(msg); +} + bool LoginPage::isMatrixIdValid() { @@ -199,8 +213,11 @@ LoginPage::onMatrixIdEntered() User user; - if (isMatrixIdValid() == 0) { - return loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + if (!isMatrixIdValid()) { + matrixIdError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + return ; + } else { + error_matrixid_label_->setText(""); } try { @@ -354,8 +371,12 @@ LoginPage::onLoginButtonClicked() error_label_->setText(""); User user; - if (isMatrixIdValid() == 0) { - return loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + + if (!isMatrixIdValid()) { + matrixIdError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + return ; + } else { + error_matrixid_label_->setText(""); } try { diff --git a/src/LoginPage.h b/src/LoginPage.h index c9220297..256739eb 100644 --- a/src/LoginPage.h +++ b/src/LoginPage.h @@ -67,6 +67,7 @@ protected: public slots: // Displays errors produced during the login. void loginError(const QString &msg); + void matrixIdError(const QString &msg); private slots: // Callback for the back button. @@ -105,6 +106,7 @@ private: } QVBoxLayout *top_layout_; + QVBoxLayout *matrixid_error_layout_; QHBoxLayout *top_bar_layout_; QHBoxLayout *logo_layout_; @@ -112,6 +114,7 @@ private: QLabel *logo_; QLabel *error_label_; + QLabel *error_matrixid_label_; QHBoxLayout *serverLayout_; QHBoxLayout *matrixidLayout_; From 4032f6e1139dcf238f7671caece5478a635d8550 Mon Sep 17 00:00:00 2001 From: kirillpt Date: Mon, 23 Nov 2020 09:44:30 +0300 Subject: [PATCH 04/12] make lint --- src/LoginPage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index bcf15ad4..1d5b6911 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -215,7 +215,7 @@ LoginPage::onMatrixIdEntered() if (!isMatrixIdValid()) { matrixIdError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); - return ; + return; } else { error_matrixid_label_->setText(""); } @@ -374,7 +374,7 @@ LoginPage::onLoginButtonClicked() if (!isMatrixIdValid()) { matrixIdError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); - return ; + return; } else { error_matrixid_label_->setText(""); } From ac73f10eba557588a78a5e9c24a3874c287c5db8 Mon Sep 17 00:00:00 2001 From: kirillpt Date: Mon, 23 Nov 2020 23:33:53 +0300 Subject: [PATCH 05/12] move error_matrixid label below matrixid input, made hide/show for the label, made red underline for invalid input, add to TextField class isValid() setValid() for custom validation --- src/LoginPage.cpp | 10 +++++++++- src/ui/TextField.cpp | 14 +++++++++++++- src/ui/TextField.h | 3 +++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 1d5b6911..e02aa9c6 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -137,11 +137,13 @@ LoginPage::LoginPage(QWidget *parent) serverLayout_ = new QHBoxLayout(); serverLayout_->addWidget(serverInput_, 0, Qt::AlignVCenter); - form_layout_->addLayout(matrixid_error_layout_); form_layout_->addLayout(matrixidLayout_); + form_layout_->addLayout(matrixid_error_layout_); form_layout_->addWidget(password_input_); form_layout_->addWidget(deviceName_, Qt::AlignHCenter); form_layout_->addLayout(serverLayout_); + + error_matrixid_label_->hide(); button_layout_ = new QHBoxLayout(); button_layout_->setSpacing(0); @@ -194,7 +196,9 @@ LoginPage::loginError(const QString &msg) void LoginPage::matrixIdError(const QString &msg) { + error_matrixid_label_->show(); error_matrixid_label_->setText(msg); + matrixid_input_->setValid(false); } bool @@ -218,6 +222,8 @@ LoginPage::onMatrixIdEntered() return; } else { error_matrixid_label_->setText(""); + error_matrixid_label_->hide(); + matrixid_input_->setValid(true); } try { @@ -377,6 +383,8 @@ LoginPage::onLoginButtonClicked() return; } else { error_matrixid_label_->setText(""); + error_matrixid_label_->hide(); + matrixid_input_->setValid(true); } try { diff --git a/src/ui/TextField.cpp b/src/ui/TextField.cpp index 27584693..c3eed734 100644 --- a/src/ui/TextField.cpp +++ b/src/ui/TextField.cpp @@ -69,6 +69,18 @@ TextField::hasLabel() const return show_label_; } +bool +TextField::isValid() const +{ + return is_valid_; +} + +void +TextField::setValid(bool valid) +{ + is_valid_ = valid; +} + void TextField::setLabelFontSize(qreal size) { @@ -147,7 +159,7 @@ QColor TextField::underlineColor() const { if (!underline_color_.isValid()) { - if (hasAcceptableInput() || !isModified()) + if (TextField::isValid() || !isModified()) return QPalette().color(QPalette::Highlight); else return Qt::red; diff --git a/src/ui/TextField.h b/src/ui/TextField.h index 85d5036d..966155f4 100644 --- a/src/ui/TextField.h +++ b/src/ui/TextField.h @@ -30,6 +30,7 @@ public: void setLabelFontSize(qreal size); void setShowLabel(bool value); void setUnderlineColor(const QColor &color); + void setValid(bool valid); QColor inkColor() const; QColor labelColor() const; @@ -37,6 +38,7 @@ public: QColor backgroundColor() const; QString label() const; bool hasLabel() const; + bool isValid() const; qreal labelFontSize() const; protected: @@ -54,6 +56,7 @@ private: TextFieldLabel *label_; TextFieldStateMachine *state_machine_; bool show_label_; + bool is_valid_; qreal label_font_size_; }; From 566987bdf9f1a7e37222dd102ff2b805013d08d4 Mon Sep 17 00:00:00 2001 From: kirillpt Date: Tue, 24 Nov 2020 00:10:43 +0300 Subject: [PATCH 06/12] make lint --- src/LoginPage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index e02aa9c6..0c9ab6b5 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -142,8 +142,8 @@ LoginPage::LoginPage(QWidget *parent) form_layout_->addWidget(password_input_); form_layout_->addWidget(deviceName_, Qt::AlignHCenter); form_layout_->addLayout(serverLayout_); - - error_matrixid_label_->hide(); + + error_matrixid_label_->hide(); button_layout_ = new QHBoxLayout(); button_layout_->setSpacing(0); From b00ee2c1c5f7502717bb7570e1a0e92c2e6dbbee Mon Sep 17 00:00:00 2001 From: kirillpt Date: Tue, 24 Nov 2020 00:24:26 +0300 Subject: [PATCH 07/12] fix word wraping for matrixid error message --- src/LoginPage.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 0c9ab6b5..8b1cbff0 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -112,6 +112,7 @@ LoginPage::LoginPage(QWidget *parent) error_matrixid_label_ = new QLabel(this); error_matrixid_label_->setFont(font); + error_matrixid_label_->setWordWrap(true); matrixid_error_layout_ = new QVBoxLayout(); matrixid_error_layout_->addWidget(error_matrixid_label_, 0, Qt::AlignHCenter); From 3047f1a89f6184893858a3a13295013a6a7a3e10 Mon Sep 17 00:00:00 2001 From: kirillpt Date: Tue, 24 Nov 2020 02:16:03 +0300 Subject: [PATCH 08/12] remove some useless matrixid layout, and move error_label_ under homeserver input(FIXME) --- src/LoginPage.cpp | 9 ++++----- src/LoginPage.h | 1 - 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 8b1cbff0..a9b67442 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -114,9 +114,6 @@ LoginPage::LoginPage(QWidget *parent) error_matrixid_label_->setFont(font); error_matrixid_label_->setWordWrap(true); - matrixid_error_layout_ = new QVBoxLayout(); - matrixid_error_layout_->addWidget(error_matrixid_label_, 0, Qt::AlignHCenter); - password_input_ = new TextField(this); password_input_->setLabel(tr("Password")); password_input_->setEchoMode(QLineEdit::Password); @@ -139,7 +136,7 @@ LoginPage::LoginPage(QWidget *parent) serverLayout_->addWidget(serverInput_, 0, Qt::AlignVCenter); form_layout_->addLayout(matrixidLayout_); - form_layout_->addLayout(matrixid_error_layout_); + form_layout_->addWidget(error_matrixid_label_, 0, Qt::AlignHCenter); form_layout_->addWidget(password_input_); form_layout_->addWidget(deviceName_, Qt::AlignHCenter); form_layout_->addLayout(serverLayout_); @@ -163,13 +160,15 @@ LoginPage::LoginPage(QWidget *parent) error_label_->setFont(font); error_label_->setWordWrap(true); + // FIXME: Moving this below the login button breaks word wrapping + form_layout_->addWidget(error_label_, 0, Qt::AlignHCenter); + top_layout_->addLayout(top_bar_layout_); top_layout_->addStretch(1); top_layout_->addLayout(logo_layout_); top_layout_->addLayout(form_wrapper_); top_layout_->addStretch(1); top_layout_->addLayout(button_layout_); - top_layout_->addWidget(error_label_, 0, Qt::AlignHCenter); top_layout_->addStretch(1); setLayout(top_layout_); diff --git a/src/LoginPage.h b/src/LoginPage.h index 256739eb..92b60afe 100644 --- a/src/LoginPage.h +++ b/src/LoginPage.h @@ -106,7 +106,6 @@ private: } QVBoxLayout *top_layout_; - QVBoxLayout *matrixid_error_layout_; QHBoxLayout *top_bar_layout_; QHBoxLayout *logo_layout_; From daf8531e3f0ea3a2bbcb71b631827f562a3cdec1 Mon Sep 17 00:00:00 2001 From: kirillpt Date: Wed, 25 Nov 2020 01:42:35 +0300 Subject: [PATCH 09/12] fixed error_label_ below login button, now it's calculating height and uses correct word wrapping --- src/LoginPage.cpp | 17 ++++++++++++----- src/LoginPage.h | 2 ++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index a9b67442..bb25b535 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -16,9 +16,11 @@ */ #include +#include #include #include #include +#include #include #include @@ -160,8 +162,7 @@ LoginPage::LoginPage(QWidget *parent) error_label_->setFont(font); error_label_->setWordWrap(true); - // FIXME: Moving this below the login button breaks word wrapping - form_layout_->addWidget(error_label_, 0, Qt::AlignHCenter); + error_font_metrics_ = new QFontMetrics(font); top_layout_->addLayout(top_bar_layout_); top_layout_->addStretch(1); @@ -169,6 +170,7 @@ LoginPage::LoginPage(QWidget *parent) top_layout_->addLayout(form_wrapper_); top_layout_->addStretch(1); top_layout_->addLayout(button_layout_); + top_layout_->addWidget(error_label_, 0, Qt::AlignHCenter); top_layout_->addStretch(1); setLayout(top_layout_); @@ -190,6 +192,9 @@ LoginPage::LoginPage(QWidget *parent) void LoginPage::loginError(const QString &msg) { + int width = error_font_metrics_->boundingRect(msg).width(); + int height = error_font_metrics_->boundingRect(msg).height(); + error_label_->setFixedHeight(qCeil(width / 200 * height)); error_label_->setText(msg); } @@ -229,7 +234,8 @@ LoginPage::onMatrixIdEntered() try { user = parse(matrixid_input_->text().toStdString()); } catch (const std::exception &e) { - return loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + matrixIdError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + return; } QString homeServer = QString::fromStdString(user.hostname()); @@ -340,7 +346,7 @@ LoginPage::onServerAddressEntered() void LoginPage::versionError(const QString &error) { - error_label_->setText(error); + loginError(error); serverInput_->show(); spinner_->stop(); @@ -390,7 +396,8 @@ LoginPage::onLoginButtonClicked() try { user = parse(matrixid_input_->text().toStdString()); } catch (const std::exception &e) { - return loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + matrixIdError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); + return; } if (loginMethod == LoginMethod::Password) { diff --git a/src/LoginPage.h b/src/LoginPage.h index 92b60afe..624a52a4 100644 --- a/src/LoginPage.h +++ b/src/LoginPage.h @@ -115,6 +115,8 @@ private: QLabel *error_label_; QLabel *error_matrixid_label_; + QFontMetrics *error_font_metrics_; + QHBoxLayout *serverLayout_; QHBoxLayout *matrixidLayout_; LoadingIndicator *spinner_; From 4e8a2d8c9e9716441d17d665af219df606ccc82d Mon Sep 17 00:00:00 2001 From: kirillpt Date: Wed, 25 Nov 2020 02:03:25 +0300 Subject: [PATCH 10/12] remove QFontMEtrics declaration --- src/LoginPage.cpp | 7 +++---- src/LoginPage.h | 2 -- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index bb25b535..6d040c53 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -162,8 +162,6 @@ LoginPage::LoginPage(QWidget *parent) error_label_->setFont(font); error_label_->setWordWrap(true); - error_font_metrics_ = new QFontMetrics(font); - top_layout_->addLayout(top_bar_layout_); top_layout_->addStretch(1); top_layout_->addLayout(logo_layout_); @@ -192,8 +190,9 @@ LoginPage::LoginPage(QWidget *parent) void LoginPage::loginError(const QString &msg) { - int width = error_font_metrics_->boundingRect(msg).width(); - int height = error_font_metrics_->boundingRect(msg).height(); + auto rect = QFontMetrics(font()).boundingRect(msg); + int width = rect.width(); + int height = rect.height(); error_label_->setFixedHeight(qCeil(width / 200 * height)); error_label_->setText(msg); } diff --git a/src/LoginPage.h b/src/LoginPage.h index 624a52a4..92b60afe 100644 --- a/src/LoginPage.h +++ b/src/LoginPage.h @@ -115,8 +115,6 @@ private: QLabel *error_label_; QLabel *error_matrixid_label_; - QFontMetrics *error_font_metrics_; - QHBoxLayout *serverLayout_; QHBoxLayout *matrixidLayout_; LoadingIndicator *spinner_; From ebe0cd79d7393dea1886aca8207ff5bb633f464a Mon Sep 17 00:00:00 2001 From: "DeepBlueV7.X" Date: Wed, 25 Nov 2020 00:10:13 +0100 Subject: [PATCH 11/12] Update src/ui/TextField.cpp --- src/ui/TextField.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/TextField.cpp b/src/ui/TextField.cpp index c3eed734..f717bcba 100644 --- a/src/ui/TextField.cpp +++ b/src/ui/TextField.cpp @@ -159,7 +159,7 @@ QColor TextField::underlineColor() const { if (!underline_color_.isValid()) { - if (TextField::isValid() || !isModified()) + if ((hasAcceptableInput() && isValid()) || !isModified()) return QPalette().color(QPalette::Highlight); else return Qt::red; From d13a1c64942ffbf87719dff62080b4fdfb5a47b2 Mon Sep 17 00:00:00 2001 From: "DeepBlueV7.X" Date: Wed, 25 Nov 2020 00:21:45 +0100 Subject: [PATCH 12/12] Apply suggestions from code review --- src/LoginPage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 6d040c53..ac625db1 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -193,7 +193,7 @@ LoginPage::loginError(const QString &msg) auto rect = QFontMetrics(font()).boundingRect(msg); int width = rect.width(); int height = rect.height(); - error_label_->setFixedHeight(qCeil(width / 200 * height)); + error_label_->setFixedHeight(qCeil(width / 200) * height); error_label_->setText(msg); } @@ -211,7 +211,7 @@ LoginPage::isMatrixIdValid() QRegularExpressionValidator v(QRegularExpression("@.+?:.{3,}"), this); QString s = matrixid_input_->text(); int pos = 0; - return v.validate(s, pos); + return v.validate(s, pos) == QValidator::Acceptable; } void