More work on sidebar customization.
This commit is contained in:
parent
ec36b96848
commit
cc77e839d8
@ -11,6 +11,14 @@
|
||||
* src/wins.c (wins_update_border, wins_update_panels): new
|
||||
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>
|
||||
|
||||
* TODO: list updated
|
||||
|
@ -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
|
||||
@ -133,6 +133,10 @@
|
||||
/* Maximum number of colors available. */
|
||||
#define NBUSERCOLORS 6
|
||||
|
||||
/* Side bar width acceptable boundaries. */
|
||||
#define SBARMINWIDTH 32
|
||||
#define SBARMAXWIDTHPERC 50
|
||||
|
||||
/* Related to date manipulation. */
|
||||
#define DAYINSEC 86400
|
||||
#define HOURINSEC 3600
|
||||
@ -893,9 +897,13 @@ void vars_init (struct conf *);
|
||||
|
||||
/* wins.c */
|
||||
extern struct window win[NBWINS];
|
||||
extern unsigned sbarwidth;
|
||||
int wins_layout (void);
|
||||
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);
|
||||
enum win wins_slctd (void);
|
||||
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_down (struct scrollwin *, int);
|
||||
void wins_reinit (void);
|
||||
void wins_reinit_panels (void);
|
||||
void wins_show (WINDOW *, char *);
|
||||
void wins_get_config (void);
|
||||
void wins_update_border (void);
|
||||
|
@ -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
|
||||
@ -306,17 +306,18 @@ draw_monthly_view (struct window *cwin, struct date *current_day,
|
||||
unsigned sunday_first)
|
||||
{
|
||||
const int OFFY = 2 + (CALHEIGHT - 9) / 2;
|
||||
const int OFFX = (sbarwidth - 27) / 2;
|
||||
struct date check_day;
|
||||
int c_day, c_day_1, day_1_sav, numdays, j;
|
||||
unsigned yr, mo;
|
||||
int ofs_x, ofs_y;
|
||||
int OFFX, SBAR_WIDTH, ofs_x, ofs_y;
|
||||
int item_this_day = 0;
|
||||
|
||||
mo = slctd_day.mm;
|
||||
yr = slctd_day.yyyy;
|
||||
|
||||
/* offset for centering calendar in window */
|
||||
SBAR_WIDTH = wins_sbar_width ();
|
||||
OFFX = (SBAR_WIDTH - 27) / 2;
|
||||
ofs_y = OFFY;
|
||||
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 */
|
||||
custom_apply_attr (cwin->p, ATTR_HIGHEST);
|
||||
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);
|
||||
custom_remove_attr (cwin->p, ATTR_HIGHEST);
|
||||
++ofs_y;
|
||||
|
20
src/custom.c
20
src/custom.c
@ -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
|
||||
@ -43,7 +43,7 @@
|
||||
#include "calcurse.h"
|
||||
|
||||
/* Available configuration variables. */
|
||||
enum {
|
||||
enum conf_var {
|
||||
CUSTOM_CONF_NOVARIABLE,
|
||||
CUSTOM_CONF_AUTOSAVE,
|
||||
CUSTOM_CONF_PERIODICSAVE,
|
||||
@ -55,6 +55,7 @@ enum {
|
||||
CUSTOM_CONF_WEEKBEGINSONMONDAY,
|
||||
CUSTOM_CONF_COLORTHEME,
|
||||
CUSTOM_CONF_LAYOUT,
|
||||
CUSTOM_CONF_SBAR_WIDTH,
|
||||
CUSTOM_CONF_NOTIFYBARSHOW,
|
||||
CUSTOM_CONF_NOTIFYBARDATE,
|
||||
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_line2 = _("Press [ENTER] to continue");
|
||||
char buf[BUFSIZ], e_conf[BUFSIZ];
|
||||
int var;
|
||||
enum conf_var var;
|
||||
|
||||
data_file = fopen (path_conf, "r");
|
||||
if (data_file == NULL)
|
||||
@ -311,6 +312,10 @@ custom_load_conf (struct conf *conf, int background)
|
||||
wins_set_layout (atoi (e_conf));
|
||||
var = 0;
|
||||
break;
|
||||
case CUSTOM_CONF_SBAR_WIDTH:
|
||||
wins_set_sbar_width (atoi (e_conf));
|
||||
var = 0;
|
||||
break;
|
||||
case CUSTOM_CONF_NOTIFYBARSHOW:
|
||||
nbar.show = fill_config_var (e_conf);
|
||||
var = 0;
|
||||
@ -375,6 +380,8 @@ custom_load_conf (struct conf *conf, int background)
|
||||
var = CUSTOM_CONF_COLORTHEME;
|
||||
else if (strncmp (e_conf, "layout=", 7) == 0)
|
||||
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)
|
||||
var = CUSTOM_CONF_NOTIFYBARSHOW;
|
||||
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);
|
||||
doupdate ();
|
||||
|
||||
while ((ch = keys_getch (win[STA].p)) != KEY_GENERIC_QUIT)
|
||||
{
|
||||
unsigned need_update;
|
||||
@ -613,11 +621,11 @@ custom_sidebar_config (void)
|
||||
switch (ch)
|
||||
{
|
||||
case KEY_MOVE_UP:
|
||||
sbarwidth++;
|
||||
wins_sbar_winc ();
|
||||
need_update = 1;
|
||||
break;
|
||||
case KEY_MOVE_DOWN:
|
||||
sbarwidth--;
|
||||
wins_sbar_wdec ();
|
||||
need_update = 1;
|
||||
break;
|
||||
case KEY_GENERIC_HELP:
|
||||
@ -629,7 +637,7 @@ custom_sidebar_config (void)
|
||||
|
||||
if (need_update)
|
||||
{
|
||||
wins_reinit ();
|
||||
wins_reinit_panels ();
|
||||
wins_update_border ();
|
||||
wins_update_panels ();
|
||||
keys_display_bindings_bar (win[STA].p, binding, 0, binding_size);
|
||||
|
7
src/io.c
7
src/io.c
@ -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
|
||||
@ -888,6 +888,11 @@ io_save_conf (struct conf *conf)
|
||||
(void)fprintf (fp, "layout=\n");
|
||||
(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)
|
||||
pthread_mutex_lock (&nbar.mutex);
|
||||
(void)fprintf (fp,
|
||||
|
100
src/wins.c
100
src/wins.c
@ -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
|
||||
@ -46,7 +46,7 @@
|
||||
struct window win[NBWINS];
|
||||
|
||||
/* User-configurable side bar width. */
|
||||
unsigned sbarwidth = 30;
|
||||
static unsigned sbarwidth;
|
||||
|
||||
static enum win slctd_win;
|
||||
static int layout;
|
||||
@ -55,7 +55,7 @@ static int layout;
|
||||
int
|
||||
wins_layout (void)
|
||||
{
|
||||
return (layout);
|
||||
return layout;
|
||||
}
|
||||
|
||||
/* Set the current layout. */
|
||||
@ -65,6 +65,63 @@ wins_set_layout (int 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. */
|
||||
void
|
||||
wins_slctd_init (void)
|
||||
@ -96,17 +153,12 @@ wins_slctd_next (void)
|
||||
slctd_win++;
|
||||
}
|
||||
|
||||
/* Create all the windows. */
|
||||
void
|
||||
wins_init (void)
|
||||
static void
|
||||
wins_init_panels (void)
|
||||
{
|
||||
char label[BUFSIZ];
|
||||
|
||||
/*
|
||||
* 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);
|
||||
win[CAL].p = newwin (CALHEIGHT, wins_sbar_width (), win[CAL].y, win[CAL].x);
|
||||
(void)snprintf (label, BUFSIZ, _("Calendar"));
|
||||
wins_show (win[CAL].p, label);
|
||||
|
||||
@ -120,12 +172,19 @@ wins_init (void)
|
||||
(void)snprintf (label, BUFSIZ, _("ToDo"));
|
||||
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 */
|
||||
keypad (win[CAL].p, TRUE);
|
||||
keypad (win[APP].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);
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
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
|
||||
* size and placement.
|
||||
@ -202,11 +272,11 @@ wins_scrollwin_down (struct scrollwin *sw, int amount)
|
||||
void
|
||||
wins_reinit (void)
|
||||
{
|
||||
delwin (win[STA].p);
|
||||
delwin (win[CAL].p);
|
||||
delwin (win[APP].p);
|
||||
delwin (apad.ptrwin);
|
||||
delwin (win[TOD].p);
|
||||
delwin (win[STA].p);
|
||||
wins_get_config ();
|
||||
wins_init ();
|
||||
if (notify_bar ())
|
||||
@ -260,7 +330,7 @@ wins_get_config (void)
|
||||
win[NOT].x = 0;
|
||||
}
|
||||
|
||||
win[CAL].w = sbarwidth;
|
||||
win[CAL].w = wins_sbar_width ();
|
||||
win[CAL].h = CALHEIGHT;
|
||||
|
||||
if (layout <= 4)
|
||||
|
Loading…
x
Reference in New Issue
Block a user