Fixed typo, corrected video mode menu usage.

run_menu() now supports menu_item_hook for CHOICE_MENU submenu items.
Now selects the video mode chosen in the menu - it's broken right now
if you enter the boot menu without asking for it (i.e. when there is
no boot volume found).


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8116 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2004-06-22 01:19:53 +00:00
parent 3b5e4b4978
commit a104674fdf
3 changed files with 64 additions and 37 deletions

View File

@ -1,6 +1,6 @@
/*
** Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
** Distributed under the terms of the OpenBeOS License.
** Distributed under the terms of the Haiku License.
*/
@ -278,6 +278,8 @@ run_menu(Menu *menu)
menu->Hide();
run_menu(item->Submenu());
if (item->Target() != NULL)
(*item->Target())(menu, item);
// restore current menu
sMenuOffset = offset;
@ -316,6 +318,7 @@ platform_add_menus(Menu *menu)
switch (menu->Type()) {
case MAIN_MENU:
menu->AddItem(item = new MenuItem("Select fail-safe video mode", video_mode_menu()));
item->SetTarget(video_mode_hook);
break;
case SAFE_MODE_MENU:
menu->AddItem(item = new MenuItem("Don't call the BIOS"));

View File

@ -241,6 +241,59 @@ vesa_set_palette(const uint8 *palette, int32 firstIndex, int32 numEntries)
// #pragma mark -
bool
video_mode_hook(Menu *menu, MenuItem *item)
{
// find selected mode
video_mode *mode = NULL;
menu = item->Submenu();
item = menu->FindMarked();
if (item != NULL)
mode = (video_mode *)item->Data();
if (mode != sMode) {
// update standard mode
// ToDo: update fb settings!
sMode = mode;
}
return true;
}
Menu *
video_mode_menu()
{
Menu *menu = new Menu(CHOICE_MENU, "Select Video Mode");
MenuItem *item;
menu->AddItem(item = new MenuItem("Default"));
item->SetMarked(true);
item->Select(true);
menu->AddItem(new MenuItem("Standard VGA"));
video_mode *mode = NULL;
while ((mode = (video_mode *)list_get_next_item(&sModeList, mode)) != NULL) {
char label[64];
sprintf(label, "%ldx%ld %ld bit", mode->width, mode->height, mode->bits_per_pixel);
menu->AddItem(item = new MenuItem(label));
item->SetData(mode);
}
menu->AddSeparatorItem();
menu->AddItem(item = new MenuItem("Return to main menu"));
item->SetType(MENU_ITEM_NO_CHOICE);
return menu;
}
// #pragma mark -
extern "C" void
platform_switch_to_logo(void)
{
@ -305,37 +358,6 @@ platform_switch_to_text_mode(void)
}
// #pragma mark -
Menu *
video_mode_menu()
{
Menu *menu = new Menu(CHOICE_MENU, "Select video mode:");
MenuItem *item;
menu->AddItem(item = new MenuItem("Default"));
item->SetMarked(true);
item->Select(true);
menu->AddItem(new MenuItem("Standard VGA"));
video_mode *mode = NULL;
while ((mode = (video_mode *)list_get_next_item(&sModeList, mode)) != NULL) {
char label[64];
sprintf(label, "%ldx%ld %ld bit", mode->width, mode->height, mode->bits_per_pixel);
menu->AddItem(item = new MenuItem(label));
item->SetData(mode);
}
menu->AddSeparatorItem();
menu->AddItem(item = new MenuItem("Return to main manu"));
return menu;
}
extern "C" status_t
platform_init_video(void)
{

View File

@ -1,3 +1,7 @@
/*
** Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
** Distributed under the terms of the Haiku License.
*/
#ifndef VIDEO_H
#define VIDEO_H
@ -5,12 +9,10 @@
#include <SupportDefs.h>
#ifdef __cplusplus
class Menu;
class MenuItem;
bool video_mode_hook(Menu *menu, MenuItem *item);
Menu *video_mode_menu();
extern "C"
#endif
status_t video_init(void);
#endif /* VIDEO_H */