Browse Source

Display module presets when available

Fixes #58

Signed-off-by: falkTX <falktx@falktx.com>
tags/22.02
falkTX 3 years ago
parent
commit
1311b6a127
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 41 additions and 4 deletions
  1. +41
    -4
      src/CardinalModuleWidget.cpp

+ 41
- 4
src/CardinalModuleWidget.cpp View File

@@ -27,6 +27,8 @@


#include "CardinalCommon.hpp" #include "CardinalCommon.hpp"


#include <regex>

#include <app/ModuleWidget.hpp> #include <app/ModuleWidget.hpp>
#include <app/RackWidget.hpp> #include <app/RackWidget.hpp>
#include <app/Scene.hpp> #include <app/Scene.hpp>
@@ -126,6 +128,43 @@ void CardinalModuleWidget__saveDialog(ModuleWidget* const w)
}); });
} }


// Create ModulePresetPathItems for each patch in a directory.
static void appendPresetItems(ui::Menu* menu, WeakPtr<ModuleWidget> moduleWidget, std::string presetDir) {
bool foundPresets = false;

// Note: This is not cached, so opening this menu each time might have a bit of latency.
if (system::isDirectory(presetDir))
{
std::vector<std::string> entries = system::getEntries(presetDir);
std::sort(entries.begin(), entries.end());
for (std::string path : entries) {
std::string name = system::getStem(path);
// Remove "1_", "42_", "001_", etc at the beginning of preset filenames
std::regex r("^\\d+_");
name = std::regex_replace(name, r, "");

if (system::getExtension(path) == ".vcvm")
{
if (!foundPresets)
menu->addChild(new ui::MenuSeparator);

foundPresets = true;

menu->addChild(createMenuItem(name, "", [=]() {
if (!moduleWidget)
return;
try {
moduleWidget->loadAction(path);
}
catch (Exception& e) {
async_dialog_message(e.what());
}
}));
}
}
}
};

static void CardinalModuleWidget__createContextMenu(ModuleWidget* const w, static void CardinalModuleWidget__createContextMenu(ModuleWidget* const w,
plugin::Model* const model, plugin::Model* const model,
engine::Module* const module) { engine::Module* const module) {
@@ -164,23 +203,21 @@ static void CardinalModuleWidget__createContextMenu(ModuleWidget* const w,
CardinalModuleWidget__loadDialog(weakThis); CardinalModuleWidget__loadDialog(weakThis);
})); }));


/* TODO requires setting up user dir
menu->addChild(createMenuItem("Save as", "", [weakThis]() { menu->addChild(createMenuItem("Save as", "", [weakThis]() {
if (!weakThis) if (!weakThis)
return; return;
CardinalModuleWidget__saveDialog(weakThis); CardinalModuleWidget__saveDialog(weakThis);
})); }));


/* TODO
// Scan `<user dir>/presets/<plugin slug>/<module slug>` for presets. // Scan `<user dir>/presets/<plugin slug>/<module slug>` for presets.
menu->addChild(new ui::MenuSeparator); menu->addChild(new ui::MenuSeparator);
menu->addChild(createMenuLabel("User presets")); menu->addChild(createMenuLabel("User presets"));
appendPresetItems(menu, weakThis, weakThis->model->getUserPresetDirectory()); appendPresetItems(menu, weakThis, weakThis->model->getUserPresetDirectory());
*/


// Scan `<plugin dir>/presets/<module slug>` for presets. // Scan `<plugin dir>/presets/<module slug>` for presets.
menu->addChild(new ui::MenuSeparator);
menu->addChild(createMenuLabel("Factory presets"));
appendPresetItems(menu, weakThis, weakThis->model->getFactoryPresetDirectory()); appendPresetItems(menu, weakThis, weakThis->model->getFactoryPresetDirectory());
*/
})); }));


// Initialize // Initialize


Loading…
Cancel
Save