Vital
|
A UI component that lists and manages the wavetable sources and modifiers. More...
#include <wavetable_component_list.h>
Classes | |
class | Listener |
Interface for objects wanting to know when the component list changes. More... | |
Public Types | |
enum | ComponentRowMenu { kRowCancel = 0 , kReset , kMoveUp , kMoveDown , kRemove } |
Menu options for component rows. More... | |
Public Member Functions | |
WavetableComponentList (WavetableCreator *wavetable_creator) | |
Constructs a WavetableComponentList for managing sources and modifiers. | |
void | clear () |
Clears the list of sources and modifiers. | |
void | init () |
Initializes the component list after construction. | |
void | resized () override |
Overridden to layout and refresh the UI. | |
void | paintBackground (Graphics &g) override |
Overridden to paint the background and related elements. | |
void | addListener (Listener *listener) |
Adds a listener interested in component changes. | |
void | setRowHeight (int row_height) |
Sets the height of each row in the list. | |
std::pair< int, int > | getIndicesForRow (int row_index) |
Retrieves the group and component indices for a given row index. | |
void | groupMenuClicked (int row_index) |
Displays a menu for the group row at the given index. | |
void | modifierMenuClicked (int row_index) |
Displays a menu for the modifier row at the given index. | |
void | menuClicked (int row_index) |
Displays a general menu for the given row index, determining if it's a group or modifier. | |
void | addModifierClicked (int group_index) |
Called when the "Add Modifier" button is clicked for a particular group. | |
void | addSourceClicked () |
Called when the "Add Source" button is clicked. | |
void | buttonClicked (Button *button) override |
Overridden to handle button clicks (menus, add source/modifier). | |
void | componentsScrolled () override |
Called when the components are scrolled. | |
void | addSource (int index) |
Adds a new source of the given index (maps to a component type). | |
void | removeGroup (int index) |
Removes a source group by index. | |
void | addComponent (int type) |
Adds a new component (modifier) of the given type. | |
void | removeComponent () |
Removes the currently selected component. | |
void | resetComponent () |
Resets the currently selected component to default state. | |
void | removeGroup () |
Removes the currently selected group. | |
void | moveGroupUp () |
Moves the currently selected group up in the list. | |
void | moveGroupDown () |
Moves the currently selected group down in the list. | |
void | moveModifierUp () |
Moves the currently selected modifier up in its group. | |
void | moveModifierDown () |
Moves the currently selected modifier down in its group. | |
int | numGroups () |
Returns the number of groups in the wavetable. | |
void | notifyComponentAdded (WavetableComponent *component) |
Notifies listeners that a component was added. | |
void | notifyComponentRemoved (WavetableComponent *component) |
Notifies listeners that a component was removed. | |
void | notifyComponentsReordered () |
Notifies listeners that components have been reordered. | |
void | notifyComponentsChanged () |
Notifies listeners that components have changed. | |
void | scrollBarMoved (ScrollBar *scroll_bar, double range_start) override |
Called when the scroll bar moves. | |
void | scroll (const MouseEvent &e, const MouseWheelDetails &wheel) |
Scrolls the viewport by mouse wheel. | |
![]() | |
SynthSection (const String &name) | |
Constructs a SynthSection with a given name. | |
virtual | ~SynthSection ()=default |
void | setParent (const SynthSection *parent) |
Sets the parent SynthSection. | |
float | findValue (Skin::ValueId value_id) const |
Finds a value in the skin overrides or from the parent if not found locally. | |
virtual void | reset () |
Resets the section and all sub-sections. | |
virtual void | paint (Graphics &g) override |
Called when the component should paint itself. | |
virtual void | paintSidewaysHeadingText (Graphics &g) |
Paints the section name heading text vertically if sideways_heading_ is true. | |
virtual void | paintHeadingText (Graphics &g) |
Paints the heading text for this section, either sideways or horizontally. | |
virtual void | setSkinValues (const Skin &skin, bool top_level) |
Sets skin values (colors, sizes) and applies them to sub-sections. | |
void | setSkinOverride (Skin::SectionOverride skin_override) |
virtual void | repaintBackground () |
Requests a repaint of the background. | |
void | showPopupBrowser (SynthSection *owner, Rectangle< int > bounds, std::vector< File > directories, String extensions, std::string passthrough_name, std::string additional_folders_name) |
Shows a file browser popup (e.g., for loading samples or wavetables). | |
void | updatePopupBrowser (SynthSection *owner) |
Updates the currently visible popup browser if any. | |
void | showPopupSelector (Component *source, Point< int > position, const PopupItems &options, std::function< void(int)> callback, std::function< void()> cancel={ }) |
Shows a popup selector with options. | |
void | showDualPopupSelector (Component *source, Point< int > position, int width, const PopupItems &options, std::function< void(int)> callback) |
Shows a dual popup selector for hierarchical selection. | |
void | showPopupDisplay (Component *source, const std::string &text, BubbleComponent::BubblePlacement placement, bool primary) |
Shows a brief popup display (like a tooltip). | |
void | hidePopupDisplay (bool primary) |
Hides the currently shown popup display. | |
virtual void | loadFile (const File &file) |
Loads a file (e.g., a sample or wavetable). Overridden by subclasses. | |
virtual File | getCurrentFile () |
Gets the currently loaded file. Overridden by subclasses. | |
virtual std::string | getFileName () |
Gets the name of the currently loaded file. Overridden by subclasses. | |
virtual std::string | getFileAuthor () |
Gets the author metadata of the currently loaded file. Overridden by subclasses. | |
virtual void | paintContainer (Graphics &g) |
Paints the container background, body, heading, etc. | |
virtual void | paintBody (Graphics &g, Rectangle< int > bounds) |
Paints the body background within given bounds. | |
virtual void | paintBorder (Graphics &g, Rectangle< int > bounds) |
Paints the border around given bounds. | |
virtual void | paintBody (Graphics &g) |
Paints the section body background using the entire component area. | |
virtual void | paintBorder (Graphics &g) |
Paints the border around the entire component. | |
int | getComponentShadowWidth () |
Gets the width of shadow around components. | |
virtual void | paintTabShadow (Graphics &g) |
Paints a tab-like shadow effect around the component. | |
void | paintTabShadow (Graphics &g, Rectangle< int > bounds) |
Paints a tab shadow effect within specified bounds. | |
virtual void | paintBackgroundShadow (Graphics &g) |
Stub for painting background shadows. Overridden by subclasses if needed. | |
virtual void | setSizeRatio (float ratio) |
Sets the size ratio for scaling UI elements. | |
void | paintKnobShadows (Graphics &g) |
Paints knob shadows for all sliders. | |
Font | getLabelFont () |
Gets a suitable font for label text. | |
void | setLabelFont (Graphics &g) |
Sets the Graphics context font and color for labels. | |
void | drawLabelConnectionForComponents (Graphics &g, Component *left, Component *right) |
Draws a rectangular connection between labels of two components. | |
void | drawLabelBackground (Graphics &g, Rectangle< int > bounds, bool text_component=false) |
Draws a background for a label area. | |
void | drawLabelBackgroundForComponent (Graphics &g, Component *component) |
Draws label background for a specific component. | |
Rectangle< int > | getDividedAreaBuffered (Rectangle< int > full_area, int num_sections, int section, int buffer) |
Divides an area into equal sections with buffering, returns the specified section. | |
Rectangle< int > | getDividedAreaUnbuffered (Rectangle< int > full_area, int num_sections, int section, int buffer) |
Divides an area into equal sections without extra buffering, returns the specified section. | |
Rectangle< int > | getLabelBackgroundBounds (Rectangle< int > bounds, bool text_component=false) |
Gets the background bounds for a label. | |
Rectangle< int > | getLabelBackgroundBounds (Component *component, bool text_component=false) |
Gets the label background bounds for a component. | |
void | drawLabel (Graphics &g, String text, Rectangle< int > component_bounds, bool text_component=false) |
Draws a label text below a component. | |
void | drawLabelForComponent (Graphics &g, String text, Component *component, bool text_component=false) |
Draws a label for a given component. | |
void | drawTextBelowComponent (Graphics &g, String text, Component *component, int space, int padding=0) |
Draws text below a component with optional padding. | |
virtual void | paintChildrenShadows (Graphics &g) |
Paints shadows for child sections. | |
void | paintChildrenBackgrounds (Graphics &g) |
Paints the backgrounds for all child sections. | |
void | paintOpenGlChildrenBackgrounds (Graphics &g) |
Paints the backgrounds for all OpenGL child components. | |
void | paintChildBackground (Graphics &g, SynthSection *child) |
Paints a child's background specifically. | |
void | paintChildShadow (Graphics &g, SynthSection *child) |
Paints a child's shadow specifically. | |
void | paintOpenGlBackground (Graphics &g, OpenGlComponent *child) |
Paints the background of an OpenGlComponent child. | |
void | drawTextComponentBackground (Graphics &g, Rectangle< int > bounds, bool extend_to_label) |
Draws a background for a text component area. | |
void | drawTempoDivider (Graphics &g, Component *sync) |
Draws a divider line for tempo-related controls. | |
virtual void | initOpenGlComponents (OpenGlWrapper &open_gl) |
Initializes all OpenGL components in this section and sub-sections. | |
virtual void | renderOpenGlComponents (OpenGlWrapper &open_gl, bool animate) |
Renders all OpenGL components in this section and sub-sections. | |
virtual void | destroyOpenGlComponents (OpenGlWrapper &open_gl) |
Destroys all OpenGL components in this section and sub-sections. | |
virtual void | sliderValueChanged (Slider *moved_slider) override |
Called when a slider value changes. Updates the synth parameter accordingly. | |
virtual void | guiChanged (SynthButton *button) override |
Called when a SynthButton state changes (GUI interaction). | |
std::map< std::string, SynthSlider * > | getAllSliders () |
Gets all sliders registered in this section. | |
std::map< std::string, ToggleButton * > | getAllButtons () |
Gets all toggle buttons registered in this section. | |
std::map< std::string, ModulationButton * > | getAllModulationButtons () |
Gets all modulation buttons registered in this section. | |
virtual void | setActive (bool active) |
Sets the active state of this section and sub-sections. | |
bool | isActive () const |
Checks if the section is currently active. | |
virtual void | animate (bool animate) |
Triggers animation state change in sub-sections if needed. | |
virtual void | setAllValues (vital::control_map &controls) |
Sets values for all known parameters from a control map. | |
virtual void | setValue (const std::string &name, vital::mono_float value, NotificationType notification) |
Sets a single parameter value for a known control. | |
void | addModulationButton (ModulationButton *button, bool show=true) |
Adds a modulation button to this section. | |
void | addSubSection (SynthSection *section, bool show=true) |
Adds a subsection (another SynthSection) as a child. | |
void | removeSubSection (SynthSection *section) |
Removes a previously added subsection. | |
virtual void | setScrollWheelEnabled (bool enabled) |
Enables or disables scroll wheel support for this section and sub-sections. | |
ToggleButton * | activator () const |
Gets the activator toggle button if any. | |
void | setSkinValues (std::map< Skin::ValueId, float > values) |
Sets custom skin values for this section. | |
void | setSkinValue (Skin::ValueId id, float value) |
Sets a single skin value override. | |
float | getTitleWidth () |
float | getPadding () |
float | getPowerButtonOffset () const |
float | getKnobSectionHeight () |
float | getSliderWidth () |
float | getSliderOverlap () |
float | getSliderOverlapWithSpace () |
float | getTextComponentHeight () |
float | getStandardKnobSize () |
float | getTotalKnobHeight () |
float | getTextSectionYOffset () |
float | getModButtonWidth () |
float | getModFontSize () |
float | getWidgetMargin () |
float | getWidgetRounding () |
float | getSizeRatio () const |
int | getPopupWidth () const |
int | getDualPopupWidth () const |
![]() | |
virtual | ~ButtonListener () |
Virtual destructor. | |
![]() | |
virtual | ~Listener () |
Static Public Attributes | |
static constexpr int | kMaxRows = 128 |
Maximum number of rows for components. | |
static constexpr int | kMaxSources = 16 |
Maximum number of source groups. | |
![]() | |
static constexpr int | kDefaultPowerButtonOffset = 0 |
static constexpr float | kPowerButtonPaddingPercent = 0.29f |
static constexpr float | kTransposeHeightPercent = 0.5f |
static constexpr float | kTuneHeightPercent = 0.4f |
static constexpr float | kJointModulationRadiusPercent = 0.1f |
static constexpr float | kJointModulationExtensionPercent = 0.6666f |
static constexpr float | kPitchLabelPercent = 0.33f |
static constexpr float | kJointLabelHeightPercent = 0.4f |
static constexpr double | kTransposeMouseSensitivity = 0.2 |
static constexpr float | kJointLabelBorderRatioX = 0.05f |
static constexpr int | kDefaultBodyRounding = 4 |
static constexpr int | kDefaultLabelHeight = 10 |
static constexpr int | kDefaultLabelBackgroundHeight = 16 |
static constexpr int | kDefaultLabelBackgroundWidth = 56 |
static constexpr int | kDefaultLabelBackgroundRounding = 4 |
static constexpr int | kDefaultPadding = 2 |
static constexpr int | kDefaultPopupMenuWidth = 150 |
static constexpr int | kDefaultDualPopupMenuWidth = 340 |
static constexpr int | kDefaultStandardKnobSize = 32 |
static constexpr int | kDefaultKnobThickness = 2 |
static constexpr float | kDefaultKnobModulationAmountThickness = 2.0f |
static constexpr int | kDefaultKnobModulationMeterSize = 43 |
static constexpr int | kDefaultKnobModulationMeterThickness = 4 |
static constexpr int | kDefaultModulationButtonWidth = 64 |
static constexpr int | kDefaultModFontSize = 10 |
static constexpr int | kDefaultKnobSectionHeight = 64 |
static constexpr int | kDefaultSliderWidth = 24 |
static constexpr int | kDefaultTextWidth = 80 |
static constexpr int | kDefaultTextHeight = 24 |
static constexpr int | kDefaultWidgetMargin = 6 |
static constexpr float | kDefaultWidgetFillFade = 0.3f |
static constexpr float | kDefaultWidgetLineWidth = 4.0f |
static constexpr float | kDefaultWidgetFillCenter = 0.0f |
Protected Member Functions | |
void | resetGroups () |
Resets the display of groups and modifiers in the UI. | |
void | positionGroups () |
Positions the groups and modifiers in the scrollable list. | |
void | setScrollBarRange () |
Sets the scrollbar range based on content size. | |
![]() | |
void | setSliderHasHzAlternateDisplay (SynthSlider *slider) |
void | setSidewaysHeading (bool sideways) |
void | addToggleButton (ToggleButton *button, bool show) |
void | addButton (OpenGlToggleButton *button, bool show=true) |
void | addButton (OpenGlShapeButton *button, bool show=true) |
void | addSlider (SynthSlider *slider, bool show=true, bool listen=true) |
void | addOpenGlComponent (OpenGlComponent *open_gl_component, bool to_beginning=false) |
void | setActivator (SynthButton *activator) |
void | createOffOverlay () |
void | setPresetSelector (PresetSelector *preset_selector, bool half=false) |
void | paintJointControlSliderBackground (Graphics &g, int x, int y, int width, int height) |
void | paintJointControlBackground (Graphics &g, int x, int y, int width, int height) |
void | paintJointControl (Graphics &g, int x, int y, int width, int height, const std::string &name) |
void | placeJointControls (int x, int y, int width, int height, SynthSlider *left, SynthSlider *right, Component *widget=nullptr) |
void | placeTempoControls (int x, int y, int width, int height, SynthSlider *tempo, SynthSlider *sync) |
void | placeRotaryOption (Component *option, SynthSlider *rotary) |
void | placeKnobsInArea (Rectangle< int > area, std::vector< Component * > knobs) |
void | lockCriticalSection () |
void | unlockCriticalSection () |
Rectangle< int > | getPresetBrowserBounds () |
int | getTitleTextRight () |
Rectangle< int > | getPowerButtonBounds () |
Rectangle< int > | getTitleBounds () |
float | getDisplayScale () const |
virtual int | getPixelMultiple () const |
Protected Attributes | |
WavetableComponentViewport | viewport_ |
Viewport for scrolling the component list. | |
Component | component_container_ |
Container holding all UI elements for the list. | |
std::unique_ptr< OpenGlScrollBar > | scroll_bar_ |
A custom scrollbar for vertical scrolling. | |
WavetableCreator * | wavetable_creator_ |
The wavetable creator managing group/components. | |
int | current_group_index_ |
The currently selected group index. | |
int | current_component_index_ |
The currently selected component index. | |
std::vector< Listener * > | listeners_ |
Listeners for changes in the component list. | |
OpenGlMultiQuad | component_backgrounds_ |
Background rectangles for each row. | |
std::unique_ptr< PlainTextComponent > | names_ [kMaxRows] |
Text labels for each component row. | |
std::unique_ptr< OpenGlShapeButton > | menu_buttons_ [kMaxRows] |
Menu buttons for each row. | |
std::unique_ptr< OpenGlToggleButton > | create_component_button_ |
Button to add a new source. | |
std::unique_ptr< OpenGlToggleButton > | add_modifier_buttons_ [kMaxSources] |
Buttons to add modifiers. | |
std::unique_ptr< PlainShapeComponent > | plus_icons_ [kMaxSources+1] |
Plus icons next to buttons. | |
int | row_height_ |
Height of each row in pixels. | |
![]() | |
std::map< Skin::ValueId, float > | value_lookup_ |
std::vector< SynthSection * > | sub_sections_ |
std::vector< OpenGlComponent * > | open_gl_components_ |
std::map< std::string, SynthSlider * > | slider_lookup_ |
std::map< std::string, Button * > | button_lookup_ |
std::map< std::string, ModulationButton * > | modulation_buttons_ |
std::map< std::string, SynthSlider * > | all_sliders_ |
std::map< std::string, ToggleButton * > | all_buttons_ |
std::map< std::string, ModulationButton * > | all_modulation_buttons_ |
const SynthSection * | parent_ |
SynthButton * | activator_ |
PresetSelector * | preset_selector_ |
bool | preset_selector_half_width_ |
std::unique_ptr< OffOverlay > | off_overlay_ |
Skin::SectionOverride | skin_override_ |
float | size_ratio_ |
bool | active_ |
bool | sideways_heading_ |
A UI component that lists and manages the wavetable sources and modifiers.
This class displays a scrollable list of wavetable source groups and their modifiers. It allows adding, removing, and reordering sources and modifiers, as well as resetting them. It interacts with WavetableCreator to maintain and modify the structure of the wavetable.
WavetableComponentList::WavetableComponentList | ( | WavetableCreator * | wavetable_creator | ) |
Constructs a WavetableComponentList for managing sources and modifiers.
wavetable_creator | The WavetableCreator that manages the actual data. |
void WavetableComponentList::addComponent | ( | int | type | ) |
Adds a new component (modifier) of the given type.
type | The type index (maps to a modifier component type). |
|
inline |
Adds a listener interested in component changes.
listener | The listener to add. |
void WavetableComponentList::addModifierClicked | ( | int | group_index | ) |
Called when the "Add Modifier" button is clicked for a particular group.
group_index | The index of the group. |
void WavetableComponentList::addSource | ( | int | index | ) |
Adds a new source of the given index (maps to a component type).
index | The index representing a source type. |
void WavetableComponentList::addSourceClicked | ( | ) |
Called when the "Add Source" button is clicked.
|
overridevirtual |
Overridden to handle button clicks (menus, add source/modifier).
button | The button that was clicked. |
Reimplemented from SynthSection.
void WavetableComponentList::clear | ( | ) |
Clears the list of sources and modifiers.
|
overridevirtual |
Called when the components are scrolled.
Implements WavetableComponentViewport::Listener.
std::pair< int, int > WavetableComponentList::getIndicesForRow | ( | int | row_index | ) |
Retrieves the group and component indices for a given row index.
row_index | The row index. |
void WavetableComponentList::groupMenuClicked | ( | int | row_index | ) |
Displays a menu for the group row at the given index.
row_index | The row index. |
void WavetableComponentList::init | ( | ) |
Initializes the component list after construction.
void WavetableComponentList::menuClicked | ( | int | row_index | ) |
Displays a general menu for the given row index, determining if it's a group or modifier.
row_index | The row index. |
void WavetableComponentList::modifierMenuClicked | ( | int | row_index | ) |
Displays a menu for the modifier row at the given index.
row_index | The row index. |
void WavetableComponentList::moveGroupDown | ( | ) |
Moves the currently selected group down in the list.
void WavetableComponentList::moveGroupUp | ( | ) |
Moves the currently selected group up in the list.
void WavetableComponentList::moveModifierDown | ( | ) |
Moves the currently selected modifier down in its group.
void WavetableComponentList::moveModifierUp | ( | ) |
Moves the currently selected modifier up in its group.
void WavetableComponentList::notifyComponentAdded | ( | WavetableComponent * | component | ) |
Notifies listeners that a component was added.
component | The component that was added. |
void WavetableComponentList::notifyComponentRemoved | ( | WavetableComponent * | component | ) |
Notifies listeners that a component was removed.
component | The component that was removed. |
void WavetableComponentList::notifyComponentsChanged | ( | ) |
Notifies listeners that components have changed.
void WavetableComponentList::notifyComponentsReordered | ( | ) |
Notifies listeners that components have been reordered.
|
inline |
Returns the number of groups in the wavetable.
|
overridevirtual |
Overridden to paint the background and related elements.
g | The Graphics context to use. |
Reimplemented from SynthSection.
|
protected |
Positions the groups and modifiers in the scrollable list.
void WavetableComponentList::removeComponent | ( | ) |
Removes the currently selected component.
void WavetableComponentList::removeGroup | ( | ) |
Removes the currently selected group.
void WavetableComponentList::removeGroup | ( | int | index | ) |
Removes a source group by index.
index | The group index to remove. |
void WavetableComponentList::resetComponent | ( | ) |
Resets the currently selected component to default state.
|
protected |
Resets the display of groups and modifiers in the UI.
|
overridevirtual |
Overridden to layout and refresh the UI.
Reimplemented from SynthSection.
|
inline |
Scrolls the viewport by mouse wheel.
e | The mouse event. |
wheel | The wheel details. |
|
override |
Called when the scroll bar moves.
scroll_bar | The scrollbar that moved. |
range_start | The new start range of the scroll. |
|
inline |
Sets the height of each row in the list.
row_height | The new row height in pixels. |
|
protected |
Sets the scrollbar range based on content size.
|
protected |
Buttons to add modifiers.
|
protected |
Background rectangles for each row.
|
protected |
Container holding all UI elements for the list.
|
protected |
Button to add a new source.
|
protected |
The currently selected component index.
|
protected |
The currently selected group index.
|
staticconstexpr |
Maximum number of rows for components.
|
staticconstexpr |
Maximum number of source groups.
|
protected |
Listeners for changes in the component list.
|
protected |
Menu buttons for each row.
|
protected |
Text labels for each component row.
|
protected |
Plus icons next to buttons.
|
protected |
Height of each row in pixels.
|
protected |
A custom scrollbar for vertical scrolling.
|
protected |
Viewport for scrolling the component list.
|
protected |
The wavetable creator managing group/components.