Files
NeitzelFXDesigner/README.md
T

9.1 KiB
Raw Blame History

Neitzel FX Designer

Shared Scene Builder Kit designer for NeitzelLib FX, with minimal standalone and IntelliJ hosts.

Current state

The first workflow is runnable in both hosts: Build and Refresh publishes immutable snapshots; authenticated target workers discover examples and render parent/Component FXML drafts into the shared Kit canvas. Source and supported canvas edits use host-owned documents and undo/redo. See the connected workflow for architecture, launch commands, evidence and limits.

The repository builds six shared Maven modules, a Maven capture plugin, a separate Model metadata processor and an IntelliJ adapter plugin. Application code runs only in target JVMs. The shared UI now applies source-preserving edits, supports nested/anonymous Components and fx:root bodies, and provides Source/Design/Split modes. Retained target sessions, target sizing, interactive preview and Component/Row navigation now extend that workflow. The shared binding discovery browser now lists declared Model paths and direction-aware target compatibility. The DirectBinding inspector creates, edits and removes declarations through source-preserving host Undo/Redo. Shared Converter discovery and binding validation now adds capability-based proposals, document diagnostics and preview gating. Custom ViewModel discovery and Computed-binding validation now follow the explicitly selected Controller or Component in both hosts. The Computed-binding inspector now creates, changes and removes Computed declarations with method suggestions and shared source-preserving Undo/Redo. The Repeat inspector adds source-preserving collection declarations with host Undo/Redo and collection/Component compatibility discovery. The shared Table/Column inspector adds source-preserving Table configuration, ordered Column authoring and explicit Row navigation, now with Table-specific compatibility and declared Row alignment discovery. The shared reference-safe Structure editor now renames identifiers, copies subtrees with fresh identifiers and deletes associated bindings through source-preserving host Undo/Redo, including destination validation for cross-View paste. The shared Problems panel and IntelliJ Problems integration now expose current diagnostics with authoritative FXML navigation and editor-scoped cleanup. Shared source highlighting and diagnostic quick fixes now add explicit source-preserving corrections with host Undo/Redo and native IntelliJ Alt+Enter actions. Opt-in generated Model metadata now feeds the shared discovery and binding authoring workflows from immutable build snapshots. Opt-in generated Java ViewModels and registry defaults now reuse the runtime storage and identity rules, with shared discovery in both hosts. Reviewed FXML View generation now proposes editable forms from shared metadata, validates explicit choices and creates new documents in both hosts. The first bundled standalone distribution adds a relocatable macOS app and ZIP with its Java runtime and Kit; release signing and wider platform qualification remain later work.

Configuration 1.0 schemas, context selection, local JDK mappings and draft protocol validation are now executable. See configuration and protocol for formats and validation rules.

The shared Build and Refresh workflow now builds isolated reactor copies and publishes immutable, leased snapshots, with explicit save approval and last-successful-build selection.

The preview API and target adapter are validated with real classpath and named-module NeitzelLib applications, including bindings, rendering, readiness and cleanup. Each preview session requires a fresh target JVM.

The Component builder fix is integrated in NeitzelLib main. A verified local development snapshot is recorded with source/artifact identity; a corrected released version is still unestablished. NeitzelLib sources are not copied here; the narrow Kit text-selection patch has explicit provenance and regression coverage.

Validate the foundation

Requirements: JDK 25 for builds, JDK 21 for target linkage validation, Python 3.10+, the recorded local NeitzelLib artifacts, and IntelliJ IDEA SDK build 263.7307.200. Downloads require network access. Set JAVA_HOME to JDK 25 and supply explicit local paths:

python3 scripts/check-bootstrap.py --idea-home "$IDEA_HOME" --target-java-home "$TARGET_JAVA_HOME"

On macOS IDEA_HOME points to the IDE application's Contents directory. The current SDK check uses its macOS product-info layout; other platforms are not qualified. The command checks runtime artifact hashes, clean-builds/installs the Maven modules, tests the adapters, checks bytecode baselines, runs target linkage under the supplied target JDK, builds the plugin ZIP, runs the real Maven snapshot and target-preview fixtures, checks the connected workflow in both document adapters and native standalone Kit windows, and validates documentation. Real registered IntelliJ UI qualification is a separate command below. It does not install or publish NeitzelLib.

Maven is pinned to 3.9.11 (Wrapper 3.3.4); the separate IntelliJ build uses Gradle 9.1.0 and IntelliJ Platform Gradle Plugin 2.20.1. Wrapper distributions have pinned checksums. Shared-module-only validation is ./mvnw -B -ntp clean verify; it does not qualify IntelliJ packaging. Plugin output is under designer-intellij/build/distributions/.

Run the minimal hosts

For a bundled runtime and native standalone launcher, see packaging and automated qualification. The commands below remain development launchers.

After the full build, launch a disposable fixture with either command; add --mode modulepath for named modules:

python3 scripts/run-fixture-host.py standalone --java-home "$JAVA_HOME" --target-java-home "$TARGET_JAVA_HOME"
python3 scripts/run-fixture-host.py intellij --java-home "$JAVA_HOME" --target-java-home "$TARGET_JAVA_HOME" --idea-home "$IDEA_HOME"

The IntelliJ launcher isolates settings/plugins and disables bundled Scene Builder embedding while retaining JavaFX/FXML language support. Select Neitzel Designer, then Build and Refresh. Both hosts use JavaFX/Kit 26, with the fixture application running separately on Java 21 / JavaFX 21.0.7.

Qualify the registered editor and loaded JavaFX natives in real disposable IDE windows:

python3 scripts/check-ide-host.py --java-home "$JAVA_HOME" --target-java-home "$TARGET_JAVA_HOME" --idea-home "$IDEA_HOME"

The save/startup reliability follow-up covers queued IntelliJ VFS writes and host-revision/validation races, including repeated registered module-path qualification. Add --mode modulepath --repeat 3 to the IDE runner to repeat that gate.

Worker startup cancellation and ready-preview cleanup are covered by the native lifecycle regression; host checks also reject new native JVM crash reports.

These graphical checks require a macOS desktop session; other platforms are not qualified. See workflow limits before using arbitrary application documents.

Implementation references

The canonical checkout is /Volumes/PlanckSSD/KI/java/NeitzelFXDesigner. Its Git remote is ssh://git@gitea.neitzel.de:2222/konrad/NeitzelFXDesigner.git and its default branch is main.

Validate the installed corrected development runtime separately with python3 scripts/check-neitzellib-artifact.py. This requires the recorded local artifacts; the full check also verifies these hashes.