57: Persist window and dialog geometry across sessions#64
Merged
Conversation
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.
ef9a8c3 to
d8a54d6
Compare
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Task-Url: #57