Implemented the enabling/disabling of menu items.
"Continue boot" will now be disabled if there are no boot volumes. Also, there will be an additional menu item "Reboot" in that case. The boot device menu will now show a disabled "No boot devices found" label then, and will be selected upon entry. Added a help text to "Rescan volumes" which will also be selected upon entry if there is no boot device. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8649 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
a084c3cd69
commit
b430068a23
|
@ -26,6 +26,7 @@ MenuItem::MenuItem(const char *label, Menu *subMenu)
|
|||
fTarget(NULL),
|
||||
fIsMarked(false),
|
||||
fIsSelected(false),
|
||||
fIsEnabled(true),
|
||||
fType(MENU_ITEM_STANDARD),
|
||||
fMenu(NULL),
|
||||
fSubMenu(subMenu),
|
||||
|
@ -68,18 +69,12 @@ MenuItem::SetMarked(bool marked)
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
MenuItem::Select(bool selected)
|
||||
{
|
||||
if (fIsSelected == selected)
|
||||
return;
|
||||
void MenuItem::Select(bool selected) { if (fIsSelected == selected) return;
|
||||
|
||||
if (selected && fMenu != NULL) {
|
||||
// unselect previous item
|
||||
MenuItem *selectedItem = fMenu->FindSelected();
|
||||
if (selectedItem != NULL)
|
||||
selectedItem->Select(false);
|
||||
}
|
||||
MenuItem *selectedItem = fMenu->FindSelected(); if (selectedItem !=
|
||||
NULL) selectedItem->Select(false); }
|
||||
|
||||
fIsSelected = selected;
|
||||
|
||||
|
@ -95,6 +90,19 @@ MenuItem::SetType(menu_item_type type)
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
MenuItem::SetEnabled(bool enabled)
|
||||
{
|
||||
if (fIsEnabled == enabled)
|
||||
return;
|
||||
|
||||
fIsEnabled = enabled;
|
||||
|
||||
if (fMenu != NULL)
|
||||
fMenu->Draw(this);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MenuItem::SetData(void *data)
|
||||
{
|
||||
|
@ -302,6 +310,7 @@ add_boot_volume_menu(Directory *bootVolume)
|
|||
Menu *menu = new Menu(CHOICE_MENU, "Select Boot Volume");
|
||||
MenuItem *item;
|
||||
void *cookie;
|
||||
int32 count = 0;
|
||||
|
||||
if (gRoot->Open(&cookie, O_RDONLY) == B_OK) {
|
||||
Directory *volume;
|
||||
|
@ -317,14 +326,27 @@ add_boot_volume_menu(Directory *bootVolume)
|
|||
item->SetMarked(true);
|
||||
item->Select(true);
|
||||
}
|
||||
|
||||
count++;
|
||||
}
|
||||
}
|
||||
gRoot->Close(cookie);
|
||||
}
|
||||
|
||||
if (count == 0) {
|
||||
// no boot volume found yet
|
||||
menu->AddItem(item = new MenuItem("<No boot volume found>"));
|
||||
item->SetType(MENU_ITEM_NO_CHOICE);
|
||||
item->SetEnabled(false);
|
||||
}
|
||||
|
||||
menu->AddSeparatorItem();
|
||||
|
||||
menu->AddItem(item = new MenuItem("Rescan volumes"));
|
||||
item->SetHelpText("Please insert a Haiku CD-ROM or attach a USB disk - depending on your BIOS, you can then boot from them.");
|
||||
item->SetType(MENU_ITEM_NO_CHOICE);
|
||||
item->Select(true);
|
||||
|
||||
menu->AddItem(item = new MenuItem("Return to main menu"));
|
||||
item->SetType(MENU_ITEM_NO_CHOICE);
|
||||
|
||||
|
@ -350,6 +372,14 @@ add_safe_mode_menu()
|
|||
}
|
||||
|
||||
|
||||
static bool
|
||||
user_menu_reboot(Menu *menu, MenuItem *item)
|
||||
{
|
||||
platform_exit();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
user_menu(Directory **_bootVolume)
|
||||
{
|
||||
|
@ -366,7 +396,16 @@ user_menu(Directory **_bootVolume)
|
|||
platform_add_menus(menu);
|
||||
|
||||
menu->AddSeparatorItem();
|
||||
if (*_bootVolume == NULL) {
|
||||
menu->AddItem(item = new MenuItem("Reboot"));
|
||||
item->SetTarget(user_menu_reboot);
|
||||
}
|
||||
|
||||
menu->AddItem(item = new MenuItem("Continue booting"));
|
||||
if (*_bootVolume == NULL) {
|
||||
item->SetEnabled(false);
|
||||
menu->ItemAt(0)->Select(true);
|
||||
}
|
||||
|
||||
menu->Run();
|
||||
return B_OK;
|
||||
|
|
Loading…
Reference in New Issue