diff options
| -rw-r--r-- | ttt.jai | 57 |
1 files changed, 35 insertions, 22 deletions
@@ -1205,7 +1205,7 @@ read_input_int :: (row: int, style: s32, message: string) -> value: int, success } // Shows message to user and waits for user key press. -prompt_user :: (row: int, style: int, message: string) -> TUI.Key { +prompt_user_key :: (row: int, style: int, message: string) -> TUI.Key { /* assert(message.data != null, ASSERT_NOT_NULL, "message"); attron(xx style); @@ -1691,7 +1691,7 @@ main :: () { if key == { - // When getch() times out. + // When input times out. case TUI.Keys.None; if (is_autosave_enabled && countdown_to_autosave > 0) { countdown_to_autosave -= INPUT_TIMEOUT_MS; @@ -1711,7 +1711,8 @@ main :: () { is_terminal_too_small = size_x < 60 || size_y < 3; update_layout(); layout = *layouts[ifx size_x > 100 then Layouts.NORMAL else Layouts.COMPACT]; - + + // Invert sort. case #char "i"; #through; case #char "I"; if (db.tasks.count <= 1) continue; @@ -1726,11 +1727,12 @@ main :: () { if db.active_idx >= 0 db.active_idx = count - db.active_idx; trigger_autosave(); - + + // New task. case #char "n"; #through; case #char "N"; if is_database_full(db) { - prompt_user(selected_task_row, error_style, "Unable to create task: database is full."); + prompt_user_key(selected_task_row, error_style, "Unable to create task: database is full."); continue; } @@ -1747,9 +1749,10 @@ main :: () { trigger_autosave(); // Force rename action. - //flushinp(); TODO DAM - //ungetch(KEY_F(2)); TODO DAM + TUI.flush_input(); + TUI.set_next_key(TUI.Keys.F2); + // Rename task. case TUI.Keys.F2; if (selected_task == null) continue; @@ -1763,10 +1766,11 @@ main :: () { trigger_autosave(); } + // Reset task timers. case TUI.Keys.Backspace; if (selected_task == null) continue; - if (prompt_user(selected_task_row, action_style, "Press enter to reset task.") == TUI.Keys.Enter) { + if (prompt_user_key(selected_task_row, action_style, "Press enter to reset task.") == TUI.Keys.Enter) { reset_task_times(db, db.selected_idx); trigger_autosave(); } @@ -1774,11 +1778,12 @@ main :: () { case TUI.Keys.Delete; if (selected_task == null || selected_task == active_task) continue; - if (prompt_user(selected_task_row, action_style, "Press enter to delete task.") == TUI.Keys.Enter) { + if (prompt_user_key(selected_task_row, action_style, "Press enter to delete task.") == TUI.Keys.Enter) { delete_task(db, db.selected_idx); trigger_autosave(); } + // Setup time. case #char "1"; #through; case #char "2"; #through; case #char "3"; #through; @@ -1837,6 +1842,7 @@ main :: () { trigger_autosave(); + // Move to. case #char "m"; #through; case #char "M"; if selected_task == null continue; @@ -1846,6 +1852,7 @@ main :: () { move_task(db, db.selected_idx, value-1); // -1 to adjust for zero based index trigger_autosave(); + // Go to. case #char "g"; #through; case #char "G"; if selected_task == null continue; @@ -1854,13 +1861,14 @@ main :: () { if success == false continue; target_index := clamp(value, 1, MAX_DATABASE_TASKS) - 1; select_task(db, target_index); - + + // Delete. case #char "d"; #through; case #char "D"; if selected_task == null continue; if is_database_full(db) { - prompt_user(selected_task_row, error_style, "Unable to duplicate task: database is full."); + prompt_user_key(selected_task_row, error_style, "Unable to duplicate task: database is full."); continue; } @@ -1870,22 +1878,26 @@ main :: () { } trigger_autosave(); + // Refresh totals. case TUI.Keys.F5; update_total_times(db); trigger_autosave(); - + + // Go to active task. case #char "t"; #through; case #char "T"; if (active_task == null) continue; select_task(db, db.active_idx); - + + // Start/Stop case TUI.Keys.Enter; #through; case TUI.Keys.Space; if (db != *database || selected_task == null) continue; set_active_task(db, ifx db.active_idx == db.selected_idx then -1 else db.selected_idx); active_task = get_active_task(db); trigger_autosave(); - + + // Toggle archive. case TUI.Keys.Tab; if (db == *database) { if (import_from_csv(*archive, ar_file_path) == false) { @@ -1904,6 +1916,7 @@ main :: () { db = *database; } + // Archive task. case #char "a"; #through; case #char "A"; if (db != *database || selected_task == null || selected_task == active_task) continue; @@ -1914,14 +1927,14 @@ main :: () { } delete_task(db, db.selected_idx); trigger_autosave(); - - // Restore archived task. + + // Restore task. case #char "r"; #through; case #char "R"; if (db != *archive || selected_task == null) continue; if is_database_full(*database) { - prompt_user(selected_task_row, error_style, "Unable to restore task: database is full."); + prompt_user_key(selected_task_row, error_style, "Unable to restore task: database is full."); continue; } @@ -1936,7 +1949,7 @@ main :: () { case #char "s"; #through; case #char "S"; // TODO The initial part should only decide what's the sorting procedure... then we would would all in a single place. - sort_by := prompt_user(selected_task_row, action_style, "Sort by (n) name, (1..7) day, or (t) total time."); + sort_by := prompt_user_key(selected_task_row, action_style, "Sort by (n) name, (1..7) day, or (t) total time."); show_processing(); sort_procedure: (a: Task, b: Task) -> s64; @@ -1979,12 +1992,12 @@ main :: () { db.active_idx = find_similar_task(db, active_task); } trigger_autosave(); - + // Workspace cleanup. case #char "w"; #through; case #char "W"; if (db != *database || db.tasks.count <= 0) continue; - if (prompt_user(selected_task_row, action_style, "Press enter to archive duplicates and reset all.") != TUI.Keys.Enter) continue; + if (prompt_user_key(selected_task_row, action_style, "Press enter to archive duplicates and reset all.") != TUI.Keys.Enter) continue; show_processing(); for db.tasks { @@ -1994,12 +2007,12 @@ main :: () { reset_task_times(db, it_index); } trigger_autosave(); - + // Coalesce similar tasks. case #char "c"; #through; case #char "C"; if (db.tasks.count <= 0) continue; - if (prompt_user(selected_task_row, action_style, "Press enter to coalesce similar tasks.") != TUI.Keys.Enter) continue; + if (prompt_user_key(selected_task_row, action_style, "Press enter to coalesce similar tasks.") != TUI.Keys.Enter) continue; show_processing(); head_idx := 0; |
