From 7642ffe7f7da42053df61a777f5b594b7ef1a9a0 Mon Sep 17 00:00:00 2001 From: reugenio Date: Sat, 27 Dec 2025 20:54:37 +0100 Subject: [PATCH] feat(table_core): Dirty tracking visual - blend naranja para filas con cambios pendientes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Añadido dirty_row_id: ?i64 a DrawRowsConfig - drawRowsWithDataSource aplica blendColor(state_modified, 0.25) si dirty - VirtualAdvancedTable pasa row_edit_buffer.row_id cuando has_changes --- src/widgets/table_core.zig | 12 ++++++++++++ .../virtual_advanced_table.zig | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/src/widgets/table_core.zig b/src/widgets/table_core.zig index 117bc15..ffc73ac 100644 --- a/src/widgets/table_core.zig +++ b/src/widgets/table_core.zig @@ -501,6 +501,9 @@ pub const DrawRowsConfig = struct { apply_state_colors: bool = false, /// Dibujar borde inferior en cada fila draw_row_borders: bool = false, + /// ID de fila con cambios pendientes (dirty tracking visual) + /// Si no es null y coincide con el row_id actual, se aplica blend naranja + dirty_row_id: ?i64 = null, }; /// Dibuja las filas de una tabla usando TableDataSource. @@ -548,6 +551,15 @@ pub fn drawRowsWithDataSource( }; } + // Dirty tracking: si la fila tiene cambios pendientes sin guardar + if (config.dirty_row_id) |dirty_id| { + const row_id = datasource.getRowId(row_idx); + if (row_id == dirty_id) { + // Blend naranja 25% para indicar cambios pendientes + row_bg = blendColor(row_bg, config.colors.state_modified, 0.25); + } + } + // Aplicar selección (override del estado) if (is_selected) { row_bg = if (config.has_focus) config.colors.selected_row else config.colors.selected_row_unfocus; diff --git a/src/widgets/virtual_advanced_table/virtual_advanced_table.zig b/src/widgets/virtual_advanced_table/virtual_advanced_table.zig index f8f113d..59bbfed 100644 --- a/src/widgets/virtual_advanced_table/virtual_advanced_table.zig +++ b/src/widgets/virtual_advanced_table/virtual_advanced_table.zig @@ -826,6 +826,12 @@ fn drawRows( // Buffer para valores de celda var cell_buffer: [256]u8 = undefined; + // Determinar dirty_row_id (fila con cambios pendientes) + const dirty_id: ?i64 = if (list_state.row_edit_buffer.has_changes) + list_state.row_edit_buffer.row_id + else + null; + // Llamar a la función unificada _ = table_core.drawRowsWithDataSource( ctx, @@ -844,6 +850,7 @@ fn drawRows( .active_col = list_state.nav.active_col, .colors = render_colors, .columns = render_cols[0..num_cols], + .dirty_row_id = dirty_id, }, &cell_buffer, );