diff options
| author | dam <dam@gudinoff> | 2023-04-06 00:34:02 +0100 |
|---|---|---|
| committer | dam <dam@gudinoff> | 2023-04-06 00:34:02 +0100 |
| commit | 9b207176f11e00fe0d3cff3ede331ef0b7954b40 (patch) | |
| tree | dde7cda2693c6b982409f9b45e1cc6767ce72dba | |
| parent | 6703db54662b090d7c05f439e2e62e8ba8909911 (diff) | |
| download | task-time-tracker-9b207176f11e00fe0d3cff3ede331ef0b7954b40.tar.zst task-time-tracker-9b207176f11e00fe0d3cff3ede331ef0b7954b40.zip | |
Fixed mvprintw_time and ported select/active code.
| -rw-r--r-- | ttt.jai | 122 | ||||
| -rw-r--r-- | unused.jai | 2 |
2 files changed, 54 insertions, 70 deletions
@@ -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) { @@ -1,3 +1,5 @@ + print(">%<", S64_MIN + delta, to_standard_error = true); + // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- // |
