@@ -1 +1 @@ | |||||
Subproject commit 9ef61963db2c7a03053aa5ff613e35d79335a83c | |||||
Subproject commit e7c2fe6d54531fd2fd25014dc722a18546393207 |
@@ -30,6 +30,7 @@ | |||||
#include "AsyncDialog.hpp" | #include "AsyncDialog.hpp" | ||||
#include "PluginContext.hpp" | #include "PluginContext.hpp" | ||||
#include <asset.hpp> | |||||
#include <context.hpp> | #include <context.hpp> | ||||
#include <history.hpp> | #include <history.hpp> | ||||
#include <patch.hpp> | #include <patch.hpp> | ||||
@@ -117,6 +118,30 @@ void loadPathDialog(const std::string& path) | |||||
#endif | #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() | void loadTemplateDialog() | ||||
{ | { | ||||
#ifndef HEADLESS | #ifndef HEADLESS | ||||
@@ -31,6 +31,7 @@ namespace patchUtils | |||||
void loadDialog(); | void loadDialog(); | ||||
void loadPathDialog(const std::string& path); | void loadPathDialog(const std::string& path); | ||||
void loadSelectionDialog(); | |||||
void loadTemplateDialog(); | void loadTemplateDialog(); | ||||
void revertDialog(); | void revertDialog(); | ||||
void saveDialog(const std::string& path); | void saveDialog(const std::string& path); | ||||
@@ -239,28 +239,6 @@ static void CardinalModuleWidget__createContextMenu(ModuleWidget* const w, | |||||
w->appendContextMenu(menu); | 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) | static void CardinalModuleWidget__saveSelectionDialog(RackWidget* const w) | ||||
{ | { | ||||
std::string selectionDir = asset::user("selections"); | std::string selectionDir = asset::user("selections"); | ||||
@@ -355,11 +333,6 @@ void appendSelectionContextMenu(ui::Menu* const menu) | |||||
w->pasteClipboardAction(); | w->pasteClipboardAction(); | ||||
}, false, true)); | }, false, true)); | ||||
// Load | |||||
menu->addChild(createMenuItem("Import selection", "", [w]() { | |||||
CardinalModuleWidget__loadSelectionDialog(w); | |||||
}, false, true)); | |||||
// Save | // Save | ||||
menu->addChild(createMenuItem("Save selection as", "", [w]() { | menu->addChild(createMenuItem("Save selection as", "", [w]() { | ||||
CardinalModuleWidget__saveSelectionDialog(w); | CardinalModuleWidget__saveSelectionDialog(w); | ||||
@@ -1 +1 @@ | |||||
Subproject commit 704590eb6e462860ae6187ec8bc754af476c1a4e | |||||
Subproject commit 9ad53329fff74989daf3365600f9fccc0b6f5266 |
@@ -174,6 +174,14 @@ struct FileButton : MenuButton { | |||||
patchUtils::revertDialog(); | patchUtils::revertDialog(); | ||||
}, APP->patch->path.empty())); | }, 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) { | if (isStandalone) { | ||||
menu->addChild(new ui::MenuSeparator); | menu->addChild(new ui::MenuSeparator); | ||||
@@ -325,13 +333,19 @@ struct CableTensionQuantity : Quantity { | |||||
return settings::cableTension; | return settings::cableTension; | ||||
} | } | ||||
float getDefaultValue() override { | 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 { | std::string getLabel() override { | ||||
return "Cable tension"; | return "Cable tension"; | ||||
} | } | ||||
int getDisplayPrecision() override { | |||||
return 2; | |||||
std::string getUnit() override { | |||||
return "%"; | |||||
} | } | ||||
}; | }; | ||||
struct CableTensionSlider : ui::Slider { | struct CableTensionSlider : ui::Slider { | ||||