X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=list.c;h=ca4892baea2e4f7bd495b225c0649c14f3052ac6;hb=ea5caf0b6ea903f82d448f90cf5005f2a68cfaab;hp=9b39b7e9f03b1bc4d8ff9033c9e8e5ebbac32852;hpb=2dbdc2283dcdb1a6a22762302da69a78ce86e13d;p=pkg%2Fabook.git diff --git a/list.c b/list.c index 9b39b7e..ca4892b 100644 --- a/list.c +++ b/list.c @@ -19,6 +19,7 @@ #include "misc.h" #include "options.h" #include "xmalloc.h" +#include "color.h" int curitem = -1; @@ -180,7 +181,7 @@ print_list_field(int item, int line, int *x_pos, struct index_elem *e) width = len ? bytes2width(s, len) : strwidth(s); x_start = *x_pos + ((e->d.field.len < 0) ? len - width : 0); if(width + x_start >= COLS) - width = COLS - x_start; + width = bytes2width(s, COLS - x_start); if(width) mvwaddnstr(list, line, x_start, s, width); @@ -191,12 +192,46 @@ print_list_field(int item, int line, int *x_pos, struct index_elem *e) *x_pos += len ? len : width; } +static void +highlight_line(WINDOW *win, int line) +{ + wattrset(win, COLOR_PAIR(CP_LIST_HIGHLIGHT)); + if(!opt_get_bool(BOOL_USE_COLORS)) { + wstandout(win); + } + + /* + * this is a tricky one + */ +#if 0 +/*#ifdef mvwchgat*/ + mvwchgat(win, line, 0, -1, A_STANDOUT, 0, NULL); +#else + /* + * buggy function: FIXME + */ + scrollok(win, FALSE); + { + int i; + wmove(win, line, 0); + for(i = 0; i < COLS; i++) + waddch(win, ' '); + /*wattrset(win, 0);*/ + } + scrollok(win, TRUE); +#endif +} + static void print_list_line(int item, int line, int highlight) { struct index_elem *cur; int x_pos = 1; + if(item % 2 == 0) + wattrset(list, COLOR_PAIR(CP_LIST_EVEN)); + else + wattrset(list, COLOR_PAIR(CP_LIST_ODD)); scrollok(list, FALSE); if(highlight) highlight_line(list, line); @@ -273,13 +308,18 @@ list_headerline() #if defined(A_BOLD) && defined(A_NORMAL) attrset(A_BOLD); #endif + attrset(COLOR_PAIR(CP_LIST_HEADER)); + mvhline(2, 0, ' ', COLS); for(e = index_elements; e; e = e->next) if(e->type == INDEX_TEXT) x_pos += strwidth(e->d.text); else if(e->type == INDEX_FIELD) { get_field_info(e->d.field.id, NULL, &str, NULL); - width = e->d.field.len ? abs(e->d.field.len) : strwidth(str); + width = e->d.field.len ? + abs(e->d.field.len) : strwidth(str); + if(width + x_pos > COLS) + width = bytes2width(str, COLS - x_pos); mvaddnstr(2, x_pos, str, width); x_pos += width; } else @@ -422,33 +462,6 @@ goto_end() refresh_list(); } -static void -highlight_line(WINDOW *win, int line) -{ - wstandout(win); - - /* - * this is a tricky one - */ -#if 0 -/*#ifdef mvwchgat*/ - mvwchgat(win, line, 0, -1, A_STANDOUT, 0, NULL); -#else - /* - * buggy function: FIXME - */ - scrollok(win, FALSE); - { - int i; - wmove(win, line, 0); - for(i = 0; i < COLS; i++) - waddch(win, ' '); - /*wattrset(win, 0);*/ - } - scrollok(win, TRUE); -#endif -} - int selected_items() { @@ -485,6 +498,12 @@ list_get_curitem() return curitem; } +int +list_get_firstitem() +{ + return first_list_item; +} + void list_set_curitem(int i) {