Files
graph_explorer/data.h
T
egutierrez b767b5b85e feat: graph_explorer app — agnostic operations.db viewer (issue 0049k)
App C++ ImGui que abre cualquier operations.db del registry y lo visualiza
como grafo con shapes/iconos/layouts/filtros/labels.

Composicion del registry:
- viz/graph_renderer + graph_force_layout(_gpu) + graph_layouts +
  graph_viewport + graph_labels + graph_icons + graph_sources
- core: toolbar, modal_dialog, select, text_input, tree_view, page_header,
  fullscreen_window, button, badge, empty_state

Capas:
- data.{h,cpp}    — dispatcher GraphLoadFn (operations hoy; json/graphml manana).
- types_registry.{h,cpp} — parser YAML minimal + tabler_codepoint_by_name +
  apply_types_yaml + IconAtlas builder.
- views.{h,cpp}   — Toolbar, Legend, Inspector, Stats, modal Filters/Open.
- layout_store.{h,cpp} — graph_explorer.db SQLite con tabla layouts(graph_hash,
  node_id, x, y, pinned, updated_at). UPSERT por nodo.
- main.cpp        — CLI (--input/--types/--layout) + fn::run_app + bucle
  force layout (CPU/GPU toggle) + render con 3 columnas (Legend / Viewport /
  Inspector+Stats).

examples/types.yaml: 10 entidades OSINT (Person/Email/Domain/Phone/Org/IBAN/
Account/Document/Address/Url) + 5 relaciones (owns/knows/located_in/
transfers_to/member_of) con shapes Tabler reales.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 00:13:59 +02:00

28 lines
823 B
C++

#pragma once
#include "viz/graph_sources.h"
#include "viz/graph_types.h"
namespace ge {
enum InputKind {
INPUT_NONE = 0,
INPUT_OPERATIONS,
// Futuro: INPUT_JSON, INPUT_JSONL, INPUT_GRAPHML, ...
};
struct InputArgs {
InputKind kind = INPUT_NONE;
const char* uri = nullptr; // path al SQLite (operations) o al fichero
};
// Dispatcher de sources. Devuelve true si la carga succeeded; en cualquier
// caso `stats` se rellena (errors > 0 ante fallo).
bool load_graph(const InputArgs& args, GraphData* out, graph::GraphLoadStats* stats);
// Reload helper — usa la misma uri que la ultima `load_graph` exitosa.
// Llama a `graph_free(out)` y vuelve a invocar `load_graph(args, out, stats)`.
bool reload_graph(const InputArgs& args, GraphData* out, graph::GraphLoadStats* stats);
} // namespace ge