More work on sidebar customization.

This commit is contained in:
Frederic Culot 2010-03-21 09:21:06 +00:00
parent ec36b96848
commit cc77e839d8
6 changed files with 131 additions and 30 deletions

View File

@ -10,6 +10,14 @@
* src/wins.c (wins_update_border, wins_update_panels): new * src/wins.c (wins_update_border, wins_update_panels): new
functions extracted from wins_update() functions extracted from wins_update()
* src/wins.c (wins_sbar_width, wins_sbar_wperc)
(wins_set_sbar_width, wins_sbar_winc, wins_sbar_wdec)
(wins_reinit_panels): new functions to handle side bar width
customization
* src/custom.c
* src/io.c: sidebar width added to the configuration file
2010-03-19 Frederic Culot <frederic@culot.org> 2010-03-19 Frederic Culot <frederic@culot.org>

View File

@ -1,4 +1,4 @@
/* $Id: calcurse.h,v 1.2 2010/03/20 13:29:47 culot Exp $ */ /* $Id: calcurse.h,v 1.3 2010/03/21 09:21:07 culot Exp $ */
/* /*
* Calcurse - text-based organizer * Calcurse - text-based organizer
@ -133,6 +133,10 @@
/* Maximum number of colors available. */ /* Maximum number of colors available. */
#define NBUSERCOLORS 6 #define NBUSERCOLORS 6
/* Side bar width acceptable boundaries. */
#define SBARMINWIDTH 32
#define SBARMAXWIDTHPERC 50
/* Related to date manipulation. */ /* Related to date manipulation. */
#define DAYINSEC 86400 #define DAYINSEC 86400
#define HOURINSEC 3600 #define HOURINSEC 3600
@ -893,9 +897,13 @@ void vars_init (struct conf *);
/* wins.c */ /* wins.c */
extern struct window win[NBWINS]; extern struct window win[NBWINS];
extern unsigned sbarwidth;
int wins_layout (void); int wins_layout (void);
void wins_set_layout (int); void wins_set_layout (int);
unsigned wins_sbar_width (void);
unsigned wins_sbar_wperc (void);
void wins_set_sbar_width (unsigned);
void wins_sbar_winc (void);
void wins_sbar_wdec (void);
void wins_slctd_init (void); void wins_slctd_init (void);
enum win wins_slctd (void); enum win wins_slctd (void);
void wins_slctd_set (enum win); void wins_slctd_set (enum win);
@ -907,6 +915,7 @@ void wins_scrollwin_display (struct scrollwin *);
void wins_scrollwin_up (struct scrollwin *, int); void wins_scrollwin_up (struct scrollwin *, int);
void wins_scrollwin_down (struct scrollwin *, int); void wins_scrollwin_down (struct scrollwin *, int);
void wins_reinit (void); void wins_reinit (void);
void wins_reinit_panels (void);
void wins_show (WINDOW *, char *); void wins_show (WINDOW *, char *);
void wins_get_config (void); void wins_get_config (void);
void wins_update_border (void); void wins_update_border (void);

View File

@ -1,4 +1,4 @@
/* $calcurse: calendar.c,v 1.34 2010/03/20 13:29:48 culot Exp $ */ /* $calcurse: calendar.c,v 1.35 2010/03/21 09:21:07 culot Exp $ */
/* /*
* Calcurse - text-based organizer * Calcurse - text-based organizer
@ -306,17 +306,18 @@ draw_monthly_view (struct window *cwin, struct date *current_day,
unsigned sunday_first) unsigned sunday_first)
{ {
const int OFFY = 2 + (CALHEIGHT - 9) / 2; const int OFFY = 2 + (CALHEIGHT - 9) / 2;
const int OFFX = (sbarwidth - 27) / 2;
struct date check_day; struct date check_day;
int c_day, c_day_1, day_1_sav, numdays, j; int c_day, c_day_1, day_1_sav, numdays, j;
unsigned yr, mo; unsigned yr, mo;
int ofs_x, ofs_y; int OFFX, SBAR_WIDTH, ofs_x, ofs_y;
int item_this_day = 0; int item_this_day = 0;
mo = slctd_day.mm; mo = slctd_day.mm;
yr = slctd_day.yyyy; yr = slctd_day.yyyy;
/* offset for centering calendar in window */ /* offset for centering calendar in window */
SBAR_WIDTH = wins_sbar_width ();
OFFX = (SBAR_WIDTH - 27) / 2;
ofs_y = OFFY; ofs_y = OFFY;
ofs_x = OFFX; ofs_x = OFFX;
@ -334,7 +335,7 @@ draw_monthly_view (struct window *cwin, struct date *current_day,
/* Write the current month and year on top of the calendar */ /* Write the current month and year on top of the calendar */
custom_apply_attr (cwin->p, ATTR_HIGHEST); custom_apply_attr (cwin->p, ATTR_HIGHEST);
mvwprintw (cwin->p, ofs_y, mvwprintw (cwin->p, ofs_y,
(sbarwidth - (strlen (_(monthnames[mo - 1])) + 5)) / 2, (SBAR_WIDTH - (strlen (_(monthnames[mo - 1])) + 5)) / 2,
"%s %d", _(monthnames[mo - 1]), slctd_day.yyyy); "%s %d", _(monthnames[mo - 1]), slctd_day.yyyy);
custom_remove_attr (cwin->p, ATTR_HIGHEST); custom_remove_attr (cwin->p, ATTR_HIGHEST);
++ofs_y; ++ofs_y;

View File

@ -1,4 +1,4 @@
/* $calcurse: custom.c,v 1.47 2010/03/20 13:29:48 culot Exp $ */ /* $calcurse: custom.c,v 1.48 2010/03/21 09:21:07 culot Exp $ */
/* /*
* Calcurse - text-based organizer * Calcurse - text-based organizer
@ -43,7 +43,7 @@
#include "calcurse.h" #include "calcurse.h"
/* Available configuration variables. */ /* Available configuration variables. */
enum { enum conf_var {
CUSTOM_CONF_NOVARIABLE, CUSTOM_CONF_NOVARIABLE,
CUSTOM_CONF_AUTOSAVE, CUSTOM_CONF_AUTOSAVE,
CUSTOM_CONF_PERIODICSAVE, CUSTOM_CONF_PERIODICSAVE,
@ -55,6 +55,7 @@ enum {
CUSTOM_CONF_WEEKBEGINSONMONDAY, CUSTOM_CONF_WEEKBEGINSONMONDAY,
CUSTOM_CONF_COLORTHEME, CUSTOM_CONF_COLORTHEME,
CUSTOM_CONF_LAYOUT, CUSTOM_CONF_LAYOUT,
CUSTOM_CONF_SBAR_WIDTH,
CUSTOM_CONF_NOTIFYBARSHOW, CUSTOM_CONF_NOTIFYBARSHOW,
CUSTOM_CONF_NOTIFYBARDATE, CUSTOM_CONF_NOTIFYBARDATE,
CUSTOM_CONF_NOTIFYBARCLOCK, CUSTOM_CONF_NOTIFYBARCLOCK,
@ -242,7 +243,7 @@ custom_load_conf (struct conf *conf, int background)
char *mesg_line1 = _("Failed to open config file"); char *mesg_line1 = _("Failed to open config file");
char *mesg_line2 = _("Press [ENTER] to continue"); char *mesg_line2 = _("Press [ENTER] to continue");
char buf[BUFSIZ], e_conf[BUFSIZ]; char buf[BUFSIZ], e_conf[BUFSIZ];
int var; enum conf_var var;
data_file = fopen (path_conf, "r"); data_file = fopen (path_conf, "r");
if (data_file == NULL) if (data_file == NULL)
@ -311,6 +312,10 @@ custom_load_conf (struct conf *conf, int background)
wins_set_layout (atoi (e_conf)); wins_set_layout (atoi (e_conf));
var = 0; var = 0;
break; break;
case CUSTOM_CONF_SBAR_WIDTH:
wins_set_sbar_width (atoi (e_conf));
var = 0;
break;
case CUSTOM_CONF_NOTIFYBARSHOW: case CUSTOM_CONF_NOTIFYBARSHOW:
nbar.show = fill_config_var (e_conf); nbar.show = fill_config_var (e_conf);
var = 0; var = 0;
@ -375,6 +380,8 @@ custom_load_conf (struct conf *conf, int background)
var = CUSTOM_CONF_COLORTHEME; var = CUSTOM_CONF_COLORTHEME;
else if (strncmp (e_conf, "layout=", 7) == 0) else if (strncmp (e_conf, "layout=", 7) == 0)
var = CUSTOM_CONF_LAYOUT; var = CUSTOM_CONF_LAYOUT;
else if (strncmp (e_conf, "side-bar_width=", 15) == 0)
var = CUSTOM_CONF_SBAR_WIDTH;
else if (strncmp (e_conf, "notify-bar_show=", 16) == 0) else if (strncmp (e_conf, "notify-bar_show=", 16) == 0)
var = CUSTOM_CONF_NOTIFYBARSHOW; var = CUSTOM_CONF_NOTIFYBARSHOW;
else if (strncmp (e_conf, "notify-bar_date=", 16) == 0) else if (strncmp (e_conf, "notify-bar_date=", 16) == 0)
@ -605,6 +612,7 @@ custom_sidebar_config (void)
keys_display_bindings_bar (win[STA].p, binding, 0, binding_size); keys_display_bindings_bar (win[STA].p, binding, 0, binding_size);
doupdate (); doupdate ();
while ((ch = keys_getch (win[STA].p)) != KEY_GENERIC_QUIT) while ((ch = keys_getch (win[STA].p)) != KEY_GENERIC_QUIT)
{ {
unsigned need_update; unsigned need_update;
@ -613,11 +621,11 @@ custom_sidebar_config (void)
switch (ch) switch (ch)
{ {
case KEY_MOVE_UP: case KEY_MOVE_UP:
sbarwidth++; wins_sbar_winc ();
need_update = 1; need_update = 1;
break; break;
case KEY_MOVE_DOWN: case KEY_MOVE_DOWN:
sbarwidth--; wins_sbar_wdec ();
need_update = 1; need_update = 1;
break; break;
case KEY_GENERIC_HELP: case KEY_GENERIC_HELP:
@ -629,7 +637,7 @@ custom_sidebar_config (void)
if (need_update) if (need_update)
{ {
wins_reinit (); wins_reinit_panels ();
wins_update_border (); wins_update_border ();
wins_update_panels (); wins_update_panels ();
keys_display_bindings_bar (win[STA].p, binding, 0, binding_size); keys_display_bindings_bar (win[STA].p, binding, 0, binding_size);

View File

@ -1,4 +1,4 @@
/* $calcurse: io.c,v 1.81 2010/03/20 10:54:46 culot Exp $ */ /* $calcurse: io.c,v 1.82 2010/03/21 09:21:07 culot Exp $ */
/* /*
* Calcurse - text-based organizer * Calcurse - text-based organizer
@ -887,6 +887,11 @@ io_save_conf (struct conf *conf)
(void)fprintf (fp, "\n# This is the layout of the calendar :\n"); (void)fprintf (fp, "\n# This is the layout of the calendar :\n");
(void)fprintf (fp, "layout=\n"); (void)fprintf (fp, "layout=\n");
(void)fprintf (fp, "%d\n", wins_layout ()); (void)fprintf (fp, "%d\n", wins_layout ());
(void)fprintf (fp, "\n# Width (in percentage, 0 being minimun width) "
"of the side bar :\n");
(void)fprintf (fp, "side-bar_width=\n");
(void)fprintf (fp, "%d\n", wins_sbar_wperc ());
if (ui_mode == UI_CURSES) if (ui_mode == UI_CURSES)
pthread_mutex_lock (&nbar.mutex); pthread_mutex_lock (&nbar.mutex);

View File

@ -1,4 +1,4 @@
/* $calcurse: wins.c,v 1.30 2010/03/20 13:29:48 culot Exp $ */ /* $calcurse: wins.c,v 1.31 2010/03/21 09:21:07 culot Exp $ */
/* /*
* Calcurse - text-based organizer * Calcurse - text-based organizer
@ -46,7 +46,7 @@
struct window win[NBWINS]; struct window win[NBWINS];
/* User-configurable side bar width. */ /* User-configurable side bar width. */
unsigned sbarwidth = 30; static unsigned sbarwidth;
static enum win slctd_win; static enum win slctd_win;
static int layout; static int layout;
@ -55,7 +55,7 @@ static int layout;
int int
wins_layout (void) wins_layout (void)
{ {
return (layout); return layout;
} }
/* Set the current layout. */ /* Set the current layout. */
@ -65,6 +65,63 @@ wins_set_layout (int nb)
layout = nb; layout = nb;
} }
/* Get the current side bar width. */
unsigned
wins_sbar_width (void)
{
return sbarwidth ? sbarwidth : SBARMINWIDTH;
}
/*
* Return the side bar width in percentage of the total number of columns
* available in calcurse's screen.
*/
unsigned
wins_sbar_wperc (void)
{
unsigned perc;
perc = col ? (unsigned)(100 * sbarwidth / col + 1): 0;
return perc > SBARMAXWIDTHPERC ? SBARMAXWIDTHPERC : perc;
}
/*
* Set side bar width (unit: number of characters) given a width in percentage
* of calcurse's screen total width.
* The side bar could not have a width representing more than 50% of the screen,
* and could not be less than SBARMINWIDTH characters.
*/
void
wins_set_sbar_width (unsigned perc)
{
if (perc > SBARMAXWIDTHPERC)
sbarwidth = col * SBARMAXWIDTHPERC / 100;
else if (perc <= 0)
sbarwidth = SBARMINWIDTH;
else
{
sbarwidth = (unsigned)(col * perc / 100);
if (sbarwidth < SBARMINWIDTH)
sbarwidth = SBARMINWIDTH;
}
}
/* Change the width of the side bar within acceptable boundaries. */
void
wins_sbar_winc (void)
{
if (sbarwidth < SBARMAXWIDTHPERC * col / 100)
sbarwidth++;
}
void
wins_sbar_wdec (void)
{
if (sbarwidth > SBARMINWIDTH)
sbarwidth--;
}
/* Initialize the selected window in calcurse's interface. */ /* Initialize the selected window in calcurse's interface. */
void void
wins_slctd_init (void) wins_slctd_init (void)
@ -96,17 +153,12 @@ wins_slctd_next (void)
slctd_win++; slctd_win++;
} }
/* Create all the windows. */ static void
void wins_init_panels (void)
wins_init (void)
{ {
char label[BUFSIZ]; char label[BUFSIZ];
/* win[CAL].p = newwin (CALHEIGHT, wins_sbar_width (), win[CAL].y, win[CAL].x);
* Create the three main windows plus the status bar and the pad used to
* display appointments and event.
*/
win[CAL].p = newwin (CALHEIGHT, sbarwidth, win[CAL].y, win[CAL].x);
(void)snprintf (label, BUFSIZ, _("Calendar")); (void)snprintf (label, BUFSIZ, _("Calendar"));
wins_show (win[CAL].p, label); wins_show (win[CAL].p, label);
@ -120,12 +172,19 @@ wins_init (void)
(void)snprintf (label, BUFSIZ, _("ToDo")); (void)snprintf (label, BUFSIZ, _("ToDo"));
wins_show (win[TOD].p, label); wins_show (win[TOD].p, label);
win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y, win[STA].x); /* Enable function keys (i.e. arrow keys) in those windows */
/* Enable function keys (i.e. arrow keys) in those windows */
keypad (win[CAL].p, TRUE); keypad (win[CAL].p, TRUE);
keypad (win[APP].p, TRUE); keypad (win[APP].p, TRUE);
keypad (win[TOD].p, TRUE); keypad (win[TOD].p, TRUE);
}
/* Create all the windows. */
void
wins_init (void)
{
wins_init_panels ();
win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y, win[STA].x);
keypad (win[STA].p, TRUE); keypad (win[STA].p, TRUE);
/* Notify that the curses mode is now launched. */ /* Notify that the curses mode is now launched. */
@ -195,6 +254,17 @@ wins_scrollwin_down (struct scrollwin *sw, int amount)
sw->first_visible_line += amount; sw->first_visible_line += amount;
} }
void
wins_reinit_panels (void)
{
delwin (win[CAL].p);
delwin (win[APP].p);
delwin (apad.ptrwin);
delwin (win[TOD].p);
wins_get_config ();
wins_init_panels ();
}
/* /*
* Delete the existing windows and recreate them with their new * Delete the existing windows and recreate them with their new
* size and placement. * size and placement.
@ -202,11 +272,11 @@ wins_scrollwin_down (struct scrollwin *sw, int amount)
void void
wins_reinit (void) wins_reinit (void)
{ {
delwin (win[STA].p);
delwin (win[CAL].p); delwin (win[CAL].p);
delwin (win[APP].p); delwin (win[APP].p);
delwin (apad.ptrwin); delwin (apad.ptrwin);
delwin (win[TOD].p); delwin (win[TOD].p);
delwin (win[STA].p);
wins_get_config (); wins_get_config ();
wins_init (); wins_init ();
if (notify_bar ()) if (notify_bar ())
@ -260,7 +330,7 @@ wins_get_config (void)
win[NOT].x = 0; win[NOT].x = 0;
} }
win[CAL].w = sbarwidth; win[CAL].w = wins_sbar_width ();
win[CAL].h = CALHEIGHT; win[CAL].h = CALHEIGHT;
if (layout <= 4) if (layout <= 4)