new source files to store windows handling related routines
This commit is contained in:
parent
d2c337f8b5
commit
e10dd9cd7f
260
src/wins.c
Executable file
260
src/wins.c
Executable file
@ -0,0 +1,260 @@
|
|||||||
|
/* $Id: wins.c,v 1.1 2007/07/21 19:37:44 culot Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calcurse - text-based organizer
|
||||||
|
* Copyright (c) 2007 Frederic Culot
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Send your feedback or comments to : calcurse@culot.org
|
||||||
|
* Calcurse home page : http://culot.org/calcurse
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ncurses.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "i18n.h"
|
||||||
|
#include "vars.h"
|
||||||
|
#include "calendar.h"
|
||||||
|
#include "notify.h"
|
||||||
|
#include "utils.h"
|
||||||
|
#include "todo.h"
|
||||||
|
#include "wins.h"
|
||||||
|
|
||||||
|
/* Create all the windows. */
|
||||||
|
void
|
||||||
|
wins_init(window_t *wincal, window_t *winapp, window_t *wintod,
|
||||||
|
window_t *winbar)
|
||||||
|
{
|
||||||
|
char label[BUFSIZ];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create the three main windows plus the status bar and the pad used to
|
||||||
|
* display appointments and event.
|
||||||
|
*/
|
||||||
|
cwin = newwin(CALHEIGHT, CALWIDTH, wincal->y, wincal->x);
|
||||||
|
snprintf(label, BUFSIZ, _("Calendar"));
|
||||||
|
wins_show(cwin, label);
|
||||||
|
awin = newwin(winapp->h, winapp->w, winapp->y, winapp->x);
|
||||||
|
snprintf(label, BUFSIZ, _("Appointments"));
|
||||||
|
wins_show(awin, label);
|
||||||
|
apad->width = winapp->w - 3;
|
||||||
|
apad->ptrwin = newpad(apad->length, apad->width);
|
||||||
|
twin = newwin(wintod->h, wintod->w, wintod->y, wintod->x);
|
||||||
|
snprintf(label, BUFSIZ, _("ToDo"));
|
||||||
|
wins_show(twin, label);
|
||||||
|
swin = newwin(winbar->h, winbar->w, winbar->y, winbar->x);
|
||||||
|
|
||||||
|
/* Enable function keys (i.e. arrow keys) in those windows */
|
||||||
|
keypad(swin, TRUE);
|
||||||
|
keypad(twin, TRUE);
|
||||||
|
keypad(awin, TRUE);
|
||||||
|
keypad(cwin, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete the existing windows and recreate them with their new
|
||||||
|
* size and placement.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
wins_reinit(conf_t *conf, int which_pan, window_t *winbar, window_t *winapp,
|
||||||
|
window_t *wintod, window_t *wincal, window_t *winnot)
|
||||||
|
{
|
||||||
|
clear();
|
||||||
|
delwin(swin);
|
||||||
|
delwin(cwin);
|
||||||
|
delwin(awin);
|
||||||
|
delwin(apad->ptrwin);
|
||||||
|
delwin(twin);
|
||||||
|
wins_get_config(conf, winbar, winnot, winapp, wintod, wincal);
|
||||||
|
wins_init(wincal, winapp, wintod, winbar);
|
||||||
|
if (notify_bar())
|
||||||
|
notify_reinit_bar(winnot->h, winnot->w, winnot->y, winnot->x);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show the window with a border and a label. */
|
||||||
|
void
|
||||||
|
wins_show(WINDOW * win, char *label)
|
||||||
|
{
|
||||||
|
int startx, starty, height, width;
|
||||||
|
|
||||||
|
getbegyx(win, starty, startx);
|
||||||
|
getmaxyx(win, height, width);
|
||||||
|
|
||||||
|
box(win, 0, 0);
|
||||||
|
mvwaddch(win, 2, 0, ACS_LTEE);
|
||||||
|
mvwhline(win, 2, 1, ACS_HLINE, width - 2);
|
||||||
|
mvwaddch(win, 2, width - 1, ACS_RTEE);
|
||||||
|
|
||||||
|
print_in_middle(win, 1, 0, width, label);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the screen size and recalculate the windows configurations.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
wins_get_config(conf_t *conf, window_t *status, window_t *notify,
|
||||||
|
window_t *apts, window_t *todo, window_t *calr)
|
||||||
|
{
|
||||||
|
/* Get the screen configuration */
|
||||||
|
getmaxyx(stdscr, row, col);
|
||||||
|
|
||||||
|
/* fixed values for status, notification bars and calendar */
|
||||||
|
status->h = STATUSHEIGHT;
|
||||||
|
status->w = col;
|
||||||
|
status->y = row - status->h;
|
||||||
|
status->x = 0;
|
||||||
|
|
||||||
|
if (notify_bar()) {
|
||||||
|
notify->h = 1;
|
||||||
|
notify->w = col;
|
||||||
|
notify->y = status->y - 1;
|
||||||
|
notify->x = 0;
|
||||||
|
} else {
|
||||||
|
notify->h = 0;
|
||||||
|
notify->w = 0;
|
||||||
|
notify->y = 0;
|
||||||
|
notify->x = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conf->layout <= 4) { /* APPOINTMENT is the biggest panel */
|
||||||
|
apts->w = col - CALWIDTH;
|
||||||
|
apts->h = row - (status->h + notify->h);
|
||||||
|
todo->w = CALWIDTH;
|
||||||
|
todo->h = row - (CALHEIGHT + status->h + notify->h);
|
||||||
|
} else { /* TODO is the biggest panel */
|
||||||
|
todo->w = col - CALWIDTH;
|
||||||
|
todo->h = row - (status->h + notify->h);
|
||||||
|
apts->w = CALWIDTH;
|
||||||
|
apts->h = row - (CALHEIGHT + status->h + notify->h);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* defining the layout */
|
||||||
|
switch (conf->layout) {
|
||||||
|
case 1:
|
||||||
|
apts->y = 0;
|
||||||
|
apts->x = 0;
|
||||||
|
calr->y = 0;
|
||||||
|
todo->x = apts->w;
|
||||||
|
todo->y = CALHEIGHT;
|
||||||
|
calr->x = apts->w;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
apts->y = 0;
|
||||||
|
apts->x = 0;
|
||||||
|
todo->y = 0;
|
||||||
|
todo->x = apts->w;
|
||||||
|
calr->x = apts->w;
|
||||||
|
calr->y = todo->h;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
apts->y = 0;
|
||||||
|
todo->x = 0;
|
||||||
|
calr->x = 0;
|
||||||
|
calr->y = 0;
|
||||||
|
apts->x = CALWIDTH;
|
||||||
|
todo->y = CALHEIGHT;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
apts->y = 0;
|
||||||
|
todo->x = 0;
|
||||||
|
todo->y = 0;
|
||||||
|
calr->x = 0;
|
||||||
|
apts->x = CALWIDTH;
|
||||||
|
calr->y = todo->h;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
todo->y = 0;
|
||||||
|
todo->x = 0;
|
||||||
|
calr->y = 0;
|
||||||
|
apts->y = CALHEIGHT;
|
||||||
|
apts->x = todo->w;
|
||||||
|
calr->x = todo->w;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
todo->y = 0;
|
||||||
|
todo->x = 0;
|
||||||
|
apts->y = 0;
|
||||||
|
apts->x = todo->w;
|
||||||
|
calr->x = todo->w;
|
||||||
|
calr->y = apts->h;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
todo->y = 0;
|
||||||
|
apts->x = 0;
|
||||||
|
calr->x = 0;
|
||||||
|
calr->y = 0;
|
||||||
|
todo->x = CALWIDTH;
|
||||||
|
apts->y = CALHEIGHT;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
todo->y = 0;
|
||||||
|
apts->x = 0;
|
||||||
|
calr->x = 0;
|
||||||
|
apts->y = 0;
|
||||||
|
todo->x = CALWIDTH;
|
||||||
|
calr->y = apts->h;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update all of the three windows and put a border around the
|
||||||
|
* selected window.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
wins_update(int surrounded_window, conf_t *conf, window_t *winbar,
|
||||||
|
window_t *winapp, window_t *wintod, int hilt_app, int hilt_tod,
|
||||||
|
int which_pan, int nb_tod, int first_todo_onscreen, char *saved_t_mesg)
|
||||||
|
{
|
||||||
|
switch (surrounded_window) {
|
||||||
|
|
||||||
|
case CALENDAR:
|
||||||
|
border_color(cwin);
|
||||||
|
border_nocolor(awin);
|
||||||
|
border_nocolor(twin);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case APPOINTMENT:
|
||||||
|
border_color(awin);
|
||||||
|
border_nocolor(cwin);
|
||||||
|
border_nocolor(twin);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TODO:
|
||||||
|
border_color(twin);
|
||||||
|
border_nocolor(awin);
|
||||||
|
border_nocolor(cwin);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
fputs(_("FATAL ERROR in wins_update: no window selected\n"),
|
||||||
|
stderr);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
|
|
||||||
|
apoint_update_panel(winapp, hilt_app, which_pan);
|
||||||
|
todo_update_panel(wintod, hilt_tod, nb_tod, which_pan,
|
||||||
|
first_todo_onscreen, &saved_t_mesg);
|
||||||
|
calendar_update_panel(cwin);
|
||||||
|
status_bar(surrounded_window);
|
||||||
|
if (notify_bar())
|
||||||
|
notify_update_bar();
|
||||||
|
wmove(swin, 0, 0);
|
||||||
|
doupdate();
|
||||||
|
}
|
41
src/wins.h
Executable file
41
src/wins.h
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
/* $Id: wins.h,v 1.1 2007/07/21 19:37:44 culot Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calcurse - text-based organizer
|
||||||
|
* Copyright (c) 2007 Frederic Culot
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Send your feedback or comments to : calcurse@culot.org
|
||||||
|
* Calcurse home page : http://culot.org/calcurse
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CALCURSE_WINS_H
|
||||||
|
#define CALCURSE_WINS_H
|
||||||
|
|
||||||
|
#include "vars.h"
|
||||||
|
|
||||||
|
void wins_init(window_t *, window_t *, window_t *, window_t *);
|
||||||
|
void wins_reinit(conf_t *conf, int, window_t *, window_t *, window_t *,
|
||||||
|
window_t *, window_t *);
|
||||||
|
void wins_show(WINDOW *, char *);
|
||||||
|
void wins_get_config(conf_t *conf, window_t *, window_t *, window_t *,
|
||||||
|
window_t *, window_t *);
|
||||||
|
void wins_update(int surrounded_window, conf_t *conf, window_t *,
|
||||||
|
window_t *, window_t *, int, int, int, int, int, char *);
|
||||||
|
|
||||||
|
#endif /* CALCURSE_WINS_H */
|
Loading…
x
Reference in New Issue
Block a user