diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 20fb3888..6d96419a 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -81,6 +81,14 @@ LoginPage::LoginPage(QWidget *parent) matrixid_input_ = new TextField(this); matrixid_input_->setLabel(tr("Matrix ID")); matrixid_input_->setPlaceholderText(tr("e.g @joe:matrix.org")); + matrixid_input_->setToolTip( + tr("Your login name. A mxid should start with @ followed by the user id. After the user " + "id you need to include your server name after a :.\nYou can also put your homeserver " + "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); @@ -97,13 +105,19 @@ LoginPage::LoginPage(QWidget *parent) password_input_ = new TextField(this); password_input_->setLabel(tr("Password")); password_input_->setEchoMode(QLineEdit::Password); + password_input_->setToolTip("Your password."); deviceName_ = new TextField(this); deviceName_->setLabel(tr("Device name")); + deviceName_->setToolTip( + tr("A name for this device, which will be shown to others, when verifying your devices. " + "If none is provided, a random string is used for privacy purposes.")); serverInput_ = new TextField(this); serverInput_->setLabel("Homeserver address"); serverInput_->setPlaceholderText("matrix.org"); + serverInput_->setToolTip(tr("The address that can be used to contact you homeservers " + "client API.\nExample: https://server.my:8787")); serverInput_->hide(); serverLayout_ = new QHBoxLayout(); diff --git a/src/RegisterPage.cpp b/src/RegisterPage.cpp index 2833381d..a01f2140 100644 --- a/src/RegisterPage.cpp +++ b/src/RegisterPage.cpp @@ -85,17 +85,26 @@ RegisterPage::RegisterPage(QWidget *parent) username_input_ = new TextField(); username_input_->setLabel(tr("Username")); + username_input_->setValidator( + new QRegularExpressionValidator(QRegularExpression("[a-z0-9._=/-]+"), this)); + username_input_->setToolTip(tr("The username must not be empty, and must contain only the " + "characters a-z, 0-9, ., _, =, -, and /.")); password_input_ = new TextField(); password_input_->setLabel(tr("Password")); password_input_->setEchoMode(QLineEdit::Password); + password_input_->setToolTip(tr("Please choose a secure password. The exact requirements " + "for password strength may depend on your server")); password_confirmation_ = new TextField(); password_confirmation_->setLabel(tr("Password confirmation")); password_confirmation_->setEchoMode(QLineEdit::Password); server_input_ = new TextField(); - server_input_->setLabel(tr("Home Server")); + server_input_->setLabel(tr("Homeserver")); + server_input_->setToolTip( + tr("A server that allows registration. Since matrix is decentralized, you need to first " + "find a server you can register on or host your own.")); form_layout_->addWidget(username_input_, Qt::AlignHCenter, nullptr); form_layout_->addWidget(password_input_, Qt::AlignHCenter, nullptr); diff --git a/src/ui/TextField.cpp b/src/ui/TextField.cpp index 4bb7596a..27584693 100644 --- a/src/ui/TextField.cpp +++ b/src/ui/TextField.cpp @@ -147,7 +147,10 @@ QColor TextField::underlineColor() const { if (!underline_color_.isValid()) { - return QPalette().color(QPalette::Highlight); + if (hasAcceptableInput() || !isModified()) + return QPalette().color(QPalette::Highlight); + else + return Qt::red; } return underline_color_;