Skip to content

57: Persist window and dialog geometry across sessions#64

Merged
meduzapat merged 3 commits into
developmentfrom
task_57-Persist_window_and_dia
Jun 7, 2026
Merged

57: Persist window and dialog geometry across sessions#64
meduzapat merged 3 commits into
developmentfrom
task_57-Persist_window_and_dia

Conversation

@meduzapat

Copy link
Copy Markdown
Owner

Task-Url: #57

  • Added persistence of window and dialog sizes across sessions.
  • Added persistence of main window on-screen position across sessions.
  • First-run and missing geometry file are handled gracefully, windows fall back to their built-in defaults.
  • Stale entries from removed or renamed dialogs are cleaned out automatically.
  • Geometry file is only written when something actually changed.

meduzapat added 3 commits June 7, 2026 08:43
Initial alpha release: Complete LEDSpicerUI v0.0.15-alpha.1

- Build system setup (CMake 3.16+)
- Full GTKmm-based UI implementation
- Test suite with GTest integration
- CI/CD pipeline with automated testing
- Documentation and packaging foundation

* LEDSpicerUI — Program Component done

Total components: **72** (5 top-level · 7 config · 17 Ui · 24 Storage ·
19 DataDialogs)

- `LEDSpicerUI` — Application entry point and main function namespace.
- `XMLHelper` — XML document parser with validation and helper
utilities.
- `Values` — String-keyed map wrapper for flexible data storage and type
conversion.
- `Defaults` — Static configuration data, device/restrictor/input info,
and utility functions.
- `ThemeManager` — Manages theme selection and application.

- `Settings` — Central singleton managing all persistent and volatile
application settings.
- `SettingsFile` — Handles UI configuration file I/O persistence.
- `ConfigFile` — Reads `ledspicer.conf` configuration data.
- `ProjectFile` — Base class for project-based XML file parsing and
saving.
- `InputFile` — Parses input XML files with sources and maps.
- `ProfileFile` — Parses profile XML files with linked
elements/groups/animations.
- `AnimationFile` — Parses animation XML files with actors.

- `MainWindow` — Application main window with tabs and configuration
editors.
- `Message` — Dual-purpose error/info dialog and throwable exception
class.
- `StatusBar` — Transient status messages with auto-dismiss and queuing.
- `GladeDialog` — Template base for Glade-loaded dialogs using CRTP.
- `SingletonDialog` — Template for singleton dialog pattern
implementation.
- `DialogProject` — Project creation and selection dialog.
- `DialogImport` — File selection dialog for importing configurations.
- `DialogColors` — Color picker and color button management.
- `DialogSettings` — Settings dialog for binary path, data directory,
and theme.
- `DialogPrompt` — Shared prompt dialog for directory, group, and
element naming.
- `DirectoryNavigator` — Base controller for directory tree navigation
and management.
- `InputDirectoryNavigator` — Specialized navigator for input file
directories.
- `ProfileDirectoryNavigator` — Specialized navigator for profile file
directories.
- `AnimationDirectoryNavigator` — Specialized navigator for animation
file directories.
- `OrdenableFlowBox` — Reorderable flow container with up/down button
support.
- `OrdenableListBox` — Reorderable list container with sorting and
checkbox support.
- (`ThemeManager` listed top-level — used here)

- `Data` — Base class for all serializable data objects with XML output.
- `DirNode` — Structural mixin for objects in directory trees with
identity tracking.
- `DirectoryEntry` — Directory node in navigator tree, never serialized.
- `Parent` — Mixin for data owners of child BoxButtonCollections.
- `BoxButton` — Flow box child wrapping Data with label and buttons.
- `BoxButtonCollection` — Collection managing BoxButton items with
ordering.
- `CollectionHandler` — Global registry and dependency tracker for data
collections.
- `SensitivityTracker` — Mixin syncing widget sensitivity with
collection size.
- `Selection` — Button wrapper for selected data objects.
- `Link` — Data pointer with optional extra fields for references.
- `Device` — Hardware device with attached elements.
- `Element` — Single element (LED/strip/solenoid) on a device.
- `Group` — Named group of linked elements.
- `Restrictor` — Hardware restrictor with player mappings.
- `RestrictorMap` — Player-to-restrictor mapping entry.
- `Process` — Process lookup entry for ROM name detection.
- `Profile` — Profile configuration file with link collections and
transitions.
- `Transition` — Per-profile transition record with type-dependent
settings.
- `Animation` — Animation configuration file owning ordered actor
children.
- `Actor` — Single actor inside an animation with type-dependent fields.
- `Input` — Input configuration file owning sources and linked maps.
- `InputSource` — Input source inside an input file owning maps.
- `InputMap` — Single input map entry linking trigger to element/group.
- `InputMapLink` — Linked-map group owned by an input.

- `DialogForm` — Base for all data-editing dialogs with form lifecycle.
- `DialogFormHost` — Intermediate base for type-selector-driven dialogs.
- `DirectoryAware` — Pure mixin tracking active directory for file-based
dialogs.
- `DialogSelect` — Generic link-selection picker with multiple
selectable items.
- `DialogLinkEditor` — Generic dialog for editing extra fields on links.
- `DialogDevice` — Device editor with type-selected element management.
- `DialogElement` — LED/solenoid/strip element editor with pin layout
UI.
- `DialogGroup` — Group editor with element link selector.
- `DialogRestrictor` — Restrictor editor with type and player mapping
support.
- `DialogRestrictorMap` — Player-to-restrictor mapping editor.
- `DialogProcess` — ROM process lookup entry dialog.
- `DialogProfile` — Profile editor with transition and four link
selectors.
- `DialogTransition` — Per-profile transition editor with type and
settings.
- `DialogAnimation` — File-level animation dialog with ordered actor
collection.
- `DialogActor` — Type-switched dialog for animation actors with
per-type UI.
- `DialogInput` — Input file editor with type-selected source and map
management.
- `DialogInputSource` — Input source (device/hardware) selector with
/dev/input scan.
- `DialogInputMap` — Input trigger-to-element/group mapping editor.
- `DialogInputLinkMaps` — Linked-map group manager for multi-trigger
sequences.

* Rename Ordenable components to Sortable and update references
Task-Url: #57

* Added persistence of window and dialog sizes across sessions.
* Added persistence of main window on-screen position across sessions.
* First-run and missing geometry file are handled gracefully, windows
fall back to their built-in defaults.
* Stale entries from removed or renamed dialogs are cleaned out
automatically.
* Geometry file is only written when something actually changed.
@meduzapat meduzapat force-pushed the task_57-Persist_window_and_dia branch from ef9a8c3 to d8a54d6 Compare June 7, 2026 21:49
@meduzapat meduzapat merged commit c008818 into development Jun 7, 2026
1 check passed
@meduzapat meduzapat deleted the task_57-Persist_window_and_dia branch June 7, 2026 22:17
meduzapat added a commit that referenced this pull request Jun 8, 2026
Task-Url: #57

* Added persistence of window and dialog sizes across sessions.
* Added persistence of main window on-screen position across sessions.
* First-run and missing geometry file are handled gracefully, windows
fall back to their built-in defaults.
* Stale entries from removed or renamed dialogs are cleaned out
automatically.
* Geometry file is only written when something actually changed.
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.

1 participant