aboutsummaryrefslogtreecommitdiff
path: root/ttt.jai
diff options
context:
space:
mode:
Diffstat (limited to 'ttt.jai')
-rw-r--r--ttt.jai61
1 files changed, 34 insertions, 27 deletions
diff --git a/ttt.jai b/ttt.jai
index 7d1559b..ff3c757 100644
--- a/ttt.jai
+++ b/ttt.jai
@@ -216,29 +216,29 @@ print_time :: (y: int, x: int, time: s64, space: int) -> int {
print_padding :: (size: int, char: u8 = #char " ") {
assert(size >= 0, "Cannot print negative padding values. The procedure accepts signed values just for convenience.");
- while size > 0 {
- print_character(char);
- size -= 1;
- }
+ auto_release_temp();
+ padding := talloc_string(size);
+ memset(padding.data, char, size);
+ TUI.tui_write(padding);
}
TUI.set_cursor_position(x, y);
if time < 0 {
print_padding(left_padding);
- write_string(" - ");
+ TUI.tui_write(" - ");
print_padding(right_padding);
return 0;
}
else if time == 0 {
print_padding(left_padding);
- write_string(" 0 ");
+ TUI.tui_write(" 0 ");
print_padding(right_padding);
return 0;
}
else if time < SECONDS_IN_MINUTE {
print_padding(left_padding);
- print("%s ", FormatInt.{value = time, minimum_digits=3, padding=#char " "});
+ TUI.tui_print("%s ", FormatInt.{value = time, minimum_digits=3, padding=#char " "});
print_padding(right_padding);
return 0;
}
@@ -246,7 +246,7 @@ print_time :: (y: int, x: int, time: s64, space: int) -> int {
hours := time / SECONDS_IN_HOUR;
minutes := (time - (hours * SECONDS_IN_HOUR) ) / SECONDS_IN_MINUTE;
print_padding(left_padding);
- print("%:%", FormatInt.{value = hours, minimum_digits=2}, FormatInt.{value = minutes, minimum_digits=2});
+ TUI.tui_print("%:%", FormatInt.{value = hours, minimum_digits=2}, FormatInt.{value = minutes, minimum_digits=2});
print_padding(right_padding);
return 0;
}
@@ -257,7 +257,7 @@ print_time :: (y: int, x: int, time: s64, space: int) -> int {
ifx time >= #run mul_f64_s64(9.995, SECONDS_IN_DAY) then 1 else
2;
print_padding(left_padding);
- print("%d", FormatFloat.{value = value, trailing_width=decimals, width=4});
+ TUI.tui_print("%d", FormatFloat.{value = value, trailing_width=decimals, width=4});
print_padding(right_padding);
return 0;
}
@@ -268,13 +268,13 @@ print_time :: (y: int, x: int, time: s64, space: int) -> int {
ifx time >= #run mul_f64_s64(9.995, SECONDS_IN_YEAR) then 1 else
2;
print_padding(left_padding);
- print("%y", FormatFloat.{value = value, trailing_width=decimals, width=4});
+ TUI.tui_print("%y", FormatFloat.{value = value, trailing_width=decimals, width=4});
print_padding(right_padding);
return 0;
}
else {
print_padding(left_padding);
- write_string(" ∞ ");
+ TUI.tui_write(" ∞ ");
print_padding(right_padding);
return 0;
}
@@ -897,6 +897,7 @@ update_layout :: () {
dbg_average := 0; // DEBUG
dbg_count := 0; // DEBUG
+buffer: String_Builder; // TODO
draw_user_interface :: (db: *Database, layout: *Layout) {
start := current_time_monotonic(); // DEBUG
@@ -905,6 +906,11 @@ draw_user_interface :: (db: *Database, layout: *Layout) {
empty_line := talloc_string(size_x);
memset(empty_line.data, #char " ", size_x);
+
+ init_string_builder(*buffer, 100000);
+ // builder := String_Builder.{ allocator = temporary_allocator };
+ builder := buffer;
+ TUI.using_buffer(*builder);
adjust_first_day_of_week := int.[
(0 + FIRST_DAY_OF_WEEK) % NUM_WEEK_DAYS,
@@ -931,25 +937,25 @@ draw_user_interface :: (db: *Database, layout: *Layout) {
// Draw outer border.
TUI.draw_box(1, 1, size_x, size_y);
-
+
// Draw table grids.
// TODO Maybe this could be simplified?
y = 1;
x = 1;
- write_string(TUI.Commands.DrawingMode);
+ TUI.tui_write(TUI.Commands.DrawingMode); // append(*builder, TUI.Commands.DrawingMode); TODO
for 0..layout.columns.count-2 {
column := layout.columns[it];
x += 1 + column.width;
TUI.set_cursor_position(x, y);
- write_string(TUI.Drawings.TeeT);
+ TUI.tui_write(TUI.Drawings.TeeT); // TODO append(*builder, TUI.Drawings.TeeT);
for row: 2..size_y {
TUI.set_cursor_position(x, row);
- write_string(TUI.Drawings.LineV);
+ TUI.tui_write(TUI.Drawings.LineV); // TODO append(*builder, TUI.Drawings.LineV);
}
TUI.set_cursor_position(x, size_y);
- write_string(TUI.Drawings.TeeB);
+ TUI.tui_write(TUI.Drawings.TeeB); // TODO append(*builder, TUI.Drawings.TeeB);
}
- write_string(TUI.Commands.TextMode);
+ TUI.tui_write(TUI.Commands.TextMode); // TODO append(*builder, TUI.Commands.TextMode);
///////////////////////////////////////////////////////////////////////////
@@ -961,7 +967,7 @@ draw_user_interface :: (db: *Database, layout: *Layout) {
x += 1;
col = *layout.columns[L_TITLE_IDX];
TUI.set_cursor_position(x + col.alignment_offset, y);
- write_string(ifx db == *archive then layout.archive_title else col.header);
+ TUI.tui_write(ifx db == *archive then layout.archive_title else col.header); // TODO append(*builder, ifx db == *archive then layout.archive_title else col.header);
x += col.width;
// Headers : days
@@ -981,7 +987,7 @@ draw_user_interface :: (db: *Database, layout: *Layout) {
}
col = *layout.columns[L_DAYS_IDX + idx];
TUI.set_cursor_position(x + col.alignment_offset, y);
- write_string(col.header);
+ TUI.tui_write(col.header); // TODO append(*builder, col.header);
x += col.width;
}
TUI.set_style(style_default);
@@ -990,7 +996,7 @@ draw_user_interface :: (db: *Database, layout: *Layout) {
x += 1;
col = *layout.columns[L_TOTAL_IDX];
TUI.set_cursor_position(x + col.alignment_offset, y);
- write_string(col.header);
+ TUI.tui_write(col.header); // TODO append(*builder, col.header);
///////////////////////////////////////////////////////////////////////////
@@ -1033,11 +1039,11 @@ draw_user_interface :: (db: *Database, layout: *Layout) {
task_name := cast(string)task.name;
task_name = truncate(task_name, column_width);
TUI.set_cursor_position(x, y);
- write_string(task_name);
+ TUI.tui_write(task_name); // TODO append(*builder, 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 };
- write_string(paint_remaining);
+ TUI.tui_write(paint_remaining); // TODO append(*builder, paint_remaining);
x += column_width;
@@ -1065,10 +1071,10 @@ draw_user_interface :: (db: *Database, layout: *Layout) {
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) {
- print(" %/% ", db.selected_idx + 1, db.tasks.count);
+ TUI.tui_print(" %/% ", db.selected_idx + 1, db.tasks.count);
}
else {
- print("%", db.selected_idx + 1);
+ TUI.tui_print("%", db.selected_idx + 1);
}
@@ -1107,7 +1113,9 @@ draw_user_interface :: (db: *Database, layout: *Layout) {
dbg_average = (dbg_sample + dbg_count * dbg_average) / (dbg_count + 1); // DEBUG
dbg_count += 1; // DEBUG
TUI.set_cursor_position(3, 1);
- print("Average % us ---------", dbg_average/1000); // DEBUG
+ 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));
+ write_builder(*builder);
}
free_memory :: () {
@@ -1117,7 +1125,6 @@ free_memory :: () {
free(app_directory);
free(db_file_path);
free(ar_file_path);
- // reset_temporary_storage(); // TODO Not needed... I guess.
}
read_input_string :: (x: int, y: int, input_limit: int, padding: int = 0) -> value: string, success: bool {
@@ -1133,7 +1140,7 @@ read_input_string :: (x: int, y: int, input_limit: int, padding: int = 0) -> val
write_string(TUI.Commands.TextMode);
TUI.set_cursor_position(x, y);
- style_input := context.terminal_style;
+ style_input := context.tui_style;
style_input.underline = true;
TUI.using_style(style_input);