From c936122410bc6e704c35de5267e3a34f5450d366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 12 Sep 2024 18:30:34 +0200 Subject: [PATCH] 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 Reviewed-by: Adrien Destugues --- .../disk_systems/intel/PartitionMapAddOn.cpp | 2 +- .../intel/PrimaryParameterEditor.cpp | 21 ++++++++++++++++++- .../intel/PrimaryParameterEditor.h | 5 ++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/add-ons/disk_systems/intel/PartitionMapAddOn.cpp b/src/add-ons/disk_systems/intel/PartitionMapAddOn.cpp index e8d476d541..67cf50684b 100644 --- a/src/add-ons/disk_systems/intel/PartitionMapAddOn.cpp +++ b/src/add-ons/disk_systems/intel/PartitionMapAddOn.cpp @@ -340,7 +340,7 @@ PartitionMapHandle::GetParameterEditor(B_PARAMETER_EDITOR_TYPE type, if (type == B_CREATE_PARAMETER_EDITOR || type == B_PROPERTIES_PARAMETER_EDITOR) { try { - *editor = new PrimaryPartitionEditor(); + *editor = new PrimaryPartitionEditor(type == B_CREATE_PARAMETER_EDITOR); } catch (std::bad_alloc&) { return B_NO_MEMORY; } diff --git a/src/add-ons/disk_systems/intel/PrimaryParameterEditor.cpp b/src/add-ons/disk_systems/intel/PrimaryParameterEditor.cpp index 2ccbac627b..369b5e3a6b 100644 --- a/src/add-ons/disk_systems/intel/PrimaryParameterEditor.cpp +++ b/src/add-ons/disk_systems/intel/PrimaryParameterEditor.cpp @@ -10,16 +10,20 @@ #include #include #include +#include #include #include #include +#include #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "PrimaryPartitionEditor" -PrimaryPartitionEditor::PrimaryPartitionEditor() +PrimaryPartitionEditor::PrimaryPartitionEditor(bool create) + : + fCreate(create) { fActiveCheckBox = new BCheckBox("active", B_TRANSLATE("Active partition"), 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* PrimaryPartitionEditor::View() { diff --git a/src/add-ons/disk_systems/intel/PrimaryParameterEditor.h b/src/add-ons/disk_systems/intel/PrimaryParameterEditor.h index fad1f1caed..7c86ef91bd 100644 --- a/src/add-ons/disk_systems/intel/PrimaryParameterEditor.h +++ b/src/add-ons/disk_systems/intel/PrimaryParameterEditor.h @@ -16,9 +16,11 @@ class PrimaryPartitionEditor : public BPartitionParameterEditor { public: - PrimaryPartitionEditor(); + PrimaryPartitionEditor(bool create); virtual ~PrimaryPartitionEditor(); + virtual void SetTo(BPartition* partition); + virtual BView* View(); virtual status_t ParameterChanged(const char* name, @@ -27,6 +29,7 @@ public: virtual status_t GetParameters(BString& parameters); private: + bool fCreate; BView* fView; BCheckBox* fActiveCheckBox; };