Browse Source

Changed Toolbox and Properties from ListView to TableView
Added Functionality for Toolbox

dominik 8 years ago
parent
commit
e57ecefac7

+ 78 - 4
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/GUIController.java

@@ -7,15 +7,26 @@ import javax.swing.JPanel;
 
 import de.tu_darmstadt.informatik.tk.scopviz.main.Main;
 import de.tu_darmstadt.informatik.tk.scopviz.ui.handlers.ResizeListener;
+import javafx.beans.property.ReadOnlyObjectWrapper;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
 import javafx.embed.swing.SwingNode;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
 import javafx.scene.control.Button;
+import javafx.scene.control.CheckBox;
 import javafx.scene.control.ListView;
 import javafx.scene.control.ScrollPane;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
 import javafx.scene.layout.Pane;
+import javafx.util.Callback;
+import javafx.util.Pair;
 
 /**
  * Controller class for the various GUI elements, gets instanced and initialized
@@ -57,9 +68,17 @@ public class GUIController implements Initializable {
 
 	// The contents of the corresponding ScrollPanes
 	@FXML
-	public ListView<String> toolbox;
+	public TableView<Pair<Object, String>> toolbox;
 	@FXML
-	public ListView<String> properties;
+	public TableView<Pair<String, Object>> properties;
+	
+	@FXML
+	public ListView<String> metricListView;
+	
+	@FXML
+	public TableColumn<Pair<Object, String>, String> toolboxString;
+	@FXML
+	public TableColumn<Pair<Object, String>, Object> toolboxObject;
 
 	/**
 	 * Initializes all the references to the UI elements specified in the FXML
@@ -71,19 +90,33 @@ public class GUIController implements Initializable {
 		// Assert the correct injection of all references from FXML
 		assert swingNode != null : "fx:id=\"swingNode\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
 		assert pane != null : "fx:id=\"pane\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
+		
 		assert zoomIn != null : "fx:id=\"zoomIn\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
 		assert zoomOut != null : "fx:id=\"zoomOut\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
 		assert createNode != null : "fx:id=\"createNode\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
 		assert createEdge != null : "fx:id=\"createEdge\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
+		
 		assert layerScrollPane != null : "fx:id=\"layerScrollPane\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
 		assert propertiesScrollPane != null : "fx:id=\"propertiesScrollPane\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
 		assert metricScrollPane != null : "fx:id=\"metricSrollPane\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
 		assert toolboxScrollPane != null : "fx:id=\"toolboxScrollPane\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
+		
 		assert toolbox != null : "fx:id=\"toolbox\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
 		assert properties != null : "fx:id=\"properties\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
-
+		assert metricListView != null : "fx:id=\"metricListView\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
+		
+		assert toolboxString != null : "fx:id=\"toolboxString\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
+		assert toolboxObject != null : "fx:id=\"toolboxObject\" was not injected: check your FXML file 'NewBetterCoolerWindowTest.fxml'.";
+        
+        initializeToolbox();
+        
+        
+		// Remove Header for TableViews
+		removeHeaderTableView(toolbox);
+		removeHeaderTableView(properties);
+		
 		// Initialize the Managers for the various managers for UI elements
-		ToolboxManager.initialize(toolbox);
+		ToolboxManager.initializeItems(toolbox);
 		PropertiesManager.initialize(properties);
 		ButtonManager.initialize(this);
 
@@ -91,6 +124,9 @@ public class GUIController implements Initializable {
 		initializeZoomButtons();
 		initializeCreateButtons();
 		initializeDisplayPane();
+		
+		
+		
 
 	}
 
@@ -129,4 +165,42 @@ public class GUIController implements Initializable {
 		swingNode.setContent((JPanel) Main.getInstance().getVisualizer().getView());
 		pane.setMinSize(200, 200);
 	}
+	
+	
+	@SuppressWarnings("unchecked")
+	private void initializeToolbox(){
+		
+		toolboxString.setCellValueFactory(new ToolboxManager.PairKeyFactory());
+        toolboxObject.setCellValueFactory(new ToolboxManager.PairValueFactory());
+
+        toolbox.getColumns().setAll(toolboxObject, toolboxString);
+        
+        toolboxObject.setCellFactory(new Callback<TableColumn<Pair<Object, String>, Object>, TableCell<Pair<Object, String>, Object>>() {
+            @Override
+            public TableCell<Pair<Object, String>, Object> call(TableColumn<Pair<Object, String>, Object> column) {
+                return new ToolboxManager.PairValueCell();
+            }
+        });
+	}
+	
+	/**
+	 * Removes the TableView Header for a given TableView
+	 * @param tableView
+	 */
+	private void removeHeaderTableView(TableView<?> tableView){
+		tableView.widthProperty().addListener(new ChangeListener<Number>() {
+	        @Override
+	        public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
+	            // Get the table header
+	            Pane header = (Pane)tableView.lookup("TableHeaderRow");
+	            if(header!=null && header.isVisible()) {
+	              header.setMaxHeight(0);
+	              header.setMinHeight(0);
+	              header.setPrefHeight(0);
+	              header.setVisible(false);
+	              header.setManaged(false);
+	            }
+	        }
+	    });
+	}
 }

+ 7 - 1
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/PropertiesManager.java

@@ -5,8 +5,10 @@ import javafx.collections.ObservableList;
 import javafx.scene.control.Label;
 import javafx.scene.control.ListCell;
 import javafx.scene.control.ListView;
+import javafx.scene.control.TableView;
 import javafx.scene.control.TextField;
 import javafx.util.Callback;
+import javafx.util.Pair;
 
 /**
  * Manager for the Properties pane and its contents.
@@ -24,7 +26,9 @@ public class PropertiesManager {
 	 * @param properties
 	 *            The list of properties to display
 	 */
-	public static void initialize(ListView<String> properties) {
+	public static void initialize(TableView<Pair<String, Object>> properties) {
+		
+		/*
 		ObservableList<String> dataProperties = FXCollections.observableArrayList("CPU", "OPS");
 		properties.setItems(dataProperties);
 
@@ -34,6 +38,8 @@ public class PropertiesManager {
 				return new PropertiesManager.LabelCell();
 			}
 		});
+		
+		*/
 	}
 
 	/**

+ 82 - 2
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/ToolboxManager.java

@@ -1,8 +1,18 @@
 package de.tu_darmstadt.informatik.tk.scopviz.ui;
 
+import javafx.beans.property.ReadOnlyObjectWrapper;
+import javafx.beans.value.ObservableValue;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.scene.control.CheckBox;
 import javafx.scene.control.ListView;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.util.Callback;
+import javafx.util.Pair;
 
 /**
  * Manager for the Toolbox pane.
@@ -19,9 +29,79 @@ public class ToolboxManager {
 	 * @param toolbox
 	 *            the list of entries to add to the toolbox
 	 */
-	public static void initialize(ListView<String> toolbox) {
-
+	public static void initializeItems(TableView<Pair<Object, String>> toolbox) {
+		/*
 		ObservableList<String> dataToolbox = FXCollections.observableArrayList("toolbox");
 		toolbox.setItems(dataToolbox);
+		*/
+		
+		@SuppressWarnings("unchecked")
+		ObservableList<Pair<Object, String>> data = FXCollections.observableArrayList(
+                pair("Knoten1", "Source"),
+                pair("Image","Drain"),
+                pair("Rating", "Standard"),
+                pair("Classic", "Underlay"),
+                pair("Song Data", "DontKnow"),
+                pair("Song Data", "DontKnow"),
+                pair("Song Data", "DontKnow")
+        );
+		
+		toolbox.getItems().setAll(data);
 	}
+	
+	 private static Pair<Object, String> pair(Object picture, String name) {
+	        return new Pair<>(picture, name);
+	    }
+	 
+	 public static class PairKeyFactory implements Callback<TableColumn.CellDataFeatures<Pair<Object, String>, String>, ObservableValue<String>> {
+		    @Override
+		    public ObservableValue<String> call(TableColumn.CellDataFeatures<Pair<Object, String>, String> data) {
+		        return new ReadOnlyObjectWrapper<>(data.getValue().getValue());
+		    }
+		}
+
+	 public static class PairValueFactory implements Callback<TableColumn.CellDataFeatures<Pair<Object, String>, Object>, ObservableValue<Object>> {
+		    @SuppressWarnings("unchecked")
+		    @Override
+		    public ObservableValue<Object> call(TableColumn.CellDataFeatures<Pair<Object, String>, Object> data) {
+		        Object value = data.getValue().getKey();
+		        return (value instanceof ObservableValue)
+		                ? (ObservableValue) value
+		                : new ReadOnlyObjectWrapper<>(value);
+		    }
+		}
+		
+	 public static class PairValueCell extends TableCell<Pair<Object, String>, Object> {
+		    @Override
+		    protected void updateItem(Object item, boolean empty) {
+		        super.updateItem(item, empty);
+
+		        if (item != null) {
+		            if (item instanceof String) {
+		                setText((String) item);
+		                setGraphic(null);
+		            } else if (item instanceof Integer) {
+		                setText(Integer.toString((Integer) item));
+		                setGraphic(null);
+		            } else if (item instanceof Boolean) {
+		                CheckBox checkBox = new CheckBox();
+		                checkBox.setSelected((boolean) item);
+		                setGraphic(checkBox);
+		            } else if (item instanceof Image) {
+		                setText(null);
+		                ImageView imageView = new ImageView((Image) item);
+		                imageView.setFitWidth(100);
+		                imageView.setPreserveRatio(true);
+		                imageView.setSmooth(true);
+		                setGraphic(imageView);
+		            } else {
+		                setText("N/A");
+		                setGraphic(null);
+		            }
+		        } else {
+		            setText(null);
+		            setGraphic(null);
+		        }
+		    }
+		}
 }

+ 17 - 5
scopviz/src/main/resources/NewBetterCoolerWindowTest.fxml

@@ -9,6 +9,8 @@
 <?import javafx.scene.control.ScrollPane?>
 <?import javafx.scene.control.SeparatorMenuItem?>
 <?import javafx.scene.control.SplitPane?>
+<?import javafx.scene.control.TableColumn?>
+<?import javafx.scene.control.TableView?>
 <?import javafx.scene.layout.AnchorPane?>
 <?import javafx.scene.layout.Pane?>
 <?import javafx.scene.layout.VBox?>
@@ -64,14 +66,24 @@
                           <items>
                             <AnchorPane>
                                  <children>
-                                    <ListView fx:id="toolbox" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
+                                    <TableView fx:id="toolbox" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+                                      <columns>
+                                        <TableColumn fx:id="toolboxObject" editable="false" maxWidth="-1.0" minWidth="60.0" prefWidth="-1.0" sortable="false" />
+                                        <TableColumn fx:id="toolboxString" editable="false" maxWidth="-1.0" minWidth="60.0" prefWidth="-1.0" sortable="false" />
+                                      </columns>
+                                    </TableView>
+                                    <Button fx:id="createNode" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="30.0" prefWidth="120.0" text="Knoten hinzufügen" textAlignment="JUSTIFY" AnchorPane.bottomAnchor="45.0" AnchorPane.rightAnchor="0" />
+                                    <Button fx:id="createEdge" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="30.0" prefWidth="120.0" text="Kante hinzufügen" textAlignment="JUSTIFY" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="0" />
                                  </children>
                               </AnchorPane>
                             <AnchorPane>
                                  <children>
-                                    <ScrollPane fx:id="metricScrollPane" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
-                                    <Button fx:id="createNode" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="30.0" prefWidth="120.0" text="Knoten hinzufügen" textAlignment="JUSTIFY" AnchorPane.bottomAnchor="45.0" AnchorPane.rightAnchor="0" />
-                                    <Button fx:id="createEdge" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="30.0" prefWidth="120.0" text="Kante hinzufügen" textAlignment="JUSTIFY" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="0" />
+                                    <TableView fx:id="properties" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+                                      <columns>
+                                        <TableColumn editable="false" maxWidth="-1.0" minWidth="60.0" prefWidth="-1.0" sortable="false" />
+                                        <TableColumn editable="false" maxWidth="-1.0" minWidth="60.0" prefWidth="-1.0" sortable="false" />
+                                      </columns>
+                                    </TableView>
                                  </children>
                               </AnchorPane>
                           </items>
@@ -103,7 +115,7 @@
                                           </AnchorPane>
                                         <AnchorPane>
                                              <children>
-                                                <ListView fx:id="properties" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
+                                                <ListView fx:id="metricListView" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
                                              </children>
                                           </AnchorPane>
                                       </items>