intel: enable the active checkbox, if it's the first primary partition

* also set the active checkbox on edit
* part of #7930

Change-Id: Ia91e5f7295e7868647cf940aa1f281bd8dab1918
Reviewed-on: https://review.haiku-os.org/c/haiku/+/8323
Haiku-Format: Haiku-format Bot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
Jérôme Duval
2024-09-12 18:44:32 +00:00
committed by waddlesplash
parent afa8cd9c31
commit c936122410
3 changed files with 25 additions and 3 deletions
@@ -340,7 +340,7 @@ PartitionMapHandle::GetParameterEditor(B_PARAMETER_EDITOR_TYPE type,
if (type == B_CREATE_PARAMETER_EDITOR if (type == B_CREATE_PARAMETER_EDITOR
|| type == B_PROPERTIES_PARAMETER_EDITOR) { || type == B_PROPERTIES_PARAMETER_EDITOR) {
try { try {
*editor = new PrimaryPartitionEditor(); *editor = new PrimaryPartitionEditor(type == B_CREATE_PARAMETER_EDITOR);
} catch (std::bad_alloc&) { } catch (std::bad_alloc&) {
return B_NO_MEMORY; return B_NO_MEMORY;
} }
@@ -10,16 +10,20 @@
#include <Catalog.h> #include <Catalog.h>
#include <DiskDeviceTypes.h> #include <DiskDeviceTypes.h>
#include <GroupView.h> #include <GroupView.h>
#include <Partition.h>
#include <PartitionParameterEditor.h> #include <PartitionParameterEditor.h>
#include <Variant.h> #include <Variant.h>
#include <View.h> #include <View.h>
#include <driver_settings.h>
#undef B_TRANSLATION_CONTEXT #undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "PrimaryPartitionEditor" #define B_TRANSLATION_CONTEXT "PrimaryPartitionEditor"
PrimaryPartitionEditor::PrimaryPartitionEditor() PrimaryPartitionEditor::PrimaryPartitionEditor(bool create)
:
fCreate(create)
{ {
fActiveCheckBox = new BCheckBox("active", B_TRANSLATE("Active partition"), fActiveCheckBox = new BCheckBox("active", B_TRANSLATE("Active partition"),
NULL); NULL);
@@ -33,6 +37,21 @@ PrimaryPartitionEditor::~PrimaryPartitionEditor()
} }
void
PrimaryPartitionEditor::SetTo(BPartition* partition)
{
bool active = false;
if (fCreate) {
active = partition->CountChildren() == 0;
} else {
void* handle = parse_driver_settings_string(partition->Parameters());
active = get_driver_boolean_parameter(handle, "active", false, true);
unload_driver_settings(handle);
}
fActiveCheckBox->SetValue(active ? B_CONTROL_ON : B_CONTROL_OFF);
}
BView* BView*
PrimaryPartitionEditor::View() PrimaryPartitionEditor::View()
{ {
@@ -16,9 +16,11 @@
class PrimaryPartitionEditor : public BPartitionParameterEditor { class PrimaryPartitionEditor : public BPartitionParameterEditor {
public: public:
PrimaryPartitionEditor(); PrimaryPartitionEditor(bool create);
virtual ~PrimaryPartitionEditor(); virtual ~PrimaryPartitionEditor();
virtual void SetTo(BPartition* partition);
virtual BView* View(); virtual BView* View();
virtual status_t ParameterChanged(const char* name, virtual status_t ParameterChanged(const char* name,
@@ -27,6 +29,7 @@ public:
virtual status_t GetParameters(BString& parameters); virtual status_t GetParameters(BString& parameters);
private: private:
bool fCreate;
BView* fView; BView* fView;
BCheckBox* fActiveCheckBox; BCheckBox* fActiveCheckBox;
}; };