Bladeren bron

now we are using ElkNode as Input for the view component

Kolja Strohm 6 jaren geleden
bovenliggende
commit
44e9c79872
2 gewijzigde bestanden met toevoegingen van 35 en 0 verwijderingen
  1. 27 0
      src/graph/LayeredNode.java
  2. 8 0
      src/view/MainView.java

+ 27 - 0
src/graph/LayeredNode.java

@@ -3,8 +3,10 @@ package graph;
 import java.awt.Color;
 import java.util.ArrayList;
 
+import org.eclipse.elk.graph.ElkConnectableShape;
 import org.eclipse.elk.graph.ElkEdge;
 import org.eclipse.elk.graph.ElkNode;
+import org.eclipse.emf.common.util.EList;
 
 import bk.ExtremalLayoutCalc.LayoutType;
 
@@ -59,6 +61,31 @@ public class LayeredNode implements LayeredGraphNode {
     private ArrayList< LayeredGraphNode > nodes;
     private ArrayList< ArrayList< LayeredGraphNode > > layers;
     
+    /**
+     * Konvertiert einen Graph aus dem Elk format in einen Graph, der mehr Informationen enthält
+     * @param n Der Graph, welcher konvertiert werden soll
+     * @return Ein layered Graph, welcher im wesentlichen ein Wrapper für den ursprünglichen Graphen ist
+     */
+    public static LayeredGraphNode convertToLayeredGraph( ElkNode n )
+    {
+        LayeredNode ln = new LayeredNode( n, null );
+        for( ElkNode node : n.getChildren() )
+            ln.addNode( convertToLayeredGraph( node ) );
+        for( ElkEdge edge : n.getContainedEdges() )
+        {
+            ArrayList< LayeredGraphNode > sources = new ArrayList<>();
+            ArrayList< LayeredGraphNode > targets = new ArrayList<>();
+            EList<ElkConnectableShape> s = edge.getSources();
+            EList<ElkConnectableShape> t = edge.getTargets();
+            for( ElkConnectableShape shape : s )
+                sources.add( ln.findNodeFromOriginal( shape ) );
+            for( ElkConnectableShape shape : t )
+                targets.add( ln.findNodeFromOriginal( shape ) );
+            ln.createEdge( edge, sources, targets );
+        }
+        return ln;
+    }
+    
     public LayeredNode( ElkNode original, LayeredGraphNode parent )
     {
         this.original = original;

+ 8 - 0
src/view/MainView.java

@@ -34,6 +34,8 @@ import javax.swing.filechooser.FileNameExtensionFilter;
 import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.TreePath;
 
+import org.eclipse.elk.graph.ElkNode;
+
 import animation.Action;
 import animation.AnimationController;
 import animation.PseudoCodeNode;
@@ -42,6 +44,7 @@ import bk.ExtremalLayoutCalc.LayoutType;
 import graph.InitializeNodePositions;
 import graph.LayeredGraphEdge;
 import graph.LayeredGraphNode;
+import graph.LayeredNode;
 import graph.RandomGraphGenerator;
 import graph.io.Reader;
 import graph.io.Writer;
@@ -145,6 +148,11 @@ public class MainView {
         debugFrame.setSize( frame.getWidth(), frame.getHeight() );
 	    debugFrame.setVisible( true );
 	}
+
+	public MainView( ElkNode graph )
+	{
+		this( LayeredNode.convertToLayeredGraph( graph ) );
+	}
 	
 	/**
 	 * Initialize the window and its contents.