From 064585a6f6f069f946987f7fbcebc27c7904e141 Mon Sep 17 00:00:00 2001 From: Lubos Lenco Date: Thu, 20 May 2021 16:15:03 +0200 Subject: [PATCH] Add context menu to node canvas --- Sources/arm/ui/UINodes.hx | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Sources/arm/ui/UINodes.hx b/Sources/arm/ui/UINodes.hx index 047beaaa..e17d2d6b 100644 --- a/Sources/arm/ui/UINodes.hx +++ b/Sources/arm/ui/UINodes.hx @@ -60,6 +60,7 @@ class UINodes { Nodes.excludeRemove.push("BrushOutputNode"); Nodes.onLinkDrag = onLinkDrag; Nodes.onSocketReleased = onSocketReleased; + Nodes.onCanvasReleased = onCanvasReleased; Nodes.onNodeRemove = onNodeRemove; Nodes.onCanvasControl = onCanvasControl; @@ -197,6 +198,37 @@ class UINodes { } } + function onCanvasReleased() { + if (ui.inputReleasedR && Math.abs(ui.inputX - ui.inputStartedX) < 2 && Math.abs(ui.inputY - ui.inputStartedY) < 2) { + UIMenu.draw(function(uiMenu: Zui) { + var nodes = getNodes(); + uiMenu._y += 1; + uiMenu.enabled = nodes.nodesSelected.length > 0; + if (menuButton(uiMenu, tr("Cut"), "ctrl+x")) { + Zui.isCopy = true; + Zui.isCut = true; + } + if (menuButton(uiMenu, tr("Copy"), "ctrl+c")) { + Zui.isCopy = true; + } + uiMenu.enabled = Nodes.clipboard != ""; + if (menuButton(uiMenu, tr("Paste"), "ctrl+v")) { + Zui.isPaste = true; + } + uiMenu.enabled = nodes.nodesSelected.length > 0; + if (menuButton(uiMenu, tr("Delete"), "delete")) { + ui.isDeleteDown = true; + App.notifyOnNextFrame(function() { ui.isDeleteDown = false; }); + } + if (menuButton(uiMenu, tr("Duplicate"))) { + Zui.isCopy = true; + Zui.isPaste = true; + } + uiMenu.enabled = true; + }, 5); + } + } + public static function onNodeRemove(node: TNode) { if (node.type == "GROUP") { // Remove unused groups var found = false; @@ -881,4 +913,11 @@ class UINodes { for (c in canvases) if (c.name == name) return c; return null; } + + static function menuButton(ui: Zui, text: String, label = ""): Bool { + #if (krom_android || krom_ios) + label = ""; + #end + return ui.button(Config.buttonSpacing + text, Config.buttonAlign, label); + } }