@@ -145,6 +145,7 @@ struct RackWidget : OpaqueWidget { | |||||
WireContainer *wireContainer; | WireContainer *wireContainer; | ||||
std::string lastPath; | std::string lastPath; | ||||
Vec lastMousePos; | Vec lastMousePos; | ||||
bool lockModules = false; | |||||
RackWidget(); | RackWidget(); | ||||
~RackWidget(); | ~RackWidget(); | ||||
@@ -9,3 +9,4 @@ Cat by Nabilauzwa from the Noun Project | |||||
Stopwatch by Arthur Shlain from the Noun Project | Stopwatch by Arthur Shlain from the Noun Project | ||||
Sound by Gregor Cresnar from the Noun Project | Sound by Gregor Cresnar from the Noun Project | ||||
Refresh by un·delivered from the Noun Project | Refresh by un·delivered from the Noun Project | ||||
Lock by Andres Gleixner from the Noun Project |
@@ -0,0 +1,56 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
version="1.1" | |||||
x="0px" | |||||
y="0px" | |||||
viewBox="-7074.5 3413.5 16 16" | |||||
enable-background="new -7074.5 3413.5 24 24" | |||||
xml:space="preserve" | |||||
id="svg12" | |||||
sodipodi:docname="noun_468341_cc.svg" | |||||
width="16" | |||||
height="16" | |||||
inkscape:version="0.92.2 2405546, 2018-03-11"><metadata | |||||
id="metadata18"><rdf:RDF><cc:Work | |||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs | |||||
id="defs16" /><sodipodi:namedview | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1" | |||||
objecttolerance="10" | |||||
gridtolerance="10" | |||||
guidetolerance="10" | |||||
inkscape:pageopacity="0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:window-width="1600" | |||||
inkscape:window-height="882" | |||||
id="namedview14" | |||||
showgrid="false" | |||||
inkscape:zoom="7.8666667" | |||||
inkscape:cx="-9.7372881" | |||||
inkscape:cy="15" | |||||
inkscape:window-x="0" | |||||
inkscape:window-y="18" | |||||
inkscape:window-maximized="0" | |||||
inkscape:current-layer="svg12" /><g | |||||
id="g6" | |||||
transform="matrix(0.49999833,0,0,0.49999833,-3535.2618,1708.7557)" | |||||
style="fill:#b4b4b4;fill-opacity:1"><path | |||||
d="m -7066.5,3420.5 c 0,-2 1.054,-4.287 4,-4.287 2.973,0 4,2.287 4,4.287 v 3 h 3 v -3.509 c 0,-3.491 -3.196,-6.478 -7,-6.491 -4.063,-0.018 -7.002,2.991 -7,7 -0.01,0.084 0,3 0,3 h 3 z" | |||||
id="path2" | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#b4b4b4;fill-opacity:1" /><rect | |||||
x="-7071.5" | |||||
y="3424.5" | |||||
width="18" | |||||
height="13" | |||||
id="rect4" | |||||
style="fill:#b4b4b4;fill-opacity:1" /></g></svg> |
@@ -301,9 +301,11 @@ void ModuleWidget::onDragEnd(EventDragEnd &e) { | |||||
} | } | ||||
void ModuleWidget::onDragMove(EventDragMove &e) { | void ModuleWidget::onDragMove(EventDragMove &e) { | ||||
Rect newBox = box; | |||||
newBox.pos = gRackWidget->lastMousePos.minus(dragPos); | |||||
gRackWidget->requestModuleBoxNearest(this, newBox); | |||||
if (!gRackWidget->lockModules) { | |||||
Rect newBox = box; | |||||
newBox.pos = gRackWidget->lastMousePos.minus(dragPos); | |||||
gRackWidget->requestModuleBoxNearest(this, newBox); | |||||
} | |||||
} | } | ||||
@@ -140,6 +140,15 @@ struct SampleRateButton : TooltipIconButton { | |||||
} | } | ||||
}; | }; | ||||
struct RackLockButton : TooltipIconButton { | |||||
RackLockButton() { | |||||
setSVG(SVG::load(assetGlobal("res/icons/noun_468341_cc.svg"))); | |||||
tooltipText = "Lock modules"; | |||||
} | |||||
void onAction(EventAction &e) override { | |||||
gRackWidget->lockModules ^= true; | |||||
} | |||||
}; | |||||
Toolbar::Toolbar() { | Toolbar::Toolbar() { | ||||
@@ -176,6 +185,7 @@ Toolbar::Toolbar() { | |||||
layout->addChild(new SampleRateButton()); | layout->addChild(new SampleRateButton()); | ||||
layout->addChild(new PowerMeterButton()); | layout->addChild(new PowerMeterButton()); | ||||
layout->addChild(new RackLockButton()); | |||||
struct ZoomSlider : Slider { | struct ZoomSlider : Slider { | ||||
void onAction(EventAction &e) override { | void onAction(EventAction &e) override { | ||||