Make adding items to the setup menu slightly less error-prone
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3640 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
+50
-26
@@ -103,18 +103,6 @@ static HANDLER button_handlers[BUTTON_COUNT] = {
|
|||||||
do_audio, do_resources, do_keyconfig, do_advanced, do_editkeys,
|
do_audio, do_resources, do_keyconfig, do_advanced, do_editkeys,
|
||||||
do_keyconfig };
|
do_keyconfig };
|
||||||
|
|
||||||
static int menu_sizes[MENU_COUNT] = {
|
|
||||||
7, 5, 8, 9, 2, 5,
|
|
||||||
#ifdef HAVE_OPENGL
|
|
||||||
5,
|
|
||||||
#else
|
|
||||||
4,
|
|
||||||
#endif
|
|
||||||
11
|
|
||||||
};
|
|
||||||
|
|
||||||
static int menu_bgs[MENU_COUNT] = { 0, 1, 1, 2, 3, 1, 2, 1 };
|
|
||||||
|
|
||||||
/* These refer to uninitialized widgets, but that's OK; we'll fill
|
/* These refer to uninitialized widgets, but that's OK; we'll fill
|
||||||
* them in before we touch them */
|
* them in before we touch them */
|
||||||
static WIDGET *main_widgets[] = {
|
static WIDGET *main_widgets[] = {
|
||||||
@@ -124,14 +112,16 @@ static WIDGET *main_widgets[] = {
|
|||||||
(WIDGET *)(&buttons[5]),
|
(WIDGET *)(&buttons[5]),
|
||||||
(WIDGET *)(&buttons[6]),
|
(WIDGET *)(&buttons[6]),
|
||||||
(WIDGET *)(&buttons[7]),
|
(WIDGET *)(&buttons[7]),
|
||||||
(WIDGET *)(&buttons[0]) };
|
(WIDGET *)(&buttons[0]),
|
||||||
|
NULL };
|
||||||
|
|
||||||
static WIDGET *graphics_widgets[] = {
|
static WIDGET *graphics_widgets[] = {
|
||||||
(WIDGET *)(&choices[0]),
|
(WIDGET *)(&choices[0]),
|
||||||
(WIDGET *)(&choices[10]),
|
(WIDGET *)(&choices[10]),
|
||||||
(WIDGET *)(&choices[2]),
|
(WIDGET *)(&choices[2]),
|
||||||
(WIDGET *)(&choices[3]),
|
(WIDGET *)(&choices[3]),
|
||||||
(WIDGET *)(&buttons[1]) };
|
(WIDGET *)(&buttons[1]),
|
||||||
|
NULL };
|
||||||
|
|
||||||
static WIDGET *audio_widgets[] = {
|
static WIDGET *audio_widgets[] = {
|
||||||
(WIDGET *)(&sliders[0]),
|
(WIDGET *)(&sliders[0]),
|
||||||
@@ -141,7 +131,8 @@ static WIDGET *audio_widgets[] = {
|
|||||||
(WIDGET *)(&choices[9]),
|
(WIDGET *)(&choices[9]),
|
||||||
(WIDGET *)(&choices[21]),
|
(WIDGET *)(&choices[21]),
|
||||||
(WIDGET *)(&choices[22]),
|
(WIDGET *)(&choices[22]),
|
||||||
(WIDGET *)(&buttons[1]) };
|
(WIDGET *)(&buttons[1]),
|
||||||
|
NULL };
|
||||||
|
|
||||||
static WIDGET *engine_widgets[] = {
|
static WIDGET *engine_widgets[] = {
|
||||||
(WIDGET *)(&choices[4]),
|
(WIDGET *)(&choices[4]),
|
||||||
@@ -152,7 +143,8 @@ static WIDGET *engine_widgets[] = {
|
|||||||
(WIDGET *)(&choices[13]),
|
(WIDGET *)(&choices[13]),
|
||||||
(WIDGET *)(&choices[11]),
|
(WIDGET *)(&choices[11]),
|
||||||
(WIDGET *)(&choices[17]),
|
(WIDGET *)(&choices[17]),
|
||||||
(WIDGET *)(&buttons[1]) };
|
(WIDGET *)(&buttons[1]),
|
||||||
|
NULL };
|
||||||
|
|
||||||
static WIDGET *advanced_widgets[] = {
|
static WIDGET *advanced_widgets[] = {
|
||||||
#ifdef HAVE_OPENGL
|
#ifdef HAVE_OPENGL
|
||||||
@@ -161,14 +153,16 @@ static WIDGET *advanced_widgets[] = {
|
|||||||
(WIDGET *)(&choices[12]),
|
(WIDGET *)(&choices[12]),
|
||||||
(WIDGET *)(&choices[15]),
|
(WIDGET *)(&choices[15]),
|
||||||
(WIDGET *)(&choices[16]),
|
(WIDGET *)(&choices[16]),
|
||||||
(WIDGET *)(&buttons[1]) };
|
(WIDGET *)(&buttons[1]),
|
||||||
|
NULL };
|
||||||
|
|
||||||
static WIDGET *keyconfig_widgets[] = {
|
static WIDGET *keyconfig_widgets[] = {
|
||||||
(WIDGET *)(&choices[18]),
|
(WIDGET *)(&choices[18]),
|
||||||
(WIDGET *)(&choices[19]),
|
(WIDGET *)(&choices[19]),
|
||||||
(WIDGET *)(&labels[1]),
|
(WIDGET *)(&labels[1]),
|
||||||
(WIDGET *)(&buttons[8]),
|
(WIDGET *)(&buttons[8]),
|
||||||
(WIDGET *)(&buttons[1]) };
|
(WIDGET *)(&buttons[1]),
|
||||||
|
NULL };
|
||||||
|
|
||||||
static WIDGET *editkeys_widgets[] = {
|
static WIDGET *editkeys_widgets[] = {
|
||||||
(WIDGET *)(&choices[20]),
|
(WIDGET *)(&choices[20]),
|
||||||
@@ -181,15 +175,31 @@ static WIDGET *editkeys_widgets[] = {
|
|||||||
(WIDGET *)(&controlentries[4]),
|
(WIDGET *)(&controlentries[4]),
|
||||||
(WIDGET *)(&controlentries[5]),
|
(WIDGET *)(&controlentries[5]),
|
||||||
(WIDGET *)(&controlentries[6]),
|
(WIDGET *)(&controlentries[6]),
|
||||||
(WIDGET *)(&buttons[9]) };
|
(WIDGET *)(&buttons[9]),
|
||||||
|
NULL };
|
||||||
|
|
||||||
static WIDGET *incomplete_widgets[] = {
|
static WIDGET *incomplete_widgets[] = {
|
||||||
(WIDGET *)(&labels[0]),
|
(WIDGET *)(&labels[0]),
|
||||||
(WIDGET *)(&buttons[1]) };
|
(WIDGET *)(&buttons[1]),
|
||||||
|
NULL };
|
||||||
|
|
||||||
static WIDGET **menu_widgets[MENU_COUNT] = {
|
static const struct
|
||||||
main_widgets, graphics_widgets, audio_widgets, engine_widgets,
|
{
|
||||||
incomplete_widgets, keyconfig_widgets, advanced_widgets, editkeys_widgets };
|
WIDGET **widgets;
|
||||||
|
int bgIndex;
|
||||||
|
}
|
||||||
|
menu_defs[] =
|
||||||
|
{
|
||||||
|
{main_widgets, 0},
|
||||||
|
{graphics_widgets, 1},
|
||||||
|
{audio_widgets, 1},
|
||||||
|
{engine_widgets, 2},
|
||||||
|
{incomplete_widgets, 3},
|
||||||
|
{keyconfig_widgets, 1},
|
||||||
|
{advanced_widgets, 2},
|
||||||
|
{editkeys_widgets, 1},
|
||||||
|
{NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
quit_main_menu (WIDGET *self, int event)
|
quit_main_menu (WIDGET *self, int event)
|
||||||
@@ -606,6 +616,16 @@ clear_control (WIDGET_CONTROLENTRY *widget)
|
|||||||
populate_editkeys (template);
|
populate_editkeys (template);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
count_widgets (const WIDGET **widgets)
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
|
||||||
|
for (count = 0; *widgets != NULL; ++widgets, ++count)
|
||||||
|
;
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
static stringbank *bank = NULL;
|
static stringbank *bank = NULL;
|
||||||
static FRAME setup_frame = NULL;
|
static FRAME setup_frame = NULL;
|
||||||
|
|
||||||
@@ -655,11 +675,15 @@ init_widgets (void)
|
|||||||
menus[i].subtitle = buffer[i];
|
menus[i].subtitle = buffer[i];
|
||||||
menus[i].bgStamp.origin.x = 0;
|
menus[i].bgStamp.origin.x = 0;
|
||||||
menus[i].bgStamp.origin.y = 0;
|
menus[i].bgStamp.origin.y = 0;
|
||||||
menus[i].bgStamp.frame = SetAbsFrameIndex (setup_frame, menu_bgs[i]);
|
menus[i].bgStamp.frame = SetAbsFrameIndex (setup_frame, menu_defs[i].bgIndex);
|
||||||
menus[i].num_children = menu_sizes[i];
|
menus[i].num_children = count_widgets (menu_defs[i].widgets);
|
||||||
menus[i].child = menu_widgets[i];
|
menus[i].child = menu_defs[i].widgets;
|
||||||
menus[i].highlighted = 0;
|
menus[i].highlighted = 0;
|
||||||
}
|
}
|
||||||
|
if (menu_defs[i].widgets != NULL)
|
||||||
|
{
|
||||||
|
log_add (log_Error, "Menu definition array has more items!");
|
||||||
|
}
|
||||||
|
|
||||||
/* Options */
|
/* Options */
|
||||||
if (SplitString (GetStringAddress (SetAbsStringTableIndex (SetupTab, 2)), '\n', 100, buffer, bank) != CHOICE_COUNT)
|
if (SplitString (GetStringAddress (SetAbsStringTableIndex (SetupTab, 2)), '\n', 100, buffer, bank) != CHOICE_COUNT)
|
||||||
|
|||||||
Reference in New Issue
Block a user