diff options
| -rw-r--r-- | ttt.jai | 57 |
1 files changed, 22 insertions, 35 deletions
@@ -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; } |
