diff options
Diffstat (limited to 'ttt.jai')
| -rw-r--r-- | ttt.jai | 61 |
1 files changed, 34 insertions, 27 deletions
@@ -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); |
