[users] Complete isReady move to Config
- give Config slots and signals for ready-status - disconnect the page from the viewstep and use the Config object ready-status instead
This commit is contained in:
parent
36cefe3be1
commit
abae942e55
@ -56,6 +56,16 @@ hostNameActionNames()
|
|||||||
Config::Config( QObject* parent )
|
Config::Config( QObject* parent )
|
||||||
: QObject( parent )
|
: QObject( parent )
|
||||||
{
|
{
|
||||||
|
emit readyChanged( m_isReady ); // false
|
||||||
|
|
||||||
|
// Gang together all the changes of status to one readyChanged() signal
|
||||||
|
connect( this, &Config::hostNameStatusChanged, this, &Config::checkReady );
|
||||||
|
connect( this, &Config::loginNameStatusChanged, this, &Config::checkReady );
|
||||||
|
connect( this, &Config::fullNameChanged, this, &Config::checkReady );
|
||||||
|
connect( this, &Config::userPasswordStatusChanged, this, &Config::checkReady );
|
||||||
|
connect( this, &Config::rootPasswordStatusChanged, this, &Config::checkReady );
|
||||||
|
connect( this, &Config::reuseUserPasswordForRootChanged, this, &Config::checkReady );
|
||||||
|
connect( this, &Config::requireStrongPasswordsChanged, this, &Config::checkReady );
|
||||||
}
|
}
|
||||||
|
|
||||||
Config::~Config() {}
|
Config::~Config() {}
|
||||||
@ -404,7 +414,14 @@ Config::setUserPasswordSecondary( const QString& s )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QPair< Config::PasswordValidity, QString >
|
/** @brief Checks two copies of the password for validity
|
||||||
|
*
|
||||||
|
* Given two copies of the password -- generally the password and
|
||||||
|
* the secondary fields -- checks them for validity and returns
|
||||||
|
* a pair of <validity, message>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Config::PasswordStatus
|
||||||
Config::passwordStatus( const QString& pw1, const QString& pw2 ) const
|
Config::passwordStatus( const QString& pw1, const QString& pw2 ) const
|
||||||
{
|
{
|
||||||
if ( pw1 != pw2 )
|
if ( pw1 != pw2 )
|
||||||
@ -527,6 +544,33 @@ Config::rootPasswordMessage() const
|
|||||||
return p.second;
|
return p.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Config::isReady() const
|
||||||
|
{
|
||||||
|
bool readyFullName = !fullName().isEmpty(); // Needs some text
|
||||||
|
bool readyHostname = hostNameStatus().isEmpty(); // .. no warning message
|
||||||
|
bool readyUsername = loginNameStatus().isEmpty(); // .. no warning message
|
||||||
|
bool readyUserPassword = userPasswordValidity() != Config::PasswordValidity::Invalid;
|
||||||
|
bool readyRootPassword = rootPasswordValidity() != Config::PasswordValidity::Invalid;
|
||||||
|
return readyFullName && readyHostname && readyUsername && readyUserPassword && readyRootPassword;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @brief Update ready status and emit signal
|
||||||
|
*
|
||||||
|
* This is a "concentrator" private slot for all the status-changed
|
||||||
|
* signals, so that readyChanged() is emitted only when needed.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
Config::checkReady()
|
||||||
|
{
|
||||||
|
bool b = isReady();
|
||||||
|
if ( b != m_isReady )
|
||||||
|
{
|
||||||
|
m_isReady = b;
|
||||||
|
emit readyChanged( b );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
STATICTEST void
|
STATICTEST void
|
||||||
setConfigurationDefaultGroups( const QVariantMap& map, QStringList& defaultGroups )
|
setConfigurationDefaultGroups( const QVariantMap& map, QStringList& defaultGroups )
|
||||||
@ -646,6 +690,8 @@ Config::setConfigurationMap( const QVariantMap& configurationMap )
|
|||||||
addPasswordCheck( i.key(), i.value(), m_passwordChecks );
|
addPasswordCheck( i.key(), i.value(), m_passwordChecks );
|
||||||
}
|
}
|
||||||
std::sort( m_passwordChecks.begin(), m_passwordChecks.end() );
|
std::sort( m_passwordChecks.begin(), m_passwordChecks.end() );
|
||||||
|
|
||||||
|
checkReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -79,6 +79,8 @@ class Config : public QObject
|
|||||||
Q_PROPERTY( bool requireStrongPasswords READ requireStrongPasswords WRITE setRequireStrongPasswords NOTIFY
|
Q_PROPERTY( bool requireStrongPasswords READ requireStrongPasswords WRITE setRequireStrongPasswords NOTIFY
|
||||||
requireStrongPasswordsChanged )
|
requireStrongPasswordsChanged )
|
||||||
|
|
||||||
|
Q_PROPERTY( bool ready READ isReady NOTIFY readyChanged STORED false )
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/** @brief Validity (status) of a password
|
/** @brief Validity (status) of a password
|
||||||
*
|
*
|
||||||
@ -178,6 +180,8 @@ public:
|
|||||||
QString rootPasswordMessage() const;
|
QString rootPasswordMessage() const;
|
||||||
PasswordStatus rootPasswordStatus() const;
|
PasswordStatus rootPasswordStatus() const;
|
||||||
|
|
||||||
|
bool isReady() const;
|
||||||
|
|
||||||
static const QStringList& forbiddenLoginNames();
|
static const QStringList& forbiddenLoginNames();
|
||||||
static const QStringList& forbiddenHostNames();
|
static const QStringList& forbiddenHostNames();
|
||||||
|
|
||||||
@ -236,10 +240,11 @@ signals:
|
|||||||
void rootPasswordChanged( const QString& );
|
void rootPasswordChanged( const QString& );
|
||||||
void rootPasswordSecondaryChanged( const QString& );
|
void rootPasswordSecondaryChanged( const QString& );
|
||||||
void rootPasswordStatusChanged( int, const QString& );
|
void rootPasswordStatusChanged( int, const QString& );
|
||||||
|
void readyChanged( bool ) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PasswordStatus passwordStatus( const QString&, const QString& ) const;
|
PasswordStatus passwordStatus( const QString&, const QString& ) const;
|
||||||
|
void checkReady();
|
||||||
|
|
||||||
QStringList m_defaultGroups;
|
QStringList m_defaultGroups;
|
||||||
QString m_userShell;
|
QString m_userShell;
|
||||||
@ -265,6 +270,8 @@ private:
|
|||||||
bool m_customLoginName = false;
|
bool m_customLoginName = false;
|
||||||
bool m_customHostName = false;
|
bool m_customHostName = false;
|
||||||
|
|
||||||
|
bool m_isReady = false; ///< Used to reduce readyChanged signals
|
||||||
|
|
||||||
HostNameActions m_hostNameActions;
|
HostNameActions m_hostNameActions;
|
||||||
PasswordCheckList m_passwordChecks;
|
PasswordCheckList m_passwordChecks;
|
||||||
};
|
};
|
||||||
|
@ -186,18 +186,6 @@ UsersPage::retranslate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
UsersPage::isReady() const
|
|
||||||
{
|
|
||||||
bool readyFullName = !m_config->fullName().isEmpty(); // Needs some text
|
|
||||||
bool readyHostname = m_config->hostNameStatus().isEmpty(); // .. no warning message
|
|
||||||
bool readyUsername = m_config->loginNameStatus().isEmpty(); // .. no warning message
|
|
||||||
bool readyUserPassword = m_config->userPasswordValidity() != Config::PasswordValidity::Invalid;
|
|
||||||
bool readyRootPassword = m_config->rootPasswordValidity() != Config::PasswordValidity::Invalid;
|
|
||||||
return readyFullName && readyHostname && readyUsername && readyUserPassword && readyRootPassword;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
UsersPage::onActivate()
|
UsersPage::onActivate()
|
||||||
{
|
{
|
||||||
@ -213,21 +201,18 @@ void
|
|||||||
UsersPage::onFullNameTextEdited( const QString& fullName )
|
UsersPage::onFullNameTextEdited( const QString& fullName )
|
||||||
{
|
{
|
||||||
labelStatus( ui->labelFullName, ui->labelFullNameError, fullName, QString() );
|
labelStatus( ui->labelFullName, ui->labelFullNameError, fullName, QString() );
|
||||||
checkReady( isReady() );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
UsersPage::reportLoginNameStatus( const QString& status )
|
UsersPage::reportLoginNameStatus( const QString& status )
|
||||||
{
|
{
|
||||||
labelStatus( ui->labelUsername, ui->labelUsernameError, m_config->loginName(), status );
|
labelStatus( ui->labelUsername, ui->labelUsernameError, m_config->loginName(), status );
|
||||||
emit checkReady( isReady() );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
UsersPage::reportHostNameStatus( const QString& status )
|
UsersPage::reportHostNameStatus( const QString& status )
|
||||||
{
|
{
|
||||||
labelStatus( ui->labelHostname, ui->labelHostnameError, m_config->hostName(), status );
|
labelStatus( ui->labelHostname, ui->labelHostnameError, m_config->hostName(), status );
|
||||||
emit checkReady( isReady() );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
@ -280,5 +265,4 @@ UsersPage::onReuseUserPasswordChanged( const int checked )
|
|||||||
ui->labelRootPasswordError->setVisible( visible );
|
ui->labelRootPasswordError->setVisible( visible );
|
||||||
ui->textBoxRootPassword->setVisible( visible );
|
ui->textBoxRootPassword->setVisible( visible );
|
||||||
ui->textBoxVerifiedRootPassword->setVisible( visible );
|
ui->textBoxVerifiedRootPassword->setVisible( visible );
|
||||||
checkReady( isReady() );
|
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,6 @@ public:
|
|||||||
explicit UsersPage( Config* config, QWidget* parent = nullptr );
|
explicit UsersPage( Config* config, QWidget* parent = nullptr );
|
||||||
virtual ~UsersPage();
|
virtual ~UsersPage();
|
||||||
|
|
||||||
bool isReady() const;
|
|
||||||
|
|
||||||
void onActivate();
|
void onActivate();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
@ -54,9 +52,6 @@ protected slots:
|
|||||||
void reportUserPasswordStatus( int, const QString& );
|
void reportUserPasswordStatus( int, const QString& );
|
||||||
void reportRootPasswordStatus( int, const QString& );
|
void reportRootPasswordStatus( int, const QString& );
|
||||||
|
|
||||||
signals:
|
|
||||||
void checkReady( bool );
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void retranslate();
|
void retranslate();
|
||||||
|
|
||||||
|
@ -39,7 +39,9 @@ UsersViewStep::UsersViewStep( QObject* parent )
|
|||||||
, m_widget( nullptr )
|
, m_widget( nullptr )
|
||||||
, m_config( new Config( this ) )
|
, m_config( new Config( this ) )
|
||||||
{
|
{
|
||||||
emit nextStatusChanged( true );
|
connect( m_config, &Config::readyChanged, this, &UsersViewStep::nextStatusChanged );
|
||||||
|
|
||||||
|
emit nextStatusChanged( m_config->isReady() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -65,7 +67,6 @@ UsersViewStep::widget()
|
|||||||
if ( !m_widget )
|
if ( !m_widget )
|
||||||
{
|
{
|
||||||
m_widget = new UsersPage( m_config );
|
m_widget = new UsersPage( m_config );
|
||||||
connect( m_widget, &UsersPage::checkReady, this, &UsersViewStep::nextStatusChanged );
|
|
||||||
}
|
}
|
||||||
return m_widget;
|
return m_widget;
|
||||||
}
|
}
|
||||||
@ -74,7 +75,7 @@ UsersViewStep::widget()
|
|||||||
bool
|
bool
|
||||||
UsersViewStep::isNextEnabled() const
|
UsersViewStep::isNextEnabled() const
|
||||||
{
|
{
|
||||||
return m_widget ? m_widget->isReady() : true;
|
return m_config->isReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -120,7 +121,7 @@ void
|
|||||||
UsersViewStep::onLeave()
|
UsersViewStep::onLeave()
|
||||||
{
|
{
|
||||||
m_jobs.clear();
|
m_jobs.clear();
|
||||||
if ( !m_widget || !m_widget->isReady() )
|
if ( !m_widget || !m_config->isReady() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user