From ed4127f6616b4db5720d6a2a2b546a70c11d5ef1 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 12 Jan 2020 12:18:13 +0100 Subject: [PATCH] [libcalamaresui] Shuffle the module interface - introduce NamedEnum lookup tables for interface and type - drop "final" and "virtual" from methods that don't make sense as virtual - shuffle declaration order so the virtual API for modules sits together --- src/libcalamaresui/modulesystem/Module.cpp | 64 +++++++++++++-------- src/libcalamaresui/modulesystem/Module.h | 66 +++++++++++----------- 2 files changed, 72 insertions(+), 58 deletions(-) diff --git a/src/libcalamaresui/modulesystem/Module.cpp b/src/libcalamaresui/modulesystem/Module.cpp index 7608bd3ec..2d2ea3def 100644 --- a/src/libcalamaresui/modulesystem/Module.cpp +++ b/src/libcalamaresui/modulesystem/Module.cpp @@ -27,6 +27,7 @@ #include "utils/Dirs.h" #include "utils/Logger.h" +#include "utils/NamedEnum.h" #include "utils/Yaml.h" #ifdef WITH_PYTHON @@ -152,7 +153,7 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor, cError() << "Module" << instanceId << "invalid ID"; return nullptr; } - + m->initFrom( moduleDescriptor ); try { @@ -243,42 +244,55 @@ void Module::loadConfigurationFile( const QString& configFileName ) //throws YA } -QString -Module::location() const +static const NamedEnumTable< Module::Type >& +typeNames() { - return m_directory; + using Type = Module::Type; + // *INDENT-OFF* + // clang-format off + static const NamedEnumTable< Type > table{ + { QStringLiteral( "job" ), Type::Job }, + { QStringLiteral( "view" ), Type::View }, + { QStringLiteral( "viewmodule" ), Type::View }, + { QStringLiteral( "jobmodule" ), Type::Job } + }; + // *INDENT-ON* + // clang-format on + return table; } - QString Module::typeString() const { - switch ( type() ) - { - case Type::Job: - return "Job Module"; - case Type::View: - return "View Module"; - } - return QString(); + bool ok = false; + QString v = typeNames().find( type(), ok ); + return ok ? v : QString(); } +static const NamedEnumTable< Module::Interface >& +interfaceNames() +{ + using Interface = Module::Interface; + // *INDENT-OFF* + // clang-format off + static const NamedEnumTable< Interface > table { + { QStringLiteral("process"), Interface::Process }, + { QStringLiteral("qtplugin"), Interface::QtPlugin }, + { QStringLiteral("python"), Interface::Python }, + { QStringLiteral("pythonqt"), Interface::PythonQt } + }; + // *INDENT-ON* + // clang-format on + return table; +} + QString Module::interfaceString() const { - switch ( interface() ) - { - case Interface::Process: - return "External process"; - case Interface::Python: - return "Python (Boost.Python)"; - case Interface::PythonQt: - return "Python (experimental)"; - case Interface::QtPlugin: - return "Qt Plugin"; - } - return QString(); + bool ok = false; + QString v = interfaceNames().find( interface(), ok ); + return ok ? v : QString(); } diff --git a/src/libcalamaresui/modulesystem/Module.h b/src/libcalamaresui/modulesystem/Module.h index d96ac152d..88eba4dcf 100644 --- a/src/libcalamaresui/modulesystem/Module.h +++ b/src/libcalamaresui/modulesystem/Module.h @@ -106,37 +106,43 @@ public: * @brief location returns the full path of this module's directory. * @return the path. */ - virtual QString location() const final; + QString location() const { return m_directory; } /** - * @brief type returns the Type of this module object. - * @return the type enum value. + * @brief Is this an emergency module? + * + * An emergency module is run even if an error occurs + * which would terminate Calamares earlier in the same + * *exec* block. Emergency modules in later exec blocks + * are not run (in the common case where there is only + * one exec block, this doesn't really matter). */ - virtual Type type() const = 0; + bool isEmergency() const { return m_emergency; } /** - * @brief typeString returns a user-visible string for the module's type. - * @return the type string. + * @brief isLoaded reports on the loaded status of a module. + * @return true if the module's loading phase has finished, otherwise false. */ - virtual QString typeString() const; + bool isLoaded() const { return m_loaded; } /** - * @brief interface the Interface used by this module. - * @return the interface enum value. + * @brief configurationMap returns the contents of the configuration file for + * this module instance. + * @return the instance's configuration, already parsed from YAML into a variant map. */ - virtual Interface interface() const = 0; + QVariantMap configurationMap(); /** - * @brief interface returns a user-visible string for the module's interface. - * @return the interface string. + * @brief typeString returns a user-visible string for the module's type. + * @return the type string. */ - virtual QString interfaceString() const; + QString typeString() const; /** - * @brief isLoaded reports on the loaded status of a module. - * @return true if the module's loading phase has finished, otherwise false. + * @brief interface returns a user-visible string for the module's interface. + * @return the interface string. */ - bool isLoaded() const { return m_loaded; } + QString interfaceString() const; /** * @brief loadSelf initialized the module. @@ -144,17 +150,6 @@ public: */ virtual void loadSelf() = 0; - /** - * @brief Is this an emergency module? - * - * An emergency module is run even if an error occurs - * which would terminate Calamares earlier in the same - * *exec* block. Emergency modules in later exec blocks - * are not run (in the common case where there is only - * one exec block, this doesn't really matter). - */ - bool isEmergency() const { return m_emergency; } - /** * @brief jobs returns any jobs exposed by this module. * @return a list of jobs (can be empty). @@ -162,11 +157,16 @@ public: virtual JobList jobs() const = 0; /** - * @brief configurationMap returns the contents of the configuration file for - * this module instance. - * @return the instance's configuration, already parsed from YAML into a variant map. + * @brief type returns the Type of this module object. + * @return the type enum value. */ - QVariantMap configurationMap(); + virtual Type type() const = 0; + + /** + * @brief interface the Interface used by this module. + * @return the interface enum value. + */ + virtual Interface interface() const = 0; /** * @brief Check the requirements of this module. @@ -175,12 +175,12 @@ public: protected: explicit Module(); - + /// @brief For subclasses to read their part of the descriptor virtual void initFrom( const QVariantMap& moduleDescriptor ) = 0; /// @brief Generic part of descriptor reading (and instance id) void initFrom( const QVariantMap& moduleDescriptor, const QString& id ); - + QVariantMap m_configurationMap; bool m_loaded = false;