feat(tables): Tips proactivos cada ~10s
- Añade table_tips[] con 8 tips de atajos - Añade tip_index a VirtualAdvancedTableState - Rota tip cada 600 frames (~10s @ 60fps) - result.current_tip contiene tip a mostrar - Solo muestra tips con focus y sin edición activa
This commit is contained in:
parent
dc82340381
commit
5c7964bacc
3 changed files with 45 additions and 0 deletions
|
|
@ -26,6 +26,26 @@ const Command = @import("../core/command.zig");
|
||||||
const Layout = @import("../core/layout.zig");
|
const Layout = @import("../core/layout.zig");
|
||||||
const Style = @import("../core/style.zig");
|
const Style = @import("../core/style.zig");
|
||||||
|
|
||||||
|
// =============================================================================
|
||||||
|
// Tips Proactivos (FASE I)
|
||||||
|
// =============================================================================
|
||||||
|
|
||||||
|
/// Tips de atajos de teclado para mostrar en StatusLine
|
||||||
|
/// Rotan cada ~10 segundos para enseñar atajos al usuario
|
||||||
|
pub const table_tips = [_][]const u8{
|
||||||
|
"Tip: F2 o Space para editar celda",
|
||||||
|
"Tip: Tab/Shift+Tab navega entre celdas",
|
||||||
|
"Tip: Ctrl+N crea nuevo registro",
|
||||||
|
"Tip: Ctrl+Delete o Ctrl+B borra registro",
|
||||||
|
"Tip: Ctrl+Shift+1..9 ordena por columna",
|
||||||
|
"Tip: Ctrl+Home/End va al inicio/fin",
|
||||||
|
"Tip: Enter confirma y baja, Escape cancela",
|
||||||
|
"Tip: Al editar, tecla directa reemplaza todo",
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Frames entre rotación de tips (~10s @ 60fps)
|
||||||
|
pub const TIP_ROTATION_FRAMES: u32 = 600;
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// Tipos comunes
|
// Tipos comunes
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
|
||||||
|
|
@ -126,6 +126,9 @@ pub const VirtualAdvancedTableState = struct {
|
||||||
/// Frame counter para animaciones
|
/// Frame counter para animaciones
|
||||||
frame_count: u32 = 0,
|
frame_count: u32 = 0,
|
||||||
|
|
||||||
|
/// Índice del tip actual (para tips proactivos rotativos)
|
||||||
|
tip_index: u8 = 0,
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
// Buffers persistentes para texto formateado (evitar stack buffer escape)
|
// Buffers persistentes para texto formateado (evitar stack buffer escape)
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
|
|
|
||||||
|
|
@ -145,6 +145,14 @@ pub const VirtualAdvancedTableResult = struct {
|
||||||
/// @deprecated
|
/// @deprecated
|
||||||
previous_row: ?usize = null,
|
previous_row: ?usize = null,
|
||||||
|
|
||||||
|
// =========================================================================
|
||||||
|
// Tips Proactivos (FASE I)
|
||||||
|
// =========================================================================
|
||||||
|
|
||||||
|
/// Tip actual para mostrar en StatusLine (null = sin tip)
|
||||||
|
/// Rota automáticamente cada ~10 segundos (600 frames @ 60fps)
|
||||||
|
current_tip: ?[]const u8 = null,
|
||||||
|
|
||||||
/// Obtiene los cambios como slice (helper para compatibilidad)
|
/// Obtiene los cambios como slice (helper para compatibilidad)
|
||||||
pub fn getRowChanges(self: *const VirtualAdvancedTableResult) []const table_core.PendingCellChange {
|
pub fn getRowChanges(self: *const VirtualAdvancedTableResult) []const table_core.PendingCellChange {
|
||||||
return self.row_changes[0..self.row_changes_count];
|
return self.row_changes[0..self.row_changes_count];
|
||||||
|
|
@ -434,6 +442,20 @@ pub fn virtualAdvancedTableRect(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =========================================================================
|
||||||
|
// Tips Proactivos (FASE I): Rotar tips cada ~10 segundos
|
||||||
|
// =========================================================================
|
||||||
|
list_state.frame_count +%= 1; // Wrap around en overflow
|
||||||
|
|
||||||
|
// Solo mostrar tips si tiene focus y no está editando
|
||||||
|
if (has_focus and !list_state.isEditing()) {
|
||||||
|
// Rotar tip cada TIP_ROTATION_FRAMES frames
|
||||||
|
if (list_state.frame_count % table_core.TIP_ROTATION_FRAMES == 0) {
|
||||||
|
list_state.tip_index = @intCast((list_state.tip_index + 1) % table_core.table_tips.len);
|
||||||
|
}
|
||||||
|
result.current_tip = table_core.table_tips[list_state.tip_index];
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue