shithub: choc

Download patch

ref: c82c457a5ec867072c2d538d6c8a4940994bf23e
parent: 19559480914814184b469d65425ccdf56b8079b5
author: Simon Howard <fraggle@soulsphere.org>
date: Thu Jul 9 21:44:56 EDT 2015

setup: Clean up the keyboard controls window.

We can now use the new textscreen functions to drastically simplify
the code for this window.

--- a/src/setup/keyboard.c
+++ b/src/setup/keyboard.c
@@ -146,8 +146,9 @@
 
 // Add a label and keyboard input to the specified table.
 
-static void AddKeyControl(txt_table_t *table, char *name, int *var)
+static void AddKeyControl(TXT_UNCAST_ARG(table), char *name, int *var)
 {
+    TXT_CAST_ARG(txt_table_t, table);
     txt_key_input_t *key_input;
 
     TXT_AddWidget(table, TXT_NewLabel(name));
@@ -157,20 +158,26 @@
     TXT_SignalConnect(key_input, "set", KeySetCallback, var);
 }
 
-static void AddSectionLabel(txt_table_t *table, char *title, boolean add_space)
+static void AddSectionLabel(TXT_UNCAST_ARG(table), char *title,
+                            boolean add_space)
 {
+    TXT_CAST_ARG(txt_table_t, table);
     char buf[64];
 
     if (add_space)
     {
-        TXT_AddWidgets(table, TXT_NewStrut(0, 1), TXT_NewStrut(0, 1),
-                              NULL);
+        TXT_AddWidgets(table,
+                       TXT_NewStrut(0, 1),
+                       TXT_TABLE_EOL,
+                       NULL);
     }
 
     M_snprintf(buf, sizeof(buf), " - %s - ", title);
 
-    TXT_AddWidgets(table, TXT_NewLabel(buf),  TXT_NewStrut(0, 0),
-                          NULL);
+    TXT_AddWidgets(table,
+                   TXT_NewLabel(buf),
+                   TXT_TABLE_EOL,
+                   NULL);
 }
 static void ConfigExtraKeys(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused))
 {
@@ -244,7 +251,8 @@
             AddKeyControl(table, "Chaos Device", &key_arti_teleport);
             AddKeyControl(table, "Banishment Device", &key_arti_teleportother);
             AddKeyControl(table, "Porkalator", &key_arti_egg);
-            AddKeyControl(table, "Icon of the Defender", &key_arti_invulnerability);
+            AddKeyControl(table, "Icon of the Defender",
+                          &key_arti_invulnerability);
         }
     }
     else
@@ -262,8 +270,8 @@
     AddKeyControl(table, "Weapon 6", &key_weapon6);
     AddKeyControl(table, "Weapon 7", &key_weapon7);
     AddKeyControl(table, "Weapon 8", &key_weapon8);
-    AddKeyControl(table, "Previous weapon",       &key_prevweapon);
-    AddKeyControl(table, "Next weapon",           &key_nextweapon);
+    AddKeyControl(table, "Previous weapon", &key_prevweapon);
+    AddKeyControl(table, "Next weapon", &key_nextweapon);
 }
 
 static void OtherKeysDialog(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused))
@@ -353,9 +361,6 @@
 void ConfigKeyboard(void)
 {
     txt_window_t *window;
-    txt_table_t *movement_table;
-    txt_table_t *action_table;
-    txt_table_t *dialogs_table;
     txt_checkbox_t *run_control;
 
     always_run = joybspeed >= 20;
@@ -364,54 +369,57 @@
 
     TXT_SetWindowHelpURL(window, WINDOW_HELP_URL);
 
-    TXT_AddWidgets(window,
-                   TXT_NewSeparator("Movement"),
-                   movement_table = TXT_NewTable(4),
+    // The window is on a 5-column grid layout that looks like:
+    // Label | Control | | Label | Control
+    // There is a small gap between the two conceptual "columns" of
+    // controls, just for spacing.
+    TXT_SetTableColumns(window, 5);
+    TXT_SetColumnWidths(window, 15, 8, 2, 15, 8);
 
-                   TXT_NewSeparator("Action"),
-                   action_table = TXT_NewTable(4),
-                   dialogs_table = TXT_NewTable(2),
+    TXT_AddWidget(window, TXT_NewSeparator("Movement"));
+    AddKeyControl(window, "Move Forward", &key_up);
+    TXT_AddWidget(window, TXT_TABLE_EMPTY);
+    AddKeyControl(window, "Strafe Left", &key_strafeleft);
 
-                   TXT_NewSeparator("Misc."),
-                   run_control = TXT_NewCheckBox("Always run", &always_run),
-                   TXT_NewInvertedCheckBox("Use native keyboard mapping", 
-                                           &vanilla_keyboard_mapping),
-                   NULL);
+    AddKeyControl(window, "Move Backward", &key_down);
+    TXT_AddWidget(window, TXT_TABLE_EMPTY);
+    AddKeyControl(window, "Strafe Right", &key_straferight);
 
-    TXT_SetColumnWidths(movement_table, 15, 8, 15, 8);
+    AddKeyControl(window, "Turn Left", &key_left);
+    TXT_AddWidget(window, TXT_TABLE_EMPTY);
+    AddKeyControl(window, "Speed On", &key_speed);
 
-    TXT_SignalConnect(run_control, "changed", UpdateJoybSpeed, NULL);
+    AddKeyControl(window, "Turn Right", &key_right);
+    TXT_AddWidget(window, TXT_TABLE_EMPTY);
+    AddKeyControl(window, "Strafe On", &key_strafe);
 
-    AddKeyControl(movement_table, "Move Forward", &key_up);
-    AddKeyControl(movement_table, " Strafe Left", &key_strafeleft);
-    AddKeyControl(movement_table, "Move Backward", &key_down);
-    AddKeyControl(movement_table, " Strafe Right", &key_straferight);
-    AddKeyControl(movement_table, "Turn Left", &key_left);
-    AddKeyControl(movement_table, " Speed On", &key_speed);
-    AddKeyControl(movement_table, "Turn Right", &key_right);
-    AddKeyControl(movement_table, " Strafe On", &key_strafe);
-
     if (gamemission == hexen || gamemission == strife)
     {
-        AddKeyControl(movement_table, "Jump", &key_jump);
+        AddKeyControl(window, "Jump", &key_jump);
     }
 
-    TXT_SetColumnWidths(action_table, 15, 8, 15, 8);
+    TXT_AddWidget(window, TXT_NewSeparator("Action"));
+    AddKeyControl(window, "Fire/Attack", &key_fire);
+    TXT_AddWidget(window, TXT_TABLE_EMPTY);
+    AddKeyControl(window, "Use", &key_use);
 
-    AddKeyControl(action_table, "Fire/Attack", &key_fire);
-    AddKeyControl(action_table, " Use", &key_use);
-
-    // Other key bindings are stored in separate sub-dialogs:
-
-    TXT_SetColumnWidths(dialogs_table, 24, 24);
-
-    TXT_AddWidgets(dialogs_table,
+    TXT_AddWidgets(window,
                    TXT_NewButton2("More controls...", ConfigExtraKeys, NULL),
+                   TXT_TABLE_OVERFLOW_RIGHT,
+                   TXT_TABLE_EMPTY,
                    TXT_NewButton2("Other keys...", OtherKeysDialog, NULL),
+                   TXT_TABLE_OVERFLOW_RIGHT,
+
+                   TXT_NewSeparator("Misc."),
+                   run_control = TXT_NewCheckBox("Always run", &always_run),
+                   TXT_TABLE_EOL,
+                   TXT_NewInvertedCheckBox("Use native keyboard mapping",
+                                           &vanilla_keyboard_mapping),
+                   TXT_TABLE_EOL,
                    NULL);
 
+    TXT_SignalConnect(run_control, "changed", UpdateJoybSpeed, NULL);
     TXT_SetWindowAction(window, TXT_HORIZ_CENTER, TestConfigAction());
-
 }
 
 void BindKeyboardVariables(void)