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) { | static void appendPresetItems(ui::Menu* menu, WeakPtr<ModuleWidget> moduleWidget, std::string presetDir) { | ||||
bool foundPresets = false; | bool foundPresets = false; | ||||
// Note: This is not cached, so opening this menu each time might have a bit of latency. | |||||
if (system::isDirectory(presetDir)) | 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::vector<std::string> entries = system::getEntries(presetDir); | ||||
std::sort(entries.begin(), entries.end()); | std::sort(entries.begin(), entries.end()); | ||||
for (std::string path : entries) { | for (std::string path : entries) { | ||||
@@ -143,7 +143,7 @@ static void appendPresetItems(ui::Menu* menu, WeakPtr<ModuleWidget> moduleWidget | |||||
std::regex r("^\\d+_"); | std::regex r("^\\d+_"); | ||||
name = std::regex_replace(name, r, ""); | name = std::regex_replace(name, r, ""); | ||||
if (system::getExtension(path) == ".vcvm") | |||||
if (system::getExtension(path) == ".vcvm" && name != "template") | |||||
{ | { | ||||
if (!foundPresets) | if (!foundPresets) | ||||
menu->addChild(new ui::MenuSeparator); | menu->addChild(new ui::MenuSeparator); | ||||
@@ -327,6 +327,11 @@ void CardinalModuleWidget::onButton(const ButtonEvent& e) | |||||
return; | return; | ||||
} | } | ||||
// If module positions are locked, don't consume left-click | |||||
if (settings::lockModules) { | |||||
return; | |||||
} | |||||
internal->dragOffset = e.pos; | internal->dragOffset = e.pos; | ||||
} | } | ||||
@@ -517,6 +517,7 @@ public: | |||||
fWindowParameters[kWindowParameterBrowserSort] = 3.0f; | fWindowParameters[kWindowParameterBrowserSort] = 3.0f; | ||||
fWindowParameters[kWindowParameterBrowserZoom] = 50.0f; | fWindowParameters[kWindowParameterBrowserZoom] = 50.0f; | ||||
fWindowParameters[kWindowParameterInvertZoom] = 0.0f; | fWindowParameters[kWindowParameterInvertZoom] = 0.0f; | ||||
fWindowParameters[kWindowParameterSqueezeModulePositions] = 1.0f; | |||||
#endif | #endif | ||||
// create unique temporary path for this instance | // create unique temporary path for this instance | ||||
@@ -862,6 +863,14 @@ protected: | |||||
parameter.ranges.min = 0.0f; | parameter.ranges.min = 0.0f; | ||||
parameter.ranges.max = 1.0f; | parameter.ranges.max = 1.0f; | ||||
break; | 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 | #endif | ||||
} | } | ||||
@@ -419,6 +419,9 @@ public: | |||||
case kWindowParameterInvertZoom: | case kWindowParameterInvertZoom: | ||||
windowParameters.invertZoom = value > 0.5f; | windowParameters.invertZoom = value > 0.5f; | ||||
break; | break; | ||||
case kWindowParameterSqueezeModulePositions: | |||||
windowParameters.squeezeModules = value > 0.5f; | |||||
break; | |||||
default: | default: | ||||
return; | return; | ||||
} | } | ||||
@@ -515,6 +518,9 @@ protected: | |||||
case kWindowParameterInvertZoom: | case kWindowParameterInvertZoom: | ||||
windowParameters.invertZoom = value > 0.5f; | windowParameters.invertZoom = value > 0.5f; | ||||
break; | break; | ||||
case kWindowParameterSqueezeModulePositions: | |||||
windowParameters.squeezeModules = value > 0.5f; | |||||
break; | |||||
default: | default: | ||||
return; | 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 { | enum WindowParameterList { | ||||
kWindowParameterShowTooltips, | kWindowParameterShowTooltips, | ||||
kWindowParameterCableOpacity, | kWindowParameterCableOpacity, | ||||
@@ -47,6 +48,7 @@ enum WindowParameterList { | |||||
kWindowParameterBrowserSort, | kWindowParameterBrowserSort, | ||||
kWindowParameterBrowserZoom, | kWindowParameterBrowserZoom, | ||||
kWindowParameterInvertZoom, | kWindowParameterInvertZoom, | ||||
kWindowParameterSqueezeModulePositions, | |||||
kWindowParameterCount, | kWindowParameterCount, | ||||
}; | }; | ||||
@@ -62,6 +64,7 @@ struct WindowParameters { | |||||
bool tooltips = true; | bool tooltips = true; | ||||
bool knobScroll = false; | bool knobScroll = false; | ||||
bool lockModules = false; | bool lockModules = false; | ||||
bool squeezeModules = true; | |||||
bool invertZoom = false; | bool invertZoom = false; | ||||
// cardinal specific | // cardinal specific | ||||
int rateLimit = 0; | int rateLimit = 0; | ||||
@@ -489,6 +489,8 @@ struct ViewButton : MenuButton { | |||||
menu->cornerFlags = BND_CORNER_TOP; | menu->cornerFlags = BND_CORNER_TOP; | ||||
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); | menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); | ||||
menu->addChild(createMenuLabel("Appearance")); | |||||
menu->addChild(createBoolPtrMenuItem("Show tooltips", "", &settings::tooltips)); | menu->addChild(createBoolPtrMenuItem("Show tooltips", "", &settings::tooltips)); | ||||
ZoomSlider* zoomSlider = new ZoomSlider; | ZoomSlider* zoomSlider = new ZoomSlider; | ||||
@@ -512,8 +514,16 @@ struct ViewButton : MenuButton { | |||||
menu->addChild(haloBrightnessSlider); | menu->addChild(haloBrightnessSlider); | ||||
menu->addChild(new ui::MenuSeparator); | 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 = { | static const std::vector<std::string> knobModeLabels = { | ||||
"Linear", | "Linear", | ||||
@@ -537,12 +547,11 @@ struct ViewButton : MenuButton { | |||||
knobScrollSensitivitySlider->box.size.x = 250.0; | knobScrollSensitivitySlider->box.size.x = 250.0; | ||||
menu->addChild(knobScrollSensitivitySlider); | 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(createBoolPtrMenuItem("Invert zoom", "", &settings::invertZoom)); | ||||
menu->addChild(new ui::MenuSeparator); | |||||
static const std::vector<std::string> rateLimitLabels = { | static const std::vector<std::string> rateLimitLabels = { | ||||
"None", | "None", | ||||
"2x", | "2x", | ||||
@@ -775,6 +775,13 @@ void WindowParametersSave(rack::window::Window* const window) | |||||
window->internal->callback->WindowParametersChanged(kWindowParameterLockModulePositions, | window->internal->callback->WindowParametersChanged(kWindowParameterLockModulePositions, | ||||
rack::settings::lockModules); | 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) | if (window->internal->params.invertZoom != rack::settings::invertZoom) | ||||
{ | { | ||||
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::tooltips = window->internal->params.tooltips; | ||||
rack::settings::knobScroll = window->internal->params.knobScroll; | rack::settings::knobScroll = window->internal->params.knobScroll; | ||||
rack::settings::lockModules = window->internal->params.lockModules; | rack::settings::lockModules = window->internal->params.lockModules; | ||||
rack::settings::squeezeModules = window->internal->params.squeezeModules; | |||||
rack::settings::invertZoom = window->internal->params.invertZoom; | rack::settings::invertZoom = window->internal->params.invertZoom; | ||||
rack::settings::rateLimit = window->internal->params.rateLimit; | rack::settings::rateLimit = window->internal->params.rateLimit; | ||||
} | } | ||||