X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=list.c;h=c192b255cd61be2f6474864d42521df87f544cb0;hb=6f50296ed88b670fbc50b5c951dd14fa36b65088;hp=b3e12de92a914460b3a391913e0909cf07737b75;hpb=e2826ae894d12e69674d1b624e87c05e6bbb2afd;p=pkg%2Fabook.git diff --git a/list.c b/list.c index b3e12de..c192b25 100644 --- a/list.c +++ b/list.c @@ -9,6 +9,7 @@ #include #include +#include #include "abook.h" #include "ui.h" #include "database.h" @@ -17,21 +18,59 @@ #include "misc.h" #include "options.h" +#define MIN_EXTRA_COLUMN ADDRESS /* 2 */ +#define MAX_EXTRA_COLUMN LAST_FIELD + int curitem = -1; int first_list_item = -1; char *selected = NULL; +int extra_column = -1; +int extra_alternative = -1; + extern int items; extern list_item *database; extern struct abook_field abook_fields[]; WINDOW *list = NULL; +static int +init_extra_field(char *option_name) +{ + int i, ret = -1; + char *option_str; + + assert(option_name != NULL); + + option_str = options_get_str(option_name); + + if(option_str && *option_str) { + for(i = 0; i < ITEM_FIELDS; i++) { + if(!strcasecmp(option_str, abook_fields[i].key)) { + ret = i; + break; + } + } + if(ret < MIN_EXTRA_COLUMN || ret > MAX_EXTRA_COLUMN) { + ret = -1; + } + } + + return ret; +} + void init_list() { list = newwin(LIST_LINES, LIST_COLS, LIST_TOP, 0); scrollok(list, TRUE); + + /* + * init extra_column and extra alternative + */ + + extra_column = init_extra_field("extra_column"); + extra_alternative = init_extra_field("extra_alternative"); } void @@ -70,26 +109,23 @@ refresh_list() for( line = 0, i = first_list_item ; i <= LAST_LIST_ITEM && i < items; line++, i++ ) { - if(i == curitem) - highlight_line(list, line); - - print_list_line(i, line); - - wstandend(list); + print_list_line(i, line, i == curitem); } wrefresh(list); } void -print_list_line(int i, int line) +print_list_line(int i, int line, int highlight) { + int extra = extra_column; char tmp[MAX_EMAILSTR_LEN]; - int extra_column = options_get_int("extra_column"); - int real_emaillen = (extra_column > 2 && extra_column < ITEM_FIELDS) ? + int real_emaillen = (extra_column > 0 || extra_alternative > 0) ? EMAILLEN : COLS - EMAILPOS; scrollok(list, FALSE); + if(highlight) + highlight_line(list, line); if( selected[i] ) mvwaddch(list, line, 0, '*' ); @@ -103,33 +139,26 @@ print_list_line(int i, int line) mvwaddnstr(list, line, EMAILPOS, tmp, real_emaillen); } - if(extra_column > 2 && extra_column < ITEM_FIELDS) { - if( !database[i][extra_column] ) { - int extra_alternative = - options_get_int("extra_alternative"); - - if(extra_alternative > 2 && - extra_alternative < ITEM_FIELDS) - extra_column = extra_alternative; - } + if(extra < 0 || !database[i][extra]) + extra = extra_alternative; + if(extra >= 0) mvwaddnstr(list, line, EXTRAPOS, - safe_str(database[i][extra_column]), + safe_str(database[i][extra]), EXTRALEN); - } scrollok(list, TRUE); + if(highlight_line) + wstandend(list); } void list_headerline() { - int extra_column = options_get_int("extra_column"); - attrset(A_BOLD); mvaddstr(2, NAMEPOS, abook_fields[NAME].name); mvaddstr(2, EMAILPOS, abook_fields[EMAIL].name); - if( extra_column > 2 && extra_column < ITEM_FIELDS ) + if(extra_column > 0) mvaddnstr(2, EXTRAPOS, abook_fields[extra_column].name, COLS-EXTRAPOS); attrset(A_NORMAL);