Frame widgets are container elements that help organize and group other widgets in the Virtual Console. Frames provide visual organization, page management, and special behaviors like solo mode. They are implemented inDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/mcallegari/qlcplus/llms.txt
Use this file to discover all available pages before exploring further.
ui/src/virtualconsole/vcframe.h and vcframe.cpp.
Overview
Frames serve multiple purposes in Virtual Console:- Organization: Group related controls together visually
- Hierarchy: Create nested widget structures
- Pages: Implement multi-page interfaces
- Enable/Disable: Control entire groups of widgets at once
- Solo Mode: Ensure only one child function runs at a time (VCSoloFrame)
Frame Types
Standard Frame
Basic container for organizing widgets:vcframe.h:59-66
Standard frames:
- Can contain any widget type
- Support multipage mode
- Can be enabled/disabled as a group
- Provide visual grouping with borders
- Can be collapsed to save space
Solo Frame
Specialized frame with exclusive function control:vcsoloframe.h:40-98
Solo frames ensure:
- Only one child widget’s function runs at a time
- Starting a new function stops sibling functions
- Useful for mutually exclusive lighting states
- Optional mixing mode for overlapping functions
Frame Header
Frames can display an optional header bar:vcframe.h:111-113, vcframe.h:97
The header contains:
- Caption Label: Frame title
- Collapse Button: Hide/show frame contents
- Enable Button: Enable/disable entire frame
- Page Controls: Previous/next buttons for multipage frames
The header is created through
createHeader() which sets up a horizontal box layout containing all header components.Collapsible Frames
Frames can be collapsed to save screen space:vcframe.h:119-127
When collapsed:
- Only the header is visible
- Contents are hidden but preserved
- Frame height is minimized
- Original size is stored for restoration
- Useful for temporary hiding of infrequently used controls
Enable/Disable State
Frames can disable all child widgets:vcframe.h:91, vcframe.h:115-136
Disabled frames:
- Gray out all child widgets
- Prevent child widgets from accepting input
- Stop child functions when disabled
- Provide enable button in header for quick toggle
setDisableState() method.
Multipage Mode
Frames support multiple pages of widgets:vcframe.h:155-170
Page Management
Widgets are associated with specific pages:vcframe.h:173-194
How it works:
- Each child widget is assigned to one or more pages
- Only widgets for current page are shown
- Changing pages hides/shows appropriate widgets
- Page controls appear in frame header
- Optional looping from last to first page
Page Controls
The multipage frame header includes:- Previous Button: Go to previous page
- Page Combo: Dropdown showing current page number
- Next Button: Go to next page
vcframe.h:187-188
Page Shortcuts
Keyboard shortcuts for quick page navigation:vcframe.h:158-161
Page shortcuts allow:
- Jump directly to specific pages
- Fast page switching during shows
- External input mapping to page changes
Keyboard Shortcuts
Frames support several keyboard shortcuts:vcframe.h:223-239
Shortcut types:
- Enable/Disable: Toggle frame enabled state
- Next Page: Advance to next page
- Previous Page: Go to previous page
- Page Shortcuts: Jump to specific page numbers
External Input
Frames respond to external input on multiple channels:vcframe.h:69-72
Each input source can be mapped to:
- MIDI notes/controllers
- OSC messages
- ArtNet/sACN channels
- Other input protocols
vcframe.h:255-259
Solo Frame Behavior
Solo frames implement special function control:Solo Mixing
vcsoloframe.h:92-93
- Mixing Off: Only one function runs (strict solo)
- Mixing On: Multiple functions can run but new ones still stop old ones
Exclude Monitored
vcsoloframe.h:97-98
When enabled:
- Functions started outside solo frame are not stopped
- Only functions controlled by solo frame children are affected
- Useful when mixing solo frame with other controls
Function Connection
Solo frames connect to child widget signals:vcsoloframe.h:70, vcsoloframe.h:86
The solo behavior:
- Child widget emits
functionStarting()signal - Solo frame receives signal in
slotWidgetFunctionStarting() - Solo frame stops all other children’s functions
- New function starts
Submaster Integration
Frames can contain sliders in submaster mode:vcframe.h:206-210
This allows:
- Group intensity control for child widgets
- Submasters controlling widgets within frame
- Cascading intensity adjustments
Frame Appearance
Frames support standard widget appearance options:Colors
vcframe.h:106-109
- Frame caption color
- Header background color
- Border color (if frame style is set)
Font
vcframe.h:100-103
Applied to frame caption in header.
Frame Style
Inherited fromVCWidget:
- None: No visible border
- Sunken: 3D inset appearance
- Raised: 3D raised appearance
XML Persistence
Frame configuration example:AllowChildren: Must be true for framesShowHeader: Display frame headerShowEnableButton: Show enable/disable buttonDisabled: Initial disable stateMultipage: Multi-page configurationMixing: Solo frame mixing modeExcludeMonitored: Solo frame monitored function handling
