diff options
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 48 |
1 files changed, 34 insertions, 14 deletions
@@ -567,7 +567,7 @@ void update_timers(database_st *db) { while (start_time < stop_time) { start_week_day = localtime(&start_time)->tm_wday; - + // Get next day in local time. struct tm *start_of_day_tm = localtime(&start_time); start_of_day_tm->tm_sec = 0; @@ -1032,10 +1032,13 @@ int main(int argc, char *argv[]) { ungetch(KEY_RESIZE); for (int key; (key = getch()) != 'q'; ) { - + timeout(INPUT_AWAIT_INF); task_st *active_task = get_active_task(db); task_st *selected_task = get_selected_task(db); + int selected_task_row = (db->selected_task % NUM_TABLE_ROWS) + NUM_HEADER_ROWS; + int selected_task_theme = selected_task == active_task ? THEME_E : THEME_D; + update_timers(&database); switch(key) { @@ -1049,7 +1052,7 @@ int main(int argc, char *argv[]) { case KEY_RESIZE: { clear(); getmaxyx(stdscr, size_y, size_x); - string_buffer = realloc(string_buffer, 511 | MAX_TASK_NAME | size_x); // TODO This realloc sucks. + string_buffer = realloc(string_buffer, 511 | MAX_TASK_NAME | (size_x + 1)); // TODO This realloc sucks. break; } @@ -1079,29 +1082,46 @@ int main(int argc, char *argv[]) { if (selected_task == NULL) { break; } - // rename stuff - int row = (db->selected_task % NUM_TABLE_ROWS) + NUM_HEADER_ROWS; - attron(COLOR_PAIR(selected_task == active_task ? THEME_E : THEME_D) | A_BOLD); - mvaddch(row, 0, ACS_DIAMOND); - clrtoeol(); - mvaddch(row, size_x-1, ACS_VLINE); + + // Prepare row to input new task name. + attron(COLOR_PAIR(selected_task_theme) | A_BOLD); + mvaddch(selected_task_row, 0, ACS_DIAMOND); + sprintf(string_buffer, "%*s", size_x - 2, ""); + addstr(string_buffer); + + // Get new task name. curs_set(1); - - mvgetnstr(row, 1, string_buffer, MAX_TASK_NAME-1); + mvgetnstr(selected_task_row, 1, string_buffer, MAX_TASK_NAME-1); + curs_set(0); + + // Apply new task name. if (is_empty_string(string_buffer) == false) { memcpy(selected_task->name, string_buffer, MAX_TASK_NAME); } - curs_set(0); attrset(A_NORMAL); break; } case KEY_DC: { // Delete - if (selected_task == NULL) { + if (selected_task == NULL || selected_task == active_task) { break; } - delete_task(db, selected_task); + + const char *message = "Press enter to delete."; + const size_t length = strlen(message); + int left_padding = ((size_x - 2) - length) / 2; + int right_padding = ((size_x - 2) - length) - left_padding; + sprintf(string_buffer, "%*s%s%*s", left_padding, "", message, right_padding, ""); + + attron(COLOR_PAIR(selected_task_theme) | A_BOLD); + mvaddch(selected_task_row, 0, ACS_DIAMOND); + addstr(string_buffer); + attrset(A_NORMAL); + + if (getch() == '\n') { + delete_task(db, selected_task); + } break; } |
