# PLAN: Modularización de table_core.zig **Fecha:** 2025-12-29 **Autor:** Claude (con input de Gemini) **Estado:** En progreso --- ## Objetivo Dividir `table_core.zig` (2115 LOC) en módulos pequeños (<500 LOC) para: - Mejorar eficiencia de trabajo (menos contexto por archivo) - Facilitar debugging focalizado - Mantener compatibilidad con código cliente --- ## Estructura Final ``` zcatgui/src/widgets/table_core/ ├── types.zig # ~150 LOC - Enums, structs config, constantes ├── state.zig # ~250 LOC - CellEditState, NavigationState ├── datasource.zig # ~120 LOC - TableDataSource interface ├── row_buffer.zig # ~180 LOC - Excel-style commit logic ├── keyboard.zig # ~500 LOC - handleEditingKeyboard, processTableEvents ├── navigation.zig # ~250 LOC - Tab calculation, sorting ├── rendering.zig # ~450 LOC - drawRows, drawCells, drawStateIndicator ├── scrollbars.zig # ~150 LOC - Scrollbars vertical/horizontal ├── utils.zig # ~50 LOC - blendColor, startsWithIgnoreCase └── table_core.zig # ~30 LOC - Re-exports todo (compatibilidad) ``` --- ## Mapeo de Contenido Original → Nuevos Archivos | Líneas orig | Contenido | Destino | |-------------|-----------|---------| | 35-47 | table_tips, TIP_ROTATION_FRAMES | types.zig | | 54-125 | TableColors, CellRenderInfo, EditState, RowState | types.zig | | 133-355 | CellEditState, NavigationState, DoubleClickState | state.zig | | 363-480 | drawCellActiveIndicator, drawEditingOverlay, drawCellText, drawStateIndicator | rendering.zig | | 489-765 | ColumnRenderDef, RowRenderColors, DrawRowsConfig, drawRowsWithDataSource | rendering.zig | | 774-995 | NavigateDirection, EditKeyboardResult, handleEditingKeyboard | keyboard.zig | | 1007-1278 | TableEventResult, processTableEvents | keyboard.zig | | 1285-1457 | PendingCellChange, RowEditBuffer, RowCommitInfo, buildCommitInfo | row_buffer.zig | | 1466-1498 | blendColor, startsWithIgnoreCase | utils.zig | | 1503-1706 | TabNavigateResult, CellPosition, calculateNextCell/Prev, planTabNavigation | navigation.zig | | 1715-1757 | SortDirection, toggleSort | navigation.zig | | 1784-1885 | TableDataSource, makeTableDataSource | datasource.zig | | 1893-2010 | VerticalScrollbarParams, HorizontalScrollbarParams, draw* | scrollbars.zig | --- ## Fases de Implementación ### FASE 1: Crear estructura de carpeta - [ ] Crear directorio `table_core/` - [ ] Mover archivo original como backup ### FASE 2: Extraer módulos (uno por uno) - [ ] types.zig - Tipos básicos y constantes - [ ] state.zig - Estados de edición y navegación - [ ] utils.zig - Funciones utilitarias - [ ] datasource.zig - Interface TableDataSource - [ ] row_buffer.zig - Lógica de commit Excel-style - [ ] navigation.zig - Navegación Tab y sorting - [ ] scrollbars.zig - Renderizado de scrollbars - [ ] rendering.zig - Renderizado de filas y celdas - [ ] keyboard.zig - Manejo de teclado ### FASE 3: Crear archivo hub de re-export - [ ] table_core.zig con `pub usingnamespace` para cada módulo ### FASE 4: Verificar compilación - [ ] `zig build` en zcatgui - [ ] `zig build` en zsimifactu ### FASE 5: Commit y documentar - [ ] jj describe + jj new - [ ] Actualizar LAST_UPDATE.md - [ ] jj git push --- ## Dependencias Entre Módulos ``` types.zig ←─────────────────────────────────────┐ ↑ │ state.zig ←──────────────────────────┐ │ ↑ │ │ utils.zig │ │ ↑ │ │ datasource.zig ←─────────────────────┤ │ ↑ │ │ row_buffer.zig ←─────────────────────┤ │ ↑ │ │ navigation.zig ←─────────────────────┤ │ ↑ │ │ scrollbars.zig │ │ ↑ │ │ rendering.zig ←──────────────────────┘ │ ↑ │ keyboard.zig ←──────────────────────────────────┘ ``` --- ## Notas Técnicas - El archivo original `widgets/table_core.zig` se convierte en `widgets/table_core/table_core.zig` - Zig resuelve `@import("table_core.zig")` → busca `table_core/table_core.zig` automáticamente - No se requieren cambios en código cliente (advanced_table, virtual_advanced_table, zsimifactu) --- ## Historial | Fecha | Hora | Acción | Estado | |-------|------|--------|--------| | 2025-12-29 | -- | Plan creado | En progreso | | 2025-12-29 | ~02:00 | Refactorización completada | ✅ COMPLETADO | ## Resultado Final **10 módulos creados:** ``` table_core/ ├── types.zig # 196 LOC ├── state.zig # 175 LOC ├── datasource.zig # 114 LOC ├── row_buffer.zig # 167 LOC ├── keyboard.zig # 270 LOC ├── navigation.zig # 212 LOC ├── rendering.zig # 233 LOC ├── scrollbars.zig # 97 LOC ├── utils.zig # 51 LOC └── table_core.zig # 115 LOC (hub) ``` **Beneficios:** - Ningún archivo >300 LOC (vs 2115 LOC original) - Debugging focalizado: solo leer módulo relevante - Imports actualizados en 7 archivos de widgets - Compilación OK en zcatgui y zsimifactu