X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=list.c;h=7197723d03fcad6f03f8b5165146e8add20f65e8;hb=4d2aca39cdd96958b3f0bbc6973f15aac5133cdc;hp=dddb84f45ddc0dc7a30a45ba6dc3aff10ab95a33;hpb=f16a3a0e70320b746a9bdafe71dffff4b5ec71d9;p=pkg%2Fabook.git diff --git a/list.c b/list.c index dddb84f..7197723 100644 --- a/list.c +++ b/list.c @@ -9,8 +9,8 @@ #include #include -#include #include "abook.h" +#include #include "ui.h" #include "database.h" #include "edit.h" @@ -35,14 +35,12 @@ extern struct abook_field abook_fields[]; WINDOW *list = NULL; static int -init_extra_field(char *option_name) +init_extra_field(enum str_opts option) { int i, ret = -1; char *option_str; - assert(option_name != NULL); - - option_str = options_get_str(option_name); + option_str = opt_get_str(option); if(option_str && *option_str) { for(i = 0; i < ITEM_FIELDS; i++) { @@ -69,8 +67,8 @@ init_list() * init extra_column and extra alternative */ - extra_column = init_extra_field("extra_column"); - extra_alternative = init_extra_field("extra_alternative"); + extra_column = init_extra_field(STR_EXTRA_COLUMN); + extra_alternative = init_extra_field(STR_EXTRA_ALTERNATIVE); } void @@ -89,7 +87,7 @@ refresh_list() ui_print_number_of_items(); - if( items < 1 ) { + if(items < 1) { refresh(); wrefresh(list); return; @@ -110,8 +108,6 @@ refresh_list() line++, i++ ) { print_list_line(i, line, i == curitem); - - wstandend(list); } wrefresh(list); @@ -129,11 +125,11 @@ print_list_line(int i, int line, int highlight) if(highlight) highlight_line(list, line); - if( selected[i] ) + if(selected[i]) mvwaddch(list, line, 0, '*' ); mvwaddnstr(list, line, NAMEPOS, database[i][NAME], NAMELEN); - if( options_get_int( "show_all_emails" ) ) + if(opt_get_bool(BOOL_SHOW_ALL_EMAILS)) mvwaddnstr(list, line, EMAILPOS, database[i][EMAIL], real_emaillen); else { @@ -149,7 +145,7 @@ print_list_line(int i, int line, int highlight) EXTRALEN); scrollok(list, TRUE); - if(highlight_line) + if(highlight) wstandend(list); } @@ -157,19 +153,25 @@ print_list_line(int i, int line, int highlight) void list_headerline() { +#ifdef A_BOLD attrset(A_BOLD); +#else + /* hmm, maybe something here */ +#endif mvaddstr(2, NAMEPOS, abook_fields[NAME].name); mvaddstr(2, EMAILPOS, abook_fields[EMAIL].name); if(extra_column > 0) mvaddnstr(2, EXTRAPOS, abook_fields[extra_column].name, COLS-EXTRAPOS); +#ifdef A_BOLD attrset(A_NORMAL); +#endif } void scroll_up() { - if( curitem < 1 ) + if(curitem < 1) return; curitem--; @@ -180,7 +182,7 @@ scroll_up() void scroll_down() { - if( curitem > items - 2 ) + if(curitem > items - 2) return; curitem++; @@ -192,7 +194,7 @@ scroll_down() void page_up() { - if( curitem < 1 ) + if(curitem < 1) return; curitem = curitem == first_list_item ? @@ -204,7 +206,7 @@ page_up() void page_down() { - if( curitem > items - 2 ) + if(curitem > items - 2) return; curitem = curitem == LAST_LIST_ITEM ? @@ -218,13 +220,13 @@ page_down() void select_none() { - memset( selected, 0, items ); + memset(selected, 0, items); } void select_all() { - memset( selected, 1, items ); + memset(selected, 1, items); } void @@ -279,8 +281,12 @@ void highlight_line(WINDOW *win, int line) { wstandout(win); - -#ifdef mvwchgat + + /* + * this is a tricky one + */ +#if 0 +/*#ifdef mvwchgat*/ mvwchgat(win, line, 0, -1, A_STANDOUT, 0, NULL); #else /* @@ -315,7 +321,7 @@ invert_selection() { int i; - if( items < 1 ) + if(items < 1) return; for(i = 0; i < items; i++) @@ -334,4 +340,25 @@ list_is_empty() return items < 1; } - +int +duplicate_item() +{ + int i; + list_item item; + + if(curitem < 0) + return 1; + + for(i = 0; i < ITEM_FIELDS; i++) + item[i] = database[curitem][i] ? strdup(database[curitem][i]) : + NULL; + + if(add_item2database(item)) + return 1; + + curitem = LAST_ITEM; + refresh_list(); + + return 0; +} +