From b2282e7402cd16931e6ee170ce0cee860753ae8f Mon Sep 17 00:00:00 2001 From: Nik Johnson Date: Sun, 3 May 2015 15:24:31 -0700 Subject: [PATCH] Move label to bottom of connect dialog and default it to hostname This patch improves the usability of the connect dialog by moving the server label to the bottom of the dialog and making it track the hostname. This way the user gets a sensible default while also being able to manually edit it afterwards. Once the user edits the label it is seen as custom and will no longer track the server address until the label field is manually cleared by the user. --- src/mumble/ConnectDialog.cpp | 32 +++++++++++++- src/mumble/ConnectDialog.h | 3 ++ src/mumble/ConnectDialogEdit.ui | 78 ++++++++++++++++----------------- 3 files changed, 72 insertions(+), 41 deletions(-) diff --git a/src/mumble/ConnectDialog.cpp b/src/mumble/ConnectDialog.cpp index fc96b5597..f3fad7ac4 100644 --- a/src/mumble/ConnectDialog.cpp +++ b/src/mumble/ConnectDialog.cpp @@ -732,6 +732,7 @@ ConnectDialogEdit::ConnectDialogEdit(QWidget *p, const QString &name, const QStr usPort = 0; bOk = true; + bCustomLabel = ! name.simplified().isEmpty(); connect(qleName, SIGNAL(textChanged(const QString &)), this, SLOT(validate())); connect(qleServer, SIGNAL(textChanged(const QString &)), this, SLOT(validate())); @@ -742,6 +743,29 @@ ConnectDialogEdit::ConnectDialogEdit(QWidget *p, const QString &name, const QStr validate(); } +void ConnectDialogEdit::on_qleName_textEdited(const QString& name) { + if (bCustomLabel) { + // If empty, then reset to automatic label. + // NOTE(nik@jnstw.us): You may be tempted to set qleName to qleServer, but that results in the odd + // UI behavior that clearing the field doesn't clear it; it'll immediately equal qleServer. Instead, + // leave it empty and let it update the next time qleServer updates. Code in accept will default it + // to qleServer if it isn't updated beforehand. + if (name.simplified().isEmpty()) { + bCustomLabel = false; + } + } else { + // If manually edited, set to Custom + bCustomLabel = true; + } +} + +void ConnectDialogEdit::on_qleServer_textEdited(const QString& server) { + // If using automatic label, update it + if (!bCustomLabel) { + qleName->setText(server); + } +} + void ConnectDialogEdit::validate() { qsName = qleName->text().simplified(); qsHostname = qleServer->text().simplified(); @@ -765,14 +789,18 @@ void ConnectDialogEdit::validate() { adjustSize(); } - bOk = ! qsName.isEmpty() && ! qsHostname.isEmpty() && ! qsUsername.isEmpty() && usPort; + bOk = ! qsHostname.isEmpty() && ! qsUsername.isEmpty() && usPort; qdbbButtonBox->button(QDialogButtonBox::Ok)->setEnabled(bOk); } void ConnectDialogEdit::accept() { validate(); - if (bOk) + if (bOk) { + if (qleName->text().simplified().isEmpty()) { + qleName->setText(qleServer->text()); + } QDialog::accept(); + } } void ConnectDialogEdit::on_qcbShowPassword_toggled(bool checked) { diff --git a/src/mumble/ConnectDialog.h b/src/mumble/ConnectDialog.h index 3b3466fa1..3cbb05daa 100644 --- a/src/mumble/ConnectDialog.h +++ b/src/mumble/ConnectDialog.h @@ -190,11 +190,14 @@ class ConnectDialogEdit : public QDialog, protected Ui::ConnectDialogEdit { Q_DISABLE_COPY(ConnectDialogEdit) protected: bool bOk; + bool bCustomLabel; public slots: void validate(); void accept(); void on_qcbShowPassword_toggled(bool); + void on_qleName_textEdited(const QString&); + void on_qleServer_textEdited(const QString&); public: QString qsName, qsHostname, qsUsername, qsPassword; unsigned short usPort; diff --git a/src/mumble/ConnectDialogEdit.ui b/src/mumble/ConnectDialogEdit.ui index 85180b54c..dcf3a23eb 100644 --- a/src/mumble/ConnectDialogEdit.ui +++ b/src/mumble/ConnectDialogEdit.ui @@ -6,8 +6,8 @@ 0 0 - 243 - 194 + 265 + 197 @@ -20,30 +20,6 @@ Edit Server - - - - Label - - - qleName - - - - - - - Name of the server - - - <b>Label</b><br/> -Label of the server. This is what the server will be named like in your server list and can be chosen freely. - - - Local server label - - - @@ -92,7 +68,7 @@ Port on which the server is listening. If the server is identified by a Bonjour - + &Username @@ -102,7 +78,14 @@ Port on which the server is listening. If the server is identified by a Bonjour - + + + + Password + + + + Username to send to the server @@ -116,21 +99,14 @@ Username to send to the server. Be aware that the server can impose restrictions - + QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - Password - - - - + Password to send to the server @@ -144,7 +120,7 @@ Password to be sent to the server on connect. This password is needed when conne - + @@ -154,14 +130,38 @@ Password to be sent to the server on connect. This password is needed when conne + + + + Label + + + qleName + + + + + + + Name of the server + + + <b>Label</b><br/> +Label of the server. This is what the server will be named like in your server list and can be chosen freely. + + + Local server label + + + - qleName qleServer qlePort qleUsername qlePassword + qleName qcbShowPassword qdbbButtonBox