You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hop.apache.org by ha...@apache.org on 2021/03/29 06:02:01 UTC

[incubator-hop] branch master updated: [HOP-2715] Client-side canvas drawing on Hop Web

This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hop.git


The following commit(s) were added to refs/heads/master by this push:
     new 4b0c8cb  [HOP-2715] Client-side canvas drawing on Hop Web
     new 501c148  Merge pull request #716 from HiromuHota/HOP-2715
4b0c8cb is described below

commit 4b0c8cb15d6090922a9ad093de1a65eabdc84c74
Author: Hiromu Hota <hi...@gmail.com>
AuthorDate: Sun Mar 28 18:06:52 2021 -0700

    [HOP-2715] Client-side canvas drawing on Hop Web
---
 .../hopgui/file/pipeline/HopGuiPipelineGraph.java  | 26 ++++++++++++++++++++++
 .../hopgui/file/workflow/HopGuiWorkflowGraph.java  | 26 ++++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
index 2b5b618..5603e59 100644
--- a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
+++ b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
@@ -74,6 +74,8 @@ import org.apache.hop.ui.core.gui.HopNamespace;
 import org.apache.hop.ui.core.widget.CheckBoxToolTip;
 import org.apache.hop.ui.core.widget.OsHelper;
 import org.apache.hop.ui.hopgui.HopGui;
+import org.apache.hop.ui.hopgui.CanvasFacade;
+import org.apache.hop.ui.hopgui.CanvasListener;
 import org.apache.hop.ui.hopgui.HopGuiExtensionPoint;
 import org.apache.hop.ui.hopgui.context.GuiContextUtil;
 import org.apache.hop.ui.hopgui.context.IGuiContextHandler;
@@ -424,6 +426,11 @@ public class HopGuiPipelineGraph extends HopGuiAbstractGraph
     wsCanvas.setLayoutData(fdsCanvas);
 
     canvas = new Canvas(wsCanvas, SWT.NO_BACKGROUND);
+    Listener listener = CanvasListener.getInstance();
+    canvas.addListener(SWT.MouseDown, listener);
+    canvas.addListener(SWT.MouseMove, listener);
+    canvas.addListener(SWT.MouseUp, listener);
+    canvas.addListener(SWT.Paint, listener);
     FormData fdCanvas = new FormData();
     fdCanvas.left = new FormAttachment(0, 0);
     fdCanvas.top = new FormAttachment(0, 0);
@@ -606,6 +613,10 @@ public class HopGuiPipelineGraph extends HopGuiAbstractGraph
 
   @Override
   public void mouseDown(MouseEvent e) {
+    if (EnvironmentUtils.getInstance().isWeb()) {
+      // RAP does not support certain mouse events.
+      mouseHover(e);
+    }
     doubleClick = false;
     mouseMovedSinceClick = false;
 
@@ -705,8 +716,10 @@ public class HopGuiPipelineGraph extends HopGuiAbstractGraph
           } else if (e.button == 2 || (e.button == 1 && shift)) {
             // SHIFT CLICK is start of drag to create a new hop
             //
+            canvas.setData("mode", "hop");
             startHopTransform = transformMeta;
           } else {
+            canvas.setData("mode", "drag");
             selectedTransforms = pipelineMeta.getSelectedTransforms();
             selectedTransform = transformMeta;
             //
@@ -763,6 +776,7 @@ public class HopGuiPipelineGraph extends HopGuiAbstractGraph
       } else {
         // No area-owner & no hop means : background click:
         //
+        canvas.setData("mode", "select");
         startHopTransform = null;
         if (!control && e.button == 1) {
           selectionRegion = new org.apache.hop.core.gui.Rectangle(real.x, real.y, 0, 0);
@@ -770,6 +784,10 @@ public class HopGuiPipelineGraph extends HopGuiAbstractGraph
         updateGui();
       }
     }
+    if (EnvironmentUtils.getInstance().isWeb()) {
+      // RAP does not support certain mouse events.
+      mouseMove(e);
+    }
   }
 
   private enum SingleClickType {
@@ -781,6 +799,13 @@ public class HopGuiPipelineGraph extends HopGuiAbstractGraph
 
   @Override
   public void mouseUp(MouseEvent e) {
+    // canvas.setData("mode", null); does not work.
+    canvas.setData("mode", "null");
+
+    if (EnvironmentUtils.getInstance().isWeb()) {
+      // RAP does not support certain mouse events.
+      mouseMove(e);
+    }
 
     boolean control = (e.stateMask & SWT.MOD1) != 0;
     PipelineHopMeta selectedHop = findPipelineHop(e.x, e.y);
@@ -3204,6 +3229,7 @@ public class HopGuiPipelineGraph extends HopGuiAbstractGraph
     } finally {
       gc.dispose();
     }
+    CanvasFacade.setData(canvas, magnification, pipelineMeta, HopGuiPipelineGraph.class);
   }
 
   @Override
diff --git a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
index e5d9dd5..108c0b8 100644
--- a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
+++ b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
@@ -56,6 +56,8 @@ import org.apache.hop.ui.core.gui.HopNamespace;
 import org.apache.hop.ui.core.widget.CheckBoxToolTip;
 import org.apache.hop.ui.core.widget.OsHelper;
 import org.apache.hop.ui.hopgui.HopGui;
+import org.apache.hop.ui.hopgui.CanvasFacade;
+import org.apache.hop.ui.hopgui.CanvasListener;
 import org.apache.hop.ui.hopgui.context.GuiContextUtil;
 import org.apache.hop.ui.hopgui.context.IGuiContextHandler;
 import org.apache.hop.ui.hopgui.dialog.NotePadDialog;
@@ -329,6 +331,11 @@ public class HopGuiWorkflowGraph extends HopGuiAbstractGraph
     wsCanvas.setLayoutData(fdsCanvas);
 
     canvas = new Canvas(wsCanvas, SWT.NO_BACKGROUND);
+    Listener listener = CanvasListener.getInstance();
+    canvas.addListener(SWT.MouseDown, listener);
+    canvas.addListener(SWT.MouseMove, listener);
+    canvas.addListener(SWT.MouseUp, listener);
+    canvas.addListener(SWT.Paint, listener);
     FormData fdCanvas = new FormData();
     fdCanvas.left = new FormAttachment(0, 0);
     fdCanvas.top = new FormAttachment(0, 0);
@@ -489,6 +496,10 @@ public class HopGuiWorkflowGraph extends HopGuiAbstractGraph
   }
 
   public void mouseDown(MouseEvent e) {
+    if (EnvironmentUtils.getInstance().isWeb()) {
+      // RAP does not support certain mouse events.
+      mouseHover(e);
+    }
     doubleClick = false;
 
     if (ignoreNextClick) {
@@ -540,9 +551,11 @@ public class HopGuiWorkflowGraph extends HopGuiAbstractGraph
             } else if (e.button == 2 || (e.button == 1 && shift)) {
               // SHIFT CLICK is start of drag to create a new hop
               //
+              canvas.setData("mode", "hop");
               startHopAction = actionCopy;
 
             } else {
+              canvas.setData("mode", "drag");
               selectedActions = workflowMeta.getSelectedActions();
               selectedAction = actionCopy;
               //
@@ -609,6 +622,7 @@ public class HopGuiWorkflowGraph extends HopGuiAbstractGraph
         } else {
           // No area-owner means: background:
           //
+          canvas.setData("mode", "select");
           startHopAction = null;
           if (!control) {
             selectionRegion = new org.apache.hop.core.gui.Rectangle(real.x, real.y, 0, 0);
@@ -617,6 +631,10 @@ public class HopGuiWorkflowGraph extends HopGuiAbstractGraph
         }
       }
     }
+    if (EnvironmentUtils.getInstance().isWeb()) {
+      // RAP does not support certain mouse events.
+      mouseMove(e);
+    }
   }
 
   private enum SingleClickType {
@@ -627,6 +645,13 @@ public class HopGuiWorkflowGraph extends HopGuiAbstractGraph
   }
 
   public void mouseUp(MouseEvent e) {
+    // canvas.setData("mode", null); does not work.
+    canvas.setData("mode", "null");
+    if (EnvironmentUtils.getInstance().isWeb()) {
+      // RAP does not support certain mouse events.
+      mouseMove(e);
+    }
+
     boolean control = (e.stateMask & SWT.MOD1) != 0;
 
     boolean singleClick = false;
@@ -2612,6 +2637,7 @@ public class HopGuiWorkflowGraph extends HopGuiAbstractGraph
     } finally {
       gc.dispose();
     }
+    CanvasFacade.setData(canvas, magnification, workflowMeta, HopGuiWorkflowGraph.class);
   }
 
   protected Point getOffset() {