GDTF Editor UI Layout

This contract defines Fixture Edit and Truss Edit layout. Layout changes do not change GDTF parsing, apply transactions, edit-session ownership, adapters, undo ordering, preview loading, metadata parsing, mode parsing, or channel parsing.

Shared visual conventions

  • GDTF editor dialogs use gui/gdtf/gdtf_editor_visual_metrics.h for DPI-aware margins, pane gaps, section spacing, compact form spacing, minimum pane sizes, preview height, and action-row margins.
  • Reusable GDTF sections use a flat title, divider line, and content host instead of nested static-box borders.
  • The reusable GdtfEditorPanel remains presentation-only and owns exactly one metadata, type identity, physical properties, and modes panel.
  • Dialog layout persistence is host-owned through gui/gdtf/gdtf_editor_layout_preferences.*, not inside reusable child panels.

Fixture Edit layout

Fixture Edit uses nested splitters:

  1. contextSplitter: left compact Fixture instance pane vs. the rest of the workspace.
  2. visualSplitter: GDTF workspace vs. visual-resource pane.
  3. GdtfEditorPanel internal splitter: overview pane vs. Modes and Channels workspace pane.

The Fixture instance pane is a vertically scrollable compact form titled Fixture instance. It is intended to open around 300 logical pixels wide and remains user-resizable.

The Fixture GDTF section order is configured with typed placements:

  • Overview pane: Fixture type, GDTF metadata, Physical properties.
  • Workspace pane: Modes and channels.

The visual resources are native notebook tabs:

  • Preview: All fixture is the default. A compact Geometry/Model selector shows the selected Geometry subtree in Solo mode using the shared loaded hierarchy and assembled world transforms. Stable node indices distinguish repeated Model instances. The root PNG/SVG thumbnail stays below the 3D preview.
  • Symbols: Standard GDTF uses one Model selector, not a tab per Model. The selected Model exposes its Name, File, dimensions, PrimitiveType, Geometry reference count and exact Top/Front/Side originals, with paths and offsets in tooltips. Present-but-unsupported previews remain distinct from missing or malformed resources. The independent Perastage project (PSTG) group remains fixture-wide Top/Front/Side/Bottom with generated/override provenance. Standard views never use another Model, view, Top fallback or project symbol.

GdtfNode3D carries modelName/modelFile and geometryName for inspection without new XML parsing. GeometryReference instances retain their own displayed name while stableName, node order, transforms and render identity remain unchanged. Copying/caches retain the fields; render-content hashes intentionally exclude this descriptive metadata so stable render identity does not change.

The optional GDTF FixtureType Thumbnail is a root-level .png or .svg resource and remains on the Preview page; it is independent from model symbol views. Manual symbol Apply updates a project override in PSTG, including unsaved scenes, rather than rewriting GDTF. Switching tabs does not mutate or recreate resources. See the fixture symbol resource contract.

Truss Edit layout

Truss Edit uses a compact default height and nested splitters:

  1. contextSplitter: compact MVR instance pane vs. the right workspace.
  2. GdtfEditorPanel internal splitter: Truss type and metadata overview vs. a workspace column containing the 3D Preview above Physical properties.

The MVR instance pane is a vertically scrollable compact form titled MVR instance.

The Truss GDTF section order is configured with typed placements:

  • Overview pane: Truss type, GDTF metadata.
  • Workspace pane: 3D Preview host followed by Physical properties.

Modes remain hidden in Truss Edit.

Metadata and Modes presentation

GdtfMetadataPanel now gives the read-only Description field more vertical room and keeps static values wrapped for narrow overview panes. It still displays the unavailable fallback and does not add editing or new parsed fields.

GdtfModesPanel provides the mode selector, read-only channel count, compact channel summary, and the dedicated hierarchical mode/channel browser without changing the surrounding dialog ownership.

Persistence and clamping

Layout preferences use normalized splitter ratios, dialog sizes, and the selected two-tab Fixture visual pane under independent keys:

  • Fixture: gdtf_editor/fixture/dialog_width, dialog_height, context_ratio, visual_ratio, gdtf_ratio, and visual_tab.
  • Truss: gdtf_editor/truss/dialog_width, dialog_height, context_ratio, preview_ratio, and gdtf_ratio.

Saved sizes are clamped to the current display work area before restore. Splitter ratios are clamped so panes cannot restore fully collapsed after monitor or DPI changes.

Responsive and DPI expectations

All new spacing and minimum-size constants are converted with FromDIP() through the shared metrics helper. The intended minimums keep the dialogs usable at approximately 1366x768 while scaling cleanly at 100%, 125%, and 150% DPI.

Mode and channel browser layout

The dedicated workspace pane contains the hierarchical mode/channel browser. A compact read-only channel summary remains below Physical properties for quick scanning. The browser omits the experimental Channel function column; normalized function labels and fine/ultra-fine byte rows remain available in the summary.

Wheel and Attribute Inspector layout

The lower GDTF mode browser area may be split into details, active mapping, preview, and ordered WheelSlot gallery regions. Only normalized layout ratios are persisted through the existing layout-preferences helper. Slider values and resolved resources are not project data. Resource previews are loaded lazily and cached by source, archive entry, and target size.

Fixture visual-column wheel page

Fixture Edit exposes the Wheel and Attribute Inspector in the visual column as a GDTF wheels notebook page. The page shows the active DMX mapping and an ordered wheel-slot list while preserving the existing Preview and Symbols pages.

Wheel preview thumbnails

The GDTF wheels visual-column page includes an active preview area and an ordered thumbnail list. Gobo and graphic-wheel media are shown as static images, while color/filter-only slots are shown as approximate swatches.

Back to top