Skip to content

Fix window size, file browser, and add parameter filtering with checkboxes - #2

Merged
lucaromagnoli merged 19 commits into
mainfrom
fix-window-size-and-file-browser
Nov 30, 2025
Merged

lucaromagnoli merged 19 commits into
mainfrom
fix-window-size-and-file-browser

Conversation

@lucaromagnoli

Copy link
Copy Markdown
Owner

This PR includes several improvements:

  • Parameter filtering: Filter to only UI-exposed parameters (reduces from 2099 to 19 for GAINSTATION2)
  • Visual checkboxes: Add clear checkbox UI for parameter selection
  • Window fixes: Fix window size and visibility issues
  • File browser: Fix FileChooser lifetime issues with async callbacks
  • Plugin loading: Improve error messages and VST3 bundle detection
  • macOS app bundle: Proper app bundle configuration for dock icon

Fixes issues with:

  • Plugin loading errors
  • Window not appearing or appearing at wrong size
  • File browser not working
  • Confusing parameter selection UI
  • Too many parameters shown (internal parameters)

- Fix MainWindow to use explicit size (1200x800) instead of getWidth/getHeight
- Add toFront(true) to ensure window appears on top
- Fix FileChooser lifetime by using shared_ptr to keep it alive during async callback
- Fix FFT constructor calls (remove Order parameter)
- Fix processBlock signature for JUCE 8.0 (single buffer parameter)
…undles

On macOS, VST3 plugins are bundles (directories), not files.
existsAsFile() returns false for bundles, causing false 'file not found' errors.
Use exists() which works for both files and directories.
- Add errorMessageOut parameter to loadPluginInstance to return detailed errors
- Show specific error messages in GUI (format not recognized, description failed, etc.)
- Update CLI to also use detailed error messages
- Better diagnostics for plugin loading failures
- Convert executable to macOS app bundle using MACOSX_BUNDLE
- Set proper bundle identifiers and metadata
- Update Makefile to handle .app bundle
- App will now show dock icon when running
- Add uiOnly parameter to buildParameterMap to filter parameters
- Filter out meta parameters, non-automatable, and MIDI CC parameters
- GUI now shows only UI-exposed parameters (19 for GAINSTATION2 vs 2099 total)
- CLI also filters to UI-exposed parameters for cleaner output
- Measurement engine still uses all parameters for completeness
- Replace text checkmark with visual checkbox component
- Checkboxes show checked/unchecked state clearly
- Selected parameters have blue filled checkbox with white checkmark
- Unselected parameters show empty checkbox
- Makes it much clearer which parameters are selected
- Replace drawTickBox call with manual checkbox drawing
- Draw checkbox border and fill manually
- Draw checkmark using Path for better control
- Fixes issue where weird characters were appearing instead of checkboxes
- Disable ListBox row selection to prevent confusion when clicking checkboxes
- Fix Select All button to properly resize and fill selectedParameters vector
- Add bounds checking in listBoxItemClicked to prevent out-of-bounds access
- Remove rowIsSelected highlighting that was confusing users
- Ensure selectedParameters vector is always the correct size

Fixes:
- Select All button now works correctly
- Clicking a checkbox no longer changes which parameter is selected
- More reliable checkbox toggling
- Add explicit repaint() calls after updating selectedParameters
- Fixes issue where checkboxes don't update visually until scrolling
- UI now updates in real-time when clicking Select All/Deselect All or individual checkboxes
- Use scrollToEnsureRowIsOnscreen to force repaint of visible items
- Restore scroll position after update to avoid jarring movement
- Fixes issue where checkboxes don't update until user scrolls manually
- Use repaintRow() to repaint each visible row after selection changes
- Fix getRowContainingPosition() call signature (2 args, not 3)
- Repaint all visible rows when Select All/Deselect All is clicked
- Repaint specific row when individual checkbox is toggled
- Should fix UI not updating until scroll issue
- Add run-gui-debug target to easily run debug builds
- Update build-debug to show executable locations
- Update help text to show both run-gui and run-gui-debug options
- Create a new plugin instance for the measurement thread
- Prevents thread safety issues from accessing pluginInstance from background thread
- Add log flushing to ensure logs appear immediately
- Should fix app freezing during measurement
- Change run-gui-debug to run executable directly instead of using 'open'
- This allows console output (std::cerr) to be visible in terminal
- Helpful for debugging measurement issues
- Add DEBUG compile definition for debug builds in CMakeLists.txt
- Set default plugin path to GAINSTATION2.vst3 in debug builds only
- Release builds will still have empty default path
- Add DEBUG=1 compile definition when building in Debug mode
- Allows code to detect debug builds for dev-only features like default plugin path
- Update progress label during run grid generation
- Show warning if too many runs (>100k) are generated
- Add progress callback to runMeasurementGrid to update UI
- Show current run number and progress bar during measurement
- Makes measurement progress much more visible to user
@lucaromagnoli
lucaromagnoli merged commit e0afb25 into main Nov 30, 2025
1 check passed
@lucaromagnoli
lucaromagnoli deleted the fix-window-size-and-file-browser branch November 30, 2025 19:52
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