status_bar() rewritten from scratch to handle multiple status pages

reset_status_page() and other_status_page() created
This commit is contained in:
Frederic Culot 2006-09-06 17:09:36 +00:00
parent a4ec6c6b3b
commit 0140f2e4c6

View File

@ -1,4 +1,4 @@
/* $calcurse: utils.c,v 1.4 2006/08/31 18:50:17 culot Exp $ */ /* $calcurse: utils.c,v 1.5 2006/09/06 17:09:36 culot Exp $ */
/* /*
* Calcurse - text-based organizer * Calcurse - text-based organizer
@ -38,6 +38,7 @@
#include "custom.h" #include "custom.h"
#include "vars.h" #include "vars.h"
static unsigned status_page;
/* /*
* Print a message in the status bar. * Print a message in the status bar.
@ -325,148 +326,70 @@ void scroller(WINDOW *win, char *mesg, int x, int y, int nb_row, int nb_col)
wnoutrefresh(swin); wnoutrefresh(swin);
} }
/* Draws the status bar */ /*
* Draws the status bar.
* To add a keybinding, insert it in the 'keys' and 'labels' tables,
* and update the NB_CAL_CMDS, NB_APP_CMDS or NB_TOD_CMDS defines
* in utils.h, depending on which panel the added keybind is assigned to.
*/
void status_bar(int which_pan, int colr, int nc_bar, int nl_bar) void status_bar(int which_pan, int colr, int nc_bar, int nl_bar)
{ {
int nb_item_cal, nb_item_oth; int cmd_length, space_between_cmds, start, end, i, j = 0;
int len_let, len_des, spc_lad; const int pos[NB_PANELS + 1] =
int spc_bet_cal_itm, spc_bet_oth_itm; {0, NB_CAL_CMDS, NB_CAL_CMDS + NB_APP_CMDS, TOTAL_CMDS};
int len_cal_itm, len_oth_itm;
nb_item_cal = 10; /* max item number to display in status bar */ binding_t help = { " ?", N_("Help") };
nb_item_cal = ceil(nb_item_cal / 2); /* two lines to display items */ binding_t quit = { " Q", N_("Quit") };
nb_item_oth = 12; binding_t save = { " S", N_("Save") };
nb_item_oth = ceil(nb_item_oth / 2); binding_t add = { " A", N_("Add Item") };
len_let = 3; binding_t del = { " D", N_("Del Item") };
len_des = 8; binding_t day = { "H/L", N_("-+1 Day") };
spc_lad = 1; binding_t week = { "K/J", N_("-+1 Week") };
binding_t updn = { "K/J", N_("Up/Down") };
binding_t rept = { " R", N_("Repeat") };
binding_t prio = { "+/-", N_("Priority") };
binding_t tab = { "Tab", N_("Chg View") };
binding_t togo = { " G", N_("Go to") };
binding_t conf = { " C", N_("Config") };
binding_t view = { " V", N_("View") };
binding_t draw = { " ^R", N_("Redraw") };
binding_t appt = { " ^A", N_("Add Appt") };
binding_t todo = { " ^T", N_("Add Todo") };
binding_t eday = { "^HL", N_("-+1 Day") };
binding_t ewek = { "^KJ", N_("-+1 Week") };
binding_t othr = { " O", N_("OtherCmd") };
spc_bet_cal_itm = binding_t *binding[TOTAL_CMDS] = {
floor((col - /* calendar keys */
nb_item_cal * (len_let + len_des + &help, &quit, &save, &togo, &day, &week, &tab, &conf, &draw,
spc_lad)) / nb_item_cal); &appt, &todo, &othr, &eday, &ewek, &othr,
spc_bet_oth_itm = /* appointment keys */
floor((col - &help, &quit, &save, &togo, &add, &del, &view, &rept, &updn,
nb_item_oth * (len_let + len_des + &tab, &conf, &othr, &draw, &appt, &todo, &eday, &ewek, &othr,
spc_lad)) / nb_item_oth); /* todo keys */
len_cal_itm = len_let + spc_lad + len_des + spc_bet_cal_itm; &help, &quit, &save, &togo, &add, &del, &view, &prio, &updn,
len_oth_itm = len_let + spc_lad + len_des + spc_bet_oth_itm; &tab, &conf, &othr, &draw, &appt, &todo, &eday, &ewek, &othr };
/* Total length of a command. */
cmd_length = KEY_LENGTH + LABEL_LENGTH;
space_between_cmds = floor(col / CMDS_PER_LINE - cmd_length);
cmd_length += space_between_cmds;
/* Drawing the keybinding with attribute and label without. */
erase_window_part(swin, 0, 0, nc_bar, nl_bar); erase_window_part(swin, 0, 0, nc_bar, nl_bar);
switch (which_pan) { start = pos[which_pan] + 2*CMDS_PER_LINE*(status_page - 1);
end = MIN(start + 2*CMDS_PER_LINE, pos[which_pan + 1]);
case 0: /* CALENDAR */ for (i = start; i < end; i += 2) {
custom_apply_attr(swin, ATTR_HIGHEST); custom_apply_attr(swin, ATTR_HIGHEST);
mvwprintw(swin, 0, 0, " ?"); mvwprintw(swin, 0, j*cmd_length, binding[i]->key);
mvwprintw(swin, 1, 0, " Q"); if (i + 1 != end)
mvwprintw(swin, 0, len_cal_itm, " ^L"); mvwprintw(swin, 1, j*cmd_length, binding[i+1]->key);
mvwprintw(swin, 1, len_cal_itm, " S");
mvwprintw(swin, 0, 2 * len_cal_itm, "H/L");
mvwprintw(swin, 1, 2 * len_cal_itm, "J/K");
mvwprintw(swin, 0, 3 * len_cal_itm, " G");
mvwprintw(swin, 1, 3 * len_cal_itm, "Tab");
mvwprintw(swin, 0, 4 * len_cal_itm, " C");
custom_remove_attr(swin, ATTR_HIGHEST); custom_remove_attr(swin, ATTR_HIGHEST);
wnoutrefresh(swin); mvwprintw(swin,0,j*cmd_length+KEY_LENGTH,binding[i]->label);
if (i + 1 != end)
mvwprintw(swin, 0, len_let + spc_lad, _("Help")); mvwprintw(swin,1,j*cmd_length+KEY_LENGTH,binding[i+1]->label);
mvwprintw(swin, 1, len_let + spc_lad, _("Quit")); j++;
mvwprintw(swin, 0, len_cal_itm + len_let + spc_lad,
_("Redraw"));
mvwprintw(swin, 1, len_cal_itm + len_let + spc_lad, _("Save"));
mvwprintw(swin, 0, 2 * len_cal_itm + len_let + spc_lad,
_("-/+1 Day"));
mvwprintw(swin, 1, 2 * len_cal_itm + len_let + spc_lad,
_("-/+1 Week"));
mvwprintw(swin, 0, 3 * len_cal_itm + len_let + spc_lad,
_("GoTo"));
mvwprintw(swin, 1, 3 * len_cal_itm + len_let + spc_lad,
_("Chg View"));
mvwprintw(swin, 0, 4 * len_cal_itm + len_let + spc_lad,
_("Config"));
break;
case 1: /* APPOINTMENT */
custom_apply_attr(swin, ATTR_HIGHEST);
mvwprintw(swin, 0, 0, " ?");
mvwprintw(swin, 1, 0, " Q");
mvwprintw(swin, 0, len_oth_itm, " ^L");
mvwprintw(swin, 1, len_oth_itm, " S");
mvwprintw(swin, 0, 2 * len_oth_itm, "J/K");
mvwprintw(swin, 1, 2 * len_oth_itm, "Tab");
mvwprintw(swin, 0, 3 * len_oth_itm, " A");
mvwprintw(swin, 1, 3 * len_oth_itm, " D");
mvwprintw(swin, 0, 4 * len_oth_itm, " R");
mvwprintw(swin, 1, 4 * len_oth_itm, " G");
mvwprintw(swin, 0, 5 * len_oth_itm, " V");
mvwprintw(swin, 1, 5 * len_oth_itm, " C");
custom_remove_attr(swin, ATTR_HIGHEST);
wnoutrefresh(swin);
mvwprintw(swin, 0, len_let + spc_lad, _("Help"));
mvwprintw(swin, 1, len_let + spc_lad, _("Quit"));
mvwprintw(swin, 0, len_oth_itm + len_let + spc_lad,
_("Redraw"));
mvwprintw(swin, 1, len_oth_itm + len_let + spc_lad, _("Save"));
mvwprintw(swin, 0, 2 * len_oth_itm + len_let + spc_lad,
_("Up/Down"));
mvwprintw(swin, 1, 2 * len_oth_itm + len_let + spc_lad,
_("Chg View"));
mvwprintw(swin, 0, 3 * len_oth_itm + len_let + spc_lad,
_("Add Item"));
mvwprintw(swin, 1, 3 * len_oth_itm + len_let + spc_lad,
_("Del Item"));
mvwprintw(swin, 0, 4 * len_oth_itm + len_let + spc_lad,
_("Repeat"));
mvwprintw(swin, 1, 4 * len_oth_itm + len_let + spc_lad,
_( "GoTo"));
mvwprintw(swin, 0, 5 * len_oth_itm + len_let + spc_lad,
_("View"));
mvwprintw(swin, 1, 5 * len_oth_itm + len_let + spc_lad,
_("Config"));
break;
case 2: /* TODO */
custom_apply_attr(swin, ATTR_HIGHEST);
mvwprintw(swin, 0, 0, " ?");
mvwprintw(swin, 1, 0, " Q");
mvwprintw(swin, 0, len_oth_itm, " ^L");
mvwprintw(swin, 1, len_oth_itm, " S");
mvwprintw(swin, 0, 2 * len_oth_itm, "J/K");
mvwprintw(swin, 1, 2 * len_oth_itm, "Tab");
mvwprintw(swin, 0, 3 * len_oth_itm, " A");
mvwprintw(swin, 1, 3 * len_oth_itm, " D");
mvwprintw(swin, 0, 4 * len_oth_itm, "+/-");
mvwprintw(swin, 1, 4 * len_oth_itm, " V");
mvwprintw(swin, 0, 5 * len_oth_itm, " G");
mvwprintw(swin, 1, 5 * len_oth_itm, " C");
custom_remove_attr(swin, ATTR_HIGHEST);
wnoutrefresh(swin);
mvwprintw(swin, 0, len_let + spc_lad, _("Help"));
mvwprintw(swin, 1, len_let + spc_lad, _("Quit"));
mvwprintw(swin, 0, len_oth_itm + len_let + spc_lad,
_("Redraw"));
mvwprintw(swin, 1, len_oth_itm + len_let + spc_lad, _("Save"));
mvwprintw(swin, 0, 2 * len_oth_itm + len_let + spc_lad,
_("Up/Down"));
mvwprintw(swin, 1, 2 * len_oth_itm + len_let + spc_lad,
_("Chg View"));
mvwprintw(swin, 0, 3 * len_oth_itm + len_let + spc_lad,
_("Add Item"));
mvwprintw(swin, 1, 3 * len_oth_itm + len_let + spc_lad,
_("Del Item"));
mvwprintw(swin, 0, 4 * len_oth_itm + len_let + spc_lad,
_("Priority"));
mvwprintw(swin, 1, 4 * len_oth_itm + len_let + spc_lad,
_( "View"));
mvwprintw(swin, 0, 5 * len_oth_itm + len_let + spc_lad,
_("GoTo"));
mvwprintw(swin, 1, 5 * len_oth_itm + len_let + spc_lad,
_("Config"));
break;
} }
wnoutrefresh(swin); wnoutrefresh(swin);
} }
@ -661,3 +584,33 @@ void display_item(WINDOW *win, int incolor, char *msg, int len,
if (incolor == 0) if (incolor == 0)
custom_remove_attr(win, ATTR_HIGHEST); custom_remove_attr(win, ATTR_HIGHEST);
} }
/* Reset the status bar page. */
void reset_status_page(void)
{
status_page = 1;
}
/* Update the status bar page number to display other commands. */
void other_status_page(int panel)
{
int nb_item, max_page;
switch (panel) {
case 0:
nb_item = NB_CAL_CMDS;
break;
case 1:
nb_item = NB_APP_CMDS;
break;
case 2:
nb_item = NB_TOD_CMDS;
break;
}
max_page = ceil( nb_item / (2*CMDS_PER_LINE) ) + 1;
if (status_page < max_page) {
status_page++;
} else {
status_page = 1;
}
}