aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ttt.jai57
1 files changed, 35 insertions, 22 deletions
diff --git a/ttt.jai b/ttt.jai
index 1053ad7..5229914 100644
--- a/ttt.jai
+++ b/ttt.jai
@@ -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;