[partition] Consolidate SwapChoice handling

- pickOne() may be useful, given a set of swap choices; expose it
- move type definitions to PartitionActions, where some of them
  come from.
This commit is contained in:
Adriaan de Groot 2020-05-18 14:12:50 +02:00
parent 4ae398c18d
commit 68bb066755
5 changed files with 33 additions and 24 deletions

View File

@ -28,7 +28,7 @@ Config::Config( QObject* parent )
{ {
} }
Config::SwapChoices static PartitionActions::Choices::SwapChoiceSet
getSwapChoices( const QVariantMap& configurationMap ) getSwapChoices( const QVariantMap& configurationMap )
{ {
// SWAP SETTINGS // SWAP SETTINGS
@ -53,7 +53,7 @@ getSwapChoices( const QVariantMap& configurationMap )
} }
bool neverCreateSwap = CalamaresUtils::getBool( configurationMap, "neverCreateSwap", false ); bool neverCreateSwap = CalamaresUtils::getBool( configurationMap, "neverCreateSwap", false );
Config::SwapChoices choices; // Available swap choices PartitionActions::Choices::SwapChoiceSet choices; // Available swap choices
if ( configurationMap.contains( "userSwapChoices" ) ) if ( configurationMap.contains( "userSwapChoices" ) )
{ {
// We've already warned about overlapping settings with the // We've already warned about overlapping settings with the

View File

@ -36,10 +36,8 @@ public:
void updateGlobalStorage() const; void updateGlobalStorage() const;
using SwapChoices = QSet< PartitionActions::Choices::SwapChoice >;
private: private:
SwapChoices m_swapChoices; PartitionActions::Choices::SwapChoiceSet m_swapChoices;
qreal m_requiredStorageGiB = 0.0; // May duplicate setting in the welcome module qreal m_requiredStorageGiB = 0.0; // May duplicate setting in the welcome module
}; };

View File

@ -293,6 +293,25 @@ choiceToName( SwapChoice c )
return nameTable().find( c, ok ); return nameTable().find( c, ok );
} }
SwapChoice
pickOne( const SwapChoiceSet& s )
{
if ( s.count() == 0 )
{
return SwapChoice::NoSwap;
}
if ( s.count() == 1 )
{
return *( s.begin() );
}
if ( s.contains( SwapChoice::NoSwap ) )
{
return SwapChoice::NoSwap;
}
// Here, count > 1 but NoSwap is not a member.
return *( s.begin() );
}
} // namespace Choices } // namespace Choices
} // namespace PartitionActions } // namespace PartitionActions

View File

@ -19,6 +19,7 @@
#ifndef PARTITIONACTIONS_H #ifndef PARTITIONACTIONS_H
#define PARTITIONACTIONS_H #define PARTITIONACTIONS_H
#include <QSet>
#include <QString> #include <QString>
class PartitionCoreModule; class PartitionCoreModule;
@ -42,10 +43,19 @@ enum SwapChoice
FullSwap, // ensureSuspendToDisk -- at least RAM size FullSwap, // ensureSuspendToDisk -- at least RAM size
SwapFile // use a file (if supported) SwapFile // use a file (if supported)
}; };
using SwapChoiceSet = QSet< SwapChoice >;
SwapChoice nameToChoice( QString name, bool& ok ); SwapChoice nameToChoice( QString name, bool& ok );
QString choiceToName( SwapChoice ); QString choiceToName( SwapChoice );
/** @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.
*/
SwapChoice pickOne( const SwapChoiceSet& s );
struct ReplacePartitionOptions struct ReplacePartitionOptions
{ {
QString defaultFsType; // e.g. "ext4" or "btrfs" QString defaultFsType; // e.g. "ext4" or "btrfs"

View File

@ -70,24 +70,6 @@ using CalamaresUtils::Partition::isPartitionFreeSpace;
using CalamaresUtils::Partition::findPartitionByPath; using CalamaresUtils::Partition::findPartitionByPath;
using Calamares::PrettyRadioButton; using Calamares::PrettyRadioButton;
/** @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.
*/
SwapChoice pickOne( const SwapChoiceSet& s )
{
if ( s.count() == 0 )
return SwapChoice::NoSwap;
if ( s.count() == 1 )
return *( s.begin() );
if ( s.contains( SwapChoice::NoSwap ) )
return SwapChoice::NoSwap;
// Here, count > 1 but NoSwap is not a member.
return *( s.begin() );
}
/** /**
* @brief ChoicePage::ChoicePage is the default constructor. Called on startup as part of * @brief ChoicePage::ChoicePage is the default constructor. Called on startup as part of
* the module loading code path. * the module loading code path.
@ -112,7 +94,7 @@ ChoicePage::ChoicePage( const SwapChoiceSet& swapChoices, QWidget* parent )
, m_lastSelectedDeviceIndex( -1 ) , m_lastSelectedDeviceIndex( -1 )
, m_enableEncryptionWidget( true ) , m_enableEncryptionWidget( true )
, m_availableSwapChoices( swapChoices ) , m_availableSwapChoices( swapChoices )
, m_eraseSwapChoice( pickOne( swapChoices ) ) , m_eraseSwapChoice( PartitionActions::Choices::pickOne( swapChoices ) )
, m_allowManualPartitioning( true ) , m_allowManualPartitioning( true )
{ {
setupUi( this ); setupUi( this );