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 abstract class Element {
private Graphics2D graphics;
private int leftwidth, rightwidth, height;
private int padding;
private Point cord;
private String id;
private Row row;
private DiagramHandler handler;
private float zoom;
// specifies whether the element must not connect to another element.
private boolean terminated;
public Element(DiagramHandler handler, Graphics2D g, int padding, String id) {
this.handler = handler;
graphics = g;
this.padding = padding;
this.id = id;
leftwidth = 0;
rightwidth = 0;
height = 0;
cord = new Point(0, 0);
zoom = handler.getZoomFactor();
}
public void setRow(Row row) {
this.row = row;
}
public Row getRow() {
return row;
}
public final void setTerminated() {
terminated = true;
}
public final void setNotTerminated() {
terminated = false;
}
public Point getPosition() {
return cord;
}
public void setY(int y) {
cord.y = y;
}
public void setX(int x) {
cord.x = x;
}
protected Graphics2D getGraphics() {
return graphics;
}
public String getId() {
return id;
}
protected int getHeight() {
return height;
}
protected void setHeight(int height) {
this.height = height;
}
protected int getLeftWidth() {
return leftwidth;
}
protected int getRightWidth() {
return rightwidth;
}
protected int getWidth() {
return getLeftWidth() + getRightWidth();
}
protected void setWidth(int width) {
setLeftWidth(width / 2);
setRightWidth(width - width / 2);
}
protected void setLeftWidth(int width) {
leftwidth = width;
}
protected void setRightWidth(int width) {
rightwidth = width;
}
protected int getPadding() {
return padding;
}
public abstract void paint();
public boolean connectIn() {
return true;
}
public boolean connectOut_overrideable() {
return true;
}
public final boolean connectOut() {
return connectOut_overrideable() && !terminated;
}
public boolean arrowOut() {
return true;
}
public boolean arrowIn() {
return true;
}
public void printData(String prefix) {
System.out.println(prefix + this.getClass().getSimpleName());
}
// get connect for GOTO element
protected Point getNonStdConnectIn(Direction dir) {
return getConnect(dir);
}
protected Point getNonStdConnectOut(Direction dir) {
return getConnect(dir);
}
protected Point getConnect(Direction dir) {
Point c = (Point) cord.clone();
if (dir == Direction.UP) {
c.y -= getHeight() / 2;
}
else if (dir == Direction.DOWN) {
c.y += getHeight() - getHeight() / 2;
}
else if (dir == Direction.LEFT) {
c.x -= getLeftWidth();
}
else if (dir == Direction.RIGHT) {
c.x += getRightWidth();
}
return c;
}
protected DiagramHandler getHandler() {
return handler;
}
protected float getZoom() {
return zoom;
}
}