package jp.ac.aiit.jointry.models.blocks;
import java.util.UUID;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.scene.Cursor;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextField;
import javafx.scene.input.ContextMenuEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import jp.ac.aiit.jointry.models.Sprite;
import jp.ac.aiit.jointry.models.Status;
import jp.ac.aiit.jointry.services.broker.app.BlockDialog;
import static jp.ac.aiit.jointry.services.broker.app.JointryCommon.M_BLOCK_CHANGE_STATE;
import static jp.ac.aiit.jointry.services.broker.app.JointryCommon.M_BLOCK_REMOVE;
public abstract class Block extends AnchorPane {
public final double BASIC_HEIGHT = 40.0;
public final double BASIC_WIDTH = 250.0;
protected double anchorX;
protected double anchorY;
protected boolean changeable = true;
public Connector con;
private String uuid = UUID.randomUUID().toString();
private Sprite sprite;
public Block() {
setLayoutX(0);
setLayoutY(0);
setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
setCursor(Cursor.HAND);
}
});
setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
toFront();
anchorX = getLayoutX() - mouseEvent.getSceneX();
anchorY = getLayoutY() - mouseEvent.getSceneY();
setCursor(Cursor.MOVE);
}
});
setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
setCursor(Cursor.HAND);
if (con != null) {
con.detouch();
setConnector(null);
}
}
});
setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
@Override
public void handle(ContextMenuEvent t) {
remove();
BlockDialog.sendMessage(M_BLOCK_REMOVE, Block.this);
}
});
}
public void remove() {
Pane parent = (Pane) this.getParent();
parent.getChildren().remove(this);
setVisible(false);
}
public void move(double dx, double dy) {
setLayoutX(dx);
setLayoutY(dy);
}
public double fetchAllHeight() {
return getHeight();
}
public String getUUID() {
return uuid;
}
public void setUUID(String uuid) {
this.uuid = uuid;
}
public Sprite getSprite() {
return sprite;
}
public void setSprite(Sprite sprite) {
this.sprite = sprite;
}
public void setConnector(Connector con) {
this.con = con;
}
public Connector getConnector() {
return this.con;
}
protected void setChangeListener(final TextField field) {
field.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue ov, String t, String t1) {
if (changeable && !t1.equals(t)) {
BlockDialog.sendMessage(M_BLOCK_CHANGE_STATE, Block.this);
}
}
});
}
protected void setChangeListener(final ComboBox cb) {
cb.valueProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue ov, String t, String t1) {
if (changeable && !t1.equals(t)) {
BlockDialog.sendMessage(M_BLOCK_CHANGE_STATE, Block.this);
}
}
});
}
/*
* *************************************************************************
* TO BE INHERITED
* *************************************************************************
*/
public void initializeLink() {
throw new UnsupportedOperationException("Not supported yet.");
}
public String intern() {
throw new UnsupportedOperationException("Not supported yet.");
}
public Status getStatus() {
throw new UnsupportedOperationException("Not supported yet.");
}
public void setStatus(Status status) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void show() {
throw new UnsupportedOperationException("Not supported yet.");
}
public Label getLabel() {
throw new UnsupportedOperationException("Not supported yet.");
}
}