X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fscreen_keydef.c;h=8ecc003ac94cc0493a0c6daaef125dafc9cb5769;hb=44c4e177bf52c70f307d6d528fb62b5c9176a3aa;hp=92837991083e8dc603ec96859123066fdebaa18f;hpb=e67ad30e9bea8ce099b4a6311cf2b20ce6d86263;p=ncmpc.git diff --git a/src/screen_keydef.c b/src/screen_keydef.c index 9283799..8ecc003 100644 --- a/src/screen_keydef.c +++ b/src/screen_keydef.c @@ -1,7 +1,7 @@ /* 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 * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -17,16 +17,17 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "screen_keydef.h" +#include "screen_interface.h" +#include "screen_message.h" +#include "screen_find.h" #include "i18n.h" -#include "mpdclient.h" -#include "options.h" #include "conf.h" -#include "command.h" #include "screen.h" #include "screen_utils.h" +#include #include -#include #include #include @@ -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; @@ -79,7 +80,7 @@ save_keys(void) char *filename; if (check_user_conf_dir()) { - screen_status_printf(_("Error: Unable to create direcory ~/.ncmpc - %s"), + screen_status_printf(_("Error: Unable to create directory ~/.ncmpc - %s"), strerror(errno)); screen_bell(); return -1; @@ -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 @@ -149,14 +151,14 @@ delete_key(int cmd_index, int key_index) } static void -assign_new_key(WINDOW *w, int cmd_index, int key_index) +assign_new_key(int cmd_index, int key_index) { int key; char *buf; command_t cmd; buf = g_strdup_printf(_("Enter new key for %s: "), cmds[cmd_index].name); - key = screen_getch(w, buf); + key = screen_getch(buf); g_free(buf); if (key==ERR) { @@ -188,38 +190,38 @@ assign_new_key(WINDOW *w, int cmd_index, int key_index) } static const char * -list_callback(unsigned idx, bool *highlight, 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 @@ -246,7 +247,7 @@ keydef_exit(void) } static void -keydef_open(G_GNUC_UNUSED mpdclient_t *c) +keydef_open(G_GNUC_UNUSED struct mpdclient *c) { if (cmds == NULL) { command_definition_t *current_cmds = get_command_definitions(); @@ -263,7 +264,7 @@ keydef_open(G_GNUC_UNUSED mpdclient_t *c) } subcmd = -1; - list_window_check_selected(lw, LIST_LENGTH()); + list_window_set_length(lw, LIST_LENGTH()); } static void @@ -293,14 +294,12 @@ keydef_paint(void) } static bool -keydef_cmd(G_GNUC_UNUSED mpdclient_t *c, command_t cmd) +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; } @@ -315,23 +314,32 @@ keydef_cmd(G_GNUC_UNUSED mpdclient_t *c, command_t cmd) save_keys(); } else { subcmd = lw->selected; - lw->selected=0; + list_window_reset(lw); check_subcmd_length(); keydef_repaint(); } } else { if (lw->selected == 0) { /* up */ - lw->selected = subcmd; + list_window_set_length(lw, LIST_LENGTH()); + list_window_set_cursor(lw, subcmd); subcmd = -1; keydef_repaint(); } else - assign_new_key(screen.status_window.w, - subcmd, + assign_new_key(subcmd, lw->selected - STATIC_SUB_ITEMS); } return true; + case CMD_GO_PARENT_DIRECTORY: + if (subcmd >=0) { + list_window_set_length(lw, LIST_LENGTH()); + list_window_set_cursor(lw, subcmd); + subcmd = -1; + + keydef_repaint(); + } + break; case CMD_DELETE: if (subcmd >= 0 && lw->selected >= STATIC_SUB_ITEMS) delete_key(subcmd, lw->selected - STATIC_SUB_ITEMS); @@ -345,8 +353,7 @@ keydef_cmd(G_GNUC_UNUSED mpdclient_t *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;