Vital
Loading...
Searching...
No Matches
SelectionList Class Reference

A scrollable file/folder selection list that supports nested folders and favorites. More...

#include <popup_browser.h>

Inheritance diagram for SelectionList:
SynthSection SynthButton::ButtonListener

Classes

class  FileNameAscendingComparator
 Comparator for sorting files by name ascending. More...
 
class  Listener
 Interface for receiving selection events from SelectionList. More...
 

Public Member Functions

 SelectionList ()
 Constructs a SelectionList.
 
void paintBackground (Graphics &g) override
 Paints the background of the section. Calls paintContainer, heading, knobs, children.
 
void paintBackgroundShadow (Graphics &g) override
 Stub for painting background shadows. Overridden by subclasses if needed.
 
void resized () override
 Called when the component is resized. Arranges layout of child components.
 
void addFavoritesOption ()
 Adds a "Favorites" option to the list.
 
void setSelections (Array< File > presets)
 Sets the files/folders displayed in this SelectionList.
 
Array< File > getSelections ()
 
Array< File > getAdditionalFolders ()
 
void resetScrollPosition ()
 
void mouseWheelMove (const MouseEvent &e, const MouseWheelDetails &wheel) override
 
int getRowFromPosition (float mouse_position)
 
int getRowHeight ()
 Returns the scaled row height.
 
int getIconPadding ()
 Gets the icon padding.
 
void mouseMove (const MouseEvent &e) override
 
void mouseExit (const MouseEvent &e) override
 
void respondToMenuCallback (int result)
 
void menuClick (const MouseEvent &e)
 
void leftClick (const MouseEvent &e)
 
File getSelection (const MouseEvent &e)
 Gets the File at the mouse event position.
 
void mouseDown (const MouseEvent &e) override
 
void mouseDoubleClick (const MouseEvent &e) override
 
void addAdditionalFolder ()
 
void removeAdditionalFolder (const File &folder)
 
void select (const File &selection)
 Selects a given file.
 
File selected () const
 Returns the currently selected file.
 
void setSelected (const File &selection)
 Sets the currently selected file.
 
void selectIcon (const File &selection)
 Handles selecting the icon area (favorite toggle).
 
void scrollBarMoved (ScrollBar *scroll_bar, double range_start) override
 
void setScrollBarRange ()
 
void redoCache ()
 Refreshes the cached row images.
 
int getFolderDepth (const File &file)
 Gets the depth of a given folder relative to open folders.
 
void addSubfolderSelections (const File &selection, std::vector< File > &selections)
 Adds subfolder selections if a folder is open.
 
void setAdditionalRootsName (const std::string &name)
 Sets the name associated with additional roots.
 
void filter (const String &filter_string)
 Filters the selection list by a given string.
 
int getSelectedIndex ()
 Gets the index of the currently selected file.
 
int getScrollableRange ()
 Gets the total scrollable range.
 
void selectNext ()
 Selects the next item in the list.
 
void selectPrev ()
 Selects the previous item in the list.
 
void initOpenGlComponents (OpenGlWrapper &open_gl) override
 Initializes all OpenGL components in this section and sub-sections.
 
void renderOpenGlComponents (OpenGlWrapper &open_gl, bool animate) override
 Renders all OpenGL components in this section and sub-sections.
 
void destroyOpenGlComponents (OpenGlWrapper &open_gl) override
 Destroys all OpenGL components in this section and sub-sections.
 
void addListener (Listener *listener)
 Adds a SelectionList::Listener.
 
void setPassthroughFolderName (const std::string &name)
 
std::string getPassthroughFolderName () const
 
bool hasValidPath ()
 Checks if at least one displayed path exists.
 
- Public Member Functions inherited from SynthSection
 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 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 sliderValueChanged (Slider *moved_slider) override
 Called when a slider value changes. Updates the synth parameter accordingly.
 
virtual void buttonClicked (Button *clicked_button) override
 Called when a button is clicked. 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
 
- Public Member Functions inherited from SynthButton::ButtonListener
virtual ~ButtonListener ()
 Virtual destructor.
 

Static Public Member Functions

static File getAllFile ()
 Returns a File object representing "All" selection.
 
static File getFavoritesFile ()
 Returns a File object representing "Favorites" selection.
 

Static Public Attributes

static constexpr int kNumCachedRows = 50
 Number of rows cached for performance.
 
static constexpr float kRowHeight = 24.0f
 Base row height.
 
static constexpr float kStarWidth = 38.0f
 Width of the star icon area.
 
static constexpr float kScrollSensitivity = 200.0f
 Scroll sensitivity.
 
static constexpr float kScrollBarWidth = 15.0f
 Scrollbar width.
 
- Static Public Attributes inherited from SynthSection
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
 

Additional Inherited Members

- Protected Member Functions inherited from SynthSection
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 inherited from SynthSection
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 SynthSectionparent_
 
SynthButtonactivator_
 
PresetSelectorpreset_selector_
 
bool preset_selector_half_width_
 
std::unique_ptr< OffOverlayoff_overlay_
 
Skin::SectionOverride skin_override_
 
float size_ratio_
 
bool active_
 
bool sideways_heading_
 

Detailed Description

A scrollable file/folder selection list that supports nested folders and favorites.

SelectionList displays folders and files that can be opened or selected. It supports filtering, additional folders, favorites, and user interaction such as adding or removing folders. Listeners can be notified about user selections.

Constructor & Destructor Documentation

◆ SelectionList()

SelectionList::SelectionList ( )

Constructs a SelectionList.

Member Function Documentation

◆ addAdditionalFolder()

void SelectionList::addAdditionalFolder ( )

◆ addFavoritesOption()

void SelectionList::addFavoritesOption ( )
inline

Adds a "Favorites" option to the list.

◆ addListener()

void SelectionList::addListener ( Listener * listener)
inline

Adds a SelectionList::Listener.

Parameters
listenerThe listener to add.

◆ addSubfolderSelections()

void SelectionList::addSubfolderSelections ( const File & selection,
std::vector< File > & selections )

Adds subfolder selections if a folder is open.

Parameters
selectionThe parent folder.
selectionsVector to add the subfolders into.

◆ destroyOpenGlComponents()

void SelectionList::destroyOpenGlComponents ( OpenGlWrapper & open_gl)
overridevirtual

Destroys all OpenGL components in this section and sub-sections.

Parameters
open_glThe OpenGlWrapper context.

Reimplemented from SynthSection.

◆ filter()

void SelectionList::filter ( const String & filter_string)

Filters the selection list by a given string.

Parameters
filter_stringThe filter query.

◆ getAdditionalFolders()

Array< File > SelectionList::getAdditionalFolders ( )
inline

◆ getAllFile()

static File SelectionList::getAllFile ( )
inlinestatic

Returns a File object representing "All" selection.

Returns
Special "All" File.

◆ getFavoritesFile()

static File SelectionList::getFavoritesFile ( )
inlinestatic

Returns a File object representing "Favorites" selection.

Returns
Special "Favorites" File.

◆ getFolderDepth()

int SelectionList::getFolderDepth ( const File & file)

Gets the depth of a given folder relative to open folders.

Parameters
fileThe folder file.
Returns
The depth level.

◆ getIconPadding()

int SelectionList::getIconPadding ( )
inline

Gets the icon padding.

Returns
The icon padding in pixels.

◆ getPassthroughFolderName()

std::string SelectionList::getPassthroughFolderName ( ) const
inline

◆ getRowFromPosition()

int SelectionList::getRowFromPosition ( float mouse_position)

◆ getRowHeight()

int SelectionList::getRowHeight ( )
inline

Returns the scaled row height.

Returns
The row height.

◆ getScrollableRange()

int SelectionList::getScrollableRange ( )

Gets the total scrollable range.

Returns
The total scrollable height in pixels.

◆ getSelectedIndex()

int SelectionList::getSelectedIndex ( )

Gets the index of the currently selected file.

Returns
The selected index, or -1 if none.

◆ getSelection()

File SelectionList::getSelection ( const MouseEvent & e)

Gets the File at the mouse event position.

Parameters
eThe mouse event.
Returns
The selected File or an invalid File if none.

◆ getSelections()

Array< File > SelectionList::getSelections ( )
inline

◆ hasValidPath()

bool SelectionList::hasValidPath ( )
inline

Checks if at least one displayed path exists.

Returns
True if at least one file/folder is valid, false otherwise.

◆ initOpenGlComponents()

void SelectionList::initOpenGlComponents ( OpenGlWrapper & open_gl)
overridevirtual

Initializes all OpenGL components in this section and sub-sections.

Parameters
open_glThe OpenGlWrapper context.

Reimplemented from SynthSection.

◆ leftClick()

void SelectionList::leftClick ( const MouseEvent & e)

◆ menuClick()

void SelectionList::menuClick ( const MouseEvent & e)

◆ mouseDoubleClick()

void SelectionList::mouseDoubleClick ( const MouseEvent & e)
override

◆ mouseDown()

void SelectionList::mouseDown ( const MouseEvent & e)
override

◆ mouseExit()

void SelectionList::mouseExit ( const MouseEvent & e)
override

◆ mouseMove()

void SelectionList::mouseMove ( const MouseEvent & e)
override

◆ mouseWheelMove()

void SelectionList::mouseWheelMove ( const MouseEvent & e,
const MouseWheelDetails & wheel )
override

◆ paintBackground()

void SelectionList::paintBackground ( Graphics & g)
inlineoverridevirtual

Paints the background of the section. Calls paintContainer, heading, knobs, children.

Parameters
gThe Graphics context.

Reimplemented from SynthSection.

◆ paintBackgroundShadow()

void SelectionList::paintBackgroundShadow ( Graphics & g)
inlineoverridevirtual

Stub for painting background shadows. Overridden by subclasses if needed.

Parameters
gThe Graphics context.

Reimplemented from SynthSection.

◆ redoCache()

void SelectionList::redoCache ( )

Refreshes the cached row images.

◆ removeAdditionalFolder()

void SelectionList::removeAdditionalFolder ( const File & folder)

◆ renderOpenGlComponents()

void SelectionList::renderOpenGlComponents ( OpenGlWrapper & open_gl,
bool animate )
overridevirtual

Renders all OpenGL components in this section and sub-sections.

Parameters
open_glThe OpenGlWrapper context.
animateTrue if animation is desired.

Reimplemented from SynthSection.

◆ resetScrollPosition()

void SelectionList::resetScrollPosition ( )

◆ resized()

void SelectionList::resized ( )
overridevirtual

Called when the component is resized. Arranges layout of child components.

Reimplemented from SynthSection.

◆ respondToMenuCallback()

void SelectionList::respondToMenuCallback ( int result)

◆ scrollBarMoved()

void SelectionList::scrollBarMoved ( ScrollBar * scroll_bar,
double range_start )
override

◆ select()

void SelectionList::select ( const File & selection)

Selects a given file.

Parameters
selectionThe file to select.

◆ selected()

File SelectionList::selected ( ) const
inline

Returns the currently selected file.

Returns
The selected File.

◆ selectIcon()

void SelectionList::selectIcon ( const File & selection)

Handles selecting the icon area (favorite toggle).

Parameters
selectionThe file associated with the icon clicked.

◆ selectNext()

void SelectionList::selectNext ( )

Selects the next item in the list.

◆ selectPrev()

void SelectionList::selectPrev ( )

Selects the previous item in the list.

◆ setAdditionalRootsName()

void SelectionList::setAdditionalRootsName ( const std::string & name)

Sets the name associated with additional roots.

Parameters
nameThe name for additional roots category.

◆ setPassthroughFolderName()

void SelectionList::setPassthroughFolderName ( const std::string & name)
inline

◆ setScrollBarRange()

void SelectionList::setScrollBarRange ( )

◆ setSelected()

void SelectionList::setSelected ( const File & selection)
inline

Sets the currently selected file.

Parameters
selectionThe file to set as selected.

◆ setSelections()

void SelectionList::setSelections ( Array< File > presets)

Sets the files/folders displayed in this SelectionList.

Parameters
presetsThe array of File objects to display.

Member Data Documentation

◆ kNumCachedRows

int SelectionList::kNumCachedRows = 50
staticconstexpr

Number of rows cached for performance.

◆ kRowHeight

float SelectionList::kRowHeight = 24.0f
staticconstexpr

Base row height.

◆ kScrollBarWidth

float SelectionList::kScrollBarWidth = 15.0f
staticconstexpr

Scrollbar width.

◆ kScrollSensitivity

float SelectionList::kScrollSensitivity = 200.0f
staticconstexpr

Scroll sensitivity.

◆ kStarWidth

float SelectionList::kStarWidth = 38.0f
staticconstexpr

Width of the star icon area.


The documentation for this class was generated from the following files: