29 std::string path = preset.getFullPathName().toStdString();
30 if (author_cache_.count(path) == 0)
33 return author_cache_[path];
42 std::string path = preset.getFullPathName().toStdString();
43 if (style_cache_.count(path) == 0)
46 return style_cache_[path];
50 std::map<std::string, std::string> author_cache_;
51 std::map<std::string, std::string> style_cache_;
118 String first_name = first.getFileNameWithoutExtension().toLowerCase();
119 String second_name = second.getFileNameWithoutExtension().toLowerCase();
120 return first_name.compareNatural(second_name);
136 String first_author = cache_->
getAuthor(first);
137 String second_author = cache_->
getAuthor(second);
138 return first_author.compareNatural(second_author);
150 String first_author = cache_->
getAuthor(first);
151 String second_author = cache_->
getAuthor(second);
152 return -first_author.compareNatural(second_author);
164 String first_style = cache_->
getStyle(first);
165 String second_style = cache_->
getStyle(second);
166 return first_style.compareNatural(second_style);
178 String first_style = cache_->
getStyle(first);
179 String second_style = cache_->
getStyle(second);
180 return -first_style.compareNatural(second_style);
190 RelativeTime relative_time = first.getCreationTime() - second.getCreationTime();
191 double days = relative_time.inDays();
192 return days < 0.0 ? 1 : (days > 0.0f ? -1 : 0);
210 return favorites_.count(file.getFullPathName().toStdString());
225 std::set<std::string> favorites_;
256 void mouseWheelMove(
const MouseEvent& e,
const MouseWheelDetails& wheel)
override;
270 void mouseMove(
const MouseEvent& e)
override;
271 void mouseExit(
const MouseEvent& e)
override;
291 void mouseDown(
const MouseEvent& e)
override;
298 void scrollBarMoved(ScrollBar* scroll_bar,
double range_start)
override;
327 void filter(String filter_string,
const std::set<std::string>& styles);
350 listeners_.push_back(listener);
358 current_folder_ = folder;
363 void viewPositionChanged();
364 int getViewPosition() {
366 return std::max(0, std::min<int>(num_view_presets_ *
getRowHeight() - view_height, view_position_));
368 void loadBrowserCache(
int start_index,
int end_index);
369 void moveQuadToRow(
OpenGlQuad& quad,
int row,
float y_offset);
372 std::vector<Listener*> listeners_;
373 Array<File> presets_;
374 int num_view_presets_;
375 std::vector<File> filtered_presets_;
376 std::set<std::string> favorites_;
377 std::unique_ptr<OpenGlTextEditor> rename_editor_;
378 std::unique_ptr<OpenGlScrollBar> scroll_bar_;
379 String filter_string_;
380 std::set<std::string> filter_styles_;
381 File selected_preset_;
382 File renaming_preset_;
383 File current_folder_;
389 Component browse_area_;
394 float view_position_;
396 bool sort_ascending_;
409 public TextEditor::Listener,
460 bool keyPressed(
const KeyPress &key, Component *origin)
override;
485 for (
Listener* listener : listeners_)
486 listener->newPresetSelected(preset);
489 String author = author_text_->getText();
490 store_button_->setText(
"Get more presets by " + author);
491 bool visible = more_author_presets_.count(author.removeCharacters(
" _.").toLowerCase().toStdString());
492 bool was_visible = store_button_->isVisible();
493 store_button_->setVisible(visible);
494 if (was_visible != visible)
499 for (
Listener* listener : listeners_)
500 listener->deleteRequested(preset);
512 void save(File preset)
override;
571 bool loadFromFile(File& preset);
572 void loadPresetInfo();
573 void setCommentsBounds();
574 void setPresetInfo(File& preset);
576 std::vector<Listener*> listeners_;
577 std::unique_ptr<PresetList> preset_list_;
578 std::unique_ptr<OpenGlTextEditor> search_box_;
579 std::unique_ptr<SelectionList> folder_list_;
580 std::unique_ptr<PlainTextComponent> preset_text_;
581 std::unique_ptr<PlainTextComponent> author_text_;
583 std::unique_ptr<OpenGlToggleButton> store_button_;
588 std::unique_ptr<OpenGlTextEditor> comments_;
589 File external_preset_;
592 std::set<std::string> more_author_presets_;
Interface for objects that need to respond when a file is deleted.
Definition delete_section.h:32
An overlay that asks the user to confirm deletion of a preset file.
Definition delete_section.h:15
static String getStyleFromFile(const File &file)
Extracts the style from a given preset file.
Definition load_save.cpp:1078
@ kNumPresetStyles
Definition load_save.h:66
static String getAuthorFromFile(const File &file)
Extracts the author's name from a given preset file.
Definition load_save.cpp:1039
static std::set< std::string > getFavorites()
Retrieves all favorites as a set of string paths.
Definition load_save.cpp:1235
A utility class for rendering a single image using OpenGL.
Definition open_gl_image.h:16
A convenience class for a single quad rendered via OpenGL.
Definition open_gl_multi_quad.h:447
Interface for events from the PresetBrowser (e.g. preset selected, deleted, or browser hidden).
Definition preset_browser.h:427
virtual ~Listener()
Definition preset_browser.h:429
virtual void newPresetSelected(File preset)=0
Called when a new preset is selected.
virtual void hidePresetBrowser()=0
Called when the preset browser should be hidden.
virtual void deleteRequested(File preset)=0
Called when a preset is requested to be deleted.
A UI for browsing, loading, and organizing presets.
Definition preset_browser.h:413
void clearExternalPreset()
Clears the reference to any external preset.
Definition preset_browser.h:545
static constexpr int kLeftPadding
Definition preset_browser.h:415
PresetBrowser()
Constructs a PresetBrowser.
Definition preset_browser.cpp:580
void resized() override
Called when the component is resized. Arranges layout of child components.
Definition preset_browser.cpp:690
static constexpr int kStoreHeight
Definition preset_browser.h:420
Rectangle< int > getInfoRect()
Returns the rectangle reserved for the preset info area.
Definition preset_browser.cpp:829
static constexpr int kTopPadding
Definition preset_browser.h:416
void newSelection(File selection) override
Called when a new File is selected.
Definition preset_browser.cpp:1037
bool keyStateChanged(bool is_key_down, Component *origin) override
Definition preset_browser.cpp:910
static constexpr int kCommentsFontHeight
Definition preset_browser.h:421
void externalPresetLoaded(File file)
Loads an external preset file and sets it as the current selection.
Definition preset_browser.cpp:943
void deleteRequested(File preset) override
Called when a preset deletion is requested.
Definition preset_browser.h:498
void jumpToPreset(int indices)
Jumps to a preset a certain number of steps away.
Definition preset_browser.cpp:916
static constexpr int kNameFontHeight
Definition preset_browser.h:418
~PresetBrowser()
Destructor.
Definition preset_browser.cpp:651
void setDeleteSection(DeleteSection *delete_section)
Sets the DeleteSection for handling preset deletion.
Definition preset_browser.cpp:1032
void allSelected() override
Called when "All" special selection is made.
Definition preset_browser.cpp:1042
void textEditorEscapeKeyPressed(TextEditor &editor) override
Definition preset_browser.cpp:866
void loadNextPreset()
Loads the next preset in the list.
Definition preset_browser.cpp:939
void setSaveSection(SaveSection *save_section)
Sets the SaveSection for handling preset saving.
Definition preset_browser.cpp:1027
static constexpr int kAuthorFontHeight
Definition preset_browser.h:419
void paintBackground(Graphics &g) override
Paints the background of the section. Calls paintContainer, heading, knobs, children.
Definition preset_browser.cpp:653
void addListener(Listener *listener)
Adds a listener to receive events from the PresetBrowser.
Definition preset_browser.cpp:1023
void favoritesSelected() override
Called when "Favorites" special selection is made.
Definition preset_browser.cpp:1048
void filterPresets()
Filters the displayed presets based on search text and selected styles.
Definition preset_browser.cpp:849
void doubleClickedSelected(File selection) override
Called when a file is double-clicked.
Definition preset_browser.h:568
bool keyPressed(const KeyPress &key, Component *origin) override
Definition preset_browser.cpp:890
static constexpr int kMiddlePadding
Definition preset_browser.h:417
void newPresetSelected(File preset) override
Called when a new preset is selected.
Definition preset_browser.h:484
void buttonClicked(Button *clicked_button) override
Called when a button is clicked. Updates the synth parameter accordingly.
Definition preset_browser.cpp:878
void loadPresets()
Loads all presets from known directories.
Definition preset_browser.cpp:836
void paintBackgroundShadow(Graphics &g) override
Stub for painting background shadows. Overridden by subclasses if needed.
Definition preset_browser.cpp:685
void textEditorTextChanged(TextEditor &editor) override
Definition preset_browser.cpp:862
void visibilityChanged() override
Definition preset_browser.cpp:785
void loadPrevPreset()
Loads the previous preset in the list.
Definition preset_browser.cpp:935
void fileDeleted(File deleted_file) override
Called after a file is deleted.
Definition preset_browser.cpp:874
void save(File preset) override
Called after saving a preset.
Definition preset_browser.cpp:870
Rectangle< int > getSearchRect()
Returns the rectangle reserved for the search area.
Definition preset_browser.cpp:822
A cache for preset metadata such as author and style for faster repeated lookups.
Definition preset_browser.h:21
std::string getStyle(const File &preset)
Retrieves the style of a given preset, caching the result.
Definition preset_browser.h:41
std::string getAuthor(const File &preset)
Retrieves the author of a given preset, caching the result.
Definition preset_browser.h:28
Definition preset_browser.h:131
AuthorAscendingComparator(PresetInfoCache *preset_cache)
Definition preset_browser.h:133
int compareElements(File first, File second)
Definition preset_browser.h:135
Definition preset_browser.h:145
AuthorDescendingComparator(PresetInfoCache *preset_cache)
Definition preset_browser.h:147
int compareElements(File first, File second)
Definition preset_browser.h:149
Definition preset_browser.h:228
int compareElements(File first, File second)
Definition preset_browser.h:230
Definition preset_browser.h:203
bool isFavorite(const File &file)
Definition preset_browser.h:209
int compare(File first, File second)
Definition preset_browser.h:213
FavoriteComparator()
Definition preset_browser.h:205
Definition preset_browser.h:235
int compareElements(File first, File second)
Definition preset_browser.h:237
Definition preset_browser.h:187
static int compareElements(File first, File second)
Definition preset_browser.h:189
Definition preset_browser.h:196
static int compareElements(File first, File second)
Definition preset_browser.h:198
Definition preset_browser.h:115
static int compareElements(File first, File second)
Definition preset_browser.h:117
Definition preset_browser.h:124
static int compareElements(File first, File second)
Definition preset_browser.h:126
Interface for receiving preset selection and deletion requests.
Definition preset_browser.h:67
virtual void newPresetSelected(File preset)=0
Called when a new preset is selected.
virtual void deleteRequested(File preset)=0
Called when a preset deletion is requested.
virtual ~Listener()
Definition preset_browser.h:69
Definition preset_browser.h:159
int compareElements(File first, File second)
Definition preset_browser.h:163
StyleAscendingComparator(PresetInfoCache *preset_cache)
Definition preset_browser.h:161
Definition preset_browser.h:173
int compareElements(File first, File second)
Definition preset_browser.h:177
StyleDescendingComparator(PresetInfoCache *preset_cache)
Definition preset_browser.h:175
A UI component displaying a list of presets with sorting, filtering, and favorite management.
Definition preset_browser.h:61
int getSelectedIndex()
Gets the index of the currently selected preset.
Definition preset_browser.cpp:404
void respondToMenuCallback(int result)
Handles actions from the preset context menu.
Definition preset_browser.cpp:191
void mouseExit(const MouseEvent &e) override
Definition preset_browser.cpp:187
void mouseDown(const MouseEvent &e) override
Definition preset_browser.cpp:291
void resized() override
Called when the component is resized. Arranges layout of child components.
Definition preset_browser.cpp:120
void addListener(Listener *listener)
Adds a listener for preset events.
Definition preset_browser.h:349
static constexpr float kRowSizeHeightPercent
Definition preset_browser.h:106
static constexpr float kScrollSensitivity
Definition preset_browser.h:112
static constexpr float kAuthorWidthPercent
Definition preset_browser.h:110
void leftClick(const MouseEvent &e)
Called on left-click to select, rename, or favorite a preset.
Definition preset_browser.cpp:236
void scrollBarMoved(ScrollBar *scroll_bar, double range_start) override
Definition preset_browser.cpp:312
void reloadPresets()
Reloads the currently displayed presets from disk.
Definition preset_browser.cpp:342
void menuClick(const MouseEvent &e)
Called on right-click to show a context menu.
Definition preset_browser.cpp:217
void mouseMove(const MouseEvent &e) override
Definition preset_browser.cpp:181
PresetList()
Constructs a PresetList.
Definition preset_browser.cpp:40
void renderOpenGlComponents(OpenGlWrapper &open_gl, bool animate) override
Renders all OpenGL components in this section and sub-sections.
Definition preset_browser.cpp:520
void redoCache()
Updates the cached images for rows after sorting or filtering.
Definition preset_browser.cpp:363
void textEditorFocusLost(TextEditor &text_editor) override
Definition preset_browser.cpp:303
void setScrollBarRange()
Definition preset_browser.cpp:317
void destroyOpenGlComponents(OpenGlWrapper &open_gl) override
Destroys all OpenGL components in this section and sub-sections.
Definition preset_browser.cpp:571
void initOpenGlComponents(OpenGlWrapper &open_gl) override
Initializes all OpenGL components in this section and sub-sections.
Definition preset_browser.cpp:419
void setCurrentFolder(const File &folder)
Sets the current folder to display presets from.
Definition preset_browser.h:357
void finishRename()
Finalizes a preset rename operation.
Definition preset_browser.cpp:328
static constexpr float kStyleWidthPercent
Definition preset_browser.h:109
Column
Definition preset_browser.h:85
@ kAuthor
Definition preset_browser.h:90
@ kNumColumns
Definition preset_browser.h:92
@ kDate
Definition preset_browser.h:91
@ kName
Definition preset_browser.h:88
@ kStyle
Definition preset_browser.h:89
@ kStar
Definition preset_browser.h:87
@ kNone
Definition preset_browser.h:86
void textEditorReturnKeyPressed(TextEditor &text_editor) override
Definition preset_browser.cpp:298
void setPresets(Array< File > presets)
Sets the array of presets to display.
Definition preset_browser.cpp:157
void mouseWheelMove(const MouseEvent &e, const MouseWheelDetails &wheel) override
Definition preset_browser.cpp:163
void paintBackgroundShadow(Graphics &g) override
Stub for painting background shadows. Overridden by subclasses if needed.
Definition preset_browser.h:248
void paintBackground(Graphics &g) override
Paints the background of the section. Calls paintContainer, heading, knobs, children.
Definition preset_browser.cpp:71
void shiftSelectedPreset(int indices)
Moves the selected preset up or down by a number of indices.
Definition preset_browser.cpp:352
int getRowHeight()
Gets the row height in pixels.
Definition preset_browser.h:269
static constexpr float kDateWidthPercent
Definition preset_browser.h:111
static constexpr float kNameWidthPercent
Definition preset_browser.h:108
static constexpr int kNumCachedRows
Definition preset_browser.h:105
void textEditorEscapeKeyPressed(TextEditor &editor) override
Definition preset_browser.cpp:308
MenuOptions
Definition preset_browser.h:96
@ kCancel
Definition preset_browser.h:97
@ kNumMenuOptions
Definition preset_browser.h:101
@ kOpenFileLocation
Definition preset_browser.h:98
@ kRename
Definition preset_browser.h:99
@ kDelete
Definition preset_browser.h:100
void filter(String filter_string, const std::set< std::string > &styles)
Filters the displayed presets by name, author, and styles.
Definition preset_browser.cpp:372
static constexpr float kStarWidthPercent
Definition preset_browser.h:107
int getRowFromPosition(float mouse_position)
Converts a mouse Y position into a row index.
Definition preset_browser.cpp:175
int getScrollableRange()
Gets the scrollable height of the presets.
Definition preset_browser.cpp:412
Interface for objects interested in the result of the save action.
Definition save_section.h:43
A UI overlay for saving presets or other files.
Definition save_section.h:21
Interface for receiving selection events from SelectionList.
Definition popup_browser.h:238
Base class for all synthesizer sections, providing UI layout, painting, and interaction logic.
Definition synth_section.h:193
virtual void animate(bool animate)
Triggers animation state change in sub-sections if needed.
Definition synth_section.cpp:822
float getTitleWidth()
Definition synth_section.cpp:629
virtual void paintTabShadow(Graphics &g)
Paints a tab-like shadow effect around the component.
Definition synth_section.cpp:188
Declares the DeleteSection class, which provides a confirmation overlay for deleting a preset file.
A helper struct containing references to OpenGL context, shaders, and display scale.
Definition shaders.h:174