Skip to content

feat(#17): Sub-VI con connector pane — implementación completa#63

Merged
anlaco merged 5 commits into
mainfrom
feat/17-subvi-connector
Apr 10, 2026
Merged

feat(#17): Sub-VI con connector pane — implementación completa#63
anlaco merged 5 commits into
mainfrom
feat/17-subvi-connector

Conversation

@anlaco
Copy link
Copy Markdown
Owner

@anlaco anlaco commented Apr 10, 2026

Summary

  • Pin-based connector: los puertos de sub-VI se identifican por número de pin (p1, p2…), con label independiente para display y id para mapeo al Front Panel
  • Compilador: compile-subvi-call genera func-name/exec arg1 arg2 → out-var; compile-body/with-prints corregido (sin compose en bloques anidados)
  • Runner + btn-run: ambos cargan los ficheros .qvi de sub-VIs referenciados antes de ejecutar el body, cargando el context [exec: func [...] [...]] que necesita la llamada
  • Canvas: subvi-port-label convierte 'p1"A" para mostrar el nombre real del puerto en el diagrama; in-ports/out-ports corregidos (precedencia /)
  • File I/O: serializa y carga el connector con formato pin:/label:/id:; #include sin %% doble; load-node-list usa make-subvi-node
  • UI: botón paleta renombrado a "QVI"; request-file/filter recibe block!
  • Ejemplos: suma-subvi.qvi, programa-con-subvi.qvi actualizados; añade programa_con_qvi.qvi creado desde el editor (Run verificado = 130.0)

Test plan

  • 462 tests PASS (red-cli tests/run-all.red)
  • Run en editor con sub-VI → indicador muestra resultado correcto (130.0)
  • red examples/suma-subvi.qvi ejecuta standalone
  • red examples/programa_con_qvi.qvi ejecuta standalone con Front Panel
  • CI en GitHub Actions

Closes #17

🤖 Generated with Claude Code

OpenCodeMCP-BetaTest and others added 5 commits April 10, 2026 01:00
Fase 1 — Modelo y serialización:
- Añadido campo `file` al prototipo de nodo (model.red)
- Helper `load-subvi-connector` carga connector desde .qvi
- Helper `make-subvi-node` crea nodo con file + config
- `serialize-nodes` emite `file:` para nodos subvi
- `load-vi` parsea sección `connector:` del qvi-diagram

Fase 2 — Compilador (parcial):
- Registrado bloque 'subvi en blocks.red
- Función `compile-subvi-call` genera llamadas a sub-VI
- Caso 'subvi en compile-body (headless) y compile-diagram (UI)

Tests: 462 PASS (actualizado a 41 bloques)

Refs: #17
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- compile-diagram: recopila subvi-files y subvi-names para includes
- format-qvi: emite #include de sub-VIs con save/restore de qtorres-runtime
- format-qvi: genera context [exec: func []] para VIs con connector (/subvi)
- compile-subvi-call: usa patrón nombre/exec para llamadas
- save-vi: detecta connector y usa /subvi para generar código apropiado

Arquitectura revisada (D4, D5):
- Caller: #include %subvi.qvi + qtorres-runtime + nombre/exec args
- Callee: nombre: context [exec: func [...]] + standalone guard

Tests: 462 PASS

Refs: #17
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- canvas-render.red: in-ports/out-ports leen de config/connector para nodos 'subvi
- canvas-render.red: renderizado de puertos dinámicos según connector
- canvas-dialogs.red: función palette-add-subvi con file picker
- canvas-dialogs.red: botón "Sub-VI" en la paleta

El sub-VI se renderiza con:
- Label "SUBVI" + nombre de función
- Puertos de entrada/salida dinámicos desde el connector
- Colores según el tipo de bloque 'function

Tests: 462 PASS

Refs: #17
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Actualizados los ejemplos para usar la nueva arquitectura:

suma-subvi.qvi:
- Código generado usa context [exec: func [A B] [...]]
- Standalone guard con view layout para ejecución directa
- Helpers de runtime incluidos

programa-con-subvi.qvi:
- Código generado con #include %suma-subvi.qvi
- Patrón save/restore de qtorres-runtime
- Llamadas a sub-VI: suma/exec args
- Modo headless y UI con either

Tests: 462 PASS

Refs: #17
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…bels

- runner.red: carga do subvi/file antes de compile-body; try devuelve none
  para evitar error "result has no value" cuando el código termina en print
- qtorres.red btn-run: carga contextos sub-VI igual que runner antes de do code
- compiler.red compile-body/with-prints: elimina compose/deep, construye
  bloque print con append/only para evitar error en bloques anidados
- canvas-render.red: corrige precedencia (length? inputs) / 3; añade
  subvi-port-label que convierte 'p1 → "A" para mostrar labels en canvas
- model.red load-subvi-connector: lee title desde Red header (src/2), no meta
- file-io.red: serializa/carga connector con formato pin/label/id;
  corrige #include sin %% duplicado; load-node-list usa make-subvi-node
- canvas-dialogs.red: request-file/filter recibe block! ["QVI" %*.qvi]
- ejemplos: suma-subvi.qvi y programa-con-subvi.qvi actualizados a pin-format;
  añade programa_con_qvi.qvi (creado desde el editor, Run verificado = 130.0)
- CLAUDE.md: marca #17 completado, próximo paso #18

462 tests PASS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@anlaco anlaco merged commit a86dae1 into main Apr 10, 2026
1 check passed
@anlaco anlaco deleted the feat/17-subvi-connector branch April 10, 2026 07:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sub-VI con connector pane — VIs reutilizables como bloques

1 participant