From de0277cb4f648484179ddca68a39cadcdb892338 Mon Sep 17 00:00:00 2001 From: Kalle Wallin Date: Fri, 26 Mar 2004 12:31:40 +0000 Subject: Added reversed and wrapped list search (find). git-svn-id: https://svn.musicpd.org/ncmpc/trunk@497 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- screen_utils.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) (limited to 'screen_utils.c') diff --git a/screen_utils.c b/screen_utils.c index 648291f03..9feda742a 100644 --- a/screen_utils.c +++ b/screen_utils.c @@ -9,8 +9,12 @@ #include "support.h" #include "command.h" #include "options.h" +#include "list_window.h" #include "screen.h" +#define FIND_PROMPT "Find: " +#define RFIND_PROMPT "Find backward: " + char * screen_readln(WINDOW *w, char *prompt) { @@ -34,6 +38,70 @@ screen_readln(WINDOW *w, char *prompt) return line; } + +/* query user for a string and find it in a list window */ +int +screen_find(screen_t *screen, + mpd_client_t *c, + list_window_t *lw, + int rows, + command_t findcmd, + list_window_callback_fn_t callback_fn) +{ + int reversed = 0; + int retval = 0; + char *prompt = FIND_PROMPT; + + if( findcmd==CMD_LIST_RFIND ||findcmd==CMD_LIST_RFIND_NEXT ) + { + prompt = RFIND_PROMPT; + reversed = 1; + } + + switch(findcmd) + { + case CMD_LIST_FIND: + case CMD_LIST_RFIND: + if( screen->findbuf ) + { + free(screen->findbuf); + screen->findbuf=NULL; + } + /* continue... */ + case CMD_LIST_FIND_NEXT: + case CMD_LIST_RFIND_NEXT: + if( !screen->findbuf ) + screen->findbuf=screen_readln(screen->status_window.w, prompt); + if( reversed ) + retval = list_window_rfind(lw, + callback_fn, + c, + screen->findbuf, + options.find_wrap, + rows); + else + retval = list_window_find(lw, + callback_fn, + c, + screen->findbuf, + options.find_wrap); + if( retval == 0 ) + { + lw->repaint = 1; + } + else + { + screen_status_printf("Unable to find \'%s\'", screen->findbuf); + beep(); + } + return 1; + default: + break; + } + return 0; +} + + int my_waddstr(WINDOW *w, const char *text, int color) { @@ -61,3 +129,4 @@ my_mvwaddstr(WINDOW *w, int x, int y, const char *text, int color) return ret; } + -- cgit v1.2.3