1/* 2 * Copyright 2015, Fran��ois Revol <revol@free.fr> 3 * Copyright 2009-2010, Stephan A��mus <superstippi@gmx.de> 4 * Copyright 2009, Bryce Groff, brycegroff@gmail.com. 5 * Distributed under the terms of the MIT License. 6 */ 7 8 9#include <stdio.h> 10 11#include "InitializeParameterEditor.h" 12 13#include <Button.h> 14#include <Catalog.h> 15#include <CheckBox.h> 16#include <ControlLook.h> 17#include <GridLayoutBuilder.h> 18#include <MenuField.h> 19#include <MenuItem.h> 20#include <Partition.h> 21#include <PopUpMenu.h> 22#include <SpaceLayoutItem.h> 23#include <TextControl.h> 24#include <Variant.h> 25#include <View.h> 26#include <Window.h> 27 28 29#undef B_TRANSLATION_CONTEXT 30#define B_TRANSLATION_CONTEXT "FAT_Initialize_Parameter" 31 32 33static uint32 MSG_NAME_CHANGED = 'nmch'; 34static uint32 MSG_FAT_BITS = 'fatb'; 35 36InitializeFATEditor::InitializeFATEditor() 37 : 38 BPartitionParameterEditor(), 39 fView(NULL), 40 fNameControl(NULL), 41 fFatBitsMenuField(NULL), 42 fParameters(NULL) 43{ 44 _CreateViewControls(); 45} 46 47 48InitializeFATEditor::~InitializeFATEditor() 49{ 50} 51 52 53void 54InitializeFATEditor::SetTo(BPartition* partition) 55{ 56 BString name = partition->Name(); 57 if (name.IsEmpty()) 58 name = partition->RawContentName(); 59 if (!name.IsEmpty()) 60 fNameControl->SetText(name.String()); 61} 62 63 64BView* 65InitializeFATEditor::View() 66{ 67 return fView; 68} 69 70 71bool 72InitializeFATEditor::ValidateParameters() const 73{ 74 // The name must be set 75 return fNameControl->TextView()->TextLength() > 0; 76} 77 78 79status_t 80InitializeFATEditor::ParameterChanged(const char* name, 81 const BVariant& variant) 82{ 83 if (!strcmp(name, "name")) 84 fNameControl->SetText(variant.ToString()); 85 return B_OK; 86} 87 88 89status_t 90InitializeFATEditor::GetParameters(BString& parameters) 91{ 92 parameters = ""; 93 94 if (BMenuItem* item = fFatBitsMenuField->Menu()->FindMarked()) { 95 const char* size; 96 BMessage* message = item->Message(); 97 if (!message || message->FindString("fat", &size) < B_OK) 98 size = "0"; // autodetect 99 // TODO: use libroot driver settings API 100 parameters << "fat " << size << ";\n"; 101 } 102 103 parameters << "name \""; 104 parameters << fNameControl->Text() << "\";\n"; 105printf("p:%s", parameters.String()); 106 return B_OK; 107} 108 109 110void 111InitializeFATEditor::_CreateViewControls() 112{ 113 fNameControl = new BTextControl(B_TRANSLATE("Name:"), "New FAT Vol", 114 NULL); 115 fNameControl->SetModificationMessage(new BMessage(MSG_NAME_CHANGED)); 116 // TODO find out what is the max length for this specific FS partition name 117 fNameControl->TextView()->SetMaxBytes(11); 118 119 BPopUpMenu* fatBitsMenu = new BPopUpMenu("fat size"); 120 BMessage* message = new BMessage(MSG_FAT_BITS); 121 message->AddString("fat", "0"); 122 BMenuItem* defaultItem = new BMenuItem( 123 B_TRANSLATE("Auto (default)"), message); 124 fatBitsMenu->AddItem(defaultItem); 125 message = new BMessage(MSG_FAT_BITS); 126 message->AddString("fat", "12"); 127 fatBitsMenu->AddItem(new BMenuItem("12", message)); 128 message = new BMessage(MSG_FAT_BITS); 129 message->AddString("fat", "16"); 130 fatBitsMenu->AddItem(new BMenuItem("16", message)); 131 message = new BMessage(MSG_FAT_BITS); 132 message->AddString("fat", "32"); 133 fatBitsMenu->AddItem(new BMenuItem("32", message)); 134 135 fFatBitsMenuField = new BMenuField(B_TRANSLATE("FAT bits:"), 136 fatBitsMenu); 137 defaultItem->SetMarked(true); 138 139 float spacing = be_control_look->DefaultItemSpacing(); 140 141 fView = BGridLayoutBuilder(spacing, spacing) 142 // row 1 143 .Add(fNameControl->CreateLabelLayoutItem(), 0, 0) 144 .Add(fNameControl->CreateTextViewLayoutItem(), 1, 0) 145 146 // row 2 147 .Add(fFatBitsMenuField->CreateLabelLayoutItem(), 0, 1) 148 .Add(fFatBitsMenuField->CreateMenuBarLayoutItem(), 1, 1).View() 149 ; 150} 151