void CreateParametersPanel::_CreateCreateControls(BPartition* parent, off_t offset, off_t size) { // Setup the controls // TODO: use a lower granularity for smaller disks -- but this would // require being able to parse arbitrary size strings with unit fSizeSlider = new SizeSlider("Slider", B_TRANSLATE("Partition size"), NULL, offset, size, kMegaByte); fSizeSlider->SetPosition(1.0); fSizeSlider->SetModificationMessage(new BMessage(MSG_SIZE_SLIDER)); fSizeTextControl = new BTextControl("Size Control", "", "", NULL); for(int32 i = 0; i < 256; i++) fSizeTextControl->TextView()->DisallowChar(i); for(int32 i = '0'; i <= '9'; i++) fSizeTextControl->TextView()->AllowChar(i); _UpdateSizeTextControl(); fSizeTextControl->SetModificationMessage( new BMessage(MSG_SIZE_TEXTCONTROL)); CreateChangeControls(parent); fOkButton->SetLabel(B_TRANSLATE("Create")); }
void CreateParamsPanel::MessageReceived(BMessage* message) { switch (message->what) { case MSG_CANCEL: Cancel(); break; case MSG_OK: fReturnValue = GO_SUCCESS; release_sem(fExitSemaphore); break; case MSG_PARTITION_TYPE: if (fEditor != NULL) { const char* type; message->FindString("type", &type); fEditor->PartitionTypeChanged(type); } break; case MSG_SIZE_SLIDER: _UpdateSizeTextControl(); break; case MSG_SIZE_TEXTCONTROL: { int32 size = atoi(fSizeTextControl->Text()); if (size >= 0 && size <= fSizeSlider->MaxPartitionSize()) fSizeSlider->SetValue(size + fSizeSlider->Offset()); else _UpdateSizeTextControl(); break; } default: BWindow::MessageReceived(message); } }
void CreateParametersPanel::MessageReceived(BMessage* message) { switch (message->what) { case MSG_SIZE_SLIDER: _UpdateSizeTextControl(); break; case MSG_SIZE_TEXTCONTROL: { off_t size = atoi(fSizeTextControl->Text()) * kMegaByte; if (size >= 0 && size <= fSizeSlider->MaxPartitionSize()) fSizeSlider->SetSize(size); else _UpdateSizeTextControl(); break; } default: ChangeParametersPanel::MessageReceived(message); } }
void CreateParamsPanel::_CreateViewControls(BPartition* parent, off_t offset, off_t size) { // Setup the controls fSizeSlider = new SizeSlider("Slider", B_TRANSLATE("Partition size"), NULL, offset, offset + size); fSizeSlider->SetPosition(1.0); fSizeSlider->SetModificationMessage(new BMessage(MSG_SIZE_SLIDER)); fSizeTextControl = new BTextControl("Size Control", "", "", NULL); for(int32 i = 0; i < 256; i++) fSizeTextControl->TextView()->DisallowChar(i); for(int32 i = '0'; i <= '9'; i++) fSizeTextControl->TextView()->AllowChar(i); _UpdateSizeTextControl(); fSizeTextControl->SetModificationMessage( new BMessage(MSG_SIZE_TEXTCONTROL)); fNameTextControl = new BTextControl("Name Control", B_TRANSLATE("Partition name:"), "", NULL); if (!parent->SupportsChildName()) fNameTextControl->SetEnabled(false); fTypePopUpMenu = new BPopUpMenu("Partition Type"); int32 cookie = 0; BString supportedType; while (parent->GetNextSupportedChildType(&cookie, &supportedType) == B_OK) { BMessage* message = new BMessage(MSG_PARTITION_TYPE); message->AddString("type", supportedType); BMenuItem* item = new BMenuItem(supportedType, message); fTypePopUpMenu->AddItem(item); if (strcmp(supportedType, kPartitionTypeBFS) == 0) item->SetMarked(true); } fTypeMenuField = new BMenuField(B_TRANSLATE("Partition type:"), fTypePopUpMenu); const float spacing = be_control_look->DefaultItemSpacing(); BGroupLayout* layout = new BGroupLayout(B_VERTICAL, spacing); layout->SetInsets(spacing, spacing, spacing, spacing); SetLayout(layout); AddChild(BGroupLayoutBuilder(B_VERTICAL, spacing) .Add(fSizeSlider) .Add(fSizeTextControl) .Add(BGridLayoutBuilder(0.0, 5.0) .Add(fNameTextControl->CreateLabelLayoutItem(), 0, 0) .Add(fNameTextControl->CreateTextViewLayoutItem(), 1, 0) .Add(fTypeMenuField->CreateLabelLayoutItem(), 0, 1) .Add(fTypeMenuField->CreateMenuBarLayoutItem(), 1, 1) ) ); status_t err = parent->GetParameterEditor(B_CREATE_PARAMETER_EDITOR, &fEditor); if (err == B_OK && fEditor != NULL) AddChild(fEditor->View()); else fEditor = NULL; BButton* okButton = new BButton(B_TRANSLATE("Create"), new BMessage(MSG_OK)); AddChild(BGroupLayoutBuilder(B_HORIZONTAL, spacing) .AddGlue() .Add(new BButton(B_TRANSLATE("Cancel"), new BMessage(MSG_CANCEL))) .Add(okButton) ); SetDefaultButton(okButton); AddToSubset(fWindow); layout->View()->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); }