X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fscreen_keydef.c;h=ba229ec87ab98ec4827ebc6fb4d149b37b9417f0;hb=1006a43225842d77e5fdb32e9d02bada5cdc2377;hp=1ffee6b1659ad1fe01eb0ea86181992693ba8756;hpb=d4586df2488b0dfa9804674e0b6682d5bf9257c8;p=ncmpc.git diff --git a/src/screen_keydef.c b/src/screen_keydef.c index 1ffee6b..ba229ec 100644 --- a/src/screen_keydef.c +++ b/src/screen_keydef.c @@ -1,32 +1,33 @@ /* 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 * (at your option) any later version. - + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - + * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 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; @@ -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,17 +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_VISUAL_SELECT) + 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,27 +314,32 @@ keydef_cmd(G_GNUC_UNUSED mpdclient_t *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(); } 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); @@ -352,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;