Bläddra i källkod

start with optimizer GUI

Willi Zschiebsch 4 år sedan
förälder
incheckning
3eb200bf00

+ 6 - 0
src/main/java/mdd/client/FXMLDocumentController.java

@@ -1,6 +1,7 @@
 package mdd.client;
 
 import javafx.application.Platform;
+import javafx.event.ActionEvent;
 import javafx.event.Event;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
@@ -16,6 +17,7 @@ import java.util.ResourceBundle;
 
 public class FXMLDocumentController implements Initializable {
     private GUIEventHandler _eventhandler = GUIEventHandler.getEventHandler();
+    private Optimizer _optimizer = new Optimizer();
     @FXML
     public Workshop workshop;
     @FXML
@@ -105,6 +107,10 @@ public class FXMLDocumentController implements Initializable {
         sPane.setDividerPositions(0.1, 0.9);
     }
 
+    public void miOptimizerClicked(ActionEvent actionEvent) {
+        _optimizer.show();
+    }
+
     //@FXML private TabPane tabPane;
 
     /*public FXMLDocumentController() {

+ 3 - 13
src/main/java/mdd/client/Module.java

@@ -365,25 +365,15 @@ public class Module extends Group implements IGUIEventClient, ChangeListener<Bou
 
     @Override
     public void changed(ObservableValue<? extends Bounds> observable, Bounds oldValue, Bounds newValue) {
-        if (caption.getText().equals("Switch")){
-            double test0 = caption.getLayoutY();
-            double test1 = caption.getLayoutBounds().getWidth();
-            double test2 = caption.getWidth();
-            double test3 = caption.prefWidth(-1);
-            double test10 = vlayout.getLayoutBounds().getWidth();
-            int ftest = 0;
-        }
         double width = caption.getWidth();
         if (newValue.getWidth() > width){
             width =newValue.getWidth();
             width += 10;
             outputs.setTranslateX(13);
         }else{
-            //if (!caption.getText().equals("Switch") && !caption.getText().equals("Processor")){
-                width += 10;
-                outputs.setTranslateX(13+(width - vlayout.getLayoutBounds().getWidth()));
-                width +=10;
-            //}
+            width += 10;
+            outputs.setTranslateX(13+(width - vlayout.getLayoutBounds().getWidth()));
+            width +=10;
         }
         titlebar.setWidth(width);
         titlebar.setHeight(20.0f);

+ 76 - 0
src/main/java/mdd/client/Optimizer.java

@@ -0,0 +1,76 @@
+package mdd.client;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.geometry.Bounds;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.scene.control.Label;
+import javafx.scene.control.ScrollPane;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+
+public class Optimizer extends Stage implements IGUIEventClient {
+private HBox generations = new HBox();
+protected GUIEventHandler _eventHandler;
+
+    public Optimizer(){
+        super();
+        _eventHandler = GUIEventHandler.getEventHandler();
+        _eventHandler.addEventListener(this, 5);
+        generations.setSpacing(30);
+        setTitle("Optimizer");
+        Scene scene = new Scene(new ScrollPane(generations), 450, 450);
+        scene.getStylesheets().add(String.valueOf(getClass().getResource("dark-theme.css")));
+        setScene(scene);
+    }
+
+    @Override
+    public void processGUIEvent(String event, JSONObject args) {
+        if (event.equals("change")){
+            if (!args.containsKey("args")){
+                return;
+            }
+            JSONObject jargs = (JSONObject) args.get("args");
+            if (!jargs.containsKey("subject")){
+                return;
+            }
+            JSONObject jsub = (JSONObject) jargs.get("subject");
+            if (!jsub.get("type").equals("optimizer")){
+                return;
+            }
+            if (!args.containsKey("operation")){
+                return;
+            }
+            JSONObject jobj = (JSONObject) jargs.get("object");
+            switch((String) args.get("operation")){
+                case "add":
+                    if (jobj.containsKey("individuals")){
+                        JSONArray indis= (JSONArray)jobj.get("individuals");
+                        if (generations.getChildren().size() == (int)jobj.get("generation") +1){
+                            VBox gen = new VBox();
+                            gen.getChildren().add(new Label("Generation: " + jobj.get("generation").toString()));
+                            gen.setSpacing(10);
+                            for (int i = 0; i < indis.size(); ++i){
+                                gen.getChildren().add(new Permutation((JSONObject)indis.get(i)));
+                            }
+                            generations.getChildren().add(gen);
+                        }else{
+                            for (int i = 0; i < indis.size(); ++i){
+                                ((Group)generations.getChildren().get(i)).getChildren().add(new Permutation((JSONObject)indis.get(i)));
+                            }
+                        }
+                    }else if(jobj.containsKey("best")){
+
+                    }
+                    break;
+                case "change":
+                    //configure(jobj);
+            }
+            return;
+        }
+    }
+}

+ 98 - 0
src/main/java/mdd/client/Permutation.java

@@ -0,0 +1,98 @@
+package mdd.client;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.geometry.Bounds;
+import javafx.scene.Group;
+import javafx.scene.control.Label;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+
+public class Permutation extends Group implements IGUIEventClient, ChangeListener<Bounds> {
+    private GridPane header = new GridPane();
+    private VBox dna = new VBox();
+    private Rectangle titlebar;
+    private Rectangle background;
+
+    protected GUIEventHandler _eventHandler;
+
+    /*
+    staus: " " | fitness: | time:
+    dna:
+     */
+    public Permutation(JSONObject json){
+        _eventHandler = GUIEventHandler.getEventHandler();
+        _eventHandler.addEventListener(this, 5);
+        setFocusTraversable(true);
+        dna.setSpacing(10);
+        dna.setTranslateX(5);
+        dna.setTranslateY(30);
+
+        titlebar = new Rectangle(0.0f, 0.0f, 1.0, 20f);
+        titlebar.setArcWidth(10.0f);
+        titlebar.setArcHeight(10.0f);
+
+        //background = new Rectangle(0.0f, 0.0f, 150-20, 150 + 40);
+        background = new Rectangle(0.0f, 0.0f, 1.0, 1.0);
+        background.setArcWidth(10.0f);
+        background.setArcHeight(10.0f);
+        background.setFill(Color.GRAY);
+        header.setTranslateX(10);
+        Color color = Color.DARKCYAN;
+        titlebar.setFill(color);
+        configure(json);
+        getChildren().clear();
+        getChildren().addAll( background, titlebar, header, dna);
+        dna.layoutBoundsProperty().addListener(this);
+        header.layoutBoundsProperty().addListener(this);
+    }
+
+    protected void configure(JSONObject json){
+        if(json.containsKey("status")){
+            header.add(new Label("status: "+ json.get("status").toString()),0,0);
+        }
+        if(json.containsKey("fitness")){
+            header.add(new Label("fitness: "+ json.get("fitness").toString()),0,1);
+        }
+        if(json.containsKey("time")){
+            header.add(new Label("time: "+ json.get("time").toString()),0,2);
+        }
+        if(json.containsKey("dna")){
+            dna.getChildren().clear();
+            JSONArray jarray = (JSONArray)json.get("dna");
+            for (int i = 0; i < jarray.size(); ++i){
+                dna.getChildren().add(new Label(jarray.get(i).toString()));
+            }
+        }
+    }
+
+    @Override
+    public void changed(ObservableValue<? extends Bounds> observableValue, Bounds oldValue, Bounds newValue) {
+        double width = header.getWidth();
+        if (newValue.getWidth() > width){
+            width =newValue.getWidth();
+            width += 10;
+        }else{
+            width += 10;
+            width +=10;
+        }
+        titlebar.setWidth(width);
+        titlebar.setHeight(20.0f);
+        background.setWidth(width);
+        background.setHeight(newValue.getHeight()+dna.getTranslateY()+10);
+    }
+
+    @Override
+    public void processGUIEvent(String event, JSONObject args) {
+
+    }
+
+    @Override
+    public void close() throws Exception {
+
+    }
+}

+ 1 - 1
src/main/resources/mdd/client/main.fxml

@@ -38,7 +38,7 @@
            </Menu>
 
            <Menu fx:id="mTools" text="Tools">
-               <MenuItem text="Optimizer" />
+               <MenuItem fx:id="miOptimizer" text="Optimizer" onAction="#miOptimizerClicked"/>
            </Menu>
 
            <Menu fx:id="mGit" text="Git">