status_t user_menu(Directory** _bootVolume) { Menu* menu = new(std::nothrow) Menu(MAIN_MENU); Menu* safeModeMenu = NULL; Menu* debugMenu = NULL; MenuItem* item; TRACE(("user_menu: enter\n")); // Add boot volume menu->AddItem(item = new(std::nothrow) MenuItem("Select boot volume", add_boot_volume_menu(*_bootVolume))); // Add safe mode menu->AddItem(item = new(std::nothrow) MenuItem("Select safe mode options", safeModeMenu = add_safe_mode_menu())); // add debug menu menu->AddItem(item = new(std::nothrow) MenuItem("Select debug options", debugMenu = add_debug_menu())); // Add platform dependent menus platform_add_menus(menu); menu->AddSeparatorItem(); menu->AddItem(item = new(std::nothrow) MenuItem("Reboot")); item->SetTarget(user_menu_reboot); item->SetShortcut('r'); menu->AddItem(item = new(std::nothrow) MenuItem("Continue booting")); if (*_bootVolume == NULL) { item->SetEnabled(false); menu->ItemAt(0)->Select(true); } else item->SetShortcut('b'); menu->Run(); // See if a new boot device has been selected, and propagate that back if (item->Data() != NULL) *_bootVolume = (Directory*)item->Data(); apply_safe_mode_options(safeModeMenu); apply_safe_mode_options(debugMenu); delete menu; TRACE(("user_menu: leave\n")); return B_OK; }
static bool user_menu_boot_volume(Menu *menu, MenuItem *item) { Menu *super = menu->Supermenu(); if (super == NULL) { // huh? return true; } MenuItem *bootItem = super->ItemAt(super->CountItems() - 1); bootItem->SetEnabled(true); bootItem->Select(true); bootItem->SetData(item->Data()); gKernelArgs.boot_volume.SetBool(BOOT_VOLUME_USER_SELECTED, true); return true; }
status_t user_menu(BootVolume& _bootVolume, PathBlacklist& _pathBlacklist) { Menu* menu = new(std::nothrow) Menu(MAIN_MENU); sMainMenu = menu; sBootVolume = &_bootVolume; sPathBlacklist = &_pathBlacklist; Menu* safeModeMenu = NULL; Menu* debugMenu = NULL; MenuItem* item; TRACE(("user_menu: enter\n")); // Add boot volume menu->AddItem(item = new(std::nothrow) MenuItem("Select boot volume", add_boot_volume_menu())); // Add safe mode menu->AddItem(item = new(std::nothrow) MenuItem("Select safe mode options", safeModeMenu = add_safe_mode_menu())); // add debug menu menu->AddItem(item = new(std::nothrow) MenuItem("Select debug options", debugMenu = add_debug_menu())); // Add platform dependent menus platform_add_menus(menu); menu->AddSeparatorItem(); menu->AddItem(item = new(std::nothrow) MenuItem("Reboot")); item->SetTarget(user_menu_reboot); item->SetShortcut('r'); menu->AddItem(item = new(std::nothrow) MenuItem("Continue booting")); if (!_bootVolume.IsValid()) { item->SetEnabled(false); menu->ItemAt(0)->Select(true); } else item->SetShortcut('b'); menu->Run(); apply_safe_mode_options(safeModeMenu); apply_safe_mode_options(debugMenu); apply_safe_mode_path_blacklist(); add_safe_mode_settings(sSafeModeOptionsBuffer.String()); delete menu; TRACE(("user_menu: leave\n")); sMainMenu = NULL; sBlacklistRootMenu = NULL; sBootVolume = NULL; sPathBlacklist = NULL; return B_OK; }