ref: 7a2f14efc374db3404c2531bc25609809a233c6b
parent: ef256921f31cfe2a3a8452fe30a3c0d96b416347
author: Simon Howard <fraggle@soulsphere.org>
date: Sat Jul 11 12:43:31 EDT 2015
setup: Clean up gamepad configuration window. Use the new table functionality to avoid having to create inner tables. This nicely aligns the whole window on a grid. There are also some minor tweaks to the widgets used for the window.
--- a/src/setup/joystick.c
+++ b/src/setup/joystick.c
@@ -716,71 +716,77 @@
// GUI
//
-static void AddJoystickControl(txt_table_t *table, char *label, int *var)
+static void AddJoystickControl(TXT_UNCAST_ARG(table), char *label, int *var)
{
+ TXT_CAST_ARG(txt_table_t, table);
txt_joystick_input_t *joy_input;
joy_input = TXT_NewJoystickInput(var);
- TXT_AddWidget(table, TXT_NewLabel(label));
- TXT_AddWidget(table, joy_input);
+ TXT_AddWidgets(table,
+ TXT_NewLabel(label),
+ joy_input,
+ TXT_TABLE_EMPTY,
+ NULL);
}
void ConfigJoystick(void)
{
txt_window_t *window;
- txt_table_t *button_table, *axis_table;
- txt_table_t *joystick_table;
window = TXT_NewWindow("Gamepad/Joystick configuration");
-
+ TXT_SetTableColumns(window, 6);
+ TXT_SetColumnWidths(window, 18, 10, 2, 14, 10, 0);
TXT_SetWindowHelpURL(window, WINDOW_HELP_URL);
TXT_AddWidgets(window,
- joystick_table = TXT_NewTable(2),
- TXT_NewSeparator("Axes"),
- axis_table = TXT_NewTable(2),
- TXT_NewSeparator("Buttons"),
- button_table = TXT_NewTable(4),
- NULL);
-
- TXT_SetColumnWidths(joystick_table, 13, 40);
-
- TXT_AddWidgets(joystick_table,
TXT_NewLabel("Controller"),
joystick_button = TXT_NewButton("zzzz"),
- NULL);
+ TXT_TABLE_EOL,
- TXT_SetColumnWidths(axis_table, 20, 15);
-
- TXT_AddWidgets(axis_table,
+ TXT_NewSeparator("Axes"),
TXT_NewLabel("Forward/backward"),
y_axis_widget = TXT_NewJoystickAxis(&joystick_y_axis,
&joystick_y_invert,
JOYSTICK_AXIS_VERTICAL),
+ TXT_TABLE_OVERFLOW_RIGHT,
+ TXT_TABLE_OVERFLOW_RIGHT,
+ TXT_TABLE_EMPTY,
+ TXT_TABLE_EMPTY,
+
TXT_NewLabel("Turn left/right"),
- x_axis_widget = TXT_NewJoystickAxis(&joystick_x_axis,
- &joystick_x_invert,
- JOYSTICK_AXIS_HORIZONTAL),
+ x_axis_widget =
+ TXT_NewJoystickAxis(&joystick_x_axis,
+ &joystick_x_invert,
+ JOYSTICK_AXIS_HORIZONTAL),
+ TXT_TABLE_OVERFLOW_RIGHT,
+ TXT_TABLE_OVERFLOW_RIGHT,
+ TXT_TABLE_EMPTY,
+ TXT_TABLE_EMPTY,
+
TXT_NewLabel("Strafe left/right"),
TXT_NewJoystickAxis(&joystick_strafe_axis,
&joystick_strafe_invert,
JOYSTICK_AXIS_HORIZONTAL),
+ TXT_TABLE_OVERFLOW_RIGHT,
+ TXT_TABLE_OVERFLOW_RIGHT,
+ TXT_TABLE_EMPTY,
+ TXT_TABLE_EMPTY,
+
+ TXT_NewSeparator("Buttons"),
NULL);
- TXT_SetColumnWidths(button_table, 16, 12, 14, 11);
+ AddJoystickControl(window, "Fire/Attack", &joybfire);
+ AddJoystickControl(window, "Strafe Left", &joybstrafeleft);
- AddJoystickControl(button_table, "Fire/Attack", &joybfire);
- AddJoystickControl(button_table, "Strafe Left", &joybstrafeleft);
+ AddJoystickControl(window, "Use", &joybuse);
+ AddJoystickControl(window, "Strafe Right", &joybstraferight);
- AddJoystickControl(button_table, "Use", &joybuse);
- AddJoystickControl(button_table, "Strafe Right", &joybstraferight);
+ AddJoystickControl(window, "Previous weapon", &joybprevweapon);
+ AddJoystickControl(window, "Strafe", &joybstrafe);
- AddJoystickControl(button_table, "Previous weapon", &joybprevweapon);
- AddJoystickControl(button_table, "Strafe", &joybstrafe);
+ AddJoystickControl(window, "Next weapon", &joybnextweapon);
- AddJoystickControl(button_table, "Next weapon", &joybnextweapon);
-
// High values of joybspeed are used to activate the "always run mode"
// trick in Vanilla Doom. If this has been enabled, not only is the
// joybspeed value meaningless, but the control itself is useless.
@@ -787,15 +793,15 @@
if (joybspeed < 20)
{
- AddJoystickControl(button_table, "Speed", &joybspeed);
+ AddJoystickControl(window, "Speed", &joybspeed);
}
if (gamemission == hexen || gamemission == strife)
{
- AddJoystickControl(button_table, "Jump", &joybjump);
+ AddJoystickControl(window, "Jump", &joybjump);
}
- AddJoystickControl(button_table, "Activate menu", &joybmenu);
+ AddJoystickControl(window, "Activate menu", &joybmenu);
TXT_SignalConnect(joystick_button, "pressed", CalibrateJoystick, NULL);
TXT_SetWindowAction(window, TXT_HORIZ_CENTER, TestConfigAction());
--- a/src/setup/txt_joyaxis.c
+++ b/src/setup/txt_joyaxis.c
@@ -367,7 +367,7 @@
joystick_axis->joystick = SDL_JoystickOpen(joystick_index);
if (joystick_axis->joystick == NULL)
{
- // TODO: OpenErrorWindow();
+ TXT_MessageBox(NULL, "Please configure a controller first!");
return;
}
@@ -461,7 +461,7 @@
TXT_DrawString(buf);
- for (i=strlen(buf); i<JOYSTICK_AXIS_WIDTH; ++i)
+ for (i = strlen(buf); i < joystick_axis->widget.w; ++i)
{
TXT_DrawString(" ");
}
--- a/src/setup/txt_joybinput.c
+++ b/src/setup/txt_joybinput.c
@@ -189,7 +189,7 @@
static void OpenErrorWindow(void)
{
- TXT_MessageBox(NULL, "Please configure a joystick first!");
+ TXT_MessageBox(NULL, "Please configure a controller first!");
}
static void OpenPromptWindow(txt_joystick_input_t *joystick_input)
@@ -218,7 +218,7 @@
// Open the prompt window
- window = TXT_MessageBox(NULL, "Press the new joystick button...");
+ window = TXT_MessageBox(NULL, "Press the new button on the controller...");
TXT_SDL_SetEventCallback(EventCallback, joystick_input);
TXT_SignalConnect(window, "closed", PromptWindowClosed, joystick);
@@ -296,7 +296,8 @@
return 0;
}
-static void TXT_JoystickInputMousePress(TXT_UNCAST_ARG(widget), int x, int y, int b)
+static void TXT_JoystickInputMousePress(TXT_UNCAST_ARG(widget),
+ int x, int y, int b)
{
TXT_CAST_ARG(txt_joystick_input_t, widget);