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
|| 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;
}
@@ -10,16 +10,20 @@
#include <Catalog.h>
#include <DiskDeviceTypes.h>
#include <GroupView.h>
#include <Partition.h>
#include <PartitionParameterEditor.h>
#include <Variant.h>
#include <View.h>
#include <driver_settings.h>
#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()
{
@@ -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;
};