package edu.purdue.pivot.skwiki.client.pathviewer; import org.vaadin.gwtgraphics.client.DrawingArea; import org.vaadin.gwtgraphics.client.shape.Path; public class Connection { private ViewLabel label1; private ViewLabel label2; int Vspace = 50; Path path;// = new Path(startX, startY); public Connection(ViewLabel label1, ViewLabel label2) { this.label1 = label1; this.label2 = label2; path = new Path(0,0); // path.lineRelativelyTo(endX, endY); if (label1.getPosX() == label2.getPosX()) { ///Draw Bezier curve to avoid curve overlap if ( Math.abs(label1.getPosY() - label2.getPosY()) > Vspace) { int x1 = label1.getPosX(); int y1 = label1.getPosY(); path = new Path(x1, y1); path.setStrokeColor("rgba(50, 50, 50, 0.5)"); path.setFillOpacity(0); int x2 = label2.getPosX(); int y2 = label2.getPosY(); //Window.alert("x2 y2"+ x2+" "+y2); int curveOffset = (int) (40.0 * (1.0 + Math.random())); int control1x = x1 + (-x1+x2)/3 - curveOffset; int control1y = y1 + (-y1+y2)/3; int control2x = x1+ 2*(-x1+x2)/3 - curveOffset; int control2y = y1 + 2*(-y1+y2)/3; //Window.alert("control2x control2y "+ control2x+" "+control2y); path.moveTo(x1, y1); path.curveTo(control1x, control1y, control2x, control2y, x2, y2); path.moveTo(x2, y2); } else if (Math.abs(label1.getPosY() - label2.getPosY()) <= Vspace){ int x1 = label1.getPosX(); int y1 = label1.getPosY(); path = new Path(x1, y1); path.setFillOpacity(0); path.setStrokeColor("rgba(50, 50, 50, 0.3)"); path.setStrokeOpacity(0.7); int x2 = label2.getPosX(); int y2 = label2.getPosY(); path.moveTo(x1, y1); path.lineTo(x2, y2); } } else if (label1.getPosX() < label2.getPosX()) { int x1 = label1.getPosX(); int y1 = label1.getPosY(); path = new Path(x1, y1); path.setStrokeColor("rgba(50, 50, 50, 0.3)"); path.setFillOpacity(0); path.setStrokeOpacity(0.7); int x2 = label2.getPosX(); int y2 = label2.getPosY(); path.moveTo(x1, y1); path.lineTo(x2, y2); } else if (label1.getPosX() > label2.getPosX()) { int x1 = label1.getPosX(); int y1 = label1.getPosY(); path = new Path(x1, y1); path.setStrokeColor("rgba(50, 50, 50, 0.3)"); path.setFillOpacity(0); path.setStrokeOpacity(0.7); int x2 = label2.getPosX(); int y2 = label2.getPosY(); path.moveTo(x1, y1); path.lineTo(x2, y2); } path.close(); } // TouchPanel widget1; // TouchPanel widget2; // // public Connection(TouchPanel widget1, TouchPanel widget2) { // this.widget1 = widget1; // this.widget2 = widget2; // // int width = 150; // int height = 100; // // int posX1 = widget1.getAbsoluteLeft() + width / 2; // int posY1 = widget1.getAbsoluteTop() + height / 2; // // int posX2 = widget2.getAbsoluteLeft() + width / 2; // int posY2 = widget2.getAbsoluteTop() + height / 2; // // path = new Path(posX1, posY1); // path.setFillOpacity(0); // path.setStrokeColor("gray"); // // path.lineTo(posX2, posY2); // path.close(); // // } public void append(DrawingArea canvas) { canvas.add(this.path); } }