Simplified setup of special runtime menus / dialogs

- If the runtime flag of a bx_list_c object is set, all it's items are set up
  as runtime options.
- Set the runtime parameter for all top-level runtime-only lists. Setting up
  each single parameter is no longer needed.
This commit is contained in:
Volker Ruppert 2013-11-25 21:07:39 +00:00
parent 1beeb33b51
commit f3a6fbd235
14 changed files with 46 additions and 58 deletions

@ -999,12 +999,11 @@ void bx_init_options()
deplist->add(keymap);
use_kbd_mapping->set_dependent_list(deplist);
bx_param_string_c *user_shortcut = new bx_param_string_c(keyboard,
new bx_param_string_c(keyboard,
"user_shortcut",
"Userbutton shortcut",
"Defines the keyboard shortcut to be sent when you press the 'user' button in the headerbar.",
"none", 20);
user_shortcut->set_runtime_param(1);
static const char *mouse_type_list[] = {
"none",
@ -1599,11 +1598,14 @@ void bx_init_options()
// runtime options
menu = new bx_list_c(special_menus, "runtime", "Runtime options");
bx_list_c *cdrom = new bx_list_c(menu, "cdrom", "CD-ROM options");
cdrom->set_runtime_param(1);
cdrom->set_options(cdrom->SHOW_PARENT);
usb = new bx_list_c(menu, "usb", "USB options");
usb->set_runtime_param(1);
usb->set_options(usb->SHOW_PARENT | usb->USE_TAB_WINDOW);
// misc runtime options
misc = new bx_list_c(menu, "misc", "Misc options");
misc->set_runtime_param(1);
misc->add(SIM->get_param(BXPN_VGA_UPDATE_FREQUENCY));
misc->add(SIM->get_param(BXPN_MOUSE_ENABLED));
misc->add(SIM->get_param(BXPN_KBD_PASTE_DELAY));

@ -1023,6 +1023,9 @@ void bx_list_c::add(bx_param_c *param)
temp = temp->next;
temp->next = item;
}
if (runtime_param) {
param->set_runtime_param(1);
}
size++;
}
@ -1101,3 +1104,15 @@ void bx_list_c::remove(const char *name)
}
}
}
void bx_list_c::set_runtime_param(int val)
{
bx_listitem_t *item;
runtime_param = val;
if (runtime_param) {
for (item = list; item; item = item->next) {
item->param->set_runtime_param(1);
}
}
}

@ -130,7 +130,7 @@ public:
void set_label(const char *text);
void set_description(const char *text);
const char *get_label() const {return label;}
void set_runtime_param(int val) { runtime_param = val; }
virtual void set_runtime_param(int val) { runtime_param = val; }
int get_runtime_param() { return runtime_param; }
void set_group(const char *group);
const char *get_group() const {return group_name;}
@ -499,6 +499,7 @@ public:
virtual void reset();
virtual void clear();
virtual void remove(const char *name);
virtual void set_runtime_param(int val);
#if BX_USE_TEXTCONFIG
virtual void text_print(FILE *);
virtual int text_ask(FILE *fpin, FILE *fpout);

@ -537,7 +537,7 @@ int bx_config_interface(int menu)
case BX_CI_RT_LOGOPTS1: bx_log_options(0); break;
case BX_CI_RT_LOGOPTS2: bx_log_options(1); break;
case BX_CI_RT_INST_TR: NOT_IMPLEMENTED(choice); break;
case BX_CI_RT_USB: do_menu(BXPN_MENU_RUNTIME_USB); break;
case BX_CI_RT_USB: do_menu(BXPN_MENU_RUNTIME_CDROM); break;
case BX_CI_RT_MISC: do_menu(BXPN_MENU_RUNTIME_MISC); break;
case BX_CI_RT_CONT:
SIM->update_runtime_options();

@ -266,7 +266,6 @@ void bx_vgacore_c::init_systemtimer(bx_timer_handler_t f_timer, param_event_hand
BX_VGA_THIS timer_id = bx_virt_timer.register_timer(this, f_timer,
BX_VGA_THIS update_interval, 1, 1, "vga");
vga_update_freq->set_handler(f_param);
vga_update_freq->set_runtime_param(1);
}
// VGA text mode cursor blink frequency 1.875 Hz
if (BX_VGA_THIS update_interval < 266666) {

@ -343,13 +343,12 @@ void bx_hard_drive_c::init(void)
}
} else if (SIM->get_param_enum("type", base)->get() == BX_ATA_DEVICE_CDROM) {
bx_list_c *cdrom_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_CDROM);
cdrom_rt->add(base);
base->set_options(base->SERIES_ASK | base->USE_BOX_TITLE);
base->set_runtime_param(1);
bx_list_c *menu = new bx_list_c(cdrom_rt, base->get_name(), base->get_title());
menu->set_options(menu->SERIES_ASK | menu->USE_BOX_TITLE);
menu->add(SIM->get_param("path", base));
menu->add(SIM->get_param("status", base));
SIM->get_param_string("path", base)->set_handler(cdrom_path_handler);
SIM->get_param("path", base)->set_runtime_param(1);
SIM->get_param_enum("status", base)->set_handler(cdrom_status_handler);
SIM->get_param("status", base)->set_runtime_param(1);
BX_DEBUG(("CDROM on target %d/%d",channel,device));
BX_HD_THIS channels[channel].drives[device].device_type = IDE_CDROM;
BX_HD_THIS channels[channel].drives[device].cdrom.locked = 0;

@ -2,7 +2,7 @@
// $Id$
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002-2009 The Bochs Project
// Copyright (C) 2002-2013 The Bochs Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
@ -211,9 +211,7 @@ void bx_keyb_c::init(void)
// init runtime parameter
SIM->get_param_num(BXPN_KBD_PASTE_DELAY)->set_handler(kbd_param_handler);
SIM->get_param_num(BXPN_KBD_PASTE_DELAY)->set_runtime_param(1);
SIM->get_param_num(BXPN_MOUSE_ENABLED)->set_handler(kbd_param_handler);
SIM->get_param_num(BXPN_MOUSE_ENABLED)->set_runtime_param(1);
}
void bx_keyb_c::reset(unsigned type)

@ -383,7 +383,6 @@ void bx_sb16_c::init(void)
bx_list_c *misc_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_MISC);
bx_list_c *menu = new bx_list_c(misc_rt, "sb16", "SB16 Runtime Options");
menu->set_options(menu->SHOW_PARENT | menu->USE_BOX_TITLE);
menu->set_runtime_param(1);
menu->add(SIM->get_param("wavemode", base));
menu->add(SIM->get_param("wave", base));
@ -392,17 +391,11 @@ void bx_sb16_c::init(void)
menu->add(SIM->get_param("dmatimer", base));
menu->add(SIM->get_param("loglevel", base));
SIM->get_param_enum("wavemode", base)->set_handler(sb16_param_handler);
SIM->get_param_enum("wavemode", base)->set_runtime_param(1);
SIM->get_param_string("wave", base)->set_handler(sb16_param_string_handler);
SIM->get_param_string("wave", base)->set_runtime_param(1);
SIM->get_param_num("midimode", base)->set_handler(sb16_param_handler);
SIM->get_param_num("midimode", base)->set_runtime_param(1);
SIM->get_param_string("midi", base)->set_handler(sb16_param_string_handler);
SIM->get_param_string("midi", base)->set_runtime_param(1);
SIM->get_param_num("dmatimer", base)->set_handler(sb16_param_handler);
SIM->get_param_num("dmatimer", base)->set_runtime_param(1);
SIM->get_param_num("loglevel", base)->set_handler(sb16_param_handler);
SIM->get_param_num("loglevel", base)->set_runtime_param(1);
// register handler for correct sb16 parameter handling after runtime config
SIM->register_runtime_config_handler(this, runtime_config_handler);
BX_SB16_THIS midi_changed = 0;

@ -2,7 +2,7 @@
// $Id$
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001-2011 The Bochs Project
// Copyright (C) 2001-2013 The Bochs Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public

@ -5,7 +5,7 @@
// USB hub emulation support (ported from QEMU)
//
// Copyright (C) 2005 Fabrice Bellard
// Copyright (C) 2009-2012 The Bochs Project
// Copyright (C) 2009-2013 The Bochs Project
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@ -172,7 +172,7 @@ usb_hub_device_c::usb_hub_device_c(Bit8u ports)
char pname[10];
char label[32];
bx_list_c *port;
bx_param_string_c *device, *options;
bx_param_string_c *device;
d.type = USB_DEV_TYPE_HUB;
d.maxspeed = USB_SPEED_FULL;
@ -195,19 +195,15 @@ usb_hub_device_c::usb_hub_device_c(Bit8u ports)
sprintf(label, "External Hub #%d Configuration", hub_count);
hub.config = new bx_list_c(usb_rt, pname, label);
hub.config->set_options(bx_list_c::SHOW_PARENT);
hub.config->set_runtime_param(1);
hub.config->set_device_param(this);
for(i = 0; i < hub.n_ports; i++) {
sprintf(pname, "port%d", i+1);
sprintf(label, "Port #%d Configuration", i+1);
port = new bx_list_c(hub.config, pname, label);
port->set_options(port->SERIES_ASK | port->USE_BOX_TITLE);
port->set_runtime_param(1);
device = new bx_param_string_c(port, "device", "Device", "", "", BX_PATHNAME_LEN);
device->set_handler(hub_param_handler);
device->set_runtime_param(1);
options = new bx_param_string_c(port, "options", "Options", "", "", BX_PATHNAME_LEN);
options->set_runtime_param(1);
new bx_param_string_c(port, "options", "Options", "", "", BX_PATHNAME_LEN);
}
#if BX_WITH_WX
bx_list_c *usb = (bx_list_c*)SIM->get_param("ports.usb");

@ -171,12 +171,10 @@ usb_msd_device_c::usb_msd_device_c(usbdev_type type, const char *filename)
sprintf(label, "USB CD-ROM #%d Configuration", usb_cdrom_count);
s.config = new bx_list_c(usb_rt, pname, label);
s.config->set_options(bx_list_c::SERIES_ASK | bx_list_c::USE_BOX_TITLE);
s.config->set_runtime_param(1);
s.config->set_device_param(this);
path = new bx_param_string_c(s.config, "path", "Path", "", "", BX_PATHNAME_LEN);
path->set(s.fname);
path->set_handler(cd_param_string_handler);
path->set_runtime_param(1);
status = new bx_param_enum_c(s.config,
"status",
"Status",
@ -185,7 +183,6 @@ usb_msd_device_c::usb_msd_device_c(usbdev_type type, const char *filename)
BX_EJECTED,
BX_EJECTED);
status->set_handler(cd_param_handler);
status->set_runtime_param(1);
status->set_ask_format("Is the device inserted or ejected? [%s] ");
#if BX_WITH_WX
bx_list_c *usb = (bx_list_c*)SIM->get_param("ports.usb");

@ -3,7 +3,7 @@
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2009 Benjamin D Lunt (fys at frontiernet net)
// 2009-2012 The Bochs Project
// 2009-2013 The Bochs Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
@ -160,7 +160,7 @@ void bx_usb_ohci_c::init(void)
unsigned i;
char pname[6];
bx_list_c *ohci, *port;
bx_param_string_c *device, *options;
bx_param_string_c *device;
// Read in values from config interface
ohci = (bx_list_c*) SIM->get_param(BXPN_USB_OHCI);
@ -196,18 +196,14 @@ void bx_usb_ohci_c::init(void)
BX_OHCI_THIS hub.statusbar_id = bx_gui->register_statusitem("OHCI", 1);
bx_list_c *usb_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_USB);
ohci->set_options(ohci->SHOW_PARENT);
ohci->set_runtime_param(1);
usb_rt->add(ohci);
bx_list_c *ohci_rt = new bx_list_c(usb_rt, "ohci", "OHCI Runtime Options");
ohci_rt->set_options(ohci_rt->SHOW_PARENT);
for (i=0; i<BX_N_USB_OHCI_PORTS; i++) {
sprintf(pname, "port%d", i+1);
port = (bx_list_c*)SIM->get_param(pname, ohci);
port->set_runtime_param(1);
ohci_rt->add(port);
device = (bx_param_string_c*)port->get_by_name("device");
device->set_handler(usb_param_handler);
device->set_runtime_param(1);
options = (bx_param_string_c*)port->get_by_name("options");
options->set_runtime_param(1);
BX_OHCI_THIS hub.usb_port[i].device = NULL;
BX_OHCI_THIS hub.usb_port[i].HcRhPortStatus.ccs = 0;
BX_OHCI_THIS hub.usb_port[i].HcRhPortStatus.csc = 0;

@ -3,7 +3,7 @@
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2009 Benjamin D Lunt (fys at frontiernet net)
// 2009-2012 The Bochs Project
// 2009-2013 The Bochs Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
@ -147,7 +147,7 @@ void bx_usb_uhci_c::init(void)
unsigned i;
char pname[6];
bx_list_c *uhci, *port;
bx_param_string_c *device, *options;
bx_param_string_c *device;
// Read in values from config interface
uhci = (bx_list_c*) SIM->get_param(BXPN_USB_UHCI);
@ -184,18 +184,14 @@ void bx_usb_uhci_c::init(void)
BX_UHCI_THIS hub.statusbar_id = bx_gui->register_statusitem("UHCI", 1);
bx_list_c *usb_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_USB);
uhci->set_options(uhci->SHOW_PARENT);
uhci->set_runtime_param(1);
usb_rt->add(uhci);
bx_list_c *uhci_rt = new bx_list_c(usb_rt, "uhci", "UHCI Runtime Options");
uhci_rt->set_options(uhci_rt->SHOW_PARENT);
for (i=0; i<BX_N_USB_UHCI_PORTS; i++) {
sprintf(pname, "port%d", i+1);
port = (bx_list_c*)SIM->get_param(pname, uhci);
port->set_runtime_param(1);
uhci_rt->add(port);
device = (bx_param_string_c*)port->get_by_name("device");
device->set_handler(usb_param_handler);
device->set_runtime_param(1);
options = (bx_param_string_c*)port->get_by_name("options");
options->set_runtime_param(1);
BX_UHCI_THIS hub.usb_port[i].device = NULL;
}

@ -3,7 +3,7 @@
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2010-2011 Benjamin D Lunt (fys [at] fysnet [dot] net)
// 2011-2012 The Bochs Project
// 2011-2013 The Bochs Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
@ -190,9 +190,8 @@ void bx_usb_xhci_c::init(void)
BX_XHCI_THIS hub.statusbar_id = bx_gui->register_statusitem("xHCI", 1);
bx_list_c *usb_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_USB);
xhci->set_options(xhci->SHOW_PARENT | xhci->USE_BOX_TITLE);
xhci->set_runtime_param(1);
usb_rt->add(xhci);
bx_list_c *xhci_rt = new bx_list_c(usb_rt, "xhci", "xHCI Runtime Options");
xhci_rt->set_options(xhci_rt->SHOW_PARENT | xhci_rt->USE_BOX_TITLE);
for (i=0; i<USB_XHCI_PORTS; i++) {
// check to see if the speed matches the port given
// if (((get_speed(i) <= SPEED_HI) && (port_speed_allowed[i] != USB2)) ||
@ -200,12 +199,9 @@ void bx_usb_xhci_c::init(void)
// BX_PANIC(("Speed of port given in Bochsrc.txt file doesn't match controllers' port's speed."));
sprintf(pname, "port%d", i+1);
port = (bx_list_c*)SIM->get_param(pname, xhci);
port->set_runtime_param(1);
xhci_rt->add(port);
device = (bx_param_string_c*)port->get_by_name("device");
device->set_handler(usb_param_handler);
device->set_runtime_param(1);
options = (bx_param_string_c*)port->get_by_name("options");
options->set_runtime_param(1);
device->set_handler(usb_param_handler);
BX_XHCI_THIS hub.usb_port[i].device = NULL;
BX_XHCI_THIS hub.usb_port[i].portsc.ccs = 0;
BX_XHCI_THIS hub.usb_port[i].portsc.csc = 0;