Browse Source

Merge remote-tracking branch 'origin/Matthias'

Jan Enders 8 years ago
parent
commit
dee545a6c3

+ 94 - 1
scopviz/.settings/org.eclipse.jdt.core.prefs

@@ -1,8 +1,101 @@
 eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.8

+ 145 - 1
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/main/MainApp.java

@@ -1,11 +1,18 @@
 package de.tu_darmstadt.informatik.tk.scopviz.main;
 
 import java.awt.Dimension;
+import java.awt.event.MouseListener;
 import java.io.IOException;
+import java.util.Iterator;
+import java.util.Random;
+
 import javax.swing.JPanel;
 
 import org.graphstream.graph.Graph;
+import org.graphstream.graph.Node;
+import org.graphstream.ui.geom.Vector3;
 import org.graphstream.ui.swingViewer.ViewPanel;
+import org.graphstream.ui.swingViewer.util.GraphMetrics;
 import org.graphstream.ui.view.View;
 
 import javafx.application.Application;
@@ -17,6 +24,8 @@ import javafx.event.EventHandler;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Scene;
 import javafx.scene.control.SplitPane;
+import javafx.scene.control.Button;
+import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.AnchorPane;
 import javafx.scene.layout.Pane;
 import javafx.scene.layout.VBox;
@@ -53,9 +62,18 @@ public class MainApp extends Application {
 	private final Dimension preferredViewerSize = new Dimension(425, 367);
 	
 	private Visualizer visualizer;
+	private ViewPanel view;
 	
 	private static GUIController guiController;
 
+	private enum Mod {
+		NORMAL, CREATE_NODE, CREATE_EDGE, FIRST_NODE_SELECTED
+	}
+
+	private String firstNode;
+
+	private Mod modus = Mod.NORMAL;
+
 	/**
 	 * Main Method, launches the Application.
 	 * 
@@ -108,9 +126,13 @@ public class MainApp extends Application {
 
 		SwingNode swingNode = guiController.swingNode;
 		Pane pane = guiController.pane;
+		Button createNodeButton = guiController.createNode;
+		Button createEdgeButton = guiController.createEdge;
+		
 		
-		ViewPanel view = visualizer.getView();
+		view = visualizer.getView();
 		view.setPreferredSize(preferredViewerSize);
+
 		swingNode.setContent((JPanel) view);
 		pane.setMinSize(200, 200);
 		
@@ -141,6 +163,121 @@ public class MainApp extends Application {
 			}
 		});
 		
+		createNodeButton.setOnAction(new EventHandler<ActionEvent>() {
+			@Override
+			public void handle(ActionEvent arg0) {
+				switch (modus) {
+				case CREATE_NODE:
+					modus = Mod.NORMAL;
+					Debug.out("Modus set to Normal");
+					createNodeButton.setText("Knoten hinzufügen");
+					break;
+				case NORMAL:
+					modus = Mod.CREATE_NODE;
+					Debug.out("Modus set to Create Node");
+					createNodeButton.setText("Ende");
+					break;
+				default:
+					modus = Mod.CREATE_NODE;
+					Debug.out("Modus set to Create Node");
+					createNodeButton.setText("Ende");
+					createEdgeButton.setText("Kante hinzufügen");
+					firstNode = "";
+					break;
+				}
+			}
+		});
+
+		createEdgeButton.setOnAction(new EventHandler<ActionEvent>() {
+			@Override
+			public void handle(ActionEvent arg0) {
+				firstNode = "";
+				switch (modus) {
+				case CREATE_EDGE:
+				case FIRST_NODE_SELECTED:
+					modus = Mod.NORMAL;
+					Debug.out("Modus set to Normal");
+					createEdgeButton.setText("Kante hinzufügen");
+					break;
+				case NORMAL:
+					modus = Mod.CREATE_EDGE;
+					Debug.out("Modus set to Create Edge");
+					createEdgeButton.setText("Ende");
+					break;
+				default:
+					modus = Mod.CREATE_EDGE;
+					Debug.out("Modus set to Create Edge");
+					createEdgeButton.setText("Ende");
+					createNodeButton.setText("Knoten hinzufügen");
+					break;
+				}
+			}
+		});
+
+		swingNode.setOnMouseClicked(new EventHandler<MouseEvent>() {
+
+			@Override
+			public void handle(MouseEvent event) {
+				double x = event.getX();
+				double trueX = (x - 45) / 3 + 100;
+				double y = event.getY();
+				double trueY = (y - 30) / (-3)  +200;
+					Debug.out("-M (" + trueX + "/" + trueY + ")");
+				if (modus == Mod.CREATE_NODE) {
+					Node n = graph.addNode(getUnusedID());
+					GraphMetrics gm = view.getCamera().getMetrics();
+					Vector3 vc3 = gm.getSize();
+					Debug.out("(x/y): " + vc3.x() + "/" + vc3.y());
+					vc3.x();
+					vc3.y();
+					n.setAttribute("x", trueX);
+					n.setAttribute("y", trueY);
+					Debug.out("Created a dot on (" + trueX + "/" + trueY + ")");
+				} else if (modus == Mod.CREATE_EDGE || modus == Mod.FIRST_NODE_SELECTED) {
+					Iterator<Node> itr = graph.getNodeIterator();
+					double d = Double.MAX_VALUE;
+					String id = null;
+					while (itr.hasNext()) {
+						Node curN = itr.next();
+						double nodeX = curN.getAttribute("x");
+						double nodeY =  curN.getAttribute("y");
+						double curD = Math.sqrt(Math.pow(nodeX - trueX, 2.0) + Math.pow(nodeY - trueY, 2.0));
+						Debug.out("+" + curN.getId() + " (" + nodeX + "/" + nodeY + ")");
+						if (curD < d) {
+							d = curD;
+							id = curN.getId();
+						}
+					}
+
+					Debug.out(id + " pressed");
+
+					if (id == null) {
+						Debug.out("nothing selected");
+						return;
+					}
+					switch (modus) {
+					case CREATE_EDGE:
+						firstNode = id;
+						modus = Mod.FIRST_NODE_SELECTED;
+						break;
+					case FIRST_NODE_SELECTED:
+						if (!id.matches(firstNode)) {
+							graph.addEdge(getUnusedID(), firstNode, id);
+							Debug.out("Created a edge between " + firstNode + " and " + id);
+						}
+						firstNode = "";
+						modus = Mod.CREATE_EDGE;
+						break;
+					default:
+						break;
+
+					}
+				}
+			}
+
+		});
+		
+		
 		primaryStage.setMinHeight(400);
 		primaryStage.setMinWidth(640);
 		primaryStage.setScene(scene);
@@ -148,6 +285,13 @@ public class MainApp extends Application {
 
 	}
 	
+		private String getUnusedID() {
+		// TODO gescheite implementierung
+		Random rand = new Random();
+		return rand.nextInt() + "";
+	}
+	
+	
 	public static void setGUIController(GUIController toSet){
 		guiController = toSet;
 	}

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

@@ -27,6 +27,8 @@ public class GUIController implements Initializable{
 	
 	@FXML public Button zoomIn;
 	@FXML public Button zoomOut;
+	@FXML public Button createNode;
+	@FXML public Button createEdge;
 	
 	@FXML public ScrollPane toolboxScrollPane;
 	@FXML public ScrollPane layerScrollPane;
@@ -44,6 +46,8 @@ public class GUIController implements Initializable{
 		
 		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'.";

+ 2 - 2
scopviz/src/main/resources/Example.graphml

@@ -5,8 +5,8 @@
 	   http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
 	<key id="attr0000" for="node" attr.name="Eigenschaft" attr.type="string"/>
 	<key id="attr0001" for="node" attr.name="ui.label" attr.type="string"/>
-	<key id="attr0002" for="node" attr.name="y" attr.type="int"/>
-	<key id="attr0003" for="node" attr.name="x" attr.type="int"/>
+	<key id="attr0002" for="node" attr.name="y" attr.type="double"/>
+	<key id="attr0003" for="node" attr.name="x" attr.type="double"/>
 	<graph id="Example" edgedefault="undirected">
 		<node id="A">
 			<data key="attr0000">test</data>

+ 2 - 0
scopviz/src/main/resources/NewBetterCoolerWindowTest.fxml

@@ -70,6 +70,8 @@
                             <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" />
                                  </children>
                               </AnchorPane>
                           </items>