xref: /haiku/src/add-ons/disk_systems/intel/PrimaryParameterEditor.cpp (revision c936122410bc6e704c35de5267e3a34f5450d366)
133b9016dSAxel Dörfler /*
233b9016dSAxel Dörfler  * Copyright 2013, Axel Dörfler, axeld@pinc-software.de.
333b9016dSAxel Dörfler  * Copyright 2009, Bryce Groff, brycegroff@gmail.com.
433b9016dSAxel Dörfler  * Distributed under the terms of the MIT License.
533b9016dSAxel Dörfler  */
633b9016dSAxel Dörfler 
733b9016dSAxel Dörfler 
833b9016dSAxel Dörfler #include "PrimaryParameterEditor.h"
933b9016dSAxel Dörfler 
1033b9016dSAxel Dörfler #include <Catalog.h>
1133b9016dSAxel Dörfler #include <DiskDeviceTypes.h>
1233b9016dSAxel Dörfler #include <GroupView.h>
13*c9361224SJérôme Duval #include <Partition.h>
1433b9016dSAxel Dörfler #include <PartitionParameterEditor.h>
1533b9016dSAxel Dörfler #include <Variant.h>
1633b9016dSAxel Dörfler #include <View.h>
17*c9361224SJérôme Duval #include <driver_settings.h>
1833b9016dSAxel Dörfler 
1933b9016dSAxel Dörfler 
2033b9016dSAxel Dörfler #undef B_TRANSLATION_CONTEXT
2133b9016dSAxel Dörfler #define B_TRANSLATION_CONTEXT "PrimaryPartitionEditor"
2233b9016dSAxel Dörfler 
2333b9016dSAxel Dörfler 
PrimaryPartitionEditor(bool create)24*c9361224SJérôme Duval PrimaryPartitionEditor::PrimaryPartitionEditor(bool create)
25*c9361224SJérôme Duval 	:
26*c9361224SJérôme Duval 	fCreate(create)
2733b9016dSAxel Dörfler {
2833b9016dSAxel Dörfler 	fActiveCheckBox = new BCheckBox("active", B_TRANSLATE("Active partition"),
2933b9016dSAxel Dörfler 		NULL);
3033b9016dSAxel Dörfler 	fView = new BGroupView(B_VERTICAL);
3133b9016dSAxel Dörfler 	fView->AddChild(fActiveCheckBox);
3233b9016dSAxel Dörfler }
3333b9016dSAxel Dörfler 
3433b9016dSAxel Dörfler 
~PrimaryPartitionEditor()3533b9016dSAxel Dörfler PrimaryPartitionEditor::~PrimaryPartitionEditor()
3633b9016dSAxel Dörfler {
3733b9016dSAxel Dörfler }
3833b9016dSAxel Dörfler 
3933b9016dSAxel Dörfler 
40*c9361224SJérôme Duval void
SetTo(BPartition * partition)41*c9361224SJérôme Duval PrimaryPartitionEditor::SetTo(BPartition* partition)
42*c9361224SJérôme Duval {
43*c9361224SJérôme Duval 	bool active = false;
44*c9361224SJérôme Duval 	if (fCreate) {
45*c9361224SJérôme Duval 		active = partition->CountChildren() == 0;
46*c9361224SJérôme Duval 	} else {
47*c9361224SJérôme Duval 		void* handle = parse_driver_settings_string(partition->Parameters());
48*c9361224SJérôme Duval 		active = get_driver_boolean_parameter(handle, "active", false, true);
49*c9361224SJérôme Duval 		unload_driver_settings(handle);
50*c9361224SJérôme Duval 	}
51*c9361224SJérôme Duval 	fActiveCheckBox->SetValue(active ? B_CONTROL_ON : B_CONTROL_OFF);
52*c9361224SJérôme Duval }
53*c9361224SJérôme Duval 
54*c9361224SJérôme Duval 
5533b9016dSAxel Dörfler BView*
View()5633b9016dSAxel Dörfler PrimaryPartitionEditor::View()
5733b9016dSAxel Dörfler {
5833b9016dSAxel Dörfler 	return fView;
5933b9016dSAxel Dörfler }
6033b9016dSAxel Dörfler 
6133b9016dSAxel Dörfler 
6233b9016dSAxel Dörfler status_t
ParameterChanged(const char * name,const BVariant & variant)6333b9016dSAxel Dörfler PrimaryPartitionEditor::ParameterChanged(const char* name,
6433b9016dSAxel Dörfler 	const BVariant& variant)
6533b9016dSAxel Dörfler {
669274ca84SAdrien Destugues 	if (strcmp(name, "type") == 0) {
6733b9016dSAxel Dörfler 		fActiveCheckBox->SetEnabled(strcmp(variant.ToString(),
6833b9016dSAxel Dörfler 			kPartitionTypeIntelExtended) != 0);
699274ca84SAdrien Destugues 		fActiveCheckBox->SetValue(false);
7033b9016dSAxel Dörfler 	}
719274ca84SAdrien Destugues 
729274ca84SAdrien Destugues 	if (strcmp(name, "active") == 0)
739274ca84SAdrien Destugues 		fActiveCheckBox->SetValue(variant.ToBool());
749274ca84SAdrien Destugues 
7533b9016dSAxel Dörfler 	return B_OK;
7633b9016dSAxel Dörfler }
7733b9016dSAxel Dörfler 
7833b9016dSAxel Dörfler 
7933b9016dSAxel Dörfler status_t
GetParameters(BString & parameters)8033b9016dSAxel Dörfler PrimaryPartitionEditor::GetParameters(BString& parameters)
8133b9016dSAxel Dörfler {
8233b9016dSAxel Dörfler 	if (fActiveCheckBox->IsEnabled()) {
8333b9016dSAxel Dörfler 		if (fActiveCheckBox->Value() == B_CONTROL_ON)
8433b9016dSAxel Dörfler 			parameters.SetTo("active true ;");
8533b9016dSAxel Dörfler 		else
8633b9016dSAxel Dörfler 			parameters.SetTo("active false ;");
8733b9016dSAxel Dörfler 	} else
8833b9016dSAxel Dörfler 		parameters.SetTo("");
8933b9016dSAxel Dörfler 
9033b9016dSAxel Dörfler 	return B_OK;
9133b9016dSAxel Dörfler }
92