mirror of
https://github.com/parchlinux/calamares.git
synced 2025-02-24 02:45:44 -05:00
Merge branch 'welcomeq-requirements'
Expose the requirements model better to QML, hook it up to the QML in the WelcomeQ module.
This commit is contained in:
commit
6e22364a5a
12 changed files with 96 additions and 57 deletions
|
@ -41,6 +41,7 @@ RequirementsChecker::RequirementsChecker( QVector< Module* > modules, Requiremen
|
|||
, m_progressTimeouts( 0 )
|
||||
{
|
||||
m_watchers.reserve( m_modules.count() );
|
||||
connect( this, &RequirementsChecker::requirementsProgress, model, &RequirementsModel::setProgressMessage );
|
||||
}
|
||||
|
||||
RequirementsChecker::~RequirementsChecker() {}
|
||||
|
@ -83,6 +84,7 @@ RequirementsChecker::finished()
|
|||
}
|
||||
|
||||
m_model->describe();
|
||||
m_model->changeRequirementsList();
|
||||
QTimer::singleShot( 0, this, &RequirementsChecker::done );
|
||||
}
|
||||
}
|
||||
|
@ -97,8 +99,7 @@ RequirementsChecker::addCheckedRequirements( Module* m )
|
|||
m_model->addRequirementsList( l );
|
||||
}
|
||||
|
||||
requirementsProgress(
|
||||
tr( "Requirements checking for module <i>%1</i> is complete." ).arg( m->name() ) );
|
||||
requirementsProgress( tr( "Requirements checking for module <i>%1</i> is complete." ).arg( m->name() ) );
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -105,4 +105,11 @@ RequirementsModel::describe() const
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
RequirementsModel::setProgressMessage( const QString& m )
|
||||
{
|
||||
m_progressMessage = m;
|
||||
emit progressMessageChanged( m_progressMessage );
|
||||
}
|
||||
|
||||
} // namespace Calamares
|
||||
|
|
|
@ -46,6 +46,7 @@ class DLLEXPORT RequirementsModel : public QAbstractListModel
|
|||
Q_OBJECT
|
||||
Q_PROPERTY( bool satisfiedRequirements READ satisfiedRequirements NOTIFY satisfiedRequirementsChanged FINAL )
|
||||
Q_PROPERTY( bool satisfiedMandatory READ satisfiedMandatory NOTIFY satisfiedMandatoryChanged FINAL )
|
||||
Q_PROPERTY( QString progressMessage READ progressMessage NOTIFY progressMessageChanged FINAL )
|
||||
|
||||
public:
|
||||
using QAbstractListModel::QAbstractListModel;
|
||||
|
@ -65,6 +66,9 @@ public:
|
|||
bool satisfiedRequirements() const { return m_satisfiedRequirements; }
|
||||
///@brief Are all the **mandatory** requirements satisfied?
|
||||
bool satisfiedMandatory() const { return m_satisfiedMandatory; }
|
||||
///@brief Message (from an ongoing check) about progress
|
||||
QString progressMessage() const { return m_progressMessage; }
|
||||
|
||||
|
||||
QVariant data( const QModelIndex& index, int role ) const override;
|
||||
int rowCount( const QModelIndex& ) const override;
|
||||
|
@ -76,6 +80,7 @@ public:
|
|||
signals:
|
||||
void satisfiedRequirementsChanged( bool value );
|
||||
void satisfiedMandatoryChanged( bool value );
|
||||
void progressMessageChanged( QString message );
|
||||
|
||||
protected:
|
||||
QHash< int, QByteArray > roleNames() const override;
|
||||
|
@ -83,10 +88,14 @@ protected:
|
|||
///@brief Append some requirements; resets the model
|
||||
void addRequirementsList( const Calamares::RequirementsList& requirements );
|
||||
|
||||
///@brief Update progress message (called by the checker)
|
||||
void setProgressMessage( const QString& m );
|
||||
|
||||
private:
|
||||
///@brief Implementation for {set,add}RequirementsList
|
||||
void changeRequirementsList();
|
||||
|
||||
QString m_progressMessage;
|
||||
QMutex m_addLock;
|
||||
RequirementsList m_requirements;
|
||||
bool m_satisfiedRequirements = false;
|
||||
|
|
|
@ -358,7 +358,6 @@ ModuleManager::checkRequirements()
|
|||
}
|
||||
|
||||
RequirementsChecker* rq = new RequirementsChecker( modules, m_requirementsModel, this );
|
||||
connect( rq, &RequirementsChecker::requirementsProgress, this, &ModuleManager::requirementsProgress );
|
||||
connect( rq, &RequirementsChecker::done, rq, &RequirementsChecker::deleteLater );
|
||||
connect( rq, &RequirementsChecker::done, this, [=](){ this->requirementsComplete( m_requirementsModel->satisfiedMandatory() ); } );
|
||||
|
||||
|
|
|
@ -100,7 +100,6 @@ signals:
|
|||
void modulesFailed( QStringList ); /// .. or not
|
||||
// Below, see RequirementsChecker documentation
|
||||
void requirementsComplete( bool );
|
||||
void requirementsProgress( const QString& );
|
||||
|
||||
private slots:
|
||||
void doInit();
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
#include "locale/LabelModel.h"
|
||||
#include "modulesystem/ModuleManager.h"
|
||||
#include "modulesystem/RequirementsModel.h"
|
||||
#include "utils/CalamaresUtilsGui.h"
|
||||
#include "utils/Logger.h"
|
||||
#include "utils/NamedEnum.h"
|
||||
|
@ -90,8 +91,8 @@ WelcomePage::WelcomePage( Config* conf, QWidget* parent )
|
|||
&Calamares::ModuleManager::requirementsComplete,
|
||||
m_checkingWidget,
|
||||
&CheckerContainer::requirementsComplete );
|
||||
connect( Calamares::ModuleManager::instance(),
|
||||
&Calamares::ModuleManager::requirementsProgress,
|
||||
connect( Calamares::ModuleManager::instance()->requirementsModel(),
|
||||
&Calamares::RequirementsModel::progressMessageChanged,
|
||||
m_checkingWidget,
|
||||
&CheckerContainer::requirementsProgress );
|
||||
}
|
||||
|
|
|
@ -32,16 +32,14 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeViewStepFactory, registerPlugin< Wel
|
|||
|
||||
WelcomeViewStep::WelcomeViewStep( QObject* parent )
|
||||
: Calamares::ViewStep( parent )
|
||||
, m_requirementsChecker( new GeneralRequirements( this ) )
|
||||
, m_conf( new Config( this ) )
|
||||
, m_widget( new WelcomePage( m_conf ) )
|
||||
, m_requirementsChecker( new GeneralRequirements( this ) )
|
||||
{
|
||||
connect( Calamares::ModuleManager::instance(),
|
||||
&Calamares::ModuleManager::requirementsComplete,
|
||||
this,
|
||||
&WelcomeViewStep::nextStatusChanged );
|
||||
|
||||
// the instance of the qqc2 or qwidgets page
|
||||
m_widget = new WelcomePage( m_conf );
|
||||
connect( m_conf, &Config::localeIndexChanged, m_widget, &WelcomePage::externallySelectedLanguage );
|
||||
}
|
||||
|
||||
|
|
|
@ -73,9 +73,9 @@ public:
|
|||
Calamares::RequirementsList checkRequirements() override;
|
||||
|
||||
private:
|
||||
Config* m_conf;
|
||||
WelcomePage* m_widget;
|
||||
GeneralRequirements* m_requirementsChecker;
|
||||
Config* m_conf;
|
||||
};
|
||||
|
||||
CALAMARES_PLUGIN_FACTORY_DECLARATION( WelcomeViewStepFactory )
|
||||
|
|
|
@ -70,16 +70,49 @@ biggestSingleScreen()
|
|||
return s;
|
||||
}
|
||||
|
||||
/** @brief Distinguish has-not-been-checked-at-all from false.
|
||||
*
|
||||
*/
|
||||
struct MaybeChecked
|
||||
{
|
||||
bool hasBeenChecked = false;
|
||||
bool value = false;
|
||||
|
||||
MaybeChecked& operator=( bool b )
|
||||
{
|
||||
cDebug() << "Assigning" << b;
|
||||
hasBeenChecked = true;
|
||||
value = b;
|
||||
return *this;
|
||||
}
|
||||
|
||||
operator bool() const { return value; }
|
||||
};
|
||||
|
||||
QDebug&
|
||||
operator<<( QDebug& s, const MaybeChecked& c )
|
||||
{
|
||||
if ( c.hasBeenChecked )
|
||||
{
|
||||
s << c.value;
|
||||
}
|
||||
else
|
||||
{
|
||||
s << "unchecked";
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
Calamares::RequirementsList
|
||||
GeneralRequirements::checkRequirements()
|
||||
{
|
||||
QSize availableSize = biggestSingleScreen();
|
||||
|
||||
bool enoughStorage = false;
|
||||
bool enoughRam = false;
|
||||
bool hasPower = false;
|
||||
bool hasInternet = false;
|
||||
bool isRoot = false;
|
||||
MaybeChecked enoughStorage;
|
||||
MaybeChecked enoughRam;
|
||||
MaybeChecked hasPower;
|
||||
MaybeChecked hasInternet;
|
||||
MaybeChecked isRoot;
|
||||
bool enoughScreen = availableSize.isValid() && ( availableSize.width() >= CalamaresUtils::windowMinimumWidth )
|
||||
&& ( availableSize.height() >= CalamaresUtils::windowMinimumHeight );
|
||||
|
||||
|
@ -112,7 +145,7 @@ GeneralRequirements::checkRequirements()
|
|||
isRoot = checkIsRoot();
|
||||
}
|
||||
|
||||
using TR = Logger::DebugRow< const char*, bool >;
|
||||
using TR = Logger::DebugRow< const char*, MaybeChecked >;
|
||||
cDebug() << "GeneralRequirements output:" << TR( "enoughStorage", enoughStorage ) << TR( "enoughRam", enoughRam )
|
||||
<< TR( "hasPower", hasPower ) << TR( "hasInternet", hasInternet ) << TR( "isRoot", isRoot );
|
||||
|
||||
|
|
|
@ -22,9 +22,9 @@
|
|||
#include "checker/GeneralRequirements.h"
|
||||
|
||||
#include "locale/LabelModel.h"
|
||||
#include "utils/Dirs.h"
|
||||
#include "utils/Logger.h"
|
||||
#include "utils/Variant.h"
|
||||
#include "utils/Dirs.h"
|
||||
|
||||
#include "Branding.h"
|
||||
#include "modulesystem/ModuleManager.h"
|
||||
|
@ -33,62 +33,57 @@
|
|||
CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeQmlViewStepFactory, registerPlugin< WelcomeQmlViewStep >(); )
|
||||
|
||||
WelcomeQmlViewStep::WelcomeQmlViewStep( QObject* parent )
|
||||
: Calamares::QmlViewStep(parent )
|
||||
, m_config( new Config( this ) ) // the qml singleton takes ownership and deletes it
|
||||
// , m_nextEnabled( false )
|
||||
: Calamares::QmlViewStep( parent )
|
||||
, m_config( new Config( this ) )
|
||||
, m_requirementsChecker( new GeneralRequirements( this ) )
|
||||
|
||||
{
|
||||
// connect( m_config,
|
||||
// &Config::isNextEnabledChanged,
|
||||
// this,
|
||||
// &WelcomeQmlViewStep::nextStatusChanged );
|
||||
// emit nextStatusChanged(true);
|
||||
connect( Calamares::ModuleManager::instance(),
|
||||
&Calamares::ModuleManager::requirementsComplete,
|
||||
this,
|
||||
&WelcomeQmlViewStep::nextStatusChanged );
|
||||
}
|
||||
|
||||
|
||||
QString
|
||||
WelcomeQmlViewStep::prettyName() const
|
||||
{
|
||||
return tr( "Welcome" );
|
||||
return tr( "Welcome" );
|
||||
}
|
||||
|
||||
bool
|
||||
WelcomeQmlViewStep::isNextEnabled() const
|
||||
{
|
||||
// TODO: should return true
|
||||
// return m_config->property("isNextEnabled").toBool();
|
||||
return true;
|
||||
return m_config->requirementsModel()->satisfiedMandatory();
|
||||
}
|
||||
|
||||
bool
|
||||
WelcomeQmlViewStep::isBackEnabled() const
|
||||
{
|
||||
// TODO: should return true (it's weird that you are not allowed to have welcome *after* anything
|
||||
return false;
|
||||
// TODO: should return true (it's weird that you are not allowed to have welcome *after* anything
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
WelcomeQmlViewStep::isAtBeginning() const
|
||||
{
|
||||
// TODO: adjust to "pages" in the QML
|
||||
return true;
|
||||
// TODO: adjust to "pages" in the QML
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
WelcomeQmlViewStep::isAtEnd() const
|
||||
{
|
||||
// TODO: adjust to "pages" in the QML
|
||||
return true;
|
||||
// TODO: adjust to "pages" in the QML
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Calamares::JobList
|
||||
WelcomeQmlViewStep::jobs() const
|
||||
{
|
||||
return Calamares::JobList();
|
||||
return Calamares::JobList();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -96,30 +91,29 @@ WelcomeQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
|||
{
|
||||
m_config->setConfigurationMap( configurationMap );
|
||||
|
||||
// TODO: figure out how the requirements (held by ModuleManager) should be accessible
|
||||
// to QML as a model. //will be model as a qvariantmap containing a alert level and the message string
|
||||
if ( configurationMap.contains( "requirements" )
|
||||
&& configurationMap.value( "requirements" ).type() == QVariant::Map )
|
||||
{
|
||||
m_requirementsChecker->setConfigurationMap( configurationMap.value( "requirements" ).toMap() );
|
||||
}
|
||||
else
|
||||
cWarning() << "no valid requirements map found in welcome "
|
||||
"module configuration.";
|
||||
if ( configurationMap.contains( "requirements" )
|
||||
&& configurationMap.value( "requirements" ).type() == QVariant::Map )
|
||||
{
|
||||
m_requirementsChecker->setConfigurationMap( configurationMap.value( "requirements" ).toMap() );
|
||||
}
|
||||
else
|
||||
{
|
||||
cWarning() << "no valid requirements map found in welcomeq "
|
||||
"module configuration.";
|
||||
}
|
||||
|
||||
Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last
|
||||
Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last
|
||||
setContextProperty( "Welcome", m_config );
|
||||
}
|
||||
|
||||
Calamares::RequirementsList
|
||||
WelcomeQmlViewStep::checkRequirements()
|
||||
{
|
||||
return m_requirementsChecker->checkRequirements();
|
||||
return m_requirementsChecker->checkRequirements();
|
||||
}
|
||||
|
||||
QObject*
|
||||
WelcomeQmlViewStep::getConfig()
|
||||
{
|
||||
return m_config;
|
||||
return m_config;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,6 @@ class PLUGINDLLEXPORT WelcomeQmlViewStep : public Calamares::QmlViewStep
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
explicit WelcomeQmlViewStep( QObject* parent = nullptr );
|
||||
|
||||
QString prettyName() const override;
|
||||
|
@ -74,8 +73,7 @@ public:
|
|||
QObject* getConfig() override;
|
||||
|
||||
private:
|
||||
// TODO: a generic QML viewstep should return a config object from a method
|
||||
Config *m_config;
|
||||
Config* m_config;
|
||||
GeneralRequirements* m_requirementsChecker;
|
||||
};
|
||||
|
||||
|
|
|
@ -60,14 +60,14 @@ Page
|
|||
property var required: "yes" //requirementsModel
|
||||
property var satisfied: "yes" //satisfiedRequirements
|
||||
property var requiredMet: (required != satisfied) ? true : false
|
||||
visible: requiredMet
|
||||
visible: !config.requirementsModel.satisfiedRequirements
|
||||
}
|
||||
|
||||
Requirements {
|
||||
property var required: "yes" //requirementsModel
|
||||
property var mandatory: "yes" //satisfiedMandatory
|
||||
property var mandatoryMet: (required != mandatory) ? true : false
|
||||
visible: mandatoryMet
|
||||
visible: !config.requirementsModel.satisfiedMandatory
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
|
|
Loading…
Add table
Reference in a new issue