From dc7d1257a4eb042c9f8a7b8cae913410c93620f4 Mon Sep 17 00:00:00 2001 From: dam Date: Mon, 3 Oct 2022 00:32:21 +0000 Subject: Confirm delete_task operation. --- main.c | 48 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 14 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index b6cbda1..cff3639 100644 --- a/main.c +++ b/main.c @@ -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; } -- cgit v1.2.3