Refactor password-errors-indication (again)

- set message and status icon in one go
 - only check until an error is found
 - Mark TODO for passwordRequirements
This commit is contained in:
Adriaan de Groot 2017-09-19 09:41:28 +02:00
parent d839f8e0b3
commit 1c52f961a6

View file

@ -37,11 +37,20 @@
#include <QRegExp> #include <QRegExp>
#include <QRegExpValidator> #include <QRegExpValidator>
/** Add a standard pixmap to a label. */ /** Add an error message and pixmap to a label. */
static void static inline void
markLabel( QLabel* label, CalamaresUtils::ImageType i ) labelError( QLabel* pix, QLabel* label, const QString& message )
{ {
label->setPixmap( CalamaresUtils::defaultPixmap( i, CalamaresUtils::Original, label->size() ) ); label->setText( message );
pix->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No, CalamaresUtils::Original, label->size() ) );
}
/** Clear error, indicate OK on a label. */
static inline void
labelOk( QLabel* pix, QLabel* label )
{
label->clear();
pix->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, label->size() ) );
} }
UsersPage::UsersPage( QWidget* parent ) UsersPage::UsersPage( QWidget* parent )
@ -273,23 +282,19 @@ UsersPage::validateUsernameText( const QString& textRef )
} }
else if ( text.length() > USERNAME_MAX_LENGTH ) else if ( text.length() > USERNAME_MAX_LENGTH )
{ {
markLabel( ui->labelUsername, CalamaresUtils::No ); labelError( ui->labelUsername, ui->labelUsernameError,
ui->labelUsernameError->setText(
tr( "Your username is too long." ) ); tr( "Your username is too long." ) );
m_readyUsername = false; m_readyUsername = false;
} }
else if ( val.validate( text, pos ) == QValidator::Invalid ) else if ( val.validate( text, pos ) == QValidator::Invalid )
{ {
markLabel( ui->labelUsername, CalamaresUtils::No ); labelError( ui->labelUsername, ui->labelUsernameError,
ui->labelUsernameError->setText(
tr( "Your username contains invalid characters. Only lowercase letters and numbers are allowed." ) ); tr( "Your username contains invalid characters. Only lowercase letters and numbers are allowed." ) );
m_readyUsername = false; m_readyUsername = false;
} }
else { else
markLabel( ui->labelUsername, CalamaresUtils::Yes ); {
ui->labelUsernameError->clear(); labelOk( ui->labelUsername, ui->labelUsernameError );
m_readyUsername = true; m_readyUsername = true;
} }
@ -321,34 +326,25 @@ UsersPage::validateHostnameText( const QString& textRef )
} }
else if ( text.length() < HOSTNAME_MIN_LENGTH ) else if ( text.length() < HOSTNAME_MIN_LENGTH )
{ {
markLabel( ui->labelHostname, CalamaresUtils::No ); labelError( ui->labelHostname, ui->labelHostnameError,
ui->labelHostnameError->setText(
tr( "Your hostname is too short." ) ); tr( "Your hostname is too short." ) );
m_readyHostname = false; m_readyHostname = false;
} }
else if ( text.length() > HOSTNAME_MAX_LENGTH ) else if ( text.length() > HOSTNAME_MAX_LENGTH )
{ {
markLabel( ui->labelHostname, CalamaresUtils::No ); labelError( ui->labelHostname, ui->labelHostnameError,
ui->labelHostnameError->setText(
tr( "Your hostname is too long." ) ); tr( "Your hostname is too long." ) );
m_readyHostname = false; m_readyHostname = false;
} }
else if ( val.validate( text, pos ) == QValidator::Invalid ) else if ( val.validate( text, pos ) == QValidator::Invalid )
{ {
markLabel( ui->labelHostname, CalamaresUtils::No ); labelError( ui->labelHostname, ui->labelHostnameError,
ui->labelHostnameError->setText(
tr( "Your hostname contains invalid characters. Only letters, numbers and dashes are allowed." ) ); tr( "Your hostname contains invalid characters. Only letters, numbers and dashes are allowed." ) );
m_readyHostname = false; m_readyHostname = false;
} }
else else
{ {
markLabel( ui->labelHostname, CalamaresUtils::Yes ); labelOk( ui->labelHostname, ui->labelHostnameError );
ui->labelHostnameError->clear();
m_readyHostname = true; m_readyHostname = true;
} }
@ -361,6 +357,7 @@ UsersPage::onPasswordTextChanged( const QString& )
QString pw1 = ui->textBoxUserPassword->text(); QString pw1 = ui->textBoxUserPassword->text();
QString pw2 = ui->textBoxUserVerifiedPassword->text(); QString pw2 = ui->textBoxUserVerifiedPassword->text();
// TODO: 3.3: remove empty-check and leave it to passwordRequirements
if ( pw1.isEmpty() && pw2.isEmpty() ) if ( pw1.isEmpty() && pw2.isEmpty() )
{ {
ui->labelUserPasswordError->clear(); ui->labelUserPasswordError->clear();
@ -369,8 +366,8 @@ UsersPage::onPasswordTextChanged( const QString& )
} }
else if ( pw1 != pw2 ) else if ( pw1 != pw2 )
{ {
ui->labelUserPasswordError->setText( tr( "Your passwords do not match!" ) ); labelError( ui->labelUserPassword, ui->labelUserPasswordError,
markLabel( ui->labelUserPassword, CalamaresUtils::No ); tr( "Your passwords do not match!" ) );
m_readyPassword = false; m_readyPassword = false;
} }
else else
@ -381,17 +378,16 @@ UsersPage::onPasswordTextChanged( const QString& )
QString s = pc.filter( pw1 ); QString s = pc.filter( pw1 );
if ( !s.isEmpty() ) if ( !s.isEmpty() )
{ {
ui->labelUserPasswordError->setText( s ); labelError( ui->labelUserPassword, ui->labelUserPasswordError, s );
markLabel( ui->labelUserPassword, CalamaresUtils::No );
ok = false; ok = false;
m_readyPassword = false; m_readyPassword = false;
break;
} }
} }
if ( ok ) if ( ok )
{ {
ui->labelUserPasswordError->clear(); labelOk( ui->labelUserPassword, ui->labelUserPasswordError );
markLabel( ui->labelUserPassword, CalamaresUtils::Yes );
m_readyPassword = true; m_readyPassword = true;
} }
} }
@ -405,6 +401,7 @@ UsersPage::onRootPasswordTextChanged( const QString& )
QString pw1 = ui->textBoxRootPassword->text(); QString pw1 = ui->textBoxRootPassword->text();
QString pw2 = ui->textBoxVerifiedRootPassword->text(); QString pw2 = ui->textBoxVerifiedRootPassword->text();
// TODO: 3.3: remove empty-check and leave it to passwordRequirements
if ( pw1.isEmpty() && pw2.isEmpty() ) if ( pw1.isEmpty() && pw2.isEmpty() )
{ {
ui->labelRootPasswordError->clear(); ui->labelRootPasswordError->clear();
@ -413,8 +410,8 @@ UsersPage::onRootPasswordTextChanged( const QString& )
} }
else if ( pw1 != pw2 ) else if ( pw1 != pw2 )
{ {
ui->labelRootPasswordError->setText( tr( "Your passwords do not match!" ) ); labelError( ui->labelRootPassword, ui->labelRootPasswordError,
markLabel( ui->labelRootPassword, CalamaresUtils::No ); tr( "Your passwords do not match!" ) );
m_readyRootPassword = false; m_readyRootPassword = false;
} }
else else
@ -425,17 +422,16 @@ UsersPage::onRootPasswordTextChanged( const QString& )
QString s = pc.filter( pw1 ); QString s = pc.filter( pw1 );
if ( !s.isEmpty() ) if ( !s.isEmpty() )
{ {
ui->labelRootPasswordError->setText( s ); labelError( ui->labelRootPassword, ui->labelRootPasswordError, s );
markLabel( ui->labelRootPassword, CalamaresUtils::No );
ok = false; ok = false;
m_readyRootPassword = false; m_readyRootPassword = false;
break;
} }
} }
if ( ok ) if ( ok )
{ {
ui->labelRootPasswordError->clear(); labelOk( ui->labelRootPassword, ui->labelRootPasswordError );
markLabel( ui->labelRootPassword, CalamaresUtils::Yes );
m_readyRootPassword = true; m_readyRootPassword = true;
} }
} }