aboutsummaryrefslogtreecommitdiff
path: root/ttt.jai
diff options
context:
space:
mode:
authordam <dam@gudinoff>2024-05-11 03:47:36 +0100
committerdam <dam@gudinoff>2024-05-11 03:47:36 +0100
commit0ca96dad124b9a8935902f9c2f884bc63ee7e430 (patch)
tree4492f744e1547e72eb0853f536e82dde6f7349a0 /ttt.jai
parent5c3b4448575a15b5fed46071192ddc9736cda298 (diff)
downloadtask-time-tracker-0ca96dad124b9a8935902f9c2f884bc63ee7e430.tar.zst
task-time-tracker-0ca96dad124b9a8935902f9c2f884bc63ee7e430.zip
Using dynamic memory allocation for draw buffer/string builder.
Diffstat (limited to 'ttt.jai')
-rw-r--r--ttt.jai57
1 files changed, 22 insertions, 35 deletions
diff --git a/ttt.jai b/ttt.jai
index 7fff02d..700ebbd 100644
--- a/ttt.jai
+++ b/ttt.jai
@@ -79,6 +79,7 @@ size_x : int;
size_y : int;
pos_x : int;
pos_y : int;
+draw_string_builder : String_Builder;
style_default := TUI.Style.{
background = TUI.Palette.BLACK,
@@ -593,10 +594,7 @@ load_database :: (db: *Database, path: string) -> success: bool #must {
log_error("Unexpected content found at the end of file '%'.", path);
return false;
}
-
- // Make sure we have a valid selected index.
- if db.tasks.count > 0 && db.selected_idx < 0 then db.selected_idx = 0;
-
+
return true;
}
@@ -927,21 +925,14 @@ get_layout_index_from_day_index :: inline (day_index: int) -> int {
dbg_average := 0; // DEBUG
dbg_count := 0; // DEBUG
-buffer: String_Builder; // TODO
+
draw_user_interface :: (db: *Database, layout: *Layout, redraw_all: bool = true) {
auto_release_temp();
- /* TODO
- It's not safe to use temporary memory here because the console resolution may increase and use more than what we have in temporary memory.
- And temporary memory is configured at compile time.
- We should dynamically allocate memory with some headroom and, at beggining of function... adjust it if necessary.
-
- // init_string_builder(*buffer, 100000);
- // builder := buffer;
- */
- builder := String_Builder.{ allocator = temporary_allocator };
- TUI.using_builder_as_output(*builder);
+ TUI.using_builder_as_output(*draw_string_builder);
+ print :: TUI.tui_print;
+ write_string :: TUI.tui_write_string;
// Get context information.
active_task := get_active_task(db);
@@ -994,7 +985,7 @@ draw_user_interface :: (db: *Database, layout: *Layout, redraw_all: bool = true)
TUI.set_style(style_default);
print_time(size_y, x_total_offset, total_time, layout.columns[L_TOTAL_IDX].width);
- write_builder(*builder);
+ write_builder(*draw_string_builder);
return;
}
@@ -1010,23 +1001,22 @@ draw_user_interface :: (db: *Database, layout: *Layout, redraw_all: bool = true)
TUI.draw_box(1, 1, size_x, size_y);
// Draw table grids.
- // TODO Maybe this could be simplified?
y = 1;
x = 1;
- TUI.tui_write_string(TUI.Commands.DrawingMode); // append(*builder, TUI.Commands.DrawingMode); TODO
+ write_string(TUI.Commands.DrawingMode);
for 0..layout.columns.count-2 {
column := layout.columns[it];
x += 1 + column.width;
TUI.set_cursor_position(x, y);
- TUI.tui_write_string(TUI.Drawings.TeeT); // TODO append(*builder, TUI.Drawings.TeeT);
+ write_string(TUI.Drawings.TeeT);
for row: 2..size_y {
TUI.set_cursor_position(x, row);
- TUI.tui_write_string(TUI.Drawings.LineV); // TODO append(*builder, TUI.Drawings.LineV);
+ write_string(TUI.Drawings.LineV);
}
TUI.set_cursor_position(x, size_y);
- TUI.tui_write_string(TUI.Drawings.TeeB); // TODO append(*builder, TUI.Drawings.TeeB);
+ write_string(TUI.Drawings.TeeB);
}
- TUI.tui_write_string(TUI.Commands.TextMode); // TODO append(*builder, TUI.Commands.TextMode);
+ write_string(TUI.Commands.TextMode);
///////////////////////////////////////////////////////////////////////////
@@ -1038,7 +1028,7 @@ draw_user_interface :: (db: *Database, layout: *Layout, redraw_all: bool = true)
x += 1;
col = *layout.columns[L_TITLE_IDX];
TUI.set_cursor_position(x + col.alignment_offset, y);
- TUI.tui_write_string(ifx db == *archive then layout.archive_title else col.header); // TODO append(*builder, ifx db == *archive then layout.archive_title else col.header);
+ write_string(ifx db == *archive then layout.archive_title else col.header);
x += col.width;
// Headers : days
@@ -1058,7 +1048,7 @@ draw_user_interface :: (db: *Database, layout: *Layout, redraw_all: bool = true)
}
col = *layout.columns[L_DAYS_IDX + day_idx];
TUI.set_cursor_position(x + col.alignment_offset, y);
- TUI.tui_write_string(col.header); // TODO append(*builder, col.header);
+ write_string(col.header);
x += col.width;
}
TUI.set_style(style_default);
@@ -1067,7 +1057,7 @@ draw_user_interface :: (db: *Database, layout: *Layout, redraw_all: bool = true)
x += 1;
col = *layout.columns[L_TOTAL_IDX];
TUI.set_cursor_position(x + col.alignment_offset, y);
- TUI.tui_write_string(col.header); // TODO append(*builder, col.header);
+ write_string(col.header);
///////////////////////////////////////////////////////////////////////////
@@ -1108,11 +1098,11 @@ draw_user_interface :: (db: *Database, layout: *Layout, redraw_all: bool = true)
task_name := cast(string)task.name;
task_name = truncate(task_name, column_width);
TUI.set_cursor_position(x, y);
- TUI.tui_write_string(task_name); // TODO append(*builder, task_name);
+ write_string(task_name);
// Paint the remaining column space.
task_name_char_count := count_characters(task_name, is_null_terminated = true);
paint_remaining := string.{ column_width - task_name_char_count, empty_line.data };
- TUI.tui_write_string(paint_remaining); // TODO append(*builder, paint_remaining);
+ write_string(paint_remaining);
x += column_width;
@@ -1140,10 +1130,10 @@ draw_user_interface :: (db: *Database, layout: *Layout, redraw_all: bool = true)
size := 1 + count_digits(db.selected_idx + 1) + 1 + count_digits(db.tasks.count) + 1; // " XXX/YYY "
TUI.set_cursor_position(2, size_y);
if (size <= layout.columns[L_TITLE_IDX].width) {
- TUI.tui_print(" %/% ", db.selected_idx + 1, db.tasks.count);
+ print(" %/% ", db.selected_idx + 1, db.tasks.count);
}
else {
- TUI.tui_print("%", db.selected_idx + 1);
+ print("%", db.selected_idx + 1);
}
@@ -1177,7 +1167,7 @@ draw_user_interface :: (db: *Database, layout: *Layout, redraw_all: bool = true)
x += 1;
print_time(y, x, total_time, layout.columns[L_TOTAL_IDX].width);
- write_builder(*builder);
+ write_builder(*draw_string_builder);
}
free_memory :: () {
@@ -1466,11 +1456,8 @@ dbg_average = (dbg_sample + dbg_count * dbg_average) / (dbg_count + 1); // DEBUG
dbg_count += 1; // DEBUG
TUI.set_cursor_position(3, 1);
TUI.tui_print("Average % us (% / % : % bytes) ---------", dbg_average/1000, context.temporary_storage.total_bytes_occupied, context.temporary_storage.high_water_mark, context.temporary_storage.size); // DEBUG
- // write_string(builder_to_string(*builder,, allocator = temporary_allocator));
draw_error_window();
- TUI.set_cursor_position(40, 1);
- TUI.tui_print(">%<", redraw_all);
}
key := TUI.get_key(INPUT_TIMEOUT_MS);
@@ -1493,12 +1480,12 @@ TUI.tui_print("Average % us (% / % : % bytes) ---------", dbg_average/1000, cont
selected_task := get_selected_task(db);
active_task := get_active_task(db);
selected_task_row: int;
- { // TODO Recheck this code.
+ {
using db;
action_style = ifx selected_idx == active_idx && selected_idx != -1 then style_active else style_selected_inverted;
selected_task_row = ifx is_terminal_too_small then 0
- else ifx (selected_idx < 0) then 1
+ else ifx (selected_idx < 0) then 2
else (selected_idx % layout_tasks_rows) + NUM_HEADER_ROWS + 1;
}