5 * by JH <jheinonen@bigfoot.com>
7 * Copyright (C) Jaakko Heinonen
21 int first_list_item = -1;
22 char *selected = NULL;
25 extern list_item *database;
26 extern struct abook_field abook_fields[];
33 list = newwin(LIST_LINES, LIST_COLS, LIST_TOP, 0);
51 ui_print_number_of_items();
62 if(first_list_item < 0)
65 if(curitem < first_list_item)
66 first_list_item = curitem;
67 else if(curitem > LAST_LIST_ITEM)
68 first_list_item = max(curitem - LIST_LINES + 1, 0);
70 for( line = 0, i = first_list_item ; i <= LAST_LIST_ITEM && i < items;
74 highlight_line(list, line);
76 print_list_line(i, line);
85 print_list_line(int i, int line)
87 char tmp[MAX_EMAILSTR_LEN];
88 int extra_column = options_get_int("extra_column");
89 int real_emaillen = (extra_column > 2 && extra_column < ITEM_FIELDS) ?
90 EMAILLEN : EMAILPOS - COLS;
92 scrollok(list, FALSE);
95 mvwaddch(list, line, 0, '*' );
97 mvwaddnstr(list, line, NAMEPOS, database[i][NAME], NAMELEN);
98 if( options_get_int( "show_all_emails" ) )
99 mvwaddnstr(list, line, EMAILPOS, database[i][EMAIL],
102 get_first_email(tmp, i);
103 mvwaddnstr(list, line, EMAILPOS, tmp, real_emaillen);
106 if(extra_column > 2 && extra_column < ITEM_FIELDS) {
107 if( !database[i][extra_column] ) {
108 int extra_alternative =
109 options_get_int("extra_alternative");
111 if(extra_alternative > 2 &&
112 extra_alternative < ITEM_FIELDS)
113 extra_column = extra_alternative;
115 mvwaddnstr(list, line, EXTRAPOS,
116 safe_str(database[i][extra_column]),
120 scrollok(list, TRUE);
127 int extra_column = options_get_int("extra_column");
130 mvaddstr(2, NAMEPOS, abook_fields[NAME].name);
131 mvaddstr(2, EMAILPOS, abook_fields[EMAIL].name);
132 if( extra_column > 2 && extra_column < ITEM_FIELDS )
133 mvaddnstr(2, EXTRAPOS, abook_fields[extra_column].name,
152 if( curitem > items - 2 )
167 curitem = curitem == first_list_item ?
168 ((curitem -= LIST_LINES) < 0 ? 0 : curitem) : first_list_item;
176 if( curitem > items - 2 )
179 curitem = curitem == LAST_LIST_ITEM ?
180 ((curitem += LIST_LINES) > LAST_ITEM ? LAST_ITEM : curitem) :
181 min(LAST_LIST_ITEM, LAST_ITEM);
190 memset( selected, 0, items );
196 memset( selected, 1, items );
200 move_curitem(int direction)
204 if( curitem < 0 || curitem > LAST_ITEM )
207 itemcpy(tmp, database[curitem]);
213 itemcpy(database[curitem], database[curitem - 1]);
214 itemcpy(database[curitem-1], tmp);
219 if( curitem >= LAST_ITEM )
221 itemcpy(database[curitem], database[curitem + 1]);
222 itemcpy(database[curitem+1], tmp);
248 highlight_line(WINDOW *win, int line)
253 mvwchgat(win, line, 0, -1, A_STANDOUT, 0, NULL);
256 * buggy function: FIXME
258 scrollok(win, FALSE);
262 for(i = 0; i < COLS; i++)
264 /*wattrset(win, 0);*/
275 for(i = 0; i < items; i++)
290 for(i = 0; i < items; i++)
291 selected[i] = !selected[i];