/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PARTITION_CONFIG_H #define PARTITION_CONFIG_H #include "utils/NamedEnum.h" #include #include class Config : public QObject { Q_OBJECT /** @brief The installation choice (Erase, Alongside, ...) * * This is an int because exposing the enum values is slightly complicated * by the source layout. */ Q_PROPERTY( InstallChoice installChoice READ installChoice WRITE setInstallChoice NOTIFY installChoiceChanged ) public: Config( QObject* parent ); virtual ~Config() = default; enum InstallChoice { NoChoice, Alongside, Erase, Replace, Manual }; Q_ENUM( InstallChoice ) static const NamedEnumTable< InstallChoice >& installChoiceNames(); /** @brief Choice of swap (size and type) */ enum SwapChoice { NoSwap, // don't create any swap, don't use any ReuseSwap, // don't create, but do use existing SmallSwap, // up to 8GiB of swap FullSwap, // ensureSuspendToDisk -- at least RAM size SwapFile // use a file (if supported) }; Q_ENUM( SwapChoice ) static const NamedEnumTable< SwapChoice >& swapChoiceNames(); using SwapChoiceSet = QSet< SwapChoice >; void setConfigurationMap( const QVariantMap& ); void updateGlobalStorage() const; SwapChoiceSet swapChoices() const { return m_swapChoices; } /** @brief What kind of installation (partitioning) is requested **initially**? * * @return the partitioning choice (may be @c NoChoice) */ InstallChoice initialInstallChoice() const { return m_initialInstallChoice; } /** @brief What kind of installation (partition) is requested **now**? * * This changes depending on what the user selects (unlike the initial choice, * which is fixed by the configuration). * * @return the partitioning choice (may be @c NoChoice) */ InstallChoice installChoice() const { return m_installChoice; } /** @brief What kind of swap selection is requested **initially**? * * @return The swap choice (may be @c NoSwap ) */ SwapChoice initialSwapChoice() const { return m_initialSwapChoice; } public Q_SLOTS: void setInstallChoice( int ); void setInstallChoice( InstallChoice ); Q_SIGNALS: void installChoiceChanged( InstallChoice ); private: SwapChoice m_initialSwapChoice; SwapChoiceSet m_swapChoices; InstallChoice m_initialInstallChoice = NoChoice; InstallChoice m_installChoice = NoChoice; qreal m_requiredStorageGiB = 0.0; // May duplicate setting in the welcome module }; /** @brief Given a set of swap choices, return a sensible value from it. * * "Sensible" here means: if there is one value, use it; otherwise, use * NoSwap if there are no choices, or if NoSwap is one of the choices, in the set. * If that's not possible, any value from the set. */ Config::SwapChoice pickOne( const Config::SwapChoiceSet& s ); #endif