Author: axeld Date: 2011-01-05 21:05:09 +0100 (Wed, 05 Jan 2011) New Revision: 40126 Changeset: http://dev.haiku-os.org/changeset/40126 Modified: haiku/trunk/src/apps/bootmanager/BootManagerController.cpp haiku/trunk/src/apps/bootmanager/BootManagerController.h haiku/trunk/src/apps/bootmanager/DefaultPartitionPage.cpp haiku/trunk/src/apps/bootmanager/DescriptionPage.cpp haiku/trunk/src/apps/bootmanager/DescriptionPage.h haiku/trunk/src/apps/bootmanager/EntryPage.cpp haiku/trunk/src/apps/bootmanager/EntryPage.h haiku/trunk/src/apps/bootmanager/PartitionsPage.cpp haiku/trunk/src/apps/bootmanager/PartitionsPage.h haiku/trunk/src/apps/bootmanager/TestBootDrive.cpp haiku/trunk/src/apps/bootmanager/WizardPageView.cpp haiku/trunk/src/apps/bootmanager/WizardPageView.h Log: * Another work in progress of converting the BootManager to use the layout API; most pages do now, albeit it's not perfect yet due to issues with BTextView, and BScrollView that make them very inconvenient to use with the layout API. Modified: haiku/trunk/src/apps/bootmanager/BootManagerController.cpp =================================================================== --- haiku/trunk/src/apps/bootmanager/BootManagerController.cpp 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/BootManagerController.cpp 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,5 +1,5 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -224,15 +224,15 @@ BootManagerController::CreatePage(int32 state, WizardView* wizard) { WizardPageView* page = NULL; - BRect frame(0, 0, 300, 300); + BRect frame(0, 0, 300, 250); switch (state) { case kStateEntry: - page = new EntryPage(&fSettings, frame, "entry"); + page = new EntryPage(&fSettings, "entry"); wizard->SetPreviousButtonHidden(true); break; case kStateErrorEntry: - page = _CreateErrorEntryPage(frame); + page = _CreateErrorEntryPage(); wizard->SetPreviousButtonHidden(true); wizard->SetNextButtonLabel(B_TRANSLATE_COMMENT("Done", "Button")); break; @@ -241,21 +241,21 @@ wizard->SetPreviousButtonHidden(false); break; case kStateMBRSaved: - page = _CreateMBRSavedPage(frame); + page = _CreateMBRSavedPage(); break; case kStatePartitions: - page = new PartitionsPage(&fSettings, frame, "partitions"); + page = new PartitionsPage(&fSettings, "partitions"); wizard->SetPreviousButtonHidden(false); break; case kStateDefaultPartitions: page = new DefaultPartitionPage(&fSettings, frame, "default"); break; case kStateInstallSummary: - page = _CreateInstallSummaryPage(frame); + page = _CreateInstallSummaryPage(); wizard->SetNextButtonLabel(B_TRANSLATE_COMMENT("Next", "Button")); break; case kStateInstalled: - page = _CreateInstalledPage(frame); + page = _CreateInstalledPage(); wizard->SetNextButtonLabel(B_TRANSLATE_COMMENT("Done", "Button")); break; case kStateUninstall: @@ -265,7 +265,7 @@ break; case kStateUninstalled: // TODO prevent overwriting MBR after clicking "Previous" - page = _CreateUninstalledPage(frame); + page = _CreateUninstalledPage(); wizard->SetNextButtonLabel(B_TRANSLATE_COMMENT("Done", "Button")); break; } @@ -275,7 +275,7 @@ WizardPageView* -BootManagerController::_CreateErrorEntryPage(BRect frame) +BootManagerController::_CreateErrorEntryPage() { BString description; @@ -293,7 +293,7 @@ "table!"); } - return new DescriptionPage(frame, "errorEntry", description.String(), true); + return new DescriptionPage("errorEntry", description.String(), true); } @@ -305,7 +305,7 @@ fSettings.FindString("disk", &disk); description << B_TRANSLATE_COMMENT("Backup Master Boot Record", "Title") - << "\n\n" << B_TRANSLATE("The Master Boot Record (MBR) of the boot " + << "\n" << B_TRANSLATE("The Master Boot Record (MBR) of the boot " "device:\n" "\t%s\n" "will now be saved to disk. Please select a file to " @@ -322,7 +322,7 @@ WizardPageView* -BootManagerController::_CreateMBRSavedPage(BRect frame) +BootManagerController::_CreateMBRSavedPage() { BString description; BString file; @@ -330,29 +330,29 @@ if (fSaveMBRStatus == B_OK) { description << B_TRANSLATE_COMMENT("Old Master Boot Record saved", - "Title") << "\n\n" + "Title") << "\n" << B_TRANSLATE("The old Master Boot Record was successfully " "saved to %s.") << "\n"; } else { description << B_TRANSLATE_COMMENT("Old Master Boot Record Saved " - "failure", "Title") << "\n\n" + "failure", "Title") << "\n" << B_TRANSLATE("The old Master Boot Record could not be saved " "to %s") << "\n"; } description.ReplaceFirst("%s", file); - return new DescriptionPage(frame, "summary", description.String(), true); + return new DescriptionPage("summary", description.String(), true); } WizardPageView* -BootManagerController::_CreateInstallSummaryPage(BRect frame) +BootManagerController::_CreateInstallSummaryPage() { BString description; BString disk; fSettings.FindString("disk", &disk); - description << B_TRANSLATE_COMMENT("Summary", "Title") << "\n\n" + description << B_TRANSLATE_COMMENT("Summary", "Title") << "\n" << B_TRANSLATE("About to write the following boot menu to the boot " "disk (%s). Please verify the information below before continuing.") << "\n\n"; @@ -377,29 +377,29 @@ description << name << "\t(" << path << ")\n"; } - return new DescriptionPage(frame, "summary", description.String(), true); + return new DescriptionPage("summary", description.String(), true); } WizardPageView* -BootManagerController::_CreateInstalledPage(BRect frame) +BootManagerController::_CreateInstalledPage() { BString description; if (fWriteBootMenuStatus == B_OK) { description << B_TRANSLATE_COMMENT("Installation of boot menu " - "completed", "Title") << "\n\n" + "completed", "Title") << "\n" << B_TRANSLATE("The boot manager has been successfully installed " "on your system."); } else { description << B_TRANSLATE_COMMENT("Installation of boot menu failed", - "Title") << "\n\n" + "Title") << "\n" << B_TRANSLATE("An error occurred writing the boot menu. " "The Master Boot Record might be destroyed, " "you should restore the MBR now!"); } - return new DescriptionPage(frame, "done", description, true); + return new DescriptionPage("done", description, true); } @@ -419,7 +419,7 @@ WizardPageView* -BootManagerController::_CreateUninstalledPage(BRect frame) +BootManagerController::_CreateUninstalledPage() { BString description; BString disk; @@ -429,16 +429,16 @@ if (fRestoreMBRStatus == B_OK) { description << B_TRANSLATE_COMMENT("Uninstallation of boot menu " - "completed", "Title") << "\n\n" + "completed", "Title") << "\n" << B_TRANSLATE("The Master Boot Record of the boot device " "(%DISK) has been successfully restored from %FILE."); description.ReplaceFirst("%DISK", disk); description.ReplaceFirst("%FILE", file); } else { description << B_TRANSLATE_COMMENT("Uninstallation of boot menu " - "failed", "Title") << "\n\n" + "failed", "Title") << "\n" << B_TRANSLATE("The Master Boot Record could not be restored!"); } - return new DescriptionPage(frame, "summary", description.String(), true); + return new DescriptionPage("summary", description.String(), true); } Modified: haiku/trunk/src/apps/bootmanager/BootManagerController.h =================================================================== --- haiku/trunk/src/apps/bootmanager/BootManagerController.h 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/BootManagerController.h 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,5 +1,5 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -62,13 +62,13 @@ bool _SaveMBR(); bool _RestoreMBR(); - WizardPageView* _CreateErrorEntryPage(BRect frame); + WizardPageView* _CreateErrorEntryPage(); WizardPageView* _CreateSaveMBRPage(BRect frame); - WizardPageView* _CreateMBRSavedPage(BRect frame); - WizardPageView* _CreateInstallSummaryPage(BRect frame); - WizardPageView* _CreateInstalledPage(BRect frame); + WizardPageView* _CreateMBRSavedPage(); + WizardPageView* _CreateInstallSummaryPage(); + WizardPageView* _CreateInstalledPage(); WizardPageView* _CreateUninstallPage(BRect frame); - WizardPageView* _CreateUninstalledPage(BRect frame); + WizardPageView* _CreateUninstalledPage(); BMessage fSettings; BootDrive* fBootDrive; Modified: haiku/trunk/src/apps/bootmanager/DefaultPartitionPage.cpp =================================================================== --- haiku/trunk/src/apps/bootmanager/DefaultPartitionPage.cpp 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/DefaultPartitionPage.cpp 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,5 +1,5 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -164,14 +164,13 @@ BRect rect(Bounds()); BString text; - text << - B_TRANSLATE_COMMENT("Default Partition", "Title") << "\n\n" << - B_TRANSLATE("Please specify a default partition and a timeout.\n" - "The boot menu will load the default partition after " - "the timeout unless you select another partition. You " - "can also have the boot menu wait indefinitely for you " - "to select a partition.\n" - "Keep the 'ALT' key pressed to disable the timeout at boot time."); + text << B_TRANSLATE_COMMENT("Default Partition", "Title") << "\n" + << B_TRANSLATE("Please specify a default partition and a timeout.\n" + "The boot menu will load the default partition after " + "the timeout unless you select another partition. You " + "can also have the boot menu wait indefinitely for you " + "to select a partition.\n" + "Keep the 'ALT' key pressed to disable the timeout at boot time."); fDescription = CreateDescription(rect, "description", text); MakeHeading(fDescription); Modified: haiku/trunk/src/apps/bootmanager/DescriptionPage.cpp =================================================================== --- haiku/trunk/src/apps/bootmanager/DescriptionPage.cpp 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/DescriptionPage.cpp 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,5 +1,5 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -11,15 +11,15 @@ #include <string.h> +#include <LayoutBuilder.h> #include <RadioButton.h> #include <TextView.h> -DescriptionPage::DescriptionPage(BRect frame, const char* name, +DescriptionPage::DescriptionPage(const char* name, const char* description, bool hasHeading) : - WizardPageView(NULL, frame, name, B_FOLLOW_ALL, - B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE) + WizardPageView(NULL, name) { _BuildUI(description, hasHeading); } @@ -31,31 +31,15 @@ void -DescriptionPage::FrameResized(float width, float height) -{ - WizardPageView::FrameResized(width, height); - _Layout(); -} - - -void DescriptionPage::_BuildUI(const char* description, bool hasHeading) { - BRect rect(Bounds()); - - fDescription = CreateDescription(rect, "description", description); + fDescription = CreateDescription("description", description); if (hasHeading) MakeHeading(fDescription); - fDescription->SetTabWidth(85); - AddChild(fDescription); + fDescription->SetTabWidth(120); - _Layout(); -} + SetLayout(new BGroupLayout(B_VERTICAL)); - -void -DescriptionPage::_Layout() -{ - LayoutDescriptionVertically(fDescription); + BLayoutBuilder::Group<>((BGroupLayout*)GetLayout()) + .Add(fDescription); } - Modified: haiku/trunk/src/apps/bootmanager/DescriptionPage.h =================================================================== --- haiku/trunk/src/apps/bootmanager/DescriptionPage.h 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/DescriptionPage.h 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,5 +1,5 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -16,19 +16,16 @@ class DescriptionPage : public WizardPageView { public: - DescriptionPage(BRect frame, const char* name, + DescriptionPage(const char* name, const char* description, bool hasHeading); virtual ~DescriptionPage(); - virtual void FrameResized(float width, float height); - private: void _BuildUI(const char* description, bool hasHeading); - void _Layout(); private: - BTextView* fDescription; + BTextView* fDescription; }; Modified: haiku/trunk/src/apps/bootmanager/EntryPage.cpp =================================================================== --- haiku/trunk/src/apps/bootmanager/EntryPage.cpp 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/EntryPage.cpp 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,5 +1,5 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -12,7 +12,7 @@ #include <string.h> #include <Catalog.h> -#include <ControlLook.h> +#include <LayoutBuilder.h> #include <RadioButton.h> #include <TextView.h> @@ -21,10 +21,9 @@ #define B_TRANSLATE_CONTEXT "EntryPage" -EntryPage::EntryPage(BMessage* settings, BRect frame, const char* name) +EntryPage::EntryPage(BMessage* settings, const char* name) : - WizardPageView(settings, frame, name, B_FOLLOW_ALL, - B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE) + WizardPageView(settings, name) { _BuildUI(); } @@ -36,85 +35,56 @@ void -EntryPage::FrameResized(float width, float height) -{ - WizardPageView::FrameResized(width, height); - _Layout(); -} - - -void EntryPage::PageCompleted() { - fSettings->ReplaceBool("install", fInstall->Value() != 0); + fSettings->ReplaceBool("install", fInstallButton->Value() != 0); } void EntryPage::_BuildUI() { - BRect rect(Bounds()); + fInstallButton = new BRadioButton("install", NULL, NULL); - fInstall = new BRadioButton(rect, "install", - "", - new BMessage('null')); - AddChild(fInstall); - fInstall->ResizeToPreferred(); - - BRect textRect(rect); - textRect.left = fInstall->Frame().right - + be_control_look->DefaultItemSpacing(); - BString text; - text << - B_TRANSLATE_COMMENT("Install boot menu", "Title") << "\n\n" << - B_TRANSLATE("Choose this option to install a boot menu, " - "allowing you to select which operating " - "system to boot when you turn on your " - "computer.") << "\n"; - fInstallText = CreateDescription(textRect, "installText", text); + text << B_TRANSLATE_COMMENT("Install boot menu", "Title") << "\n" + << B_TRANSLATE("Choose this option to install a boot menu, " + "allowing you to select which operating " + "system to boot when you turn on your " + "computer.") << "\n"; + fInstallText = CreateDescription("installText", text); MakeHeading(fInstallText); - AddChild(fInstallText); - fUninstall = new BRadioButton(rect, "uninstall", - "", - new BMessage('null')); - AddChild(fUninstall); - fUninstall->ResizeToPreferred(); + fUninstallButton = new BRadioButton("uninstall", NULL, NULL); text.Truncate(0); - text << - B_TRANSLATE_COMMENT("Uninstall boot menu", "Title") << "\n\n" << - B_TRANSLATE("Choose this option to remove the boot menu " - "previously installed by this program.\n"); - fUninstallText = CreateDescription(textRect, "uninstallText", text); + text << B_TRANSLATE_COMMENT("Uninstall boot menu", "Title") << "\n" + << B_TRANSLATE("Choose this option to remove the boot menu " + "previously installed by this program.\n"); + fUninstallText = CreateDescription("uninstallText", text); MakeHeading(fUninstallText); - AddChild(fUninstallText); - bool install; - fSettings->FindBool("install", &install); + SetLayout(new BGroupLayout(B_VERTICAL)); - if (install) - fInstall->SetValue(1); - else - fUninstall->SetValue(1); + BLayoutBuilder::Group<>((BGroupLayout*)GetLayout()) + .AddGroup(B_HORIZONTAL, 0) + .AddGroup(B_VERTICAL, 0, 0) + .Add(fInstallButton) + .AddGlue() + .End() + .Add(fInstallText, 1) + .End() + .AddGroup(B_HORIZONTAL, 0) + .AddGroup(B_VERTICAL, 0, 0) + .Add(fUninstallButton) + .AddGlue() + .End() + .Add(fUninstallText) + .End() + .AddGlue(); - _Layout(); + if (fSettings->FindBool("install")) + fInstallButton->SetValue(1); + else + fUninstallButton->SetValue(1); } - - -void -EntryPage::_Layout() -{ - LayoutDescriptionVertically(fInstallText); - - float left = fUninstall->Frame().left; - float top = fInstallText->Frame().bottom; - fUninstall->MoveTo(left, top); - - left = fUninstallText->Frame().left; - fUninstallText->MoveTo(left, top); - - LayoutDescriptionVertically(fUninstallText); -} - Modified: haiku/trunk/src/apps/bootmanager/EntryPage.h =================================================================== --- haiku/trunk/src/apps/bootmanager/EntryPage.h 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/EntryPage.h 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,5 +1,5 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -18,22 +18,18 @@ class EntryPage : public WizardPageView { public: - EntryPage(BMessage* settings, BRect frame, - const char* name); + EntryPage(BMessage* settings, const char* name); virtual ~EntryPage(); - virtual void FrameResized(float width, float height); - virtual void PageCompleted(); private: void _BuildUI(); - void _Layout(); private: - BRadioButton* fInstall; + BRadioButton* fInstallButton; BTextView* fInstallText; - BRadioButton* fUninstall; + BRadioButton* fUninstallButton; BTextView* fUninstallText; }; Modified: haiku/trunk/src/apps/bootmanager/PartitionsPage.cpp =================================================================== --- haiku/trunk/src/apps/bootmanager/PartitionsPage.cpp 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/PartitionsPage.cpp 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,8 +1,9 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: + * Axel Dörfler, <axeld@xxxxxxxxxxxxxxxx> * Michael Pfeiffer, laplace@xxxxxxxxxxxxxxxxxxxxx * Ingo Weinhold <bonefish@xxxxxxxxxxxxxxx> */ @@ -16,13 +17,17 @@ #include <Catalog.h> #include <CheckBox.h> #include <ControlLook.h> +#include <LayoutBuilder.h> #include <RadioButton.h> #include <ScrollView.h> +#include <SeparatorView.h> #include <StringView.h> #include <TextControl.h> #include <TextView.h> +#include <StringForSize.h> + #undef B_TRANSLATE_CONTEXT #define B_TRANSLATE_CONTEXT "PartitionsPage" @@ -31,11 +36,9 @@ const uint32 kMessageName = 'name'; -PartitionsPage::PartitionsPage(BMessage* settings, BRect frame, - const char* name) +PartitionsPage::PartitionsPage(BMessage* settings, const char* name) : - WizardPageView(settings, frame, name, B_FOLLOW_ALL, - B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE) + WizardPageView(settings, name) { _BuildUI(); } @@ -74,7 +77,8 @@ partition.ReplaceBool("show", control->Value() == 1); } else if (kMessageName == message->what && dynamic_cast<BTextControl*>(control) != NULL) { - partition.ReplaceString("name", ((BTextControl*)control)->Text()); + partition.ReplaceString("name", + ((BTextControl*)control)->Text()); } fSettings->ReplaceMessage("partition", index, &partition); @@ -84,128 +88,48 @@ void -PartitionsPage::FrameResized(float width, float height) -{ - WizardPageView::FrameResized(width, height); - _Layout(); -} - - -void PartitionsPage::_BuildUI() { - const float kTextDistance = be_control_look->DefaultItemSpacing(); - BRect rect(Bounds()); - BString text; - text << B_TRANSLATE_COMMENT("Partitions", "Title") << "\n\n" + text << B_TRANSLATE_COMMENT("Partitions", "Title") << "\n" << B_TRANSLATE("The following partitions were detected. Please " "check the box next to the partitions to be included " "in the boot menu. You can also set the names of the " "partitions as you would like them to appear in the " "boot menu."); - fDescription = CreateDescription(rect, "description", text); + fDescription = CreateDescription("description", text); MakeHeading(fDescription); - AddChild(fDescription); - LayoutDescriptionVertically(fDescription); - rect.left = fDescription->Frame().left + 1; - rect.top = fDescription->Frame().bottom + kTextDistance; - rect.right -= B_V_SCROLL_BAR_WIDTH; - rect.bottom -= B_H_SCROLL_BAR_HEIGHT + 3; + fPartitions = new BGridView("partitions", 0, + be_control_look->DefaultItemSpacing() / 3); - fPartitions = new BView(rect, "partitions", B_FOLLOW_ALL, B_WILL_DRAW); - - fPartitionsScrollView = new BScrollView("scrollView", fPartitions, - B_FOLLOW_ALL, 0, true, true); - fPartitionsScrollView->SetViewColor(ViewColor()); - AddChild(fPartitionsScrollView); - + BLayoutBuilder::Grid<>(fPartitions) + .SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, + B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING) + .SetColumnWeight(0, 0) + .SetColumnWeight(1, 1) + .SetColumnWeight(2, 0.5) + .SetColumnWeight(3, 0.5); _FillPartitionsView(fPartitions); - _Layout(); -} + BScrollView* scrollView = new BScrollView("scrollView", fPartitions, 0, + false, true); + SetLayout(new BGroupLayout(B_VERTICAL)); -void -PartitionsPage::_Layout() -{ - LayoutDescriptionVertically(fDescription); - - const float kTextDistance = be_control_look->DefaultItemSpacing(); - float left = fPartitionsScrollView->Frame().left; - float top = fDescription->Frame().bottom + kTextDistance; - fPartitionsScrollView->MoveTo(left, top); - - float width = fPartitionsScrollView->Frame().Width(); - float height = Bounds().bottom - top; - fPartitionsScrollView->ResizeTo(width, height); - - // update scroll bar range and proportion - BScrollBar* scrollbar = fPartitionsScrollView->ScrollBar(B_HORIZONTAL); - float viewWidth = fPartitions->Bounds().IntegerWidth(); - float max = fPartitionsWidth - viewWidth; - if (max < 0) - max = 0; - scrollbar->SetRange(0, max); - float proportion; - if (fPartitionsWidth <= viewWidth) - proportion = 1.0; - else - proportion = viewWidth / fPartitionsWidth; - scrollbar->SetProportion(proportion); - - scrollbar = fPartitionsScrollView->ScrollBar(B_VERTICAL); - float viewHeight = fPartitions->Bounds().IntegerHeight(); - max = fPartitionsHeight - viewHeight; - if (max < 0) - max = 0; - scrollbar->SetRange(0, max); - if (fPartitionsHeight <= viewHeight) - proportion = 1.0; - else - proportion = viewHeight / fPartitionsHeight; - scrollbar->SetProportion(proportion); + BLayoutBuilder::Group<>((BGroupLayout*)GetLayout()) + .Add(fDescription) + .Add(scrollView); } void PartitionsPage::_FillPartitionsView(BView* view) { - const int32 inset = 1; - - font_height fontHeight; - be_plain_font->GetHeight(&fontHeight); - - int32 textControlHeight; - { - BTextControl control(BRect(0, 0, 100, 100), "", "", "", NULL); - control.ResizeToPreferred(); - textControlHeight = control.Bounds().IntegerHeight(); - } - - const int32 textHeight = (int32)(fontHeight.ascent + fontHeight.descent); - const int32 height = (int32)(2*inset - + max_c(textControlHeight, textHeight)); - const int32 kDistance = (int32)(ceil(be_plain_font->StringWidth("x"))); - // show | name | type | size | path - int32 showWidth = 0; - int32 nameWidth = 0; - int32 typeWidth = 0; - int32 sizeWidth = 0; - int32 pathWidth = 0; - _ComputeColumnWidths(showWidth, nameWidth, typeWidth, sizeWidth, pathWidth); - int32 totalWidth = showWidth + nameWidth + typeWidth + sizeWidth - + pathWidth + 2 * inset + 4 * kDistance; - int32 rowNumber = 0; - BRect frame(view->Bounds()); - frame.bottom = frame.top + height; - frame.right = frame.left + 65000; - BMessage message; for (int32 i = 0; fSettings->FindMessage("partition", i, &message) == B_OK; i++, rowNumber++) { @@ -221,123 +145,52 @@ message.FindString("path", &path); message.FindInt64("size", &size); - // create row for partition data - BView* row = new BView(frame, "row", B_FOLLOW_TOP | B_FOLLOW_LEFT, 0); - view->AddChild(row); - frame.OffsetBy(0, height + 1); - // check box - BRect rect(row->Bounds()); - rect.InsetBy(inset, inset); - rect.right = rect.left + showWidth; - BCheckBox* checkBox = new BCheckBox(rect, "show", "", + BCheckBox* checkBox = new BCheckBox("show", "", _CreateControlMessage(kMessageShow, i)); if (show) checkBox->SetValue(1); - // center vertically - checkBox->ResizeToPreferred(); - const int32 showHeight = checkBox->Bounds().IntegerHeight(); - if (showHeight < height) - checkBox->MoveTo(inset, (int)((height - showHeight + 1) / 2)); - row->AddChild(checkBox); - rect.OffsetBy(showWidth + kDistance, 0); // name - rect.right = rect.left + nameWidth; - BTextControl* nameControl = new BTextControl(rect, "name", "", + BTextControl* nameControl = new BTextControl("name", "", name.String(), _CreateControlMessage(kMessageName, i)); - nameControl->SetDivider(0); - row->AddChild(nameControl); - rect.OffsetBy(nameWidth + kDistance, 0); - // type - rect.right = rect.left + typeWidth; - BStringView* typeView = new BStringView(rect, "type", type.String()); - row->AddChild(typeView); - rect.OffsetBy(typeWidth + kDistance, 0); - // size BString sizeText; _CreateSizeText(size, &sizeText); - rect.right = rect.left + sizeWidth; - BStringView* sizeView = new BStringView(rect, "type", - sizeText.String()); - sizeView->SetAlignment(B_ALIGN_RIGHT); - row->AddChild(sizeView); - rect.OffsetBy(sizeWidth + kDistance, 0); + sizeText << ", " << type.String(); + BStringView* typeView = new BStringView("type", sizeText.String()); + typeView->SetExplicitAlignment( + BAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_UNSET)); // path - rect.right = rect.left + pathWidth; - BStringView* pathView = new BStringView(rect, "path", path.String()); - row->AddChild(pathView); - } + BStringView* pathView = new BStringView("path", path.String()); + pathView->SetExplicitAlignment( + BAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_UNSET)); - fPartitionsWidth = totalWidth; - fPartitionsHeight = frame.top; -} + if (rowNumber > 0) { + BLayoutBuilder::Grid<>((BGridLayout*)view->GetLayout()) + .Add(new BSeparatorView(B_HORIZONTAL), 0, rowNumber, 4, 1) + .SetRowWeight(rowNumber, 0); + rowNumber++; + } - -void -PartitionsPage::_ComputeColumnWidths(int32& showWidth, int32& nameWidth, - int32& typeWidth, int32& sizeWidth, int32& pathWidth) -{ - BCheckBox checkBox(BRect(0, 0, 100, 100), "show", "", new BMessage()); - checkBox.ResizeToPreferred(); - showWidth = checkBox.Bounds().IntegerWidth(); - // reserve space for about 16 characters - nameWidth = (int32)ceil(be_plain_font->StringWidth("oooooooooooooooo")); - - const int32 kStringViewInsets = 2; - - BMessage message; - for (int32 i = 0; fSettings->FindMessage("partition", i, &message) == B_OK; - i++) { - // get partition data - BString type; - BString path; - int64 size; - message.FindString("type", &type); - message.FindString("path", &path); - message.FindInt64("size", &size); - BString sizeText; - _CreateSizeText(size, &sizeText); - - int32 width = (int32)ceil(be_plain_font->StringWidth(type.String())) - + kStringViewInsets; - if (typeWidth < width) - typeWidth = width; - - width = (int32)ceil(be_plain_font->StringWidth(path.String())) - + kStringViewInsets; - if (pathWidth < width) - pathWidth = width; - - width = (int32)ceil(be_plain_font->StringWidth(sizeText.String())) - + kStringViewInsets; - if (sizeWidth < width) - sizeWidth = width; + BLayoutBuilder::Grid<>((BGridLayout*)view->GetLayout()) + .Add(checkBox, 0, rowNumber, 1, 2) + .Add(nameControl, 1, rowNumber, 1, 2) + .Add(BSpaceLayoutItem::CreateHorizontalStrut(10), 2, rowNumber) + .Add(typeView, 3, rowNumber) + .Add(pathView, 3, ++rowNumber) + .SetRowWeight(rowNumber, 1); } } void -PartitionsPage::_CreateSizeText(int64 _size, BString* text) +PartitionsPage::_CreateSizeText(int64 size, BString* text) { - const char* suffixes[] = { - "", "K", "M", "G", "T", NULL - }; - - double size = _size; - int index = 0; - while (size > 1024 && suffixes[index + 1]) { - size /= 1024; - index++; - } - - char buffer[128]; - snprintf(buffer, sizeof(buffer), "%.2f%s", size, suffixes[index]); - - *text = buffer; + char buffer[256]; + *text = string_for_size(size, buffer, sizeof(buffer)); } Modified: haiku/trunk/src/apps/bootmanager/PartitionsPage.h =================================================================== --- haiku/trunk/src/apps/bootmanager/PartitionsPage.h 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/PartitionsPage.h 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,5 +1,5 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -12,37 +12,29 @@ #include "WizardPageView.h" +class BGridView; class BTextView; class BScrollView; class PartitionsPage : public WizardPageView { public: - PartitionsPage(BMessage* settings, BRect frame, + PartitionsPage(BMessage* settings, const char* name); virtual ~PartitionsPage(); virtual void PageCompleted(); - virtual void FrameResized(float width, float height); - private: void _BuildUI(); - void _Layout(); void _FillPartitionsView(BView* view); void _CreateSizeText(int64 size, BString* text); BMessage* _CreateControlMessage(uint32 what, int32 partitionIndex); - void _ComputeColumnWidths(int32& showWidth, - int32& nameWidth, int32& typeWidth, - int32& sizeWidth, int32& pathWidth); private: BTextView* fDescription; - BView* fPartitions; - BScrollView* fPartitionsScrollView; - float fPartitionsWidth; - float fPartitionsHeight; + BGridView* fPartitions; }; Modified: haiku/trunk/src/apps/bootmanager/TestBootDrive.cpp =================================================================== --- haiku/trunk/src/apps/bootmanager/TestBootDrive.cpp 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/TestBootDrive.cpp 2011-01-05 20:05:09 UTC (rev 40126) @@ -1,5 +1,5 @@ /* - * Copyright 2008-2010, Haiku, Inc. All rights reserved. + * Copyright 2008-2011, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -9,7 +9,11 @@ #include "TestBootDrive.h" +#include <stdio.h> +#include <String.h> + + TestBootDrive::TestBootDrive() { } @@ -98,4 +102,5 @@ TestBootDrive::GetDisplayText(const char* text, BString& displayText) { displayText = text; + return B_OK; } Modified: haiku/trunk/src/apps/bootmanager/WizardPageView.cpp =================================================================== --- haiku/trunk/src/apps/bootmanager/WizardPageView.cpp 2011-01-05 18:00:31 UTC (rev 40125) +++ haiku/trunk/src/apps/bootmanager/WizardPageView.cpp 2011-01-05 20:05:09 UTC (rev 40126) [... truncated: 81 lines follow ...]