From 5eea05a2033c479c74ab70d77dc0a0d31233c59d Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Tue, 13 May 2014 21:55:25 +0200 Subject: Use generic list box for notification options This changes the notification options menu to use the new generic list box implementation. The only user-visible change is that items are now accessed via the arrow and edit key bindings instead of digits. Signed-off-by: Lukas Fleischer --- src/notify.c | 213 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 107 insertions(+), 106 deletions(-) diff --git a/src/notify.c b/src/notify.c index 37fec8f..17d0345 100644 --- a/src/notify.c +++ b/src/notify.c @@ -586,11 +586,9 @@ print_option(WINDOW * win, unsigned x, unsigned y, char *name, } /* Print options related to the notify-bar. */ -static unsigned print_config_options(WINDOW * optwin) +static void print_config_option(int i, WINDOW *win, int y, int hilt, void *cb_data) { const int XORIG = 3; - const int YORIG = 0; - const int YOFF = 3; enum { SHOW, DATE, CLOCK, WARN, CMD, NOTIFY_ALL, DMON, DMON_LOG, NB_OPT }; @@ -602,8 +600,6 @@ static unsigned print_config_options(WINDOW * optwin) unsigned valnum; } opt[NB_OPT]; - int i; - opt[SHOW].name = "appearance.notifybar = "; opt[SHOW].desc = _("(if set to YES, notify-bar will be displayed)"); @@ -655,32 +651,24 @@ static unsigned print_config_options(WINDOW * optwin) opt[SHOW].valstr[0] = opt[NOTIFY_ALL].valstr[0] = opt[DMON].valstr[0] = opt[DMON_LOG].valstr[0] = '\0'; - for (i = 0; i < NB_OPT; i++) { - int y; + if (hilt) + custom_apply_attr(win, ATTR_HIGHEST); - y = YORIG + i * YOFF; - print_option(optwin, XORIG, y, opt[i].name, opt[i].valstr, - opt[i].valnum, opt[i].desc, i + 1); - } + print_option(win, XORIG, y, opt[i].name, opt[i].valstr, + opt[i].valnum, opt[i].desc, i + 1); - return YORIG + NB_OPT * YOFF; + if (hilt) + custom_remove_attr(win, ATTR_HIGHEST); } -static void reinit_conf_win(struct scrollwin *win) +static int config_option_height(int i, void *cb_data) { - wins_scrollwin_resize(win, 0, 0, notify_bar() ? row - 3 : row - 2, col); - wins_scrollwin_draw_deco(win); + return 3; } -/* Notify-bar configuration. */ -void notify_config_bar(void) +static void config_option_edit(int i) { - struct scrollwin cwin; char *buf; - const char *number_str = - _("Enter an option number to change its value"); - const char *keys = - _("(Press '^P' or '^N' to move up or down, 'Q' to quit)"); const char *date_str = _("Enter the date format (see 'man 3 strftime' for possible formats) "); const char *time_str = @@ -688,97 +676,110 @@ void notify_config_bar(void) const char *count_str = _("Enter the number of seconds (0 not to be warned before an appointment)"); const char *cmd_str = _("Enter the notification command "); - int ch; - - clear(); - wins_scrollwin_init(&cwin, 0, 0, notify_bar() ? row - 3 : row - 2, col, _("notification options")); - wins_scrollwin_draw_deco(&cwin); - status_mesg(number_str, keys); - wins_scrollwin_set_linecount(&cwin, print_config_options(cwin.inner)); - wins_scrollwin_display(&cwin); buf = mem_malloc(BUFSIZ); - while ((ch = wgetch(win[KEY].p)) != 'q') { - buf[0] = '\0'; - switch (ch) { - 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); - nbar.show = !nbar.show; - pthread_mutex_unlock(&nbar.mutex); - if (notify_bar()) - notify_start_main_thread(); - else - notify_stop_main_thread(); - reinit_conf_win(&cwin); - break; - case '2': - status_mesg(date_str, ""); - pthread_mutex_lock(&nbar.mutex); - strncpy(buf, nbar.datefmt, - strlen(nbar.datefmt) + 1); - pthread_mutex_unlock(&nbar.mutex); - if (updatestring(win[STA].p, &buf, 0, 1) == 0) { - pthread_mutex_lock(&nbar.mutex); - strncpy(nbar.datefmt, buf, - strlen(buf) + 1); - pthread_mutex_unlock(&nbar.mutex); - } - break; - case '3': - status_mesg(time_str, ""); + switch (i) { + case 0: + pthread_mutex_lock(&nbar.mutex); + nbar.show = !nbar.show; + pthread_mutex_unlock(&nbar.mutex); + if (notify_bar()) + notify_start_main_thread(); + else + notify_stop_main_thread(); + resize = 1; + break; + case 1: + status_mesg(date_str, ""); + pthread_mutex_lock(&nbar.mutex); + strncpy(buf, nbar.datefmt, + strlen(nbar.datefmt) + 1); + pthread_mutex_unlock(&nbar.mutex); + if (updatestring(win[STA].p, &buf, 0, 1) == 0) { pthread_mutex_lock(&nbar.mutex); - strncpy(buf, nbar.timefmt, - strlen(nbar.timefmt) + 1); + strncpy(nbar.datefmt, buf, + strlen(buf) + 1); pthread_mutex_unlock(&nbar.mutex); - if (updatestring(win[STA].p, &buf, 0, 1) == 0) { - pthread_mutex_lock(&nbar.mutex); - strncpy(nbar.timefmt, buf, - strlen(buf) + 1); - pthread_mutex_unlock(&nbar.mutex); - } - break; - case '4': - status_mesg(count_str, ""); + } + break; + case 2: + status_mesg(time_str, ""); + pthread_mutex_lock(&nbar.mutex); + strncpy(buf, nbar.timefmt, + strlen(nbar.timefmt) + 1); + pthread_mutex_unlock(&nbar.mutex); + if (updatestring(win[STA].p, &buf, 0, 1) == 0) { pthread_mutex_lock(&nbar.mutex); - snprintf(buf, BUFSIZ, "%d", nbar.cntdwn); + strncpy(nbar.timefmt, buf, + strlen(buf) + 1); pthread_mutex_unlock(&nbar.mutex); - if (updatestring(win[STA].p, &buf, 0, 1) == 0 && - is_all_digit(buf) && atoi(buf) >= 0 - && atoi(buf) <= DAYINSEC) { - pthread_mutex_lock(&nbar.mutex); - nbar.cntdwn = atoi(buf); - pthread_mutex_unlock(&nbar.mutex); - } - break; - case '5': - status_mesg(cmd_str, ""); + } + break; + case 3: + status_mesg(count_str, ""); + pthread_mutex_lock(&nbar.mutex); + snprintf(buf, BUFSIZ, "%d", nbar.cntdwn); + pthread_mutex_unlock(&nbar.mutex); + if (updatestring(win[STA].p, &buf, 0, 1) == 0 && + is_all_digit(buf) && atoi(buf) >= 0 + && atoi(buf) <= DAYINSEC) { pthread_mutex_lock(&nbar.mutex); - strncpy(buf, nbar.cmd, strlen(nbar.cmd) + 1); + nbar.cntdwn = atoi(buf); pthread_mutex_unlock(&nbar.mutex); - if (updatestring(win[STA].p, &buf, 0, 1) == 0) { - pthread_mutex_lock(&nbar.mutex); - strncpy(nbar.cmd, buf, strlen(buf) + 1); - pthread_mutex_unlock(&nbar.mutex); - } - break; - case '6': + } + break; + case 4: + status_mesg(cmd_str, ""); + pthread_mutex_lock(&nbar.mutex); + strncpy(buf, nbar.cmd, strlen(nbar.cmd) + 1); + pthread_mutex_unlock(&nbar.mutex); + if (updatestring(win[STA].p, &buf, 0, 1) == 0) { pthread_mutex_lock(&nbar.mutex); - nbar.notify_all = !nbar.notify_all; + strncpy(nbar.cmd, buf, strlen(buf) + 1); pthread_mutex_unlock(&nbar.mutex); - notify_check_next_app(1); + } + break; + case 5: + pthread_mutex_lock(&nbar.mutex); + nbar.notify_all = !nbar.notify_all; + pthread_mutex_unlock(&nbar.mutex); + notify_check_next_app(1); + break; + case 6: + dmon.enable = !dmon.enable; + break; + case 7: + dmon.log = !dmon.log; + break; + } + + mem_free(buf); +} + +/* Notify-bar configuration. */ +void notify_config_bar(void) +{ + struct listbox lb; + int ch; + + clear(); + listbox_init(&lb, 0, 0, notify_bar() ? row - 3 : row - 2, col, _("notification options"), config_option_height, print_config_option); + listbox_load_items(&lb, 8); + listbox_draw_deco(&lb); + status_mesg("", ""); + listbox_display(&lb); + + while ((ch = keys_getch(win[KEY].p, NULL, NULL)) != KEY_GENERIC_QUIT) { + switch (ch) { + case KEY_MOVE_DOWN: + listbox_sel_move(&lb, 1); break; - case '7': - dmon.enable = !dmon.enable; + case KEY_MOVE_UP: + listbox_sel_move(&lb, -1); break; - case '8': - dmon.log = !dmon.log; + case KEY_EDIT_ITEM: + config_option_edit(listbox_get_sel(&lb)); break; } @@ -786,7 +787,8 @@ void notify_config_bar(void) resize = 0; wins_get_config(); wins_reset(); - reinit_conf_win(&cwin); + listbox_resize(&lb, 0, 0, notify_bar() ? row - 3 : row - 2, col); + listbox_draw_deco(&lb); delwin(win[STA].p); win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, @@ -799,10 +801,9 @@ void notify_config_bar(void) clearok(curscr, TRUE); } - status_mesg(number_str, keys); - print_config_options(cwin.inner); - wins_scrollwin_display(&cwin); + status_mesg("", ""); + listbox_display(&lb); } - mem_free(buf); - wins_scrollwin_delete(&cwin); + + listbox_delete(&lb); } -- cgit v1.2.3-70-g09d2