diff options
author | Kalle Wallin <kaw@linux.se> | 2004-03-26 12:31:40 +0000 |
---|---|---|
committer | Kalle Wallin <kaw@linux.se> | 2004-03-26 12:31:40 +0000 |
commit | de0277cb4f648484179ddca68a39cadcdb892338 (patch) | |
tree | 1684dbcfc8c0d7c1de1dc5ffbdb9a983c1511caf /list_window.c | |
parent | 8ccbb1a4fc500d7ae746868da85907f4c80f1ea2 (diff) | |
download | mpd-de0277cb4f648484179ddca68a39cadcdb892338.tar.gz mpd-de0277cb4f648484179ddca68a39cadcdb892338.tar.xz mpd-de0277cb4f648484179ddca68a39cadcdb892338.zip |
Added reversed and wrapped list search (find).
git-svn-id: https://svn.musicpd.org/ncmpc/trunk@497 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'list_window.c')
-rw-r--r-- | list_window.c | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/list_window.c b/list_window.c index 21ee9119f..ee08a8b81 100644 --- a/list_window.c +++ b/list_window.c @@ -150,20 +150,58 @@ int list_window_find(list_window_t *lw, list_window_callback_fn_t callback, void *callback_data, - char *str) + char *str, + int wrap) { int h; int i = lw->selected+1; char *label; + + while( wrap || i==lw->selected+1 ) + { + while( (label=(callback) (i,&h,callback_data)) ) + { + if( str && label && strcasestr(label, str) ) + { + lw->selected = i; + return 0; + } + i++; + if( wrap && i==lw->selected ) + return 1; + } + i=0; /* first item */ + } + return 1; +} - while( (label=(callback) (i,&h,callback_data)) ) + +int +list_window_rfind(list_window_t *lw, + list_window_callback_fn_t callback, + void *callback_data, + char *str, + int wrap, + int rows) +{ + int h; + int i = lw->selected-1; + char *label; + + while( wrap || i==lw->selected-1 ) { - if( str && label && strcasestr(label, str) ) + while( i>=0 && (label=(callback) (i,&h,callback_data)) ) { - lw->selected = i; - return 0; + if( str && label && strcasestr(label, str) ) + { + lw->selected = i; + return 0; + } + i--; + if( wrap && i==lw->selected ) + return 1; } - i++; + i=rows-1; /* last item */ } return 1; } @@ -204,3 +242,5 @@ list_window_cmd(list_window_t *lw, int rows, command_t cmd) } return 1; } + + |