return ncols;
}
-static int get_col(event_t **list, int n, event_t *event, int *ncols)
+int get_col(event_t **list, int n, event_t *event, int *ncols)
{
clear_old(list, n, event);
return col;
}
+/* Event setting helper functions */
+void move_event(int events, int days, int *line)
+{
+ /* Move forward/back in event list */
+ if (events && EVENT) {
+ for (int i=0; i<events && EVENT->next &&
+ same_day(&EVENT->start, &EVENT->next->start); i++)
+ EVENT = EVENT->next;
+ for (int i=0; i>events && EVENT->next &&
+ same_day(&EVENT->start, &EVENT->prev->start); i--)
+ EVENT = EVENT->prev;
+ }
+
+ /* Set current event */
+ if (days) {
+ add_days(&SEL.year, &SEL.month, &SEL.day, days);
+ date_t target = SEL;
+ if (EVENT) {
+ target.hour = EVENT->start.hour;
+ target.min = EVENT->start.min;
+ target.sec = EVENT->start.sec;
+ }
+ if ((EVENT = find_event(&target)))
+ SEL = EVENT->start;
+ }
+
+ /* Update line */
+ if (line && EVENT && !all_day(&EVENT->start, &EVENT->end)) {
+ int lines = LINES-4+COMPACT+COMPACT;
+ int begin = EVENT->start.hour * 4
+ + EVENT->start.min / 15;
+ if (begin+4 > *line+lines)
+ *line = begin-lines+4;
+ if (begin < *line)
+ *line = begin;
+ }
+}
+
/* Day init */
void day_init(WINDOW *_win)
{
while (event && before(&event->start, SEL.year, SEL.month, SEL.day, 24, 0)) {
if (!before(&event->end, SEL.year, SEL.month, SEL.day, 0, 1) &&
get_mins(&event->start, &event->end) > 23*60)
- event_line(win, event, y+allday++, 6, COLS, SHOW_DETAILS);
+ event_line(win, event, y+allday++, 6, COLS-6, SHOW_ACTIVE | SHOW_DETAILS);
event = event->next;
}
if (allday && !COMPACT)
mvwprintw(times, h*4-line, 0, "%02d:%02d", (h-1)%12+1, 0);
/* Print events */
+ if (!EVENT)
+ EVENT = find_event(&SEL);
event = EVENTS;
event_t *active[10] = {};
int ncols = 0;
/* Day run */
int day_run(int key, mmask_t btn, int row, int col)
{
- int days = 0, ref = 0;
- switch (key)
- {
- case 'h': ref = 1; days = -1; break;
- case 'l': ref = 1; days = 1; break;
- case 'i': ref = 1; days = -7; break;
- case 'o': ref = 1; days = 7; break;
- case 'k': ref = 1; line--; break;
- case 'j': ref = 1; line++; break;
+ int days = 0, events = 0, lines = 0;
+ switch (key) {
+ case 'h': days = -1; break;
+ case 'l': days = 1; break;
+ case 'i': days = -7; break;
+ case 'o': days = 7; break;
+ case 'k': events = -1; break;
+ case 'j': events = 1; break;
+ case '\031': lines = -1; break; // ctrl-y
+ case '\005': lines = 1; break; // ctrl-e
+ case '\012': view_edit(EDIT_EVENT); return 1; // enter
+ default: return 0; // not found
}
- line = CLAMP(line, 0, 24*4);
- if (days)
- add_days(&SEL.year, &SEL.month, &SEL.day, days);
- if (ref) {
- werase(win);
- day_draw();
- wrefresh(win);
- }
- return ref;
+
+ if (lines)
+ line = CLAMP(line+lines, 0, 24*4);
+ if (days || events)
+ move_event(events, days, &line);
+
+ werase(win);
+ day_draw();
+ wrefresh(win);
+ return 1;
}