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:
parent
d5edf2b962
commit
7642ffe7f7
2 changed files with 19 additions and 0 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue