Connectable.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package mdd.client;
  2. import javafx.beans.property.DoubleProperty;
  3. import javafx.beans.property.SimpleDoubleProperty;
  4. import javafx.beans.value.ChangeListener;
  5. import javafx.beans.value.ObservableValue;
  6. import javafx.event.EventHandler;
  7. import javafx.scene.Group;
  8. import javafx.scene.control.TextField;
  9. import javafx.scene.input.*;
  10. import javafx.scene.layout.VBox;
  11. import javafx.scene.paint.Color;
  12. import javafx.scene.shape.Circle;
  13. import javafx.scene.text.Font;
  14. import javafx.scene.text.Text;
  15. import org.json.simple.JSONArray;
  16. import org.json.simple.JSONObject;
  17. import org.json.simple.parser.JSONParser;
  18. import org.json.simple.parser.ParseException;
  19. import javax.xml.stream.EventFilter;
  20. public class Connectable extends Group implements IGUIEventClient ,ChangeListener<Number>{
  21. private GUIEventHandler _eventHandler = new GUIEventHandler();
  22. private Circle _border;
  23. private Circle _circle;
  24. private boolean _connected = false;
  25. private boolean _optimizable = false;
  26. private Module _parent;
  27. private ConnectableType _type;
  28. public String ID = "";
  29. public DoubleProperty x = new SimpleDoubleProperty();
  30. public DoubleProperty y = new SimpleDoubleProperty();
  31. public Connectable(Module parent, ConnectableType type, String id){
  32. _parent = parent;
  33. _type = type;
  34. ID = id;
  35. _parent.translateXProperty().addListener(this);
  36. _parent.translateYProperty().addListener(this);
  37. _parent.hlayout.translateXProperty().addListener(this);
  38. _parent.hlayout.translateYProperty().addListener(this);
  39. if (_type == ConnectableType.INPUT){
  40. _parent.inputs.layoutXProperty().addListener(this);
  41. _parent.inputs.layoutYProperty().addListener(this);
  42. }
  43. else{
  44. _parent.outputs.layoutXProperty().addListener(this);
  45. _parent.outputs.layoutYProperty().addListener(this);
  46. }
  47. layoutXProperty().addListener(this);
  48. layoutYProperty().addListener(this);
  49. _border = new Circle(0,0, 7);
  50. _border.setFill(Color.BLACK);
  51. _circle = new Circle(0,0,5);
  52. _circle.setFill(Color.WHITE);
  53. _circle.setOnMouseClicked(new EventHandler<MouseEvent>()
  54. {
  55. @Override
  56. public void handle(MouseEvent e) {
  57. if(e.getButton() == MouseButton.SECONDARY) {
  58. if (!_connected){
  59. _optimizable = !_optimizable;
  60. updateColor();
  61. }
  62. }
  63. }
  64. });
  65. getChildren().addAll(_border, _circle);
  66. _circle.addEventHandler(MouseEvent.DRAG_DETECTED, e -> {
  67. Dragboard db = startDragAndDrop(TransferMode.MOVE);
  68. ClipboardContent content = new ClipboardContent();
  69. JSONObject json = generateJSON();
  70. content.putString(json.toString());
  71. System.out.println("[Connectable]: started drag with id = " + json.toString());
  72. db.setContent(content);
  73. //e.consume();
  74. });
  75. _circle.addEventHandler(DragEvent.DRAG_OVER, e -> {
  76. Dragboard db = e.getDragboard();
  77. if (db.hasString()) {
  78. e.acceptTransferModes(TransferMode.MOVE);
  79. }
  80. e.consume();
  81. });
  82. _circle.addEventHandler(DragEvent.DRAG_DROPPED, e -> {
  83. Dragboard db = e.getDragboard();
  84. boolean success = false;
  85. if (db.hasString()) {
  86. JSONParser parser = new JSONParser();
  87. JSONObject json = null;
  88. try {
  89. json = (JSONObject)parser.parse(db.getString());
  90. } catch (ParseException parseException) {
  91. parseException.printStackTrace();
  92. }
  93. JSONArray jsonList = new JSONArray();
  94. jsonList.add(json);
  95. jsonList.add(generateJSON());
  96. ClipboardContent content = new ClipboardContent();
  97. content.putString(jsonList.toString());
  98. db.setContent(content);
  99. System.out.println("Dropped: " + db.getString());
  100. success = true;
  101. }
  102. //e.setDropCompleted(success);
  103. //e.consume();
  104. });
  105. }
  106. private void updateColor(){
  107. if (_connected){
  108. _circle.setFill(Color.YELLOW);
  109. } else if (_optimizable) {
  110. _circle.setFill(Color.GREEN);
  111. } else {
  112. _circle.setFill(Color.WHITE);
  113. }
  114. }
  115. private JSONObject generateJSON(){
  116. JSONObject json = new JSONObject();
  117. if (_type == ConnectableType.INPUT){
  118. json.put("type", "INPUT");
  119. }else if(_type == ConnectableType.OUTPUT){
  120. json.put("type", "OUTPUT");
  121. }else{
  122. json.put("type", "ANYTHING");
  123. }
  124. JSONArray listID = new JSONArray();
  125. listID.add(ID);
  126. listID.add(_parent.ID);
  127. json.put("ID", listID);
  128. return json;
  129. }
  130. public void setConnected(boolean state){
  131. if (state != _connected){
  132. _connected = state;
  133. updateColor();
  134. }
  135. }
  136. @Override
  137. public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
  138. if (_type == ConnectableType.INPUT){
  139. x.setValue(_parent.getTranslateX()+_parent.inputs.getLayoutX()+_parent.hlayout.getTranslateX()+getLayoutX());
  140. y.setValue(_parent.getTranslateY()+_parent.inputs.getLayoutY()+_parent.hlayout.getTranslateY()+getLayoutY());
  141. }
  142. else{
  143. x.setValue(_parent.getTranslateX()+_parent.outputs.getLayoutX()+_parent.hlayout.getTranslateX()+getLayoutX());
  144. y.setValue(_parent.getTranslateY()+_parent.outputs.getLayoutY()+_parent.hlayout.getTranslateY()+getLayoutY());
  145. }
  146. }
  147. @Override
  148. public GUIEventHandler getGUIEventHandler() {
  149. return _eventHandler;
  150. }
  151. @Override
  152. public void setGUIEventHandler(GUIEventHandler eventHandler) {
  153. _eventHandler = eventHandler;
  154. _eventHandler.addEventListener(this);
  155. }
  156. @Override
  157. public void processGUIEvent(String event, JSONObject args) {
  158. }
  159. }