From a0117296b4132f690ee17ecac307acef4a52229d Mon Sep 17 00:00:00 2001 From: Frederic Culot Date: Sun, 2 Aug 2009 09:30:01 +0000 Subject: Notification configuration menu rewritten to handle scrolling. --- src/notify.c | 106 ++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 64 insertions(+), 42 deletions(-) (limited to 'src') diff --git a/src/notify.c b/src/notify.c index 7aa69ab..5b2ffe0 100755 --- a/src/notify.c +++ b/src/notify.c @@ -1,4 +1,4 @@ -/* $calcurse: notify.c,v 1.43 2009/08/01 20:29:49 culot Exp $ */ +/* $calcurse: notify.c,v 1.44 2009/08/02 09:30:01 culot Exp $ */ /* * Calcurse - text-based organizer @@ -572,7 +572,7 @@ print_option (WINDOW *win, unsigned x, unsigned y, char *name, char *valstr, unsigned valbool, char *desc, unsigned num) { const int XOFF = 4; - const int MAXCOL = col - 2; + const int MAXCOL = col - 3; int x_opt, len; x_opt = x + XOFF + strlen (name); @@ -602,11 +602,11 @@ print_option (WINDOW *win, unsigned x, unsigned y, char *name, } /* Print options related to the notify-bar. */ -static void -notify_print_options (WINDOW *optwin, int col) +static unsigned +print_config_options (WINDOW *optwin) { const int XORIG = 3; - const int YORIG = 4; + const int YORIG = 0; const int YOFF = 3; enum @@ -670,20 +670,32 @@ notify_print_options (WINDOW *optwin, int col) opt[i].valnum, opt[i].desc, i + 1); } - wmove (win[STA].p, 1, 0); - wnoutrefresh (optwin); - doupdate (); + return YORIG + NB_OPT * YOFF; +} + +static void +reinit_conf_win (scrollwin_t *win) +{ + unsigned first_line; + + first_line = win->first_visible_line; + wins_scrollwin_delete (win); + custom_set_swsiz (win); + wins_scrollwin_init (win); + wins_show (win->win.p, win->label); + win->first_visible_line = first_line; } /* Notify-bar configuration. */ void notify_config_bar (void) { - window_t conf_win; - char label[BUFSIZ]; + scrollwin_t cwin; char *buf; char *number_str = - _("Enter an option number to change its value [Q to quit] "); + _("Enter an option number to change its value"); + char *keys = + _("(Press '^P' or '^N' to move up or down, 'Q' to quit)"); char *date_str = _("Enter the date format (see 'man 3 strftime' for possible formats) "); char *time_str = @@ -691,31 +703,43 @@ notify_config_bar (void) char *count_str = _("Enter the number of seconds (0 not to be warned before an appointment)"); char *cmd_str = _("Enter the notification command "); - int ch = 0, change_win = 1; - - buf = mem_malloc (BUFSIZ); - (void)snprintf (label, BUFSIZ, _("notify-bar options")); - - conf_win.p = 0; - custom_confwin_init (&conf_win, label); - - while (ch != 'q') + int ch; + + clear (); + custom_set_swsiz (&cwin); + (void)snprintf (cwin.label, BUFSIZ, _("notification options")); + wins_scrollwin_init (&cwin); + wins_show (cwin.win.p, cwin.label); + status_mesg (number_str, keys); + cwin.total_lines = print_config_options (cwin.pad.p); + wins_scrollwin_display (&cwin); + + buf = mem_malloc (BUFSIZ); + while ((ch = wgetch (win[STA].p)) != 'q') { - if (change_win) - custom_confwin_init (&conf_win, label); - status_mesg (number_str, ""); - notify_print_options (conf_win.p, col); - *buf = '\0'; - ch = wgetch (win[STA].p); + buf[0] = '\0'; switch (ch) - { - case KEY_RESIZE: - endwin (); - refresh (); - curs_set (0); - delwin (conf_win.p); - custom_confwin_init (&conf_win, label); + { + case KEY_RESIZE: + wins_get_config (); + wins_reset (); + reinit_conf_win (&cwin); + delwin (win[STA].p); + win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y, + win[STA].x); + keypad (win[STA].p, TRUE); + if (notify_bar ()) + { + notify_reinit_bar (); + notify_update_bar (); + } + break; + case CTRL ('N'): + wins_scrollwin_down (&cwin, 1); + break; + case CTRL ('P'): + wins_scrollwin_up (&cwin, 1); break; case '1': pthread_mutex_lock (&nbar.mutex); @@ -725,7 +749,8 @@ notify_config_bar (void) notify_start_main_thread (); else notify_stop_main_thread (); - change_win = 1; + wins_scrollwin_delete (&cwin); + reinit_conf_win (&cwin); break; case '2': status_mesg (date_str, ""); @@ -738,7 +763,6 @@ notify_config_bar (void) (void)strncpy (nbar.datefmt, buf, strlen (buf) + 1); pthread_mutex_unlock (&nbar.mutex); } - change_win = 0; break; case '3': status_mesg (time_str, ""); @@ -751,7 +775,6 @@ notify_config_bar (void) (void)strncpy (nbar.timefmt, buf, strlen (buf) + 1); pthread_mutex_unlock (&nbar.mutex); } - change_win = 0; break; case '4': status_mesg (count_str, ""); @@ -765,7 +788,6 @@ notify_config_bar (void) nbar.cntdwn = atoi (buf); pthread_mutex_unlock (&nbar.mutex); } - change_win = 0; break; case '5': status_mesg (cmd_str, ""); @@ -778,18 +800,18 @@ notify_config_bar (void) (void)strncpy (nbar.cmd, buf, strlen (buf) + 1); pthread_mutex_unlock (&nbar.mutex); } - change_win = 0; break; case '6': dmon.enable = !dmon.enable; - change_win = 1; break; case '7': dmon.log = !dmon.log; - change_win = 1; break; - } + } + status_mesg (number_str, keys); + cwin.total_lines = print_config_options (cwin.pad.p); + wins_scrollwin_display (&cwin); } mem_free (buf); - delwin (conf_win.p); + wins_scrollwin_delete (&cwin); } -- cgit v1.2.3