Code

Update copyright notices
[ncmpc.git] / src / screen_keydef.c
index 28822e58f5e56ed3d1f1f385935ab27c733ac19a..8ecc003ac94cc0493a0c6daaef125dafc9cb5769 100644 (file)
@@ -1,5 +1,5 @@
 /* ncmpc (Ncurses MPD Client)
- * (c) 2004-2009 The Music Player Daemon Project
+ * (c) 2004-2010 The Music Player Daemon Project
  * Project homepage: http://musicpd.org
 
  * This program is free software; you can redistribute it and/or modify
@@ -26,6 +26,7 @@
 #include "screen.h"
 #include "screen_utils.h"
 
+#include <assert.h>
 #include <errno.h>
 #include <string.h>
 #include <glib.h>
@@ -42,7 +43,7 @@
 #define LIST_ITEM_APPLY_LABEL _("===> Apply key bindings ")
 
 
-static list_window_t *lw = NULL;
+static struct list_window *lw;
 static unsigned command_list_length = 0;
 static command_definition_t *cmds = NULL;
 
@@ -117,6 +118,7 @@ check_subcmd_length(void)
        } else
                subcmd_addpos = 0;
        subcmd_length += STATIC_SUB_ITEMS;
+       list_window_set_length(lw, subcmd_length);
 }
 
 static void
@@ -188,38 +190,38 @@ assign_new_key(int cmd_index, int key_index)
 }
 
 static const char *
-list_callback(unsigned idx, bool *highlight, G_GNUC_UNUSED char** sc, G_GNUC_UNUSED void *data)
+list_callback(unsigned idx, G_GNUC_UNUSED void *data)
 {
        static char buf[BUFSIZE];
 
        if (subcmd < 0) {
-               if (idx < (unsigned)command_list_length) {
-                       if (cmds[idx].flags & COMMAND_KEY_CONFLICT)
-                               *highlight = true;
-                       return cmds[idx].name;
-               } else if (idx == LIST_ITEM_APPLY())
+               if (idx == LIST_ITEM_APPLY())
                        return LIST_ITEM_APPLY_LABEL;
                else if (idx == LIST_ITEM_SAVE())
                        return LIST_ITEM_SAVE_LABEL;
+
+               assert(idx < (unsigned)command_list_length);
+
+               return cmds[idx].name;
        } else {
                if (idx == 0)
                        return "[..]";
                idx--;
-               if (idx < MAX_COMMAND_KEYS && cmds[subcmd].keys[idx] > 0) {
-                       g_snprintf(buf,
-                                  BUFSIZE, "%d. %-20s   (%d) ",
-                                  idx + 1,
-                                  key2str(cmds[subcmd].keys[idx]),
-                                  cmds[subcmd].keys[idx]);
-                       return buf;
-               } else if (idx == subcmd_addpos) {
+               if (idx == subcmd_addpos) {
                        g_snprintf(buf, BUFSIZE, "%d. %s",
                                   idx + 1, _("Add new key"));
                        return buf;
                }
-       }
 
-       return NULL;
+               assert(idx < MAX_COMMAND_KEYS && cmds[subcmd].keys[idx] > 0);
+
+               g_snprintf(buf,
+                          BUFSIZE, "%d. %-20s   (%d) ",
+                          idx + 1,
+                          key2str(cmds[subcmd].keys[idx]),
+                          cmds[subcmd].keys[idx]);
+               return buf;
+       }
 }
 
 static void
@@ -231,8 +233,7 @@ keydef_init(WINDOW *w, int cols, int rows)
 static void
 keydef_resize(int cols, int rows)
 {
-       lw->cols = cols;
-       lw->rows = rows;
+       list_window_resize(lw, cols, rows);
 }
 
 static void
@@ -263,7 +264,7 @@ keydef_open(G_GNUC_UNUSED struct mpdclient *c)
        }
 
        subcmd = -1;
-       list_window_check_selected(lw, LIST_LENGTH());
+       list_window_set_length(lw, LIST_LENGTH());
 }
 
 static void
@@ -295,15 +296,10 @@ keydef_paint(void)
 static bool
 keydef_cmd(G_GNUC_UNUSED struct mpdclient *c, command_t cmd)
 {
-       int length = LIST_LENGTH();
-
-       if (subcmd >= 0)
-               length = subcmd_length;
-
        if (cmd == CMD_LIST_RANGE_SELECT)
                return false;
 
-       if (list_window_cmd(lw, length, cmd)) {
+       if (list_window_cmd(lw, cmd)) {
                keydef_repaint();
                return true;
        }
@@ -318,18 +314,15 @@ keydef_cmd(G_GNUC_UNUSED struct mpdclient *c, command_t cmd)
                                save_keys();
                        } else {
                                subcmd = lw->selected;
-                               lw->selected=0;
-                               lw->selected_start = lw->selected;
-                               lw->selected_end = lw->selected;
+                               list_window_reset(lw);
                                check_subcmd_length();
 
                                keydef_repaint();
                        }
                } else {
                        if (lw->selected == 0) { /* up */
-                               lw->selected = subcmd;
-                               lw->selected_start = lw->selected;
-                               lw->selected_end = lw->selected;
+                               list_window_set_length(lw, LIST_LENGTH());
+                               list_window_set_cursor(lw, subcmd);
                                subcmd = -1;
 
                                keydef_repaint();
@@ -340,9 +333,8 @@ keydef_cmd(G_GNUC_UNUSED struct mpdclient *c, command_t cmd)
                return true;
        case CMD_GO_PARENT_DIRECTORY:
                if (subcmd >=0) {
-                       lw->selected = subcmd;
-                       lw->selected_start = lw->selected;
-                       lw->selected_end = lw->selected;
+                       list_window_set_length(lw, LIST_LENGTH());
+                       list_window_set_cursor(lw, subcmd);
                        subcmd = -1;
 
                        keydef_repaint();
@@ -361,8 +353,7 @@ keydef_cmd(G_GNUC_UNUSED struct mpdclient *c, command_t cmd)
        case CMD_LIST_RFIND:
        case CMD_LIST_FIND_NEXT:
        case CMD_LIST_RFIND_NEXT:
-               screen_find(lw, length,
-                           cmd, list_callback, NULL);
+               screen_find(lw, cmd, list_callback, NULL);
                keydef_repaint();
                return true;