home · contact · privacy
Client: Simplify display of available keybindings.
[plomrogue] / src / client / draw_wins.c
index 6736a1bbb77b980872fa2950c6b57201f546bb22..1dbd8a820774c17bc292de8650a267008817d205 100644 (file)
@@ -1,4 +1,9 @@
-/* src/client/draw_wins.c */
+/* src/client/draw_wins.c
+ *
+ * This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3
+ * or any later version. For details on its copyright, license, and warranties,
+ * see the file NOTICE in the root directory of the PlomRogue source package.
+ */
 
 #define _POSIX_C_SOURCE 200809L /* strdup() */
 #include "draw_wins.h"
@@ -58,11 +63,8 @@ static char * get_kb_line(struct KeyBinding * kb);
 static void draw_keybinding_config(struct Win * win, struct KeyBindingDB * kbdb,
                                    uint16_t offset);
 
-/* Draw into window "w" from line "start" on a "title" followed by an empty
- * line followed by a list of all keybindings starting in "kbdb".
- */
-static void draw_titled_keybinding_list(char * title, struct Win * win,
-                                        uint16_t * offset, uint8_t last,
+/* Draw into window "w" list of all the keybindings that start at "kbdb". */
+static void draw_titled_keybinding_list(struct Win * win,
                                         struct KeyBindingDB * kbdb);
 
 
@@ -182,7 +184,7 @@ static void add_line_compact(struct Win * win, char * line, attr_t attri,
     uint16_t len_line = strlen(line);
     char * separator = last ? "" : " / ";
     uint32_t len_line_new = len_line + strlen(separator);
-    char * line_new = try_malloc(len_line_new, __func__);
+    char * line_new = try_malloc(len_line_new + 1, __func__);
     int test = sprintf(line_new, "%s%s", line, separator);
     exit_trouble(test < 0, __func__, "sprintf");
     uint16_t x = 0;
@@ -298,29 +300,21 @@ static void draw_keybinding_config(struct Win * win, struct KeyBindingDB * kbdb,
 
 
 
-static void draw_titled_keybinding_list(char * title, struct Win * win,
-                                        uint16_t * offset, uint8_t last,
+static void draw_titled_keybinding_list(struct Win * win,
                                         struct KeyBindingDB * kbdb)
 {
-    uint8_t state = 0;
-    uint8_t kb_n = 0;
-    while (0 == state || kb_n < kbdb->n_of_kbs)
+    uint16_t offset = 0;
+    if (0 == kbdb->n_of_kbs)
     {
-        if (0 == state)
-        {
-            add_line(win, title, 0, offset, 0);
-            add_line(win, " ", 0, offset, 0);
-            state = 1 + (0 == kbdb->n_of_kbs);
-            continue;
-        }
-        char * kb_line = get_kb_line(&kbdb->kbs[kb_n]);
-        add_line(win, kb_line, 0, offset, (last * kbdb->n_of_kbs == kb_n + 1));
-        free(kb_line);
-        kb_n++;
+        add_line(win, "(none)", 0, &offset, 0);
+        return;
     }
-    if (2 == state)
+    uint8_t kb_n;
+    for (kb_n = 0; kb_n < kbdb->n_of_kbs; kb_n++)
     {
-        add_line(win, "(none)", 0, offset, last);
+        char * kb_line = get_kb_line(&kbdb->kbs[kb_n]);
+        add_line(win, kb_line, 0, &offset, (0 == kb_n + 1));
+        free(kb_line);
     }
 }
 
@@ -424,9 +418,15 @@ extern void draw_win_inventory(struct Win * win)
 
 
 
-extern void draw_win_available_keybindings(struct Win * win)
+extern void draw_win_global_keys(struct Win * win)
+{
+    draw_titled_keybinding_list(win, &world.kb_global);
+}
+
+
+
+extern void draw_win_active_windows_keys(struct Win * win)
 {
-    char * title = "Active window's keys:";
     struct Win * win_active = get_win_by_id(world.winDB.active);
     struct KeyBindingDB * kbdb = &win_active->kb;
     if      (1 == win_active->view)
@@ -437,16 +437,11 @@ extern void draw_win_available_keybindings(struct Win * win)
     {
         kbdb = &world.kb_winkeys;
     }
-    uint16_t offset = 0;
-    draw_titled_keybinding_list(title, win, &offset, 0, kbdb);
-    add_line(win, " ", 0, &offset, 0);
-    title = "Global keys:";
-    draw_titled_keybinding_list(title, win, &offset, 1, &world.kb_global);
+    draw_titled_keybinding_list(win, kbdb);
 }
 
 
 
-
 extern void draw_win_keybindings_global(struct Win * win)
 {
     win->center.y = world.kb_global.select;
@@ -496,7 +491,7 @@ extern void draw_winconf_geometry(struct Win * win)
     char w_value[6 + 1];
     test = sprintf(w_value, "%d", win->target_width);
     exit_trouble(test < 0, __func__, "sprintf");
-    char * w_plus = "(height in cells)\n\n";
+    char * w_plus = " (height in cells)\n\n";
     char * w_minus = " (negative diff: cells to screen height)\n\n";
     char * w_type = (1 == win->target_width_type)  ? w_minus : w_plus;
     char * breaks_title = "Linebreak type: ";