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 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
|
||||
// =============================================================================
|
||||
|
|
|
|||
|
|
@ -126,6 +126,9 @@ pub const VirtualAdvancedTableState = struct {
|
|||
/// Frame counter para animaciones
|
||||
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)
|
||||
// =========================================================================
|
||||
|
|
|
|||
|
|
@ -145,6 +145,14 @@ pub const VirtualAdvancedTableResult = struct {
|
|||
/// @deprecated
|
||||
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)
|
||||
pub fn getRowChanges(self: *const VirtualAdvancedTableResult) []const table_core.PendingCellChange {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue