/*
- * Copyright (C) 2012 Andy Spencer <andy753421@gmail.com>
+ * Copyright (C) 2012-2013 Andy Spencer <andy753421@gmail.com>
*
* 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
{
event_t *event = EVENTS;
const char *name = month_to_string(month);
- const int start = start_of_month(YEAR, month);
- const char days = days_in_month(YEAR, month);
+ const int start = start_of_month(SEL.year, month);
+ const char days = days_in_month(SEL.year, month);
mvwprintw(win, y, x+MW/2-strlen(name)/2, "%s", name);
wmove(win, y+1, x);
for (int d = 0; d < 7; d++)
int col = (start + d) % 7;
int busy = 0;
- while (event && before(&event->start, YEAR, month, d, 24, 0)) {
- if (!before(&event->start, YEAR, month, d, 0, 0))
+ while (event && before(&event->start, SEL.year, month, d, 24, 0)) {
+ if (!before(&event->start, SEL.year, month, d, 0, 0))
busy = 1;
event = event->next;
}
- int today = month == MONTH && d == DAY;
+ int today = month == SEL.month && d == SEL.day;
int attr = (busy ? A_BOLD|A_UNDERLINE : A_DIM)
| (today ? A_REVERSE : 0 );
int y = 0;
int h[4] = {};
+ /* Load cal data */
+ cal_load(SEL.year, 0, 0, 366);
+
/* Determine heights */
for (int m = 0; m < 12; m++) {
- int weeks = weeks_in_month(YEAR, m);
+ int weeks = weeks_in_month(SEL.year, m);
h[m/3] = MAX(h[m/3], weeks+2);
}
int sum = h[0]+h[1]+h[2]+h[3];
/* Print Header */
- mvwprintw(win, y++, COLS/2-2, "%d", YEAR);
+ if (COMPACT) wattron(win, A_REVERSE | A_BOLD);
+ if (COMPACT) mvwhline(win, y, 0, A_REVERSE | A_BOLD, COLS);
+ mvwprintw(win, y++, COLS/2-2, "%d", SEL.year);
+ if (COMPACT) wattroff(win, A_REVERSE | A_BOLD);
/* Print Months */
for (int m = 0; m < 12; m++) {
/* Year run */
int year_run(int key, mmask_t btn, int row, int col)
{
- day_t d = DAY;
- month_t m = MONTH;
- year_t y = YEAR;
- wday_t day = day_of_week(YEAR, MONTH, DAY);
+ day_t d = SEL.day;
+ month_t m = SEL.month;
+ year_t y = SEL.year;
+ wday_t day = day_of_week(SEL.year, SEL.month, SEL.day);
int week = (start_of_month(y, m) + d) / 7;
int dir = 0;
/* Step years */
if (key == 'i')
- YEAR--;
+ SEL.year--;
if (key == 'o')
- YEAR++;
+ SEL.year++;
/* Get direction */
if (key == 'h' || key == 'k')
for (int i = 0; i < 90/7; i++) {
add_days(&y, &m, &d, dir*7);
if (day_of_week(y, m, d) == day &&
- y == YEAR && m%3 == MONTH%3) {
- MONTH = m;
- DAY = d;
+ y == SEL.year && m%3 == SEL.month%3) {
+ SEL.month = m;
+ SEL.day = d;
break;
}
}
for (int i = 0; i < 90; i++) {
add_days(&y, &m, &d, dir);
if ((start_of_month(y, m) + d) / 7 == week &&
- y == YEAR && m/3 == MONTH/3) {
- MONTH = m;
- DAY = d;
+ y == SEL.year && m/3 == SEL.month/3) {
+ SEL.month = m;
+ SEL.day = d;
break;
}
}
}
/* Refresh */
- werase(win);
- year_draw();
- wrefresh(win);
- return 0;
+ if (dir || y != SEL.year) {
+ werase(win);
+ year_draw();
+ wrefresh(win);
+ }
+ return dir || y != SEL.year;
}