feat(types): Type Editor panel — CRUD de tipos en vivo (issue 0007)
- views_type_editor: panel "Types" con tabs Entities/Relations. Entities: name, color picker, shape combo, icon (ti-* + cp preview), principal_field combo, tabla de Fields (string/int/float/bool/date/url/enum) con required y enum values CSV; up/down/X por fila. Relations: name, color, style. Footer Save / Reload from disk + indicador dirty + error inline. - views_type_editor_delete_modal: confirm con conteo de entidades en uso. - types_registry: shape_name() + shape: emit en types_save_yaml para round-trip estable de la cosmetica editada en UI. - main.cpp: panel "Types" en g_panels; init types_draft tras load_input; want_types_save -> save + apply_types_yaml + rebuild atlas + bind + refresh inspector caches; want_types_reload simetrico; conteo de uso desde operations.db cuando se abre el modal de delete.
This commit is contained in:
@@ -137,6 +137,24 @@ struct AppState {
|
||||
std::vector<std::string> insp_tag_suggestions;
|
||||
std::vector<std::string> insp_type_options;
|
||||
|
||||
// ---- Type Editor (issue 0007) ------------------------------------------
|
||||
// Draft del editor de tipos. Se inicializa con una copia de parsed_types
|
||||
// tras cargar el grafo. Save reescribe `types.yaml` y dispara
|
||||
// apply_types_yaml + rebuild de IconAtlas.
|
||||
bool panel_type_editor = false;
|
||||
ParsedTypes types_draft;
|
||||
bool types_dirty = false;
|
||||
int te_tab_idx = 0; // 0=Entities 1=Relations
|
||||
int te_entity_idx = -1; // seleccion entity
|
||||
int te_relation_idx = -1; // seleccion relation
|
||||
bool want_types_save = false;
|
||||
bool want_types_reload = false;
|
||||
int te_pending_delete_e = -1; // entity idx pendiente de confirmar
|
||||
int te_pending_delete_r = -1;
|
||||
int te_delete_use_count = 0; // entidades afectadas
|
||||
bool show_te_delete_modal = false;
|
||||
std::string types_save_error; // mensaje a renderizar bajo Save
|
||||
|
||||
// ---- Filtros y busqueda FTS5 (issue 0009) ------------------------------
|
||||
// Modos: 0 = highlight (no-match dimmed), 1 = hide (no-match invisible).
|
||||
enum FilterMode { FM_HIGHLIGHT = 0, FM_HIDE = 1 };
|
||||
@@ -205,6 +223,18 @@ EntityRecord views_inspector_build_record(const AppState& app);
|
||||
// al cambiar de proyecto.
|
||||
void views_inspector_clear_draft(AppState& app);
|
||||
|
||||
// ---- Type Editor (issue 0007) -------------------------------------------
|
||||
|
||||
// Renderiza el panel "Types" — tabs Entities/Relations, lista a la izquierda
|
||||
// con +/-, panel de edicion a la derecha. Marca app.types_dirty al cambiar y
|
||||
// activa app.want_types_save / app.want_types_reload desde el footer.
|
||||
void views_type_editor(AppState& app);
|
||||
|
||||
// Modal de confirmacion para borrar un tipo en uso. Se abre cuando
|
||||
// app.show_te_delete_modal = true. main.cpp es responsable de poblar
|
||||
// te_delete_use_count via consulta a operations.db antes de mostrarlo.
|
||||
bool views_type_editor_delete_modal(AppState& app);
|
||||
|
||||
// ---- Filter helpers (issue 0009) -----------------------------------------
|
||||
|
||||
// True si el filtro tiene query no vacia o al menos un tag activo.
|
||||
|
||||
Reference in New Issue
Block a user