aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordam <dam@gudinoff>2023-04-06 00:34:02 +0100
committerdam <dam@gudinoff>2023-04-06 00:34:02 +0100
commit9b207176f11e00fe0d3cff3ede331ef0b7954b40 (patch)
treedde7cda2693c6b982409f9b45e1cc6767ce72dba
parent6703db54662b090d7c05f439e2e62e8ba8909911 (diff)
downloadtask-time-tracker-9b207176f11e00fe0d3cff3ede331ef0b7954b40.tar.zst
task-time-tracker-9b207176f11e00fe0d3cff3ede331ef0b7954b40.zip
Fixed mvprintw_time and ported select/active code.
-rw-r--r--ttt.jai122
-rw-r--r--unused.jai2
2 files changed, 54 insertions, 70 deletions
diff --git a/ttt.jai b/ttt.jai
index 4d4421f..45a8bac 100644
--- a/ttt.jai
+++ b/ttt.jai
@@ -243,7 +243,6 @@ replace_char :: (str: string, find: u8, replace: u8) -> string {
// Prints, on row y and column x, the time using 5 characters centered on space.
// Returns the result of a call to mvprintw.
mvprintw_time :: (y: s32, x: s32, time: s64, space: s32) -> int {
- return 0; // TODO NOT WORKING
TIME_CHARS :: 5;
assert(space >= TIME_CHARS);
@@ -260,12 +259,12 @@ mvprintw_time :: (y: s32, x: s32, time: s64, space: s32) -> int {
return mvprintw(y, x, "%*s%3jds %*s", left_padding, "", time, right_padding, "");
}
else if (time < 100 * SECONDS_IN_HOUR) {
- hours := cast(float64)time / cast(float64)SECONDS_IN_HOUR;
+ hours := time / SECONDS_IN_HOUR;
minutes := (time - (hours * SECONDS_IN_HOUR) ) / SECONDS_IN_MINUTE;
return mvprintw(y, x, "%*s%02jd:%02jd%*s", left_padding, "", hours, minutes, right_padding, "");
}
else if (time < xx (9999.5 * SECONDS_IN_DAY)) {
- value := cast(float64)time / cast(float64)SECONDS_IN_DAY;
+ value := cast(float64) time / SECONDS_IN_DAY;
decimals :=
ifx time >= xx 99.95 * SECONDS_IN_DAY then 0 else
ifx time >= xx 9.995 * SECONDS_IN_DAY then 1 else
@@ -273,7 +272,7 @@ mvprintw_time :: (y: s32, x: s32, time: s64, space: s32) -> int {
return mvprintw(y, x, "%*s%4.*fd%*s", left_padding, "", decimals, value, right_padding, "");
}
else if (time < xx (9999.5 * SECONDS_IN_YEAR)) {
- value := cast(float64)time / cast(float64)SECONDS_IN_YEAR;
+ value := cast(float64) time / SECONDS_IN_YEAR;
decimals :=
ifx time >= xx 99.95 * SECONDS_IN_YEAR then 0 else
ifx time >= xx 9.995 * SECONDS_IN_YEAR then 1 else
@@ -885,43 +884,45 @@ bool append_to_csv(task_st *task, const char *path) {
fclose(file);
return true;
}
-
+*/
// Selects task by index.
// Index gets clamped to [0, db->count[.
-void select_task_by_index(database_st *db, ptrdiff_t index) {
- assert(db != NULL);
- db->selected_task = db->count == 0 ? -1
- : index < 0 ? 0
- : index >= db->count ? db->count - 1
- : index;
+select_task_by_index :: (db: *Database, index: s64) {
+ assert(db != null);
+ db.selected_idx = ifx db.tasks.count == 0 then -1 else
+ ifx index < 0 then 0 else
+ ifx index >= db.tasks.count then db.tasks.count - 1 else
+ index;
}
// Selects task by delta relative to currently selected task.
-void select_task_by_delta(database_st *db, ptrdiff_t delta) {
- assert(db != NULL);
- ptrdiff_t idx = (delta > 0 && db->selected_task > PTRDIFF_MAX - delta) ? PTRDIFF_MAX
- : (delta < 0 && db->selected_task < PTRDIFF_MIN + delta) ? PTRDIFF_MIN
- : db->selected_task + delta;
+select_task_by_delta :: (db: *Database, delta: s64) {
+ assert(db != null);
+ // TODO I bet there's a better way to do this... maybe use a clamp or range or something.
+ idx :=
+ ifx (delta > 0 && db.selected_idx > S64_MAX - delta) then S64_MAX else
+ ifx (delta < 0 && db.selected_idx < S64_MIN - delta) then S64_MIN else
+ db.selected_idx + delta;
select_task_by_index(db, idx);
}
-
+/*
// Selects task.
-void select_task(database_st *db, task_st *task) {
- assert(db != NULL);
- assert(task != NULL);
- assert(task >= db->tasks && task - db->tasks < db->count);
- db->selected_task = task - db->tasks;
+select_task :: (db: *Database, task: *Task) {
+ assert(db != null);
+ assert(task != null);
+ assert(task >= db.tasks.data && task - db.tasks.data < db.tasks.count);
+ db.selected_idx = task - db.tasks.data;
}
-
+*/
// Set active task.
// Passing task as NULL de-activates any previously active task.
-void set_active_task(database_st *db, task_st *task) {
- assert(db != NULL);
- assert(task == NULL || (task >= db->tasks && task < &db->tasks[db->count]));
+set_active_task :: (db: *Database, task: *Task) {
+ assert(db != null);
+ assert(task == null || (task >= db.tasks.data && task <= *db.tasks[db.tasks.count-1])); // TODO Improve this check.
update_times(db);
- db->active_task = (task == NULL) ? -1 : task - db->tasks;
+ db.active_idx = ifx (task == null) then -1 else task - db.tasks.data;
}
-
+/*
// Returns true when database is full.
bool is_database_full(database_st *db) {
assert(db != NULL);
@@ -1132,9 +1133,9 @@ draw_tui :: (db: *Database, layout: *Layout) {
idx_start := (db.selected_idx / layout_tasks_rows) * layout_tasks_rows;
// Display up to rows allowed by the layout, or less if reached end of database.
idx_stop := idx_start + (ifx layout_tasks_rows > db.tasks.count - idx_start then db.tasks.count - idx_start else layout_tasks_rows);
- for idx: idx_start..idx_stop-1 {
+ for task_idx: idx_start..idx_stop-1 {
//for (size_t idx = idx_start; idx < idx_stop; idx++) {
- task := *db.tasks[idx];
+ task := *db.tasks[task_idx];
y += 1;
x = 0;
@@ -1158,15 +1159,12 @@ draw_tui :: (db: *Database, layout: *Layout) {
// Task times.
total_time = 0;
for 0..NUM_WEEK_DAYS-1 {
- //for (int idx = 0; idx < NUM_WEEK_DAYS; idx++) {
x += 1;
-
- day_idx := (idx + FIRST_DAY_OF_WEEK) % NUM_WEEK_DAYS;
-
+ day_idx := (it + FIRST_DAY_OF_WEEK) % NUM_WEEK_DAYS;
column_width = layout.columns[L_DAYS_IDX + day_idx].width;
- task_stime := task.times[day_idx];
- total_time = add_int64(total_time, task_stime);
- mvprintw_time(xx y, xx x, task_stime, xx column_width);
+ task_time := task.times[day_idx];
+ total_time = add_int64(total_time, task_time);
+ mvprintw_time(xx y, xx x, task_time, xx column_width);
x += column_width;
}
@@ -1760,18 +1758,15 @@ main :: () {
select_task(db, active_task);
break;
}
-
- case '\n':
- case ' ': {
- if (db != &database || selected_task == NULL) {
- break;
- }
- set_active_task(db, (active_task == selected_task) ? NULL : selected_task);
+ */
+ case #char "\n"; #through;
+ case #char " ";
+ if (db != *database || selected_task == null) break;
+ set_active_task(db, ifx (active_task == selected_task) then null else selected_task);
active_task = get_active_task(db);
trigger_autosave();
- break;
- }
-
+
+ /*
case '\t': {
if (db == &database) {
if (import_from_csv(&archive, ar_file_path) == false) {
@@ -1823,37 +1818,24 @@ main :: () {
trigger_autosave();
break;
}
-
- case KEY_HOME: {
+ */
+ case KEY_HOME;
select_task_by_index(db, 0);
- break;
- }
-
- case KEY_UP: {
+
+ case KEY_UP;
select_task_by_delta(db, -1);
- break;
- }
-
- case KEY_PPAGE: {
+
+ case KEY_PPAGE;
select_task_by_delta(db, -layout_tasks_rows);
- break;
- }
- case KEY_END: {
- select_task_by_index(db, db->count-1);
- break;
- }
+ case KEY_END;
+ select_task_by_index(db, db.tasks.count-1);
- case KEY_DOWN: {
+ case KEY_DOWN;
select_task_by_delta(db, 1);
- break;
- }
- case KEY_NPAGE: {
+ case KEY_NPAGE;
select_task_by_delta(db, layout_tasks_rows);
- break;
- }
-*/
}
if (is_terminal_too_small) {
diff --git a/unused.jai b/unused.jai
index b995d0d..264fa88 100644
--- a/unused.jai
+++ b/unused.jai
@@ -1,3 +1,5 @@
+ print(">%<", S64_MIN + delta, to_standard_error = true);
+
// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- //