home · contact · privacy
Client: Further simplify display of available keybindings.
[plomrogue] / src / client / draw_wins.c
index 6736a1bbb77b980872fa2950c6b57201f546bb22..ac21e09d5f30b6b4537ad12d53a2376a7b5e2417 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,13 +63,6 @@ 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,
-                                        struct KeyBindingDB * kbdb);
-
 
 
 static void try_resize_winmap(struct Win * win, int new_size_y, int new_size_x)
@@ -182,7 +180,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,34 +296,6 @@ 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,
-                                        struct KeyBindingDB * kbdb)
-{
-    uint8_t state = 0;
-    uint8_t kb_n = 0;
-    while (0 == state || kb_n < 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++;
-    }
-    if (2 == state)
-    {
-        add_line(win, "(none)", 0, offset, last);
-    }
-}
-
-
-
 extern void draw_win_log(struct Win * win)
 {
     if (!world.log)
@@ -424,9 +394,8 @@ extern void draw_win_inventory(struct Win * win)
 
 
 
-extern void draw_win_available_keybindings(struct Win * win)
+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)
@@ -438,12 +407,20 @@ 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);
-}
+    if (0 == kbdb->n_of_kbs)
+    {
+        add_line(win, "(none)", 0, &offset, 0);
+        return;
+    }
+    uint8_t kb_n;
+    for (kb_n = 0; kb_n < kbdb->n_of_kbs; kb_n++)
+    {
+        char * kb_line = get_kb_line(&kbdb->kbs[kb_n]);
+        add_line(win, kb_line, 0, &offset, (0 == kb_n + 1));
+        free(kb_line);
+    }
 
+}
 
 
 
@@ -496,7 +473,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: ";