Signed-off-by: falkTX <falktx@falktx.com>tags/22.07
@@ -132,9 +132,9 @@ void CardinalModuleWidget__saveDialog(ModuleWidget* const w) | |||
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)) | |||
{ | |||
// Note: This is not cached, so opening this menu each time might have a bit of latency. | |||
std::vector<std::string> entries = system::getEntries(presetDir); | |||
std::sort(entries.begin(), entries.end()); | |||
for (std::string path : entries) { | |||
@@ -143,7 +143,7 @@ static void appendPresetItems(ui::Menu* menu, WeakPtr<ModuleWidget> moduleWidget | |||
std::regex r("^\\d+_"); | |||
name = std::regex_replace(name, r, ""); | |||
if (system::getExtension(path) == ".vcvm") | |||
if (system::getExtension(path) == ".vcvm" && name != "template") | |||
{ | |||
if (!foundPresets) | |||
menu->addChild(new ui::MenuSeparator); | |||
@@ -327,6 +327,11 @@ void CardinalModuleWidget::onButton(const ButtonEvent& e) | |||
return; | |||
} | |||
// If module positions are locked, don't consume left-click | |||
if (settings::lockModules) { | |||
return; | |||
} | |||
internal->dragOffset = e.pos; | |||
} | |||
@@ -517,6 +517,7 @@ public: | |||
fWindowParameters[kWindowParameterBrowserSort] = 3.0f; | |||
fWindowParameters[kWindowParameterBrowserZoom] = 50.0f; | |||
fWindowParameters[kWindowParameterInvertZoom] = 0.0f; | |||
fWindowParameters[kWindowParameterSqueezeModulePositions] = 1.0f; | |||
#endif | |||
// create unique temporary path for this instance | |||
@@ -862,6 +863,14 @@ protected: | |||
parameter.ranges.min = 0.0f; | |||
parameter.ranges.max = 1.0f; | |||
break; | |||
case kWindowParameterSqueezeModulePositions: | |||
parameter.name = "Auto-squeeze module positions"; | |||
parameter.symbol = "squeezeModules"; | |||
parameter.hints = kParameterIsAutomatable|kParameterIsInteger|kParameterIsBoolean; | |||
parameter.ranges.def = 1.0f; | |||
parameter.ranges.min = 0.0f; | |||
parameter.ranges.max = 1.0f; | |||
break; | |||
} | |||
#endif | |||
} | |||
@@ -419,6 +419,9 @@ public: | |||
case kWindowParameterInvertZoom: | |||
windowParameters.invertZoom = value > 0.5f; | |||
break; | |||
case kWindowParameterSqueezeModulePositions: | |||
windowParameters.squeezeModules = value > 0.5f; | |||
break; | |||
default: | |||
return; | |||
} | |||
@@ -515,6 +518,9 @@ protected: | |||
case kWindowParameterInvertZoom: | |||
windowParameters.invertZoom = value > 0.5f; | |||
break; | |||
case kWindowParameterSqueezeModulePositions: | |||
windowParameters.squeezeModules = value > 0.5f; | |||
break; | |||
default: | |||
return; | |||
} | |||
@@ -1 +1 @@ | |||
Subproject commit ca85e0a607a3a54fed8d2c3f0821c04ae62b8db7 | |||
Subproject commit 5551617afff182925940908eaf73a7d7361303cc |
@@ -33,6 +33,7 @@ START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------------------------------------------- | |||
// NOTE make sure to never change the order, parameters indexes are based on this | |||
enum WindowParameterList { | |||
kWindowParameterShowTooltips, | |||
kWindowParameterCableOpacity, | |||
@@ -47,6 +48,7 @@ enum WindowParameterList { | |||
kWindowParameterBrowserSort, | |||
kWindowParameterBrowserZoom, | |||
kWindowParameterInvertZoom, | |||
kWindowParameterSqueezeModulePositions, | |||
kWindowParameterCount, | |||
}; | |||
@@ -62,6 +64,7 @@ struct WindowParameters { | |||
bool tooltips = true; | |||
bool knobScroll = false; | |||
bool lockModules = false; | |||
bool squeezeModules = true; | |||
bool invertZoom = false; | |||
// cardinal specific | |||
int rateLimit = 0; | |||
@@ -489,6 +489,8 @@ struct ViewButton : MenuButton { | |||
menu->cornerFlags = BND_CORNER_TOP; | |||
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); | |||
menu->addChild(createMenuLabel("Appearance")); | |||
menu->addChild(createBoolPtrMenuItem("Show tooltips", "", &settings::tooltips)); | |||
ZoomSlider* zoomSlider = new ZoomSlider; | |||
@@ -512,8 +514,16 @@ struct ViewButton : MenuButton { | |||
menu->addChild(haloBrightnessSlider); | |||
menu->addChild(new ui::MenuSeparator); | |||
menu->addChild(createMenuLabel("Module dragging")); | |||
menu->addChild(createBoolPtrMenuItem("Lock module positions", "", &settings::lockModules)); | |||
menu->addChild(createBoolPtrMenuItem("Auto-squeeze modules when dragging", "", &settings::squeezeModules)); | |||
menu->addChild(new ui::MenuSeparator); | |||
menu->addChild(createMenuLabel("Parameters")); | |||
// menu->addChild(createBoolPtrMenuItem("Hide cursor while dragging", "", &settings::allowCursorLock)); | |||
// menu->addChild(createBoolPtrMenuItem("Lock cursor while dragging", "", &settings::allowCursorLock)); | |||
static const std::vector<std::string> knobModeLabels = { | |||
"Linear", | |||
@@ -537,12 +547,11 @@ struct ViewButton : MenuButton { | |||
knobScrollSensitivitySlider->box.size.x = 250.0; | |||
menu->addChild(knobScrollSensitivitySlider); | |||
menu->addChild(createBoolPtrMenuItem("Lock module positions", "", &settings::lockModules)); | |||
menu->addChild(new ui::MenuSeparator); | |||
menu->addChild(createMenuLabel("Window")); | |||
menu->addChild(createBoolPtrMenuItem("Invert zoom", "", &settings::invertZoom)); | |||
menu->addChild(new ui::MenuSeparator); | |||
static const std::vector<std::string> rateLimitLabels = { | |||
"None", | |||
"2x", | |||
@@ -775,6 +775,13 @@ void WindowParametersSave(rack::window::Window* const window) | |||
window->internal->callback->WindowParametersChanged(kWindowParameterLockModulePositions, | |||
rack::settings::lockModules); | |||
} | |||
if (window->internal->params.squeezeModules != rack::settings::squeezeModules) | |||
{ | |||
window->internal->params.squeezeModules = rack::settings::squeezeModules; | |||
if (window->internal->callback != nullptr) | |||
window->internal->callback->WindowParametersChanged(kWindowParameterSqueezeModulePositions, | |||
rack::settings::squeezeModules); | |||
} | |||
if (window->internal->params.invertZoom != rack::settings::invertZoom) | |||
{ | |||
window->internal->params.invertZoom = rack::settings::invertZoom; | |||
@@ -804,6 +811,7 @@ void WindowParametersRestore(rack::window::Window* const window) | |||
rack::settings::tooltips = window->internal->params.tooltips; | |||
rack::settings::knobScroll = window->internal->params.knobScroll; | |||
rack::settings::lockModules = window->internal->params.lockModules; | |||
rack::settings::squeezeModules = window->internal->params.squeezeModules; | |||
rack::settings::invertZoom = window->internal->params.invertZoom; | |||
rack::settings::rateLimit = window->internal->params.rateLimit; | |||
} | |||