From f43a03f75bf3156233c2af582c91450e28baeca8 Mon Sep 17 00:00:00 2001 From: Stephane Dallongeville <stephane@outlook.com> Date: Thu, 13 Aug 2020 15:38:13 +0200 Subject: [PATCH] Fixed exposed variables restoration when embedding or copy / pasting workflow --- .../gui/block/WorkFlowContainer.java | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java b/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java index f07994a..3a64436 100644 --- a/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java +++ b/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java @@ -335,7 +335,7 @@ public class WorkFlowContainer extends JLayeredPane implements WorkFlowListener, } else dstBlockPanel.refreshNow(); - + repaint(); } } @@ -368,8 +368,29 @@ public class WorkFlowContainer extends JLayeredPane implements WorkFlowListener, } panel.drawPanel(); + blockPanels.put(blockDesc, panel); add(panel); + + // FIX: get exposed links correctly restored on copy/paste as setVisibility isn't called in that case (Stephane) + // this is really an ugly fix but the whole stuff is a complete mess honestly :-/ + if (blockDesc.isWorkFlow()) + { + synchronized (blockDesc.inputVars) + { + // update exposed links + for (Var<?> var : blockDesc.inputVars) + ((WorkFlowPanel) panel).updateExposedLink(var, blockDesc.inputVars.isVisible(var)); + } + + synchronized (blockDesc.outputVars) + { + // update exposed links + for (Var<?> var : blockDesc.outputVars) + ((WorkFlowPanel) panel).updateExposedLink(var, blockDesc.outputVars.isVisible(var)); + } + } + // Layer 0 for blocks // Layer 1 for work flows setLayer(panel, blockDesc.isWorkFlow() ? 1 : 0, 0); @@ -531,9 +552,9 @@ public class WorkFlowContainer extends JLayeredPane implements WorkFlowListener, workFlow.removeBlock(workFlow.getBlock(i), true); } - workFlow.addBlock(embed.getBlockDescriptor()); - MainFrame.pasteSelection(embed, true); + + workFlow.addBlock(embed.getBlockDescriptor()); } /** -- GitLab