feat(table_core): Dirty tracking visual - blend naranja para filas con cambios pendientes

- 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
This commit is contained in:
reugenio 2025-12-27 20:54:37 +01:00
parent d5edf2b962
commit 7642ffe7f7
2 changed files with 19 additions and 0 deletions

View file

@ -501,6 +501,9 @@ pub const DrawRowsConfig = struct {
apply_state_colors: bool = false, apply_state_colors: bool = false,
/// Dibujar borde inferior en cada fila /// Dibujar borde inferior en cada fila
draw_row_borders: bool = false, 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. /// 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) // Aplicar selección (override del estado)
if (is_selected) { if (is_selected) {
row_bg = if (config.has_focus) config.colors.selected_row else config.colors.selected_row_unfocus; row_bg = if (config.has_focus) config.colors.selected_row else config.colors.selected_row_unfocus;

View file

@ -826,6 +826,12 @@ fn drawRows(
// Buffer para valores de celda // Buffer para valores de celda
var cell_buffer: [256]u8 = undefined; 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 // Llamar a la función unificada
_ = table_core.drawRowsWithDataSource( _ = table_core.drawRowsWithDataSource(
ctx, ctx,
@ -844,6 +850,7 @@ fn drawRows(
.active_col = list_state.nav.active_col, .active_col = list_state.nav.active_col,
.colors = render_colors, .colors = render_colors,
.columns = render_cols[0..num_cols], .columns = render_cols[0..num_cols],
.dirty_row_id = dirty_id,
}, },
&cell_buffer, &cell_buffer,
); );