From b5c1981842402f6fe8d4c02176db923e1955175b Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Mon, 20 Feb 2012 06:05:08 +0100 Subject: Revamp key bindings display Refactor the logic inside keys_display_bindings_bar() and remove the need to place the "show next page" key binding at the right positions. This used to be a pain to maintain, since we always had to move key bindings around when introducing a new key. Fix this by passing the actual key bindings in an array and using a separate parameter for the "show next page" key binding (which is automatically inserted at the right places from now on). Signed-off-by: Lukas Fleischer --- src/wins.c | 74 ++++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 28 deletions(-) (limited to 'src/wins.c') diff --git a/src/wins.c b/src/wins.c index 0cbe95a..fa53dcb 100644 --- a/src/wins.c +++ b/src/wins.c @@ -645,11 +645,9 @@ wins_launch_external (char *file, char *cmd) wins_unprepare_external (); } -#define NB_CAL_CMDS 27 /* number of commands while in cal view */ -#define NB_APP_CMDS 32 /* same thing while in appointment view */ -#define NB_TOD_CMDS 31 /* same thing while in todo view */ -#define TOTAL_CMDS NB_CAL_CMDS + NB_APP_CMDS + NB_TOD_CMDS -#define CMDS_PER_LINE 6 /* max number of commands per line */ +#define NB_CAL_CMDS 27 /* number of commands while in cal view */ +#define NB_APP_CMDS 32 /* same thing while in appointment view */ +#define NB_TOD_CMDS 31 /* same thing while in todo view */ static unsigned status_page; @@ -663,10 +661,7 @@ void wins_status_bar (void) { #define NB_PANELS 3 /* 3 panels: CALENDAR, APPOINTMENT, TODO */ - enum win which_pan; - int start, end; - const int pos[NB_PANELS + 1] = - { 0, NB_CAL_CMDS, NB_CAL_CMDS + NB_APP_CMDS, TOTAL_CMDS }; + const int pos[NB_PANELS] = { 0, 0, 0 }; struct binding help = {_("Help"), KEY_GENERIC_HELP}; struct binding quit = {_("Quit"), KEY_GENERIC_QUIT}; @@ -677,7 +672,6 @@ wins_status_bar (void) struct binding import = {_("Import"), KEY_GENERIC_IMPORT}; struct binding export = {_("Export"), KEY_GENERIC_EXPORT}; struct binding togo = {_("Go to"), KEY_GENERIC_GOTO}; - struct binding othr = {_("OtherCmd"), KEY_GENERIC_OTHER_CMD}; struct binding conf = {_("Config"), KEY_GENERIC_CONFIG_MENU}; struct binding draw = {_("Redraw"), KEY_GENERIC_REDRAW}; struct binding appt = {_("Add Appt"), KEY_GENERIC_ADD_APPT}; @@ -706,29 +700,53 @@ wins_status_bar (void) struct binding vnote = {_("ViewNote"), KEY_VIEW_NOTE}; struct binding rprio = {_("Prio.+"), KEY_RAISE_PRIORITY}; struct binding lprio = {_("Prio.-"), KEY_LOWER_PRIORITY}; + struct binding othr = {_("OtherCmd"), KEY_GENERIC_OTHER_CMD}; - struct binding *binding[TOTAL_CMDS] = { - /* calendar keys */ + struct binding *bindings_cal[] = { &help, &quit, &save, &chgvu, &nview, &pview, &up, &down, &left, &right, - &togo, &othr, &import, &export, &weekb, &weeke, &appt, &todo, - &gnday, &gpday, &gnweek, &gpweek, &draw, &othr, &today, &conf, &othr, - /* appointment keys */ + &togo, &import, &export, &weekb, &weeke, &appt, &todo, &gnday, &gpday, + &gnweek, &gpweek, &draw, &today, &conf + }; + + struct binding *bindings_apoint[] = { &help, &quit, &save, &chgvu, &import, &export, &add, &del, &edit, &view, - &pipe, &othr, &draw, &rept, &flag, &enote, &vnote, &up, &down, &gnday, - &gpday, &gnweek, &gpweek, &othr, &togo, &today, &conf, &appt, &todo, &cut, - &paste, &othr, - /* todo keys */ + &pipe, &draw, &rept, &flag, &enote, &vnote, &up, &down, &gnday, &gpday, + &gnweek, &gpweek, &togo, &today, &conf, &appt, &todo, &cut, &paste + }; + + struct binding *bindings_todo[] = { &help, &quit, &save, &chgvu, &import, &export, &add, &del, &edit, &view, - &pipe, &othr, &flag, &rprio, &lprio, &enote, &vnote, &up, &down, &gnday, - &gpday, &gnweek, &gpweek, &othr, &togo, &today, &conf, &appt, &todo, &draw, - &othr + &pipe, &flag, &rprio, &lprio, &enote, &vnote, &up, &down, &gnday, &gpday, + &gnweek, &gpweek, &togo, &today, &conf, &appt, &todo, &draw }; - /* Drawing the keybinding with attribute and label without. */ - which_pan = wins_slctd (); - start = pos[which_pan] + 2 * KEYS_CMDS_PER_LINE * (status_page - 1); - end = MIN (start + 2 * KEYS_CMDS_PER_LINE, pos[which_pan + 1]); - keys_display_bindings_bar (win[STA].p, binding, start, end); + enum win active_panel = wins_slctd (); + + struct binding **bindings; + int bindings_size; + + switch (active_panel) + { + case CAL: + bindings = bindings_cal; + bindings_size = sizeof (bindings_cal) / sizeof (bindings_cal[0]); + break; + case APP: + bindings = bindings_apoint; + bindings_size = sizeof (bindings_apoint) / sizeof (bindings_apoint[0]); + break; + case TOD: + bindings = bindings_todo; + bindings_size = sizeof (bindings_todo) / sizeof (bindings_todo[0]); + break; + default: + EXIT (_("unknown panel")); + /* NOTREACHED */ + } + + keys_display_bindings_bar (win[STA].p, bindings, bindings_size, + pos[active_panel] + (KEYS_CMDS_PER_LINE * 2 - 1) * + (status_page - 1), KEYS_CMDS_PER_LINE * 2, &othr); } /* Erase status bar. */ @@ -759,7 +777,7 @@ wins_other_status_page (int panel) EXIT (_("unknown panel")); /* NOTREACHED */ } - max_page = ceil (nb_item / (2 * CMDS_PER_LINE + 1)) + 1; + max_page = nb_item / (KEYS_CMDS_PER_LINE * 2 - 1) + 1; if (status_page < max_page) status_page++; else -- cgit v1.2.3-54-g00ecf