|
@@ -3,12 +3,12 @@ package Model;
|
|
import java.awt.Color;
|
|
import java.awt.Color;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
|
|
-import javax.swing.JPanel;
|
|
|
|
import javax.swing.SwingUtilities;
|
|
import javax.swing.SwingUtilities;
|
|
|
|
|
|
import org.eclipse.elk.graph.ElkEdge;
|
|
import org.eclipse.elk.graph.ElkEdge;
|
|
import org.eclipse.elk.graph.ElkNode;
|
|
import org.eclipse.elk.graph.ElkNode;
|
|
|
|
|
|
|
|
+import Algorithms.Animated.BK.ExtremalLayoutCalc.LayoutType;
|
|
import View.MainView;
|
|
import View.MainView;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -24,23 +24,26 @@ public class LayeredNode implements LayeredGraphNode {
|
|
private ElkNode original;
|
|
private ElkNode original;
|
|
private LayeredGraphNode parent;
|
|
private LayeredGraphNode parent;
|
|
|
|
|
|
- double x;
|
|
|
|
- double y;
|
|
|
|
- double w;
|
|
|
|
- double h;
|
|
|
|
- Color color;
|
|
|
|
|
|
+ private class LayoutInfo
|
|
|
|
+ {
|
|
|
|
+ public double x;
|
|
|
|
+ public double y;
|
|
|
|
+ public double w;
|
|
|
|
+ public double h;
|
|
|
|
+ public Color color;
|
|
|
|
+ public boolean selected;
|
|
|
|
+ public boolean xUndef;
|
|
|
|
+
|
|
|
|
+ // Block Calculation
|
|
|
|
+ public LayeredGraphNode align;
|
|
|
|
+ public LayeredGraphNode root;
|
|
|
|
+ // Compaction
|
|
|
|
+ public LayeredGraphNode sink;
|
|
|
|
+ public double shift;
|
|
|
|
+ }
|
|
|
|
+ LayoutInfo[] layouts;
|
|
|
|
|
|
String name;
|
|
String name;
|
|
- JPanel view;
|
|
|
|
- boolean selected;
|
|
|
|
- boolean xUndef;
|
|
|
|
-
|
|
|
|
- // Block Calculation
|
|
|
|
- LayeredGraphNode align;
|
|
|
|
- LayeredGraphNode root;
|
|
|
|
- // Compaction
|
|
|
|
- LayeredGraphNode sink;
|
|
|
|
- double shift;
|
|
|
|
|
|
|
|
// for subgraph in this node
|
|
// for subgraph in this node
|
|
private ArrayList< LayeredGraphEdge > edges;
|
|
private ArrayList< LayeredGraphEdge > edges;
|
|
@@ -55,72 +58,174 @@ public class LayeredNode implements LayeredGraphNode {
|
|
edges = new ArrayList<>();
|
|
edges = new ArrayList<>();
|
|
nodes = new ArrayList<>();
|
|
nodes = new ArrayList<>();
|
|
layers = new ArrayList<>();
|
|
layers = new ArrayList<>();
|
|
- if( original != null )
|
|
|
|
|
|
+ layouts = new LayoutInfo[ 4 ];
|
|
|
|
+ for( int i = 0; i < 4; i++ )
|
|
|
|
+ layouts[ i ] = new LayoutInfo();
|
|
|
|
+ for( LayoutInfo l : layouts )
|
|
{
|
|
{
|
|
- x = original.getX();
|
|
|
|
- y = original.getX();
|
|
|
|
- w = original.getWidth();
|
|
|
|
- h = original.getHeight();
|
|
|
|
|
|
+ if( original != null )
|
|
|
|
+ {
|
|
|
|
+ l.x = original.getX();
|
|
|
|
+ l.y = original.getX();
|
|
|
|
+ l.w = original.getWidth();
|
|
|
|
+ l.h = original.getHeight();
|
|
|
|
+ }
|
|
|
|
+ l.align = this;
|
|
|
|
+ l.root = this;
|
|
|
|
+ l.sink = this;
|
|
|
|
+ l.shift = Double.POSITIVE_INFINITY;
|
|
|
|
+ l.xUndef = true;
|
|
}
|
|
}
|
|
- align = this;
|
|
|
|
- root = this;
|
|
|
|
- sink = this;
|
|
|
|
- shift = Double.POSITIVE_INFINITY;
|
|
|
|
- xUndef = true;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setShift( double shift )
|
|
|
|
|
|
+ public void setShift( double shift, LayoutType layout )
|
|
{
|
|
{
|
|
- this.shift = shift;
|
|
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ this.layouts[ 0 ].shift = shift;
|
|
|
|
+ this.layouts[ 1 ].shift = shift;
|
|
|
|
+ this.layouts[ 2 ].shift = shift;
|
|
|
|
+ this.layouts[ 3 ].shift = shift;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ this.layouts[ 0 ].shift = shift;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ this.layouts[ 1 ].shift = shift;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ this.layouts[ 2 ].shift = shift;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ this.layouts[ 3 ].shift = shift;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public double getShift()
|
|
|
|
|
|
+ public double getShift( LayoutType layout )
|
|
{
|
|
{
|
|
- return shift;
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return this.layouts[ 0 ].shift;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return this.layouts[ 1 ].shift;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return this.layouts[ 2 ].shift;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return this.layouts[ 3 ].shift;
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setSink( LayeredGraphNode sink )
|
|
|
|
|
|
+ public void setSink( LayeredGraphNode sink, LayoutType layout )
|
|
{
|
|
{
|
|
- this.sink = sink;
|
|
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ this.layouts[ 0 ].sink = sink;
|
|
|
|
+ this.layouts[ 1 ].sink = sink;
|
|
|
|
+ this.layouts[ 2 ].sink = sink;
|
|
|
|
+ this.layouts[ 3 ].sink = sink;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ this.layouts[ 0 ].sink = sink;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ this.layouts[ 1 ].sink = sink;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ this.layouts[ 2 ].sink = sink;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ this.layouts[ 3 ].sink = sink;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public LayeredGraphNode getSink()
|
|
|
|
|
|
+ public LayeredGraphNode getSink( LayoutType layout )
|
|
{
|
|
{
|
|
- return sink;
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return this.layouts[ 0 ].sink;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return this.layouts[ 1 ].sink;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return this.layouts[ 2 ].sink;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return this.layouts[ 3 ].sink;
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public boolean isXUndefined()
|
|
|
|
|
|
+ public boolean isXUndefined( LayoutType layout )
|
|
{
|
|
{
|
|
- return xUndef;
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return this.layouts[ 0 ].xUndef;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return this.layouts[ 1 ].xUndef;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return this.layouts[ 2 ].xUndef;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return this.layouts[ 3 ].xUndef;
|
|
|
|
+ return true;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setAlignTo( LayeredGraphNode align )
|
|
|
|
|
|
+ public void setAlignTo( LayeredGraphNode align, LayoutType layout )
|
|
{
|
|
{
|
|
- this.align = align;
|
|
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ this.layouts[ 0 ].align = align;
|
|
|
|
+ this.layouts[ 1 ].align = align;
|
|
|
|
+ this.layouts[ 2 ].align = align;
|
|
|
|
+ this.layouts[ 3 ].align = align;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ this.layouts[ 0 ].align = align;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ this.layouts[ 1 ].align = align;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ this.layouts[ 2 ].align = align;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ this.layouts[ 3 ].align = align;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public LayeredGraphNode getAlignedTo()
|
|
|
|
|
|
+ public LayeredGraphNode getAlignedTo( LayoutType layout )
|
|
{
|
|
{
|
|
- return align;
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return this.layouts[ 0 ].align;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return this.layouts[ 1 ].align;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return this.layouts[ 2 ].align;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return this.layouts[ 3 ].align;
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setRoot( LayeredGraphNode root )
|
|
|
|
|
|
+ public void setRoot( LayeredGraphNode root, LayoutType layout )
|
|
{
|
|
{
|
|
- this.root = root;
|
|
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ this.layouts[ 0 ].root = root;
|
|
|
|
+ this.layouts[ 1 ].root = root;
|
|
|
|
+ this.layouts[ 2 ].root = root;
|
|
|
|
+ this.layouts[ 3 ].root = root;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ this.layouts[ 0 ].root = root;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ this.layouts[ 1 ].root = root;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ this.layouts[ 2 ].root = root;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ this.layouts[ 3 ].root = root;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public LayeredGraphNode getRoot()
|
|
|
|
|
|
+ public LayeredGraphNode getRoot( LayoutType layout )
|
|
{
|
|
{
|
|
- return root;
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return this.layouts[ 0 ].root;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return this.layouts[ 1 ].root;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return this.layouts[ 2 ].root;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return this.layouts[ 3 ].root;
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -128,43 +233,94 @@ public class LayeredNode implements LayeredGraphNode {
|
|
{
|
|
{
|
|
SwingUtilities.invokeLater(new Runnable() {
|
|
SwingUtilities.invokeLater(new Runnable() {
|
|
public void run() {
|
|
public void run() {
|
|
- System.out.println( "UPDATE" );
|
|
|
|
MainView.frame.repaint();
|
|
MainView.frame.repaint();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setSelected()
|
|
|
|
|
|
+ public void setSelected( LayoutType layout )
|
|
{
|
|
{
|
|
- selected = true;
|
|
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ this.layouts[ 0 ].selected = true;
|
|
|
|
+ this.layouts[ 1 ].selected = true;
|
|
|
|
+ this.layouts[ 2 ].selected = true;
|
|
|
|
+ this.layouts[ 3 ].selected = true;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ this.layouts[ 0 ].selected = true;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ this.layouts[ 1 ].selected = true;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ this.layouts[ 2 ].selected = true;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ this.layouts[ 3 ].selected = true;
|
|
update();
|
|
update();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public boolean isSelected()
|
|
|
|
- {
|
|
|
|
- boolean tmp = selected;
|
|
|
|
- selected = false;
|
|
|
|
- return tmp;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void setView( JPanel v )
|
|
|
|
|
|
+ public boolean isSelected( LayoutType layout )
|
|
{
|
|
{
|
|
- view = v;
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ {
|
|
|
|
+ boolean tmp = layouts[ 0 ].selected;
|
|
|
|
+ layouts[ 0 ].selected = false;
|
|
|
|
+ return tmp;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ {
|
|
|
|
+ boolean tmp = layouts[ 1 ].selected;
|
|
|
|
+ layouts[ 1 ].selected = false;
|
|
|
|
+ return tmp;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ {
|
|
|
|
+ boolean tmp = layouts[ 2 ].selected;
|
|
|
|
+ layouts[ 2 ].selected = false;
|
|
|
|
+ return tmp;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ {
|
|
|
|
+ boolean tmp = layouts[ 3 ].selected;
|
|
|
|
+ layouts[ 3 ].selected = false;
|
|
|
|
+ return tmp;
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setColor( Color c )
|
|
|
|
|
|
+ public void setColor( Color c, LayoutType layout )
|
|
{
|
|
{
|
|
- color = c;
|
|
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ this.layouts[ 0 ].color = c;
|
|
|
|
+ this.layouts[ 1 ].color = c;
|
|
|
|
+ this.layouts[ 2 ].color = c;
|
|
|
|
+ this.layouts[ 3 ].color = c;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ this.layouts[ 0 ].color = c;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ this.layouts[ 1 ].color = c;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ this.layouts[ 2 ].color = c;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ this.layouts[ 3 ].color = c;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public Color getColor()
|
|
|
|
|
|
+ public Color getColor( LayoutType layout )
|
|
{
|
|
{
|
|
- return color;
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return this.layouts[ 0 ].color;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return this.layouts[ 1 ].color;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return this.layouts[ 2 ].color;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return this.layouts[ 3 ].color;
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -204,70 +360,179 @@ public class LayeredNode implements LayeredGraphNode {
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setX(double x, boolean def) {
|
|
|
|
- if( original != null )
|
|
|
|
- original.setX( x );
|
|
|
|
- xUndef = !def;
|
|
|
|
- this.x = x;
|
|
|
|
|
|
+ public void setX(double x, boolean def, LayoutType layout ) {
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ layouts[ 0 ].x = x;
|
|
|
|
+ layouts[ 1 ].x = x;
|
|
|
|
+ layouts[ 2 ].x = x;
|
|
|
|
+ layouts[ 3 ].x = x;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ {
|
|
|
|
+ layouts[ 0 ].xUndef = !def;
|
|
|
|
+ layouts[ 0 ].x = x;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ {
|
|
|
|
+ layouts[ 1 ].xUndef = !def;
|
|
|
|
+ layouts[ 1 ].x = x;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ {
|
|
|
|
+ layouts[ 2 ].xUndef = !def;
|
|
|
|
+ layouts[ 2 ].x = x;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ {
|
|
|
|
+ layouts[ 3 ].xUndef = !def;
|
|
|
|
+ layouts[ 3 ].x = x;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setY(double y) {
|
|
|
|
- if( original != null )
|
|
|
|
- original.setY( y );
|
|
|
|
- this.y = y;
|
|
|
|
|
|
+ public void setY(double y, LayoutType layout ) {
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ layouts[ 0 ].y = y;
|
|
|
|
+ layouts[ 1 ].y = y;
|
|
|
|
+ layouts[ 2 ].y = y;
|
|
|
|
+ layouts[ 3 ].y = y;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ layouts[ 0 ].y = y;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ layouts[ 1 ].y = y;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ layouts[ 2 ].y = y;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ layouts[ 3 ].y = y;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public double getX() {
|
|
|
|
- return x;
|
|
|
|
|
|
+ public double getX( LayoutType layout ) {
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return this.layouts[ 0 ].x;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return this.layouts[ 1 ].x;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return this.layouts[ 2 ].x;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return this.layouts[ 3 ].x;
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public double getY() {
|
|
|
|
- return y;
|
|
|
|
|
|
+ public double getY( LayoutType layout ) {
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return this.layouts[ 0 ].y;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return this.layouts[ 1 ].y;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return this.layouts[ 2 ].y;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return this.layouts[ 3 ].y;
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public double getWidth() {
|
|
|
|
|
|
+ public double getWidth( LayoutType layout ) {
|
|
if( nodes.size() > 0 )
|
|
if( nodes.size() > 0 )
|
|
{
|
|
{
|
|
- double max = 0;
|
|
|
|
- for( LayeredGraphNode n : nodes )
|
|
|
|
- {
|
|
|
|
- if( max < n.getX() + n.getWidth() + 50 )
|
|
|
|
- max = n.getX() + n.getWidth() + 50;
|
|
|
|
- }
|
|
|
|
- return Math.max( max, w );
|
|
|
|
|
|
+ double max = 0;
|
|
|
|
+ for( LayeredGraphNode n : nodes )
|
|
|
|
+ {
|
|
|
|
+ if( max < n.getX(layout) + n.getWidth(layout) + 50 )
|
|
|
|
+ max = n.getX(layout) + n.getWidth(layout) + 50;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return Math.max( max, layouts[ 0 ].w );
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return Math.max( max, layouts[ 1 ].w );
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return Math.max( max, layouts[ 2 ].w );
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return Math.max( max, layouts[ 3 ].w );
|
|
}
|
|
}
|
|
- return w;
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return layouts[ 0 ].w;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return layouts[ 1 ].w;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return layouts[ 2 ].w;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return layouts[ 3 ].w;
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public double getHeight() {
|
|
|
|
|
|
+ public double getHeight( LayoutType layout ) {
|
|
if( nodes.size() > 0 )
|
|
if( nodes.size() > 0 )
|
|
{
|
|
{
|
|
double max = 0;
|
|
double max = 0;
|
|
for( LayeredGraphNode n : nodes )
|
|
for( LayeredGraphNode n : nodes )
|
|
{
|
|
{
|
|
- if( max < n.getY() + n.getHeight() + 50 )
|
|
|
|
- max = n.getY() + n.getHeight() + 50;
|
|
|
|
|
|
+ if( max < n.getY(layout) + n.getHeight(layout) + 50 )
|
|
|
|
+ max = n.getY(layout) + n.getHeight(layout) + 50;
|
|
}
|
|
}
|
|
- return Math.max( max, h );
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return Math.max( max, layouts[ 0 ].h );
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return Math.max( max, layouts[ 1 ].h );
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return Math.max( max, layouts[ 2 ].h );
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return Math.max( max, layouts[ 3 ].h );
|
|
}
|
|
}
|
|
- return h;
|
|
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ return layouts[ 0 ].h;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ return layouts[ 1 ].h;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ return layouts[ 2 ].h;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ return layouts[ 3 ].h;
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setWidth( double w )
|
|
|
|
|
|
+ public void setWidth( double w, LayoutType layout )
|
|
{
|
|
{
|
|
- this.w = w;
|
|
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ this.layouts[ 0 ].w = w;
|
|
|
|
+ this.layouts[ 1 ].w = w;
|
|
|
|
+ this.layouts[ 2 ].w = w;
|
|
|
|
+ this.layouts[ 3 ].w = w;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ this.layouts[ 0 ].w = w;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ this.layouts[ 1 ].w = w;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ this.layouts[ 2 ].w = w;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ this.layouts[ 3 ].w = w;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setHeight( double h )
|
|
|
|
|
|
+ public void setHeight( double h, LayoutType layout )
|
|
{
|
|
{
|
|
- this.h = h;
|
|
|
|
|
|
+ if( layout == null )
|
|
|
|
+ {
|
|
|
|
+ this.layouts[ 0 ].h = h;
|
|
|
|
+ this.layouts[ 1 ].h = h;
|
|
|
|
+ this.layouts[ 2 ].h = h;
|
|
|
|
+ this.layouts[ 3 ].h = h;
|
|
|
|
+ }
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_LEFT )
|
|
|
|
+ this.layouts[ 0 ].h = h;
|
|
|
|
+ if( layout == LayoutType.TOP_BOTTOM_RIGHT )
|
|
|
|
+ this.layouts[ 1 ].h = h;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_LEFT )
|
|
|
|
+ this.layouts[ 2 ].h = h;
|
|
|
|
+ if( layout == LayoutType.BOTTOM_TOP_RIGHT )
|
|
|
|
+ this.layouts[ 3 ].h = h;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -350,6 +615,17 @@ public class LayeredNode implements LayeredGraphNode {
|
|
public ArrayList<LayeredGraphNode> getContainedNodes() {
|
|
public ArrayList<LayeredGraphNode> getContainedNodes() {
|
|
return nodes;
|
|
return nodes;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public ArrayList< LayeredGraphNode > getSortedContainedNodes()
|
|
|
|
+ {
|
|
|
|
+ ArrayList< LayeredGraphNode > result = new ArrayList<>();
|
|
|
|
+ for( ArrayList<LayeredGraphNode> l : layers )
|
|
|
|
+ {
|
|
|
|
+ result.addAll( l );
|
|
|
|
+ }
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public ArrayList<ArrayList<LayeredGraphNode>> getContainedLayers() {
|
|
public ArrayList<ArrayList<LayeredGraphNode>> getContainedLayers() {
|
|
@@ -398,7 +674,7 @@ public class LayeredNode implements LayeredGraphNode {
|
|
{
|
|
{
|
|
for( LayeredGraphEdge e : unsorted )
|
|
for( LayeredGraphEdge e : unsorted )
|
|
{
|
|
{
|
|
- if( e.getSources().contains( node ) )
|
|
|
|
|
|
+ if( e.getTargets().contains( node ) )
|
|
result.add( e );
|
|
result.add( e );
|
|
}
|
|
}
|
|
}
|
|
}
|