package com.baselet.element.old.activity; import java.awt.Graphics2D; import java.awt.Point; import com.baselet.control.enums.Direction; import com.baselet.diagram.DiagramHandler; public class Sync extends StopElement { private int h = (int) (4 * getZoom()); // pad for the connectors private int pad = (int) (20 * getZoom()); private int w = (int) (80 * getZoom()); // padding between connectors private int con_pad = (int) (10 * getZoom()); private Integer current_left_x; private Integer current_right_x; public Sync(DiagramHandler handler, Graphics2D g, String id) { super(handler, g, (int) (Const.PAD * 2 * handler.getZoomFactor()), id == null ? "Sync" : id); setHeight(h + pad); setWidth(w); } @Override public void paint() { int x = getPosition().x; int y = getPosition().y; getGraphics().fillRect(x - w / 2, y + (pad - h) / 2, w, (int) (4 * getZoom())); } @Override public boolean arrowIn() { return true; } @Override protected Point getNonStdConnectIn(Direction dir) { Point c = getConnect(dir); Point c2 = (Point) c.clone(); if (dir.equals(Direction.LEFT)) { c2.x -= (int) (10 * getZoom()); } else if (dir.equals(Direction.RIGHT)) { c2.x += (int) (10 * getZoom()); } c2.y -= (int) (10 * getZoom()); if (arrowIn()) { Connector.drawArrow(getGraphics(), getZoom(), c2.x, c2.y, c.x, c.y); } else { getGraphics().drawLine(c2.x, c2.y, c.x, c.y); } return c2; } @Override protected Point getNonStdConnectOut(Direction dir) { Point c = getConnect(Direction.DOWN); if (dir.equals(Direction.LEFT)) { c.x -= (int) (10 * getZoom()); } else if (dir.equals(Direction.RIGHT)) { c.x += (int) (10 * getZoom()); } getGraphics().drawLine(c.x, c.y + (int) (5 * getZoom()), c.x, c.y); c.y += (int) (5 * getZoom()); return c; } @Override protected Point getConnect(Direction dir) { Point c = (Point) getPosition().clone(); if (current_left_x == null) { current_left_x = getPosition().x; current_right_x = current_left_x; } if (dir == Direction.UP) { c.y += (pad - h) / 2; } else if (dir == Direction.DOWN) { c.y += (pad + h) / 2; } else if (dir == Direction.LEFT) { if (c.x - current_left_x < w / 2 - con_pad) { current_left_x -= con_pad; } c.x = current_left_x; c.y += (pad - h) / 2; } else if (dir == Direction.RIGHT) { if (current_right_x - c.x < w / 2 - con_pad) { current_right_x += con_pad; } c.x = current_right_x; c.y += (pad - h) / 2; } return c; } @Override public void connectTo(Element e) { if (e != null) { if (connectIn() && e.connectOut()) { Point to = getPosition(); Point from = e.getConnect(Direction.DOWN); if (from.x == to.x) { to = getConnect(Direction.UP); } else if (from.x < to.x) { to = getConnect(Direction.LEFT); } else if (from.x > to.x) { to = getConnect(Direction.RIGHT); } if (from.x != to.x) { getGraphics().drawLine(from.x, from.y, from.x, to.y - (int) (Const.PAD * 2 * getZoom())); from.y = to.y - (int) (Const.PAD * 2 * getZoom()); } if (arrowIn() && e.arrowOut()) { Connector.drawArrow(getGraphics(), getZoom(), from.x, from.y, to.x, to.y); } else { getGraphics().drawLine(from.x, from.y, to.x, to.y); } } } } }