From 127bf24b305c2e820b7983190a7d1dd6a41c75ed Mon Sep 17 00:00:00 2001 From: mcmartin Date: Sat, 2 Sep 2006 09:28:02 +0000 Subject: [PATCH] More changes for online key config; config is shown but not editable. The default key configuration has been slightly modified for easier display, but the VControl template is still compatible. The default keys.cfg prior to this will not render properly but still works. git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2425 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/ChangeLog | 2 + sc2/content/lbm/setupmenu.txt | 23 ++++ sc2/content/starcon.key | 151 +++++++++++------------- sc2/src/sc2code/libs/graphics/widgets.c | 92 +++++++++++++++ sc2/src/sc2code/libs/graphics/widgets.h | 37 +++++- sc2/src/sc2code/libs/inplib.h | 3 + sc2/src/sc2code/libs/input/sdl/input.c | 36 ++++++ sc2/src/sc2code/setupmenu.c | 81 +++++++++++-- sc2/src/starcon2.c | 12 +- 9 files changed, 339 insertions(+), 98 deletions(-) diff --git a/sc2/ChangeLog b/sc2/ChangeLog index fa70fdb70..a7873721e 100644 --- a/sc2/ChangeLog +++ b/sc2/ChangeLog @@ -1,4 +1,6 @@ Changes towards version 0.6: +- Default key configuration changed slightly; online display of current + key bindings - Michael - Input templates can now be renamed, both online and off - Michael - Fixed an integer-size error that was causing crashes on AMD64, from Solomon Peachy (#895) - Michael diff --git a/sc2/content/lbm/setupmenu.txt b/sc2/content/lbm/setupmenu.txt index 51176bd1b..cfa4ce588 100644 --- a/sc2/content/lbm/setupmenu.txt +++ b/sc2/content/lbm/setupmenu.txt @@ -378,21 +378,33 @@ Placeholder Placeholder #(CAT_20_OPT_0_DESC) + + Select the control template to edit. #(CAT_20_OPT_1_DESC) + + Select the control template to edit. #(CAT_20_OPT_2_DESC) + + Select the control template to edit. #(CAT_20_OPT_3_DESC) + + Select the control template to edit. #(CAT_20_OPT_4_DESC) + + Select the control template to edit. #(CAT_20_OPT_5_DESC) + + Select the control template to edit. #(SLIDERS) @@ -458,6 +470,8 @@ hardware-dependent options. Edit key control sets. #(BUTTON_9_DESC) + + Return to control set selection screen. #(LABELS) @@ -483,3 +497,12 @@ Name #(TEXT_ENTRIES_INITIAL) Placeholder + +#(CONTROL_ENTRIES) +Up +Down +Left +Right +Weapon +Special +Escape diff --git a/sc2/content/starcon.key b/sc2/content/starcon.key index 5f48c1a88..3e2764842 100644 --- a/sc2/content/starcon.key +++ b/sc2/content/starcon.key @@ -30,11 +30,6 @@ Menu-Select: key Return Menu-Select: key RightControl Menu-Cancel: key Space Menu-Cancel: key RightShift -Menu-Delete: key Delete -Menu-Backspace: key Backspace -Menu-Edit-Cancel: key Escape -Menu-Search: key / -Menu-Next: key Tab # ... and the number pad. Note that zoom controls on the starmap are # different from the paging controls in Super Melee. @@ -52,18 +47,28 @@ Menu-Select: key Keypad-Enter Menu-Cancel: key Keypad-0 Menu-Delete: key Keypad-. -# Player 1's flight controls. This is the bottom player in Super -# Melee and the player in the full game. Again, the player has the -# option of using either the number pad or the arrow keys. +# System utility keys. +Menu-Delete: key Delete +Menu-Backspace: key Backspace +Menu-Edit-Cancel: key Escape +Menu-Search: key / +Menu-Next: key Tab +Pause: key Pause +Pause: key F1 +Exit: key F10 + + + +# Arrow-key controls. This is the default for the bottom player in +# Super Melee and the player in the full game. Again, the player has +# the option of using either the number pad or the arrow keys. Keyboard-1-Up: key Up Keyboard-1-Down: key Down Keyboard-1-Left: key Left Keyboard-1-Right: key Right -Keyboard-1-Weapon: key Return Keyboard-1-Weapon: key RightControl Keyboard-1-Special: key RightShift -Keyboard-1-Escape: key Escape Keyboard-1-Up: key Keypad-8 Keyboard-1-Down: key Keypad-2 @@ -72,23 +77,43 @@ Keyboard-1-Right: key Keypad-6 Keyboard-1-Weapon: key Keypad-Enter Keyboard-1-Special: key Keypad-0 -Keyboard-1-Weapon: key ] -Keyboard-1-Special: key [ +Keyboard-1-Escape: key Escape -# Player 2's flight controls. We add the key 'd' to let him -# move down in the super-melee ship selection. -Keyboard-2-Up: key e -Keyboard-2-Down: key d -Keyboard-2-Left: key s -Keyboard-2-Right: key f -Keyboard-2-Weapon: key q -Keyboard-2-Special: key a +# WASD for Player 2's default flight controls. We add the key 'd' to +# let him move down in the super-melee ship selection. + +Keyboard-2-Up: key w +Keyboard-2-Down: key s +Keyboard-2-Left: key a +Keyboard-2-Right: key d +Keyboard-2-Weapon: key v +Keyboard-2-Special: key b Keyboard-2-Escape: key Escape -# System utility keys. -Pause: key Pause -Pause: key F1 -Exit: key F10 +# Control Scheme 3: Variant Arrow keys with brackets for firing. + +Keyboard-3-Up: key Keypad-8 +Keyboard-3-Down: key Keypad-2 +Keyboard-3-Left: key Keypad-4 +Keyboard-3-Right: key Keypad-6 +Keyboard-3-Up: key Up +Keyboard-3-Down: key Down +Keyboard-3-Left: key Left +Keyboard-3-Right: key Right +Keyboard-3-Weapon: key ] +Keyboard-3-Special: key [ +Keyboard-3-Escape: key Escape + + +# Control Scheme 4: Shifted WASD keys. + +Joystick-1-Up: key e +Joystick-1-Down: key d +Joystick-1-Left: key s +Joystick-1-Right: key f +Joystick-1-Weapon: key q +Joystick-1-Special: key a +Joystick-1-Escape: key Escape # This is a sample joystick configuration. This is intended to work # primarily under WinXP with a USB analog/digital gamepad. The @@ -100,19 +125,19 @@ Exit: key F10 joystick 0 threshold 10000 # How far to move before it counts; 0-30000 -Joystick-1-Up: joystick 0 axis 1 negative -Joystick-1-Down: joystick 0 axis 1 positive -Joystick-1-Left: joystick 0 axis 0 negative -Joystick-1-Right: joystick 0 axis 0 positive +Joystick-2-Up: joystick 0 axis 1 negative +Joystick-2-Down: joystick 0 axis 1 positive +Joystick-2-Left: joystick 0 axis 0 negative +Joystick-2-Right: joystick 0 axis 0 positive -Joystick-1-Up: joystick 0 hat 0 up -Joystick-1-Down: joystick 0 hat 0 down -Joystick-1-Left: joystick 0 hat 0 left -Joystick-1-Right: joystick 0 hat 0 right +Joystick-2-Up: joystick 0 hat 0 up +Joystick-2-Down: joystick 0 hat 0 down +Joystick-2-Left: joystick 0 hat 0 left +Joystick-2-Right: joystick 0 hat 0 right -Joystick-1-Weapon: joystick 0 button 1 -Joystick-1-Special: joystick 0 button 0 -Joystick-1-Escape: joystick 0 button 6 +Joystick-2-Weapon: joystick 0 button 1 +Joystick-2-Special: joystick 0 button 0 +Joystick-2-Escape: joystick 0 button 6 Menu-Up: joystick 0 axis 1 negative Menu-Down: joystick 0 axis 1 positive @@ -133,19 +158,19 @@ Menu-Zoom-Out: joystick 0 button 7 joystick 1 threshold 10000 # How far to move before it counts; 0-30000 -Joystick-2-Up: joystick 1 axis 1 negative -Joystick-2-Down: joystick 1 axis 1 positive -Joystick-2-Left: joystick 1 axis 0 negative -Joystick-2-Right: joystick 1 axis 0 positive +Joystick-3-Up: joystick 1 axis 1 negative +Joystick-3-Down: joystick 1 axis 1 positive +Joystick-3-Left: joystick 1 axis 0 negative +Joystick-3-Right: joystick 1 axis 0 positive -Joystick-2-Up: joystick 1 hat 0 up -Joystick-2-Down: joystick 1 hat 0 down -Joystick-2-Left: joystick 1 hat 0 left -Joystick-2-Right: joystick 1 hat 0 right +Joystick-3-Up: joystick 1 hat 0 up +Joystick-3-Down: joystick 1 hat 0 down +Joystick-3-Left: joystick 1 hat 0 left +Joystick-3-Right: joystick 1 hat 0 right -Joystick-2-Weapon: joystick 1 button 1 -Joystick-2-Special: joystick 1 button 0 -Joystick-2-Escape: joystick 1 button 6 +Joystick-3-Weapon: joystick 1 button 1 +Joystick-3-Special: joystick 1 button 0 +Joystick-3-Escape: joystick 1 button 6 Menu-Up: joystick 1 axis 1 negative Menu-Down: joystick 1 axis 1 positive @@ -163,37 +188,3 @@ Menu-Page-Up: joystick 1 button 4 Menu-Page-Down: joystick 1 button 5 Menu-Zoom-In: joystick 1 button 6 Menu-Zoom-Out: joystick 1 button 7 - -joystick 2 threshold 10000 # How far to move before it counts; 0-30000 - -Joystick-3-Up: joystick 2 axis 1 negative -Joystick-3-Down: joystick 2 axis 1 positive -Joystick-3-Left: joystick 2 axis 0 negative -Joystick-3-Right: joystick 2 axis 0 positive - -Joystick-3-Up: joystick 2 hat 0 up -Joystick-3-Down: joystick 2 hat 0 down -Joystick-3-Left: joystick 2 hat 0 left -Joystick-3-Right: joystick 2 hat 0 right - -Joystick-3-Weapon: joystick 2 button 1 -Joystick-3-Special: joystick 2 button 0 -Joystick-3-Escape: joystick 2 button 6 - -Menu-Up: joystick 2 axis 1 negative -Menu-Down: joystick 2 axis 1 positive -Menu-Left: joystick 2 axis 0 negative -Menu-Right: joystick 2 axis 0 positive - -Menu-Up: joystick 2 hat 0 up -Menu-Down: joystick 2 hat 0 down -Menu-Left: joystick 2 hat 0 left -Menu-Right: joystick 2 hat 0 right - -Menu-Cancel: joystick 2 button 0 -Menu-Select: joystick 2 button 1 -Menu-Page-Up: joystick 2 button 4 -Menu-Page-Down: joystick 2 button 5 -Menu-Zoom-In: joystick 2 button 6 -Menu-Zoom-Out: joystick 2 button 7 - diff --git a/sc2/src/sc2code/libs/graphics/widgets.c b/sc2/src/sc2code/libs/graphics/widgets.c index f694f661d..cb31a6de6 100644 --- a/sc2/src/sc2code/libs/graphics/widgets.c +++ b/sc2/src/sc2code/libs/graphics/widgets.c @@ -475,6 +475,66 @@ Widget_DrawTextEntry (WIDGET *_self, int x, int y) SetContextForeGroundColor (oldtext); } +void +Widget_DrawControlEntry (WIDGET *_self, int x, int y) +{ + WIDGET_CONTROLENTRY *self = (WIDGET_CONTROLENTRY *)_self; + COLOR oldtext; + COLOR inactive, default_color, selected; + FONT oldfont = SetContextFont (StarConFont); + FRAME oldFontEffect = SetContextFontEffect (NULL); + TEXT t; + int i, home_x, home_y; + + default_color = WIDGET_INACTIVE_SELECTED_COLOR; + selected = WIDGET_ACTIVE_COLOR; + inactive = WIDGET_INACTIVE_COLOR; + + t.baseline.x = x; + t.baseline.y = y; + t.align = ALIGN_LEFT; + t.valign = VALIGN_BOTTOM; + t.CharCount = ~0; + t.pStr = self->category; + if (widget_focus == _self) + { + oldtext = SetContextForeGroundColor (selected); + } + else + { + oldtext = SetContextForeGroundColor (default_color); + } + font_DrawText (&t); + + // 3 * SCREEN_WIDTH / ((self->maxcolumns + 1) * 2)) as per CHOICE, but only two options. + home_x = t.baseline.x + (SCREEN_WIDTH / 2); + home_y = t.baseline.y; + t.align = ALIGN_CENTER; + for (i = 0; i < 2; i++) + { + t.baseline.x = home_x + ((i % 3) * (SCREEN_WIDTH / 3)); // self->maxcolumns + 1 as per CHOICE. + t.baseline.y = home_y + (8 * (i / 3)); + t.pStr = self->controlname[i]; + if (!t.pStr[0]) + { + t.pStr = "---"; + } + if ((widget_focus == _self) && + (self->highlighted == i)) + { + SetContextForeGroundColor (selected); + } + else + { + SetContextForeGroundColor (default_color); + } + font_DrawText (&t); + } + SetContextFontEffect (oldFontEffect); + SetContextFont (oldfont); + SetContextForeGroundColor (oldtext); +} + int Widget_HeightChoice (WIDGET *_self) { @@ -527,6 +587,21 @@ Widget_ReceiveFocusChoice (WIDGET *_self, int event) return TRUE; } +int +Widget_ReceiveFocusControlEntry (WIDGET *_self, int event) +{ + WIDGET_CONTROLENTRY *self = (WIDGET_CONTROLENTRY *)_self; + int oldval = 0; + if (widget_focus->tag == WIDGET_TYPE_CONTROLENTRY) + { + oldval = ((WIDGET_CONTROLENTRY *)widget_focus)->highlighted; + } + widget_focus = _self; + self->highlighted = oldval; + (void)event; + return TRUE; +} + int Widget_ReceiveFocusMenuScreen (WIDGET *_self, int event) { @@ -688,6 +763,23 @@ Widget_HandleEventTextEntry (WIDGET *_self, int event) return FALSE; } +int +Widget_HandleEventControlEntry (WIDGET *_self, int event) +{ + WIDGET_CONTROLENTRY *self = (WIDGET_CONTROLENTRY *)_self; + if (event == WIDGET_EVENT_SELECT) + { + /* TODO: Something. */ + (void)self; + } + if ((event == WIDGET_EVENT_RIGHT) || + (event == WIDGET_EVENT_LEFT)) + { + self->highlighted = 1-self->highlighted; + } + return FALSE; +} + int Widget_Event (int event) { diff --git a/sc2/src/sc2code/libs/graphics/widgets.h b/sc2/src/sc2code/libs/graphics/widgets.h index bba6c0626..45e0ad00e 100644 --- a/sc2/src/sc2code/libs/graphics/widgets.h +++ b/sc2/src/sc2code/libs/graphics/widgets.h @@ -31,9 +31,22 @@ enum { NUM_WIDGET_EVENTS }; -#define WIDGET_TEXTENTRY_WIDTH 30 +typedef enum { + WIDGET_TYPE_MENU_SCREEN, + WIDGET_TYPE_CHOICE, + WIDGET_TYPE_BUTTON, + WIDGET_TYPE_LABEL, + WIDGET_TYPE_SLIDER, + WIDGET_TYPE_TEXTENTRY, + WIDGET_TYPE_CONTROLENTRY, + NUM_WIDGET_TYPES +} WIDGET_TYPE; + +#define WIDGET_TEXTENTRY_WIDTH 30 +#define WIDGET_CONTROLENTRY_WIDTH 16 typedef struct _widget { + WIDGET_TYPE tag; struct _widget *parent; int (*handleEvent)(struct _widget *self, int event); int (*receiveFocus)(struct _widget *self, int event); @@ -43,6 +56,7 @@ typedef struct _widget { } WIDGET; typedef struct _widget_menu_screen { + WIDGET_TYPE tag; struct _widget *parent; int (*handleEvent)(struct _widget *self, int event); int (*receiveFocus)(struct _widget *self, int event); @@ -63,6 +77,7 @@ typedef struct { } CHOICE_OPTION; typedef struct _widget_choice { + WIDGET_TYPE tag; struct _widget *parent; int (*handleEvent)(struct _widget *self, int event); int (*receiveFocus)(struct _widget *self, int event); @@ -78,6 +93,7 @@ typedef struct _widget_choice { } WIDGET_CHOICE; typedef struct _widget_button { + WIDGET_TYPE tag; struct _widget *parent; int (*handleEvent)(struct _widget *self, int event); int (*receiveFocus)(struct _widget *self, int event); @@ -89,6 +105,7 @@ typedef struct _widget_button { } WIDGET_BUTTON; typedef struct _widget_label { + WIDGET_TYPE tag; struct _widget *parent; int (*handleEvent)(struct _widget *self, int event); int (*receiveFocus)(struct _widget *self, int event); @@ -100,6 +117,7 @@ typedef struct _widget_label { } WIDGET_LABEL; typedef struct _widget_slider { + WIDGET_TYPE tag; struct _widget *parent; int (*handleEvent)(struct _widget *self, int event); int (*receiveFocus)(struct _widget *self, int event); @@ -121,6 +139,7 @@ typedef enum { } WIDGET_TEXTENTRY_STATE; typedef struct _widget_textentry { + WIDGET_TYPE tag; struct _widget *parent; int (*handleEvent)(struct _widget *self, int event); int (*receiveFocus)(struct _widget *self, int event); @@ -139,6 +158,19 @@ typedef struct _widget_textentry { int cursor_pos; } WIDGET_TEXTENTRY; +typedef struct _widget_controlentry { + WIDGET_TYPE tag; + struct _widget *parent; + int (*handleEvent)(struct _widget *self, int event); + int (*receiveFocus)(struct _widget *self, int event); + void (*draw)(struct _widget *self, int x, int y); + int (*height)(struct _widget *self); + int (*width)(struct _widget *self); + const char *category; + int highlighted; + char controlname[2][WIDGET_CONTROLENTRY_WIDTH]; +} WIDGET_CONTROLENTRY; + void DrawShadowedBox (PRECT r, COLOR bg, COLOR dark, COLOR medium); int Widget_Event (int event); @@ -149,12 +181,14 @@ int Widget_ReceiveFocusMenuScreen (WIDGET *_self, int event); int Widget_ReceiveFocusChoice (WIDGET *_self, int event); int Widget_ReceiveFocusSimple (WIDGET *_self, int event); int Widget_ReceiveFocusSlider (WIDGET *_self, int event); +int Widget_ReceiveFocusControlEntry (WIDGET *_self, int event); int Widget_ReceiveFocusRefuseFocus (WIDGET *_self, int event); int Widget_HandleEventMenuScreen (WIDGET *_self, int event); int Widget_HandleEventChoice (WIDGET *_self, int event); int Widget_HandleEventSlider (WIDGET *_self, int event); int Widget_HandleEventTextEntry (WIDGET *_self, int event); +int Widget_HandleEventControlEntry (WIDGET *_self, int event); int Widget_HandleEventIgnoreAll (WIDGET *_self, int event); int Widget_HeightChoice (WIDGET *_self); @@ -170,6 +204,7 @@ void Widget_DrawButton (WIDGET *_self, int x, int y); void Widget_DrawLabel (WIDGET *_self, int x, int y); void Widget_DrawSlider (WIDGET *_self, int x, int y); void Widget_DrawTextEntry (WIDGET *_self, int x, int y); +void Widget_DrawControlEntry (WIDGET *_self, int x, int y); void Widget_Slider_DrawValue (WIDGET_SLIDER *self, int x, int y); diff --git a/sc2/src/sc2code/libs/inplib.h b/sc2/src/sc2code/libs/inplib.h index cd5e2e961..7b3ea80b1 100644 --- a/sc2/src/sc2code/libs/inplib.h +++ b/sc2/src/sc2code/libs/inplib.h @@ -46,6 +46,9 @@ void DisableCharacterMode (void); wchar_t GetNextCharacter (void); wchar_t GetLastCharacter (void); +/* Interrogating the current key configuration */ + +void InterrogateInputState (int template, int control, int index, char *buffer, int maxlen); #endif /* _INPLIB_H */ diff --git a/sc2/src/sc2code/libs/input/sdl/input.c b/sc2/src/sc2code/libs/input/sdl/input.c index b8cfc8477..6658dfee0 100644 --- a/sc2/src/sc2code/libs/input/sdl/input.c +++ b/sc2/src/sc2code/libs/input/sdl/input.c @@ -23,6 +23,7 @@ #include "libs/graphics/sdl/sdl_common.h" #include "libs/input/input_common.h" #include "libs/input/sdl/vcontrol.h" +#include "libs/input/sdl/keynames.h" #include "controls.h" #include "libs/file.h" #include "libs/log.h" @@ -366,4 +367,39 @@ FlushInput (void) FlushInputState (); } +void +InterrogateInputState (int template, int control, int index, char *buffer, int maxlen) +{ + int i; + VCONTROL_GESTURE g; + + VControl_StartIter (&ImmediateInputState.key[template][control]); + i = 0; + while (VControl_NextBinding (&g)) + { + if (i++ < index) + { + continue; + } + switch (g.type) + { + case VCONTROL_KEY: + snprintf (buffer, maxlen, "%s", VControl_code2name (g.gesture.key)); + buffer[maxlen-1] = 0; + break; + case VCONTROL_JOYBUTTON: + snprintf (buffer, maxlen, "[Button %d]", g.gesture.button.index + 1); + buffer[maxlen-1] = 0; + break; + default: + /* Something we don't handle yet */ + buffer[0] = 0; + break; + } + return; + } + /* There aren't that many bindings, so return blank string */ + buffer[0] = 0; +} + #endif diff --git a/sc2/src/sc2code/setupmenu.c b/sc2/src/sc2code/setupmenu.c index a613335b3..6afcbb103 100644 --- a/sc2/src/sc2code/setupmenu.c +++ b/sc2/src/sc2code/setupmenu.c @@ -28,6 +28,7 @@ #include "libs/graphics/tfb_draw.h" #include "libs/strlib.h" #include "libs/reslib.h" +#include "libs/inplib.h" #include "libs/sound/sound.h" #include "libs/resource/stringbank.h" #include "libs/log.h" @@ -69,12 +70,13 @@ static void rename_template (WIDGET_TEXTENTRY *self); #define RES_OPTS 2 #endif -#define MENU_COUNT 8 -#define CHOICE_COUNT 21 -#define SLIDER_COUNT 3 -#define BUTTON_COUNT 10 -#define LABEL_COUNT 3 -#define TEXTENTRY_COUNT 1 +#define MENU_COUNT 8 +#define CHOICE_COUNT 21 +#define SLIDER_COUNT 3 +#define BUTTON_COUNT 10 +#define LABEL_COUNT 3 +#define TEXTENTRY_COUNT 1 +#define CONTROLENTRY_COUNT 7 /* The space for our widgets */ static WIDGET_MENU_SCREEN menus[MENU_COUNT]; @@ -83,6 +85,7 @@ static WIDGET_SLIDER sliders[SLIDER_COUNT]; static WIDGET_BUTTON buttons[BUTTON_COUNT]; static WIDGET_LABEL labels[LABEL_COUNT]; static WIDGET_TEXTENTRY textentries[TEXTENTRY_COUNT]; +static WIDGET_CONTROLENTRY controlentries[CONTROLENTRY_COUNT]; /* The hardcoded data that isn't strings */ @@ -105,7 +108,7 @@ static int menu_sizes[MENU_COUNT] = { #else 4, #endif - 4 + 11 }; static int menu_bgs[MENU_COUNT] = { 0, 1, 1, 2, 3, 1, 2, 1 }; @@ -167,6 +170,13 @@ static WIDGET *editkeys_widgets[] = { (WIDGET *)(&choices[20]), (WIDGET *)(&labels[2]), (WIDGET *)(&textentries[0]), + (WIDGET *)(&controlentries[0]), + (WIDGET *)(&controlentries[1]), + (WIDGET *)(&controlentries[2]), + (WIDGET *)(&controlentries[3]), + (WIDGET *)(&controlentries[4]), + (WIDGET *)(&controlentries[5]), + (WIDGET *)(&controlentries[6]), (WIDGET *)(&buttons[9]) }; static WIDGET *incomplete_widgets[] = { @@ -280,6 +290,23 @@ do_advanced (WIDGET *self, int event) return FALSE; } +static void +populate_editkeys (int template) +{ + int i, j; + + strncpy (textentries[0].value, input_templates[template].name, textentries[0].maxlen); + textentries[0].value[textentries[0].maxlen-1] = 0; + + for (i = 0; i < NUM_KEYS; i++) + { + for (j = 0; j < 2; j++) + { + InterrogateInputState (template, i, j, controlentries[i].controlname[j], WIDGET_CONTROLENTRY_WIDTH); + } + } +} + static int do_editkeys (WIDGET *self, int event) { @@ -288,8 +315,8 @@ do_editkeys (WIDGET *self, int event) next = (WIDGET *)(&menus[7]); /* Prepare the components */ choices[20].selected = 0; - strncpy (textentries[0].value, input_templates[0].name, textentries[0].maxlen); - textentries[0].value[textentries[0].maxlen] = 0; + + populate_editkeys (0); (*next->receiveFocus) (next, WIDGET_EVENT_DOWN); return TRUE; } @@ -300,8 +327,7 @@ do_editkeys (WIDGET *self, int event) static void change_template (WIDGET_CHOICE *self, int oldval) { - strncpy (textentries[0].value, input_templates[self->selected].name, WIDGET_TEXTENTRY_WIDTH); - textentries[0].value[WIDGET_TEXTENTRY_WIDTH-1] = 0; + populate_editkeys (self->selected); } static void @@ -574,6 +600,7 @@ init_widgets (void) for (i = 0; i < MENU_COUNT; i++) { + menus[i].tag = WIDGET_TYPE_MENU_SCREEN; menus[i].parent = NULL; menus[i].handleEvent = Widget_HandleEventMenuScreen; menus[i].receiveFocus = Widget_ReceiveFocusMenuScreen; @@ -599,6 +626,7 @@ init_widgets (void) for (i = 0; i < CHOICE_COUNT; i++) { + choices[i].tag = WIDGET_TYPE_CHOICE; choices[i].parent = NULL; choices[i].handleEvent = Widget_HandleEventChoice; choices[i].receiveFocus = Widget_ReceiveFocusChoice; @@ -688,6 +716,7 @@ init_widgets (void) for (i = 0; i < SLIDER_COUNT; i++) { + sliders[i].tag = WIDGET_TYPE_SLIDER; sliders[i].parent = NULL; sliders[i].handleEvent = Widget_HandleEventSlider; sliders[i].receiveFocus = Widget_ReceiveFocusSimple; @@ -742,6 +771,7 @@ init_widgets (void) for (i = 0; i < BUTTON_COUNT; i++) { + buttons[i].tag = WIDGET_TYPE_BUTTON; buttons[i].parent = NULL; buttons[i].handleEvent = button_handlers[i]; buttons[i].receiveFocus = Widget_ReceiveFocusSimple; @@ -791,6 +821,7 @@ init_widgets (void) for (i = 0; i < LABEL_COUNT; i++) { + labels[i].tag = WIDGET_TYPE_LABEL; labels[i].parent = NULL; labels[i].handleEvent = Widget_HandleEventIgnoreAll; labels[i].receiveFocus = Widget_ReceiveFocusRefuseFocus; @@ -834,6 +865,7 @@ init_widgets (void) } for (i = 0; i < TEXTENTRY_COUNT; i++) { + textentries[i].tag = WIDGET_TYPE_TEXTENTRY; textentries[i].parent = NULL; textentries[i].handleEvent = Widget_HandleEventTextEntry; textentries[i].receiveFocus = Widget_ReceiveFocusSimple; @@ -867,6 +899,33 @@ init_widgets (void) } textentries[0].onChange = rename_template; + /* Control Entry boxes */ + if (index >= count) + { + log_add (log_Fatal, "PANIC: String table cut short while reading control entries"); + exit (EXIT_FAILURE); + } + + if (SplitString (GetStringAddress (SetAbsStringTableIndex (SetupTab, index++)), '\n', 100, buffer, bank) != CONTROLENTRY_COUNT) + { + log_add (log_Fatal, "PANIC: Incorrect number of Control Entries"); + exit (EXIT_FAILURE); + } + for (i = 0; i < CONTROLENTRY_COUNT; i++) + { + controlentries[i].tag = WIDGET_TYPE_CONTROLENTRY; + controlentries[i].parent = NULL; + controlentries[i].handleEvent = Widget_HandleEventControlEntry; + controlentries[i].receiveFocus = Widget_ReceiveFocusControlEntry; + controlentries[i].draw = Widget_DrawControlEntry; + controlentries[i].height = Widget_HeightOneLine; + controlentries[i].width = Widget_WidthFullScreen; + controlentries[i].category = buffer[i]; + controlentries[i].highlighted = 0; + controlentries[i].controlname[0][0] = 0; + controlentries[i].controlname[0][1] = 0; + } + /* Check for garbage at the end */ if (index < count) { diff --git a/sc2/src/starcon2.c b/sc2/src/starcon2.c index 7cca8d59e..6a2a3ae6a 100644 --- a/sc2/src/starcon2.c +++ b/sc2/src/starcon2.c @@ -361,7 +361,7 @@ main (int argc, char *argv[]) } else { - strcpy (input_templates[0].name, "Keyboard 1"); + strcpy (input_templates[0].name, "Arrows"); res_PutString ("config.keys.1.name", input_templates[0].name); } if (res_HasKey ("config.keys.2.name")) @@ -371,7 +371,7 @@ main (int argc, char *argv[]) } else { - strcpy (input_templates[1].name, "Keyboard 2"); + strcpy (input_templates[1].name, "WASD"); res_PutString ("config.keys.2.name", input_templates[1].name); } if (res_HasKey ("config.keys.3.name")) @@ -381,7 +381,7 @@ main (int argc, char *argv[]) } else { - strcpy (input_templates[2].name, "Keyboard 3"); + strcpy (input_templates[2].name, "Arrows (2)"); res_PutString ("config.keys.3.name", input_templates[2].name); } if (res_HasKey ("config.keys.4.name")) @@ -391,7 +391,7 @@ main (int argc, char *argv[]) } else { - strcpy (input_templates[3].name, "Joystick 1"); + strcpy (input_templates[3].name, "ESDF"); res_PutString ("config.keys.4.name", input_templates[3].name); } if (res_HasKey ("config.keys.5.name")) @@ -401,7 +401,7 @@ main (int argc, char *argv[]) } else { - strcpy (input_templates[4].name, "Joystick 2"); + strcpy (input_templates[4].name, "Joystick 1"); res_PutString ("config.keys.5.name", input_templates[4].name); } if (res_HasKey ("config.keys.6.name")) @@ -411,7 +411,7 @@ main (int argc, char *argv[]) } else { - strcpy (input_templates[5].name, "Joystick 3"); + strcpy (input_templates[5].name, "Joystick 2"); res_PutString ("config.keys.6.name", input_templates[5].name); }