From 73c73a83c246975dd04df36b94cb381d315dc2ad Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Sun, 16 Jun 2013 10:31:38 +0000 Subject: [PATCH] Add bit flags for event and todo line items This supports drawing the "current" item and allows for additional options if we need them in the future. --- src/view.c | 26 ++++++++++++++++++++------ src/view.h | 8 ++++++-- views/day.c | 2 +- views/events.c | 2 +- views/todo.c | 2 +- 5 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/view.c b/src/view.c index 387e584..fb97c51 100644 --- a/src/view.c +++ b/src/view.c @@ -187,7 +187,7 @@ void event_box(WINDOW *win, event_t *event, int y, int x, int h, int w) if (ldesc) mvwprintw(win, y+l++, x+1, "%.*s", w-2, event->desc); } -void event_line(WINDOW *win, event_t *event, int y, int x, int w, int full) +void event_line(WINDOW *win, event_t *event, int y, int x, int w, int flags) { int color = get_color(event->cat); @@ -195,26 +195,31 @@ void event_line(WINDOW *win, event_t *event, int y, int x, int w, int full) mvwaddch(win, y, x++, ACS_BLOCK); if (color) wattroff(win, COLOR_PAIR(color)); - if (full) { + if (flags & SHOW_ACTIVE) + wattron(win, A_REVERSE | A_BOLD); + if (flags & SHOW_DETAILS) { if (all_day(&event->start, &event->end)) - mvwprintw(win, y, x, " [all day] -"); + mvwprintw(win, y, x+1, "[all day] - "); else - mvwprintw(win, y, x, " %2d:%02d-%2d:%02d -", + mvwprintw(win, y, x+1, "%2d:%02d-%2d:%02d - ", event->start.hour, event->start.min, event->end.hour, event->end.min); x += 15; + w -= 15; } if (event->name) { const char *label = event->name ?: event->desc; mvwprintw(win, y, x, "%-*.*s", w-1, w-1, label); x += MIN(strlen(label), w-1); } - if (full && event->loc) { + if (flags & SHOW_DETAILS && event->loc) { mvwprintw(win, y, x, " @ %s", event->loc); } + if (flags & SHOW_ACTIVE) + wattroff(win, A_REVERSE | A_BOLD); } -void todo_line(WINDOW *win, todo_t *todo, int y, int x, int w, int full) +void todo_line(WINDOW *win, todo_t *todo, int y, int x, int w, int flags) { char perc[16]; char desc[LINES]; @@ -233,6 +238,11 @@ void todo_line(WINDOW *win, todo_t *todo, int y, int x, int w, int full) if (cat) wattroff(win, COLOR_PAIR(cat)); x += 2; + /* Set background */ + if (flags & SHOW_ACTIVE) + wattron(win, A_REVERSE | A_BOLD); + mvwhline(win, y, x, ' ', COLS-x); + /* Print time */ if (no_date(&todo->due)) mvwprintw(win, y, x, "[no due date]"); @@ -252,6 +262,10 @@ void todo_line(WINDOW *win, todo_t *todo, int y, int x, int w, int full) /* Print description */ mvwprintw(win, y, x, "%s", desc); + + /* Reset flags */ + if (flags & SHOW_ACTIVE) + wattroff(win, A_REVERSE | A_BOLD); } /* View init */ diff --git a/src/view.h b/src/view.h index 3643663..7f967ea 100644 --- a/src/view.h +++ b/src/view.h @@ -28,6 +28,10 @@ #define COLOR_WORK 8 #define COLOR_OTHER 9 +/* Display flags */ +#define SHOW_DETAILS 0x1 +#define SHOW_ACTIVE 0x2 + /* Config data */ extern int COMPACT; @@ -37,8 +41,8 @@ void wshrink(WINDOW *win, int top); /* Helper functions */ void event_box(WINDOW *win, event_t *event, int y, int x, int h, int w); -void event_line(WINDOW *win, event_t *event, int y, int x, int w, int full); -void todo_line(WINDOW *win, todo_t *todo, int y, int x, int w, int full); +void event_line(WINDOW *win, event_t *event, int y, int x, int w, int flags); +void todo_line(WINDOW *win, todo_t *todo, int y, int x, int w, int flags); /* View functions */ void view_init(void); diff --git a/views/day.c b/views/day.c index 62ef827..3873204 100644 --- a/views/day.c +++ b/views/day.c @@ -130,7 +130,7 @@ void day_draw(void) while (event && before(&event->start, YEAR, MONTH, DAY, 24, 0)) { if (!before(&event->end, YEAR, MONTH, DAY, 0, 1) && get_mins(&event->start, &event->end) > 23*60) - event_line(win, event, y+allday++, 6, COLS, 1); + event_line(win, event, y+allday++, 6, COLS, SHOW_DETAILS); event = event->next; } if (allday && !COMPACT) diff --git a/views/events.c b/views/events.c index eec7ab0..e254ffb 100644 --- a/views/events.c +++ b/views/events.c @@ -77,7 +77,7 @@ void events_draw(void) wattroff(win, A_BOLD); row++; } - event_line(win, event, row++-line, 4, COLS-2, 1); + event_line(win, event, row++-line, 4, COLS-4, SHOW_DETAILS); if (event->name && event->desc) mvwprintw(win, row++-line, 14, "%s", event->desc); cur = next; diff --git a/views/todo.c b/views/todo.c index d85f8a8..8ab6c9c 100644 --- a/views/todo.c +++ b/views/todo.c @@ -37,7 +37,7 @@ static int print_todos(WINDOW *win, int row, todo_t *todos, status_t low, status int n = 0; for (todo_t *cur = todos; cur; cur = cur->next) if (low <= cur->status && cur->status <= high) - todo_line(win, cur, row+n++, 4, COLS-4, 1); + todo_line(win, cur, row+n++, 4, COLS-4, SHOW_DETAILS); return n; } -- 2.43.2