X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=list.c;h=32c12ed8b8466c0c6aa3ee72573c619bf8f7a2e5;hb=d4cd6aada86c2d1c3e046b91a271184e659716fa;hp=29ba97263c37be392ab34474091febd87896bada;hpb=4f7637954591ecfb575642709bd12a069ee90aab;p=pkg%2Fabook.git diff --git a/list.c b/list.c index 29ba972..32c12ed 100644 --- a/list.c +++ b/list.c @@ -17,10 +17,16 @@ #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[]; @@ -30,8 +36,44 @@ WINDOW *list = NULL; void init_list() { + int i; + char *e_column_str = options_get_str("extra_column"); + char *e_alternative_str = options_get_str("extra_alternative"); + list = newwin(LIST_LINES, LIST_COLS, LIST_TOP, 0); scrollok(list, TRUE); + + /* + * init extra_column and extra alternative + */ + + if(e_column_str && *e_column_str) { + for(i = 0; i < ITEM_FIELDS; i++) { + if(!strcasecmp(e_column_str, abook_fields[i].key)) { + extra_column = i; + break; + } + } + if(extra_column < MIN_EXTRA_COLUMN || + extra_column > MAX_EXTRA_COLUMN) { + extra_column = -1; + } + } + + if(e_alternative_str && *e_alternative_str) { + for(i = 0; i < ITEM_FIELDS; i++) { + if(!strcasecmp(e_alternative_str, + abook_fields[i].key)) { + extra_alternative = i; + break; + } + } + if(extra_alternative < MIN_EXTRA_COLUMN || + extra_alternative > MAX_EXTRA_COLUMN) { + extra_alternative = -1; + } + } + } void @@ -84,9 +126,9 @@ refresh_list() void print_list_line(int i, int line) { + 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); @@ -103,19 +145,12 @@ 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); } @@ -124,12 +159,10 @@ print_list_line(int i, int line) 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); @@ -291,13 +324,13 @@ invert_selection() selected[i] = !selected[i]; } -inline int +int list_current_item() { return curitem; } -inline int +int list_is_empty() { return items < 1;