瀏覽代碼

start with property manager

Willi Zschiebsch 4 年之前
父節點
當前提交
51a5db07e4

+ 1 - 1
src/main/java/mdd/client/Module.java

@@ -98,7 +98,7 @@ public class Module extends Group implements IGUIEventClient, ChangeListener<Bou
 
         configure(json);
 
-        addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
+        addEventHandler(MouseEvent.MOUSE_PRESSED, e -> {
             if(e.getButton() == MouseButton.PRIMARY) {
                 isSelected = true;
                 System.out.println("[Module]: select: " + ID);

+ 14 - 9
src/main/java/mdd/client/Processor.java

@@ -110,12 +110,15 @@ public class Processor extends Module{
                         JSONObject jobj = (JSONObject) o;
                         if (jobj.containsKey("type")) {
                             String type = jobj.get("type").toString();
-                            if (type.equals("INPUT")) {
+                            JSONArray jprefix = (JSONArray)jobj.get("prefix");
+                            String sparent = jprefix.get(jprefix.size()-1).toString();
+                            String sID = jobj.get("name").toString()+jobj.get("appendix").toString();
+                            if (type.equals("input")) {
                                 System.out.println("[Processor] Dropped found type = " + "INPUT");
-                                in = getModule(jobj.get("parent").toString()).getInput(jobj.get("ID").toString());
-                            } else if (type.equals("OUTPUT")) {
+                                in = getModule(sparent).getInput(sID);
+                            } else if (type.equals("output")) {
                                 System.out.println("[Processor] Dropped found type = " + "OUTPUT");
-                                out = getModule(jobj.get("parent").toString()).getOutput(jobj.get("ID").toString());
+                                out = getModule(sparent).getOutput(sID);
                             }
                         }
                     }
@@ -212,11 +215,13 @@ public class Processor extends Module{
                         System.out.println("[Processor]: Couldn't find Connectable!");
                     }
                 }
-                temp_connection= new Connection();
-                temp_connection.startXProperty().bind(connectable.x);
-                temp_connection.startYProperty().bind(connectable.y);
-                temp_connection.setEndX(connectable.x.getValue()+100);
-                temp_connection.setEndY(connectable.y.getValue()+100);
+                if (connectable != null){
+                    temp_connection= new Connection();
+                    temp_connection.startXProperty().bind(connectable.x);
+                    temp_connection.startYProperty().bind(connectable.y);
+                    temp_connection.setEndX(connectable.x.getValue()+100);
+                    temp_connection.setEndY(connectable.y.getValue()+100);
+                }
                 //connections.getChildren().add(temp_connection);
                 return;
             }

+ 119 - 11
src/main/java/mdd/client/PropertyManager.java

@@ -1,42 +1,150 @@
 package mdd.client;
 
 import javafx.geometry.Pos;
-import javafx.scene.control.Accordion;
-import javafx.scene.control.Label;
-import javafx.scene.control.ScrollPane;
-import javafx.scene.control.TitledPane;
+import javafx.scene.control.*;
 import javafx.scene.layout.GridPane;
+import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 
 public class PropertyManager extends ScrollPane implements IGUIEventClient{
-    private GUIEventHandler _eventhandler;
+    private GUIEventHandler _eventHandler;
+    private JSONObject jsel  = new JSONObject();
+    private TitledPane pane1;
+    private TitledPane pane2;
 
     public PropertyManager(){
         super();
-        _eventhandler = GUIEventHandler.getEventHandler();
-        _eventhandler.addEventListener(this);
+        _eventHandler = GUIEventHandler.getEventHandler();
+        _eventHandler.addEventListener(this);
         Accordion accordion = new Accordion();
         GridPane grid = new GridPane();
         grid.setAlignment(Pos.CENTER);
         grid.setHgap(10);
         grid.setVgap(10);
-        TitledPane pane1 = new TitledPane("Properties", new Label("WIP"));
-        TitledPane pane2 = new TitledPane("other Properties", new Label("WIP"));
+        pane1 = new TitledPane("Properties", null);
+        pane2 = new TitledPane("other Properties", null);
 
         accordion.getPanes().add(pane1);
         accordion.getPanes().add(pane2);
-
+        accordion.setExpandedPane(pane1);
         setContent(accordion);
         setFitToWidth(true);
     }
 
+    private void setContent(TitledPane pane, JSONObject json){
+        TabPane tabPane = new TabPane();
+        GridPane gpane = new GridPane();
+        int counter = 0;
+        if (json.containsKey("ID")){
+            JSONObject jID = (JSONObject)json.get("ID");
+            if (jID.containsKey("name")){
+                gpane.add(new Label("Name:"), 0,counter);
+                TextField tf = new TextField(jID.get("name").toString());
+                gpane.add(tf, 1,counter);
+                ++counter;
+            }
+            if (jID.containsKey("appendix")){
+                gpane.add(new Label("Appendix:"), 0,counter);
+                TextField tf = new TextField(jID.get("appendix").toString());
+                gpane.add(tf, 1,counter);
+                ++counter;
+            }
+        }
+        if (json.containsKey("optimizable")){
+            gpane.add(new Label("Optimized:"), 0,counter);
+            CheckBox cb = new CheckBox();
+            String sstate = json.get("optimizable").toString();
+            if (sstate.equals("true")){
+                cb.setSelected(true);
+            }
+            gpane.add(cb, 1,counter);
+            ++counter;
+        }
+        if (json.containsKey("value")){
+            gpane.add(new Label("Value:"), 0,counter);
+            TextField tf = new TextField(json.get("value").toString());
+            gpane.add(tf, 1,counter);
+            ++counter;
+        }
+        Tab tab_main = new Tab("Main", gpane);
+        tabPane.getTabs().add(tab_main);
+
+
+        if (json.containsKey("limit")){
+            counter = 0;
+            GridPane gplimit = new GridPane();
+            JSONObject jlimit = (JSONObject)json.get("limit");
+            if (jlimit.containsKey("min")){
+                gplimit.add(new Label("min:"), 0,counter);
+                TextField tf = new TextField(jlimit.get("min").toString());
+                gplimit.add(tf, 1,counter);
+                ++counter;
+            }
+            if (jlimit.containsKey("max")){
+                gplimit.add(new Label("max:"), 0,counter);
+                TextField tf = new TextField(jlimit.get("max").toString());
+                gplimit.add(tf, 1,counter);
+                ++counter;
+            }
+            if (jlimit.containsKey("step")){
+                gplimit.add(new Label("step:"), 0,counter);
+                TextField tf = new TextField(jlimit.get("step").toString());
+                gplimit.add(tf, 1,counter);
+                ++counter;
+            }
+            if (jlimit.containsKey("rule")){
+                gplimit.add(new Label("rule:"), 0,counter);
+                TextField tf = new TextField(jlimit.get("rule").toString());
+                gplimit.add(tf, 1,counter);
+                ++counter;
+            }
+            if (jlimit.containsKey("elements")){
+                gplimit.add(new Label("elements:"), 0,counter);
+                TextField tf = new TextField(jlimit.get("elements").toString());
+                gplimit.add(tf, 1,counter);
+                ++counter;
+            }
+            Tab tab_limit = new Tab("Limit"  , gplimit);
+            tabPane.getTabs().add(tab_limit);
+        }
+        tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE);
+        pane.setContent(tabPane);
+        return;
+    }
+
     @Override
     public void close() throws Exception {
-        _eventhandler.removeEventListener(this);
+        _eventHandler.removeEventListener(this);
     }
 
     @Override
     public void processGUIEvent(String event, JSONObject args) {
+        if (event == "MOUSE_PRESSED"){
+            if (!args.equals(jsel)){
 
+                JSONObject jmsg = new JSONObject();
+                jmsg.put("operation", "state");
+                jmsg.put("args", args);
+                _eventHandler.publishEvent("get", jmsg);
+                return;
+            }
+            return;
+        }
+        if (event.equals("receive")){
+            if (!args.containsKey("operation")){ return; }
+            if (!args.get("operation").toString().equals("state")){ return; }
+            JSONObject jargs = (JSONObject)args.get("args");
+            System.out.println("[Toolbox]: "+ args.toString());
+            if (jargs != null) {
+                if (jargs.containsKey("info")){
+                    JSONObject jinfo = (JSONObject)jargs.get("info");
+                    setContent(pane1,jinfo);
+                    if (jinfo.containsKey("GUI")){
+                        setContent(pane2,(JSONObject) jinfo.get("GUI"));
+                    }
+                    System.out.println("[PropertyManger]: " + jinfo.toString());
+                }
+            }
+        }
     }
 }

+ 16 - 13
src/main/java/mdd/client/Toolbox.java

@@ -59,20 +59,23 @@ public class Toolbox extends ScrollPane implements IGUIEventClient{
             if (!args.containsKey("operation")){ return; }
             if (!args.get("operation").toString().equals("state")){ return; }
             JSONObject jargs = (JSONObject)args.get("args");
-            if (jargs.containsKey("module")){
-                JSONArray array = (JSONArray) jargs.get("module");
-                gridpane_modules.getChildren().clear();
-                for (int i = 0; i < array.size(); i++){
-                    Tool tool = new Tool((JSONObject) array.get(i));
-                    gridpane_modules.add(tool,0,i);
+            System.out.println("[Toolbox]: "+ args.toString());
+            if (jargs != null) {
+                if (jargs.containsKey("module")) {
+                    JSONArray array = (JSONArray) jargs.get("module");
+                    gridpane_modules.getChildren().clear();
+                    for (int i = 0; i < array.size(); i++) {
+                        Tool tool = new Tool((JSONObject) array.get(i));
+                        gridpane_modules.add(tool, 0, i);
+                    }
                 }
-            }
-            if (jargs.containsKey("processor")){
-                JSONArray array = (JSONArray) jargs.get("processor");
-                gridpane_processors.getChildren().clear();
-                for (int i = 0; i < array.size(); i++){
-                    Tool tool = new Tool((JSONObject) array.get(i));
-                    gridpane_processors.add(tool,0,i);
+                if (jargs.containsKey("processor")) {
+                    JSONArray array = (JSONArray) jargs.get("processor");
+                    gridpane_processors.getChildren().clear();
+                    for (int i = 0; i < array.size(); i++) {
+                        Tool tool = new Tool((JSONObject) array.get(i));
+                        gridpane_processors.add(tool, 0, i);
+                    }
                 }
             }
         }

+ 42 - 21
src/main/java/mdd/client/connectable/Connectable.java

@@ -74,6 +74,15 @@ public class Connectable extends GridPane implements IGUIEventClient,ChangeListe
             if (e.getButton() == MouseButton.SECONDARY) {
                 if (!_connected) {
                     optimizable = !optimizable;
+                    JSONObject jvalue = new JSONObject();
+                    jvalue.put("optimizable", optimizable);
+                    JSONObject jmsg = new JSONObject();
+                    jmsg.put("operation", "change");
+                    JSONObject jargs = new JSONObject();
+                    jargs.put("subject",  getJSONIdentifier());
+                    jargs.put("object",   jvalue);
+                    jmsg.put("args", jargs);
+                    _eventHandler.publishEvent("try", jmsg);
                     updateColor();
                 }
             }
@@ -158,15 +167,17 @@ public class Connectable extends GridPane implements IGUIEventClient,ChangeListe
             //e.consume();
         });
 
-        _connection.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
+        _connection.addEventHandler(MouseEvent.MOUSE_PRESSED, e -> {
             if(e.getButton() == MouseButton.PRIMARY) {
                 _eventHandler.publishEvent("MOUSE_PRESSED", generateJSON());
             }
             if(e.getButton() == MouseButton.SECONDARY) {
 
             }
-            //e.consume();
+            e.consume();
         });
+
+        updateColor();
     }
 
     public void configure(JSONObject json){
@@ -186,7 +197,17 @@ public class Connectable extends GridPane implements IGUIEventClient,ChangeListe
                 Appendix = (long) jID.get("appendix");
             }
         }
-
+        if (json.containsKey("optimizable")){
+            String state = json.get("optimizable").toString();
+            if (state.equals("true")){
+                optimizable = true;
+            }else{
+                optimizable = false;
+            }
+            if (_circle != null){
+                updateColor();
+            }
+        }
 
         ID = Name + Appendix;
         _label.setText(Name);
@@ -195,27 +216,17 @@ public class Connectable extends GridPane implements IGUIEventClient,ChangeListe
     protected void updateColor(){
         if (_connected){
             _circle.setFill(Color.YELLOW);
-        } else if (optimizable) {
-            _circle.setFill(Color.GREEN);
-        } else {
-            _circle.setFill(Color.WHITE);
+        } else{
+            if (optimizable) {
+                _circle.setFill(Color.GREEN);
+            } else {
+                _circle.setFill(Color.WHITE);
+            }
         }
     }
 
     private JSONObject generateJSON(){
-        JSONObject json = new JSONObject();
-        if (_type == ConnectableType.INPUT){
-            json.put("type", "INPUT");
-        }else if(_type == ConnectableType.OUTPUT){
-            json.put("type", "OUTPUT");
-        }else{
-            json.put("type", "ANYTHING");
-        }
-
-        json.put("ID", Name + Appendix);
-        json.put("parent", _parent.ID);
-
-        return json;
+        return jID;
     }
 
     public JSONObject getJSONIdentifier(){
@@ -274,7 +285,17 @@ public class Connectable extends GridPane implements IGUIEventClient,ChangeListe
 
     @Override
     public void processGUIEvent(String event, JSONObject args) {
-
+        if (event.equals("change")){
+            if (!args.containsKey("operation")){return;}
+            if (!args.containsKey("args")){return;}
+            JSONObject jargs = (JSONObject) args.get("args");
+            if (!jargs.containsKey("subject")){return;}
+            JSONObject jsub = (JSONObject)jargs.get("subject");
+            if (!jsub.equals(getJSONIdentifier())){
+                return;
+            }
+            configure(jsub);
+        }
     }
 
     @Override

+ 6 - 3
src/main/java/mdd/client/connectable/Input.java

@@ -1,5 +1,7 @@
 package mdd.client.connectable;
 
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
 import javafx.geometry.Pos;
 import javafx.scene.control.Label;
 import javafx.scene.control.TextField;
@@ -20,8 +22,10 @@ public class Input  extends Connectable {
         setAlignment(Pos.CENTER_LEFT);
         _input.setPrefWidth(50);
 
-        _input.setOnKeyPressed(event -> {
-            if (event.getCode().equals(KeyCode.ENTER)) {
+        _input.textProperty().addListener(new ChangeListener<String>() {
+            @Override
+            public void changed(ObservableValue<? extends String> observable,
+                                String oldValue, String newValue) {
                 JSONObject jvalue = new JSONObject();
                 jvalue.put("value", _input.getText());
                 JSONObject jmsg = new JSONObject();
@@ -33,7 +37,6 @@ public class Input  extends Connectable {
                 _eventHandler.publishEvent("try", jmsg);
             }
         });
-
     }
 
     @Override