#ifndef PACKAGESELECTVIEWSTEP_H #define PACKAGESELECTVIEWSTEP_H #include #include #include #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" namespace Ui { class pkgselect; } class QCheckBox; /** * @class PackageSelectViewStep * @brief A Calamares view step for selecting and customizing packages during installation. * * This class provides a user interface for selecting additional packages to install, * managing installation modes, and handling network availability scenarios. */ class PLUGINDLLEXPORT PackageSelectViewStep : public Calamares::ViewStep { Q_OBJECT public: /** * @brief Constructs a new PackageSelectViewStep object. * @param parent The parent QObject. */ explicit PackageSelectViewStep(QObject* parent = nullptr); /** * @brief Destroys the PackageSelectViewStep object. */ ~PackageSelectViewStep() override; /** * @brief Returns the display name of the step. * @return The pretty name as a QString. */ QString prettyName() const override; /** * @brief Returns the widget associated with this step. * @return A pointer to the QWidget. */ QWidget* widget() override; /** * @brief Returns the list of jobs to execute for this step. * @return An empty Calamares::JobList. */ Calamares::JobList jobs() const override; /** * @brief Indicates whether the "Next" button is enabled. * @return Always returns true. */ bool isNextEnabled() const override; /** * @brief Indicates whether the "Back" button is enabled. * @return Always returns true. */ bool isBackEnabled() const override; /** * @brief Indicates whether the step is at the beginning. * @return Always returns true. */ bool isAtBeginning() const override; /** * @brief Indicates whether the step is at the end. * @return Always returns true. */ bool isAtEnd() const override; /** * @brief Activates the step, setting up the UI based on network availability and configuration. */ void onActivate() override; /** * @brief Handles actions to perform when leaving the step, such as storing selected packages. */ void onLeave() override; /** * @brief Sets the configuration map for the step. * @param configurationMap The QVariantMap containing configuration data. */ void setConfigurationMap(const QVariantMap& configurationMap) override; /** * @brief Retrieves the current package selections. * @return A QVariantMap of package selections. */ QVariantMap packageSelections() const { return m_packageSelections; } public slots: /** * @brief Slot to handle checkbox toggle events. * @param checked The new checked state of the checkbox. */ void updatePackageSelections(bool checked); signals: /** * @brief Signal emitted when package selections change. */ void packageSelectionsChanged(); private: /** * @brief Retrieves the checkbox associated with a given package ID. * @param id The package ID. * @return A pointer to the QCheckBox, or nullptr if not found. */ QCheckBox* getCheckboxById(const QString& id) const; /** * @brief Checks if a given key exists in package selections and is set to true. * @param key The key to check. * @return True if the key exists and is true, otherwise false. */ bool exists_and_true(const QString& key) const; QVariantMap m_packageSelections; ///< Stores the state of package selections. Ui::pkgselect* ui; ///< Pointer to the UI class. QWidget* m_widget; ///< Pointer to the main widget of the step. QVariantMap m_configurationMap; ///< Stores configuration data. QMap m_packageCheckBoxes; ///< Maps package IDs to their corresponding checkboxes. bool m_connectionsMade; ///< Flag to ensure signal connections are made only once. }; CALAMARES_PLUGIN_FACTORY_DECLARATION(PackageSelectViewStepFactory) #endif // PACKAGESELECTVIEWSTEP_H