]> git.deb.at Git - pkg/abook.git/blobdiff - ui.c
- code cleanups and minor fixes
[pkg/abook.git] / ui.c
diff --git a/ui.c b/ui.c
index a7d1a5428322aa11503a484486f8c3685af7aecc..3098b553435a4dd7ab1e14001b763a152080d1fb 100644 (file)
--- a/ui.c
+++ b/ui.c
@@ -45,7 +45,7 @@
 extern int items, curitem;
 extern char *datafile;
 
-extern int alternative_datafile;
+extern bool alternative_datafile;
 
 /*
  * internal variables
@@ -59,7 +59,6 @@ bool can_resize = FALSE;
 WINDOW *top = NULL, *bottom = NULL;
 
 
-
 static void
 init_windows()
 {
@@ -83,13 +82,13 @@ resize_abook()
 #ifdef TIOCGWINSZ
        struct winsize winsz;
 
-       ioctl (0, TIOCGWINSZ, &winsz);
+       ioctl(0, TIOCGWINSZ, &winsz);
 #ifdef DEBUG
        if(winsz.ws_col >= MIN_COLS && winsz.ws_row >= MIN_LINES) {
                fprintf(stderr, "Warning: COLS=%d, LINES=%d\n", winsz.ws_col, winsz.ws_row);
        }
 #endif
-               
+
        if(winsz.ws_col >= MIN_COLS && winsz.ws_row >= MIN_LINES) {
 #ifdef HAVE_RESIZETERM
                resizeterm(winsz.ws_row, winsz.ws_col);
@@ -116,7 +115,7 @@ win_changed(int i)
        if( can_resize )
                resize_abook();
        else
-               should_resize = TRUE;   
+               should_resize = TRUE;
 }
 #endif /* SIGWINCH */
 
@@ -218,7 +217,7 @@ int
 statusline_msg(char *msg)
 {
        int c;
-       
+
        clear_statusline();
        statusline_addstr(msg);
        c = getch();
@@ -266,11 +265,13 @@ statusline_ask_boolean(char *msg, int def)
 
        free(msg2);
 
-       switch( tolower(getch()) ) {
+       switch(tolower(getch())) {
                case 'n':
+               case 'N':
                        ret = FALSE;
                        break;
                case 'y':
+               case 'Y':
                        ret = TRUE;
                        break;
                default:
@@ -344,7 +345,7 @@ display_help(int help)
        erase();
        headerline("help");
 
-       for( i = 0; tbl[i] != NULL; i++) {
+       for(i = 0; tbl[i] != NULL; i++) {
                waddstr(helpw, tbl[i]);
                if( ( !( (i+1) % (LINES-8) ) ) ||
                        (tbl[i+1] == NULL) ) {
@@ -376,15 +377,18 @@ get_commands()
 
        for(;;) {
                can_resize = TRUE; /* it's safe to resize now */
-               hide_cursor();
-               if( should_resize )
+               if(!opt_get_bool(BOOL_SHOW_CURSOR))
+                       hide_cursor();
+               if(should_resize)
                        refresh_screen();
                ch = getch();
-               show_cursor();
+               if(!opt_get_bool(BOOL_SHOW_CURSOR))
+                       show_cursor();
                can_resize = FALSE; /* it's not safe to resize anymore */
-               switch( ch ) {
+               switch(ch) {
                        case 'q': return;
-                       case 'Q': print_stderr(selected_items() ?
+                       case 'Q': quit_abook(QUIT_DONTSAVE);    break;
+                       case 'P': print_stderr(selected_items() ?
                                                  -1 : list_current_item());
                                  return;
                        case '?':
@@ -396,6 +400,7 @@ get_commands()
                        case KEY_DC:
                        case 'd':
                        case 'r': ui_remove_items();    break;
+                       case 'D': duplicate_item();     break;
                        case 12: refresh_screen();      break;
 
                        case 'k':
@@ -421,8 +426,9 @@ get_commands()
 
                        case 'o': ui_open_datafile();   break;
 
-                       case 's': sort_database();      break;
+                       case 's': sort_by_field(NAME);  break;
                        case 'S': sort_surname();       break;
+                       case 'F': sort_by_field(-1);    break;
 
                        case '/': ui_find(0);           break;
                        case '\\': ui_find(1);          break;
@@ -471,7 +477,7 @@ ui_remove_items()
        if(statusline_ask_boolean("Remove selected item(s)", TRUE))
                remove_selected_items();
 
-       clear_statusline();     
+       clear_statusline();
        refresh_list();
 }
 
@@ -487,27 +493,30 @@ ui_clear_database()
 void
 ui_find(int next)
 {
-       int item;
+       int item = -1;
        static char findstr[MAX_FIELD_LEN];
        int search_fields[] = {NAME, EMAIL, NICK, -1};
 
+       clear_statusline();
+
        if(next) {
-               if( !*findstr )
+               if(!*findstr)
                        return;
        } else {
                char *s;
-               clear_statusline();
                s = ui_readline("/", findstr, MAX_FIELD_LEN - 1, 0);
                strncpy(findstr, s, MAX_FIELD_LEN);
                refresh_screen();
        }
 
-       if( (item = find_item(findstr, curitem + !!next,
-                                       search_fields )) >= 0 ) {
+       if( (item = find_item(findstr, curitem + !!next, search_fields)) < 0 &&
+                       (item = find_item(findstr, 0, search_fields)) >= 0)
+               statusline_addstr("Search hit bottom, continuing at top");
+
+       if(item >= 0) {
                curitem = item;
                refresh_list();
        }
-
 }
 
 
@@ -538,15 +547,15 @@ void
 ui_print_database()
 {
        FILE *handle;
-       char *command = options_get_str("print_command");
+       char *command = opt_get_str(STR_PRINT_COMMAND);
        int mode;
 
-       if( list_is_empty() )
+       if(list_is_empty())
                return;
 
        statusline_addstr("Print All/Selected/Cancel (a/s/C)?");
 
-       switch( tolower(getch()) ) {
+       switch(tolower(getch())) {
                case 'a':
                        mode = ENUM_ALL;
                        break;
@@ -568,7 +577,7 @@ ui_print_database()
                return;
 
        fexport("text", handle, mode);
-       
+
        pclose(handle);
 }
 
@@ -580,13 +589,13 @@ ui_open_datafile()
 
        filename = ask_filename("File to open: ");
 
-       if( !filename || ! *filename) {
+       if(!filename || ! *filename) {
                free(filename);
                refresh_screen();
                return;
        }
 
-       if( options_get_int("autosave") )
+       if(opt_get_bool(BOOL_AUTOSAVE))
                save_database();
        else if(statusline_ask_boolean("Save current database", FALSE))
                save_database();
@@ -595,7 +604,7 @@ ui_open_datafile()
 
        load_database(filename);
 
-       if( items == 0 ) {
+       if(items == 0) {
                statusline_msg("Sorry, that specified file appears not to be a valid abook addressbook");
                load_database(datafile);
        } else {