diff --git a/plugins/Fundamental b/plugins/Fundamental index 9ef6196..e7c2fe6 160000 --- a/plugins/Fundamental +++ b/plugins/Fundamental @@ -1 +1 @@ -Subproject commit 9ef61963db2c7a03053aa5ff613e35d79335a83c +Subproject commit e7c2fe6d54531fd2fd25014dc722a18546393207 diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index 1ca91bb..a1052bc 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -30,6 +30,7 @@ #include "AsyncDialog.hpp" #include "PluginContext.hpp" +#include #include #include #include @@ -117,6 +118,30 @@ void loadPathDialog(const std::string& path) #endif } +void loadSelectionDialog() +{ + app::RackWidget* const w = APP->scene->rack; + + std::string selectionDir = asset::user("selections"); + system::createDirectories(selectionDir); + + async_dialog_filebrowser(false, selectionDir.c_str(), "Import selection", [w](char* pathC) { + if (!pathC) { + // No path selected + return; + } + + try { + w->loadSelection(pathC); + } + catch (Exception& e) { + async_dialog_message(e.what()); + } + + std::free(pathC); + }); +} + void loadTemplateDialog() { #ifndef HEADLESS diff --git a/src/CardinalCommon.hpp b/src/CardinalCommon.hpp index 4374472..fd05a80 100644 --- a/src/CardinalCommon.hpp +++ b/src/CardinalCommon.hpp @@ -31,6 +31,7 @@ namespace patchUtils void loadDialog(); void loadPathDialog(const std::string& path); +void loadSelectionDialog(); void loadTemplateDialog(); void revertDialog(); void saveDialog(const std::string& path); diff --git a/src/CardinalModuleWidget.cpp b/src/CardinalModuleWidget.cpp index fa1ca9c..730c681 100644 --- a/src/CardinalModuleWidget.cpp +++ b/src/CardinalModuleWidget.cpp @@ -239,28 +239,6 @@ static void CardinalModuleWidget__createContextMenu(ModuleWidget* const w, w->appendContextMenu(menu); } -static void CardinalModuleWidget__loadSelectionDialog(RackWidget* const w) -{ - std::string selectionDir = asset::user("selections"); - system::createDirectories(selectionDir); - - async_dialog_filebrowser(false, selectionDir.c_str(), "Import selection", [w](char* pathC) { - if (!pathC) { - // No path selected - return; - } - - try { - w->loadSelection(pathC); - } - catch (Exception& e) { - async_dialog_message(e.what()); - } - - std::free(pathC); - }); -} - static void CardinalModuleWidget__saveSelectionDialog(RackWidget* const w) { std::string selectionDir = asset::user("selections"); @@ -355,11 +333,6 @@ void appendSelectionContextMenu(ui::Menu* const menu) w->pasteClipboardAction(); }, false, true)); - // Load - menu->addChild(createMenuItem("Import selection", "", [w]() { - CardinalModuleWidget__loadSelectionDialog(w); - }, false, true)); - // Save menu->addChild(createMenuItem("Save selection as", "", [w]() { CardinalModuleWidget__saveSelectionDialog(w); diff --git a/src/Rack b/src/Rack index 704590e..9ad5332 160000 --- a/src/Rack +++ b/src/Rack @@ -1 +1 @@ -Subproject commit 704590eb6e462860ae6187ec8bc754af476c1a4e +Subproject commit 9ad53329fff74989daf3365600f9fccc0b6f5266 diff --git a/src/override/MenuBar.cpp b/src/override/MenuBar.cpp index 075f339..20af915 100644 --- a/src/override/MenuBar.cpp +++ b/src/override/MenuBar.cpp @@ -174,6 +174,14 @@ struct FileButton : MenuButton { patchUtils::revertDialog(); }, APP->patch->path.empty())); + menu->addChild(new ui::MenuSeparator); + + // Load selection + menu->addChild(createMenuItem("Import selection", "", [=]() { + // APP->scene->rack->loadSelectionDialog(); + patchUtils::loadSelectionDialog(); + }, false, true)); + if (isStandalone) { menu->addChild(new ui::MenuSeparator); @@ -325,13 +333,19 @@ struct CableTensionQuantity : Quantity { return settings::cableTension; } float getDefaultValue() override { - return 0.5; + return 0.75; + } + float getDisplayValue() override { + return getValue() * 100; + } + void setDisplayValue(float displayValue) override { + setValue(displayValue / 100); } std::string getLabel() override { return "Cable tension"; } - int getDisplayPrecision() override { - return 2; + std::string getUnit() override { + return "%"; } }; struct CableTensionSlider : ui::Slider {