* Copyright 2013, Axel DΓΆrfler, axeld@pinc-software.de.
* Copyright 2009, Bryce Groff, brycegroff@gmail.com.
* Distributed under the terms of the MIT License.
*/
#include "PrimaryParameterEditor.h"
#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(bool create)
:
fCreate(create)
{
fActiveCheckBox = new BCheckBox("active", B_TRANSLATE("Active partition"),
NULL);
fView = new BGroupView(B_VERTICAL);
fView->AddChild(fActiveCheckBox);
}
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()
{
return fView;
}
status_t
PrimaryPartitionEditor::ParameterChanged(const char* name,
const BVariant& variant)
{
if (strcmp(name, "type") == 0) {
fActiveCheckBox->SetEnabled(strcmp(variant.ToString(),
kPartitionTypeIntelExtended) != 0);
fActiveCheckBox->SetValue(false);
}
if (strcmp(name, "active") == 0)
fActiveCheckBox->SetValue(variant.ToBool());
return B_OK;
}
status_t
PrimaryPartitionEditor::GetParameters(BString& parameters)
{
if (fActiveCheckBox->IsEnabled()) {
if (fActiveCheckBox->Value() == B_CONTROL_ON)
parameters.SetTo("active true ;");
else
parameters.SetTo("active false ;");
} else
parameters.SetTo("");
return B_OK;
}