|
@@ -3,6 +3,7 @@ package view;
|
|
|
import java.awt.BorderLayout;
|
|
|
import java.awt.Color;
|
|
|
import java.awt.Dimension;
|
|
|
+import java.awt.Font;
|
|
|
import java.awt.GridLayout;
|
|
|
import java.awt.event.ActionEvent;
|
|
|
import java.awt.event.ActionListener;
|
|
@@ -17,6 +18,7 @@ import javax.swing.JLabel;
|
|
|
import javax.swing.JLayeredPane;
|
|
|
import javax.swing.JPanel;
|
|
|
import javax.swing.JScrollPane;
|
|
|
+import javax.swing.JTextArea;
|
|
|
import javax.swing.JTextField;
|
|
|
import javax.swing.JTree;
|
|
|
import javax.swing.UIManager;
|
|
@@ -43,7 +45,7 @@ public class MainView {
|
|
|
* The 'frame' of the main window.
|
|
|
* The reason why there can only be one instance of this class.
|
|
|
*/
|
|
|
- public static JFrame frame;
|
|
|
+ private JFrame frame;
|
|
|
private AnimationController controller;
|
|
|
private JButton stepForward;
|
|
|
private JButton stepForwardInto;
|
|
@@ -59,6 +61,7 @@ public class MainView {
|
|
|
private JLabel delayText;
|
|
|
private JTextField delay;
|
|
|
public static JTree pseudoTree;
|
|
|
+ private LayeredGraphNode graph;
|
|
|
|
|
|
private String strToLen( String s, int l )
|
|
|
{
|
|
@@ -71,15 +74,71 @@ public class MainView {
|
|
|
return s;
|
|
|
}
|
|
|
|
|
|
+ private String debugInfo()
|
|
|
+ {
|
|
|
+ String info = "Debug Information Table: \n";
|
|
|
+ info += "_______________________________________________________________________________________________________________________________________________________________________________________________________________________\n";
|
|
|
+ info += "|" + strToLen( "Top -> Bottom :> Left", 51 ) + "| |" + strToLen( "Top -> Bottom :> Right", 51 ) + "| |" + strToLen( "Bottom -> Top :> Left", 51 ) + "| |" + strToLen( "Bottom -> Top :> Right", 51 ) + "|\n";
|
|
|
+ info += "|___________________________________________________| |___________________________________________________| |___________________________________________________| |___________________________________________________|\n";
|
|
|
+ info += "| Node | Shift | Sink | Root | Align | x | xDef | | Node | Shift | Sink | Root | Align | x | xDef | | Node | Shift | Sink | Root | Align | x | xDef | | Node | Shift | Sink | Root | Align | x | xDef |\n";
|
|
|
+ for( LayeredGraphNode n : graph.getContainedNodes() )
|
|
|
+ {
|
|
|
+ info += "|" + strToLen( n.getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getShift( LayoutType.TOP_BOTTOM_LEFT ) + "", 7 ) +
|
|
|
+ "|" + strToLen( n.getSink( LayoutType.TOP_BOTTOM_LEFT ).getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getRoot( LayoutType.TOP_BOTTOM_LEFT ).getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getAlignedTo( LayoutType.TOP_BOTTOM_LEFT ).getName(), 7 ) +
|
|
|
+ "|" + strToLen( n.getX( LayoutType.TOP_BOTTOM_LEFT ) + "", 5 ) +
|
|
|
+ "|" + strToLen( !n.isXUndefined( LayoutType.TOP_BOTTOM_LEFT ) + "", 8 ) + "| " +
|
|
|
+ "|" + strToLen( n.getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getShift( LayoutType.TOP_BOTTOM_RIGHT ) + "", 7 ) +
|
|
|
+ "|" + strToLen( n.getSink( LayoutType.TOP_BOTTOM_RIGHT ).getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getRoot( LayoutType.TOP_BOTTOM_RIGHT ).getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getAlignedTo( LayoutType.TOP_BOTTOM_RIGHT ).getName(), 7 ) +
|
|
|
+ "|" + strToLen( n.getX( LayoutType.TOP_BOTTOM_RIGHT ) + "", 5 ) +
|
|
|
+ "|" + strToLen( !n.isXUndefined( LayoutType.TOP_BOTTOM_RIGHT ) + "", 8 ) + "| " +
|
|
|
+ "|" + strToLen( n.getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getShift( LayoutType.BOTTOM_TOP_LEFT ) + "", 7 ) +
|
|
|
+ "|" + strToLen( n.getSink( LayoutType.BOTTOM_TOP_LEFT ).getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getRoot( LayoutType.BOTTOM_TOP_LEFT ).getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getAlignedTo( LayoutType.BOTTOM_TOP_LEFT ).getName(), 7 ) +
|
|
|
+ "|" + strToLen( n.getX( LayoutType.BOTTOM_TOP_LEFT ) + "", 5 ) +
|
|
|
+ "|" + strToLen( !n.isXUndefined( LayoutType.BOTTOM_TOP_LEFT ) + "", 8 ) + "| " +
|
|
|
+ "|" + strToLen( n.getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getShift( LayoutType.BOTTOM_TOP_RIGHT ) + "", 7 ) +
|
|
|
+ "|" + strToLen( n.getSink( LayoutType.BOTTOM_TOP_RIGHT ).getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getRoot( LayoutType.BOTTOM_TOP_RIGHT ).getName(), 6 ) +
|
|
|
+ "|" + strToLen( n.getAlignedTo( LayoutType.BOTTOM_TOP_RIGHT ).getName(), 7 ) +
|
|
|
+ "|" + strToLen( n.getX( LayoutType.BOTTOM_TOP_RIGHT ) + "", 5 ) +
|
|
|
+ "|" + strToLen( !n.isXUndefined( LayoutType.BOTTOM_TOP_RIGHT ) + "", 8 ) + "|\n";
|
|
|
+ }
|
|
|
+ info += "-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------";
|
|
|
+ return info;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void showDebugInfo()
|
|
|
+ {
|
|
|
+ JFrame debugFrame = new JFrame();
|
|
|
+ JTextArea info = new JTextArea();
|
|
|
+ info.setEditable( false );
|
|
|
+ info.setFont( new Font( Font.MONOSPACED, Font.PLAIN, 11 ) );
|
|
|
+ info.setText( debugInfo() );
|
|
|
+ JScrollPane view = new JScrollPane( info );
|
|
|
+ debugFrame.add( view );
|
|
|
+ debugFrame.setVisible( true );
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Initialize the window and its contents.
|
|
|
* @param graph the graph that is displayed in this window.
|
|
|
*/
|
|
|
public MainView( LayeredGraphNode graph )
|
|
|
{
|
|
|
+ this.graph = graph;
|
|
|
controller = new AnimationController();
|
|
|
controller.setTimeBetween( 50 );
|
|
|
- BKNodePlacement algorithm = new BKNodePlacement( controller, graph );
|
|
|
+ frame = new JFrame();
|
|
|
+ BKNodePlacement algorithm = new BKNodePlacement( controller, graph, frame );
|
|
|
|
|
|
// Create Menu GUI
|
|
|
stepForward = new NiceButton( "stepForward" );
|
|
@@ -182,6 +241,14 @@ public class MainView {
|
|
|
});
|
|
|
debug = new NiceButton( "debug" );
|
|
|
debug.setLocation( 350, 10 );
|
|
|
+ debug.addActionListener( new ActionListener() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void actionPerformed(ActionEvent e) {
|
|
|
+ showDebugInfo();
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
generateRandom = new NiceButton( "generateRandom" );
|
|
|
generateRandom.setLocation( 350, 60 );
|
|
|
generateRandom.addActionListener( new ActionListener() {
|
|
@@ -241,7 +308,6 @@ public class MainView {
|
|
|
JScrollPane treeView = new JScrollPane( pseudoTree );
|
|
|
treeView.setBounds( 10, 110, 380, 380 );
|
|
|
|
|
|
- frame = new JFrame(); // this may write to a static field because there should be only one instance of this class.
|
|
|
frame.setSize( Math.min( (int)graph.getWidth( LayoutType.TOP_BOTTOM_LEFT ) * 2 + 200, 1700 ), Math.min( (int)graph.getHeight( LayoutType.TOP_BOTTOM_LEFT ) * 2 + 200, 900 ) );
|
|
|
frame.setLocation( 100, 100 );
|
|
|
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
|
|
@@ -271,43 +337,7 @@ public class MainView {
|
|
|
frame.validate();
|
|
|
if( e.getKeyCode() == KeyEvent.VK_D )
|
|
|
{
|
|
|
- System.out.println( "Debug Information Table: " );
|
|
|
- System.out.println( "_______________________________________________________________________________________________________________________________________________________________________________________________________________________" );
|
|
|
- System.out.println( "|" + strToLen( "Top -> Bottom :> Left", 51 ) + "| |" + strToLen( "Top -> Bottom :> Right", 51 ) + "| |" + strToLen( "Bottom -> Top :> Left", 51 ) + "| |" + strToLen( "Bottom -> Top :> Right", 51 ) + "|" );
|
|
|
- System.out.println( "|___________________________________________________| |___________________________________________________| |___________________________________________________| |___________________________________________________|" );
|
|
|
- System.out.println( "| Node | Shift | Sink | Root | Align | x | xDef | | Node | Shift | Sink | Root | Align | x | xDef | | Node | Shift | Sink | Root | Align | x | xDef | | Node | Shift | Sink | Root | Align | x | xDef |" );
|
|
|
- for( LayeredGraphNode n : graph.getContainedNodes() )
|
|
|
- {
|
|
|
- System.out.println( "|" + strToLen( n.getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getShift( LayoutType.TOP_BOTTOM_LEFT ) + "", 7 ) +
|
|
|
- "|" + strToLen( n.getSink( LayoutType.TOP_BOTTOM_LEFT ).getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getRoot( LayoutType.TOP_BOTTOM_LEFT ).getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getAlignedTo( LayoutType.TOP_BOTTOM_LEFT ).getName(), 7 ) +
|
|
|
- "|" + strToLen( n.getX( LayoutType.TOP_BOTTOM_LEFT ) + "", 5 ) +
|
|
|
- "|" + strToLen( !n.isXUndefined( LayoutType.TOP_BOTTOM_LEFT ) + "", 8 ) + "| " +
|
|
|
- "|" + strToLen( n.getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getShift( LayoutType.TOP_BOTTOM_RIGHT ) + "", 7 ) +
|
|
|
- "|" + strToLen( n.getSink( LayoutType.TOP_BOTTOM_RIGHT ).getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getRoot( LayoutType.TOP_BOTTOM_RIGHT ).getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getAlignedTo( LayoutType.TOP_BOTTOM_RIGHT ).getName(), 7 ) +
|
|
|
- "|" + strToLen( n.getX( LayoutType.TOP_BOTTOM_RIGHT ) + "", 5 ) +
|
|
|
- "|" + strToLen( !n.isXUndefined( LayoutType.TOP_BOTTOM_RIGHT ) + "", 8 ) + "| " +
|
|
|
- "|" + strToLen( n.getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getShift( LayoutType.BOTTOM_TOP_LEFT ) + "", 7 ) +
|
|
|
- "|" + strToLen( n.getSink( LayoutType.BOTTOM_TOP_LEFT ).getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getRoot( LayoutType.BOTTOM_TOP_LEFT ).getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getAlignedTo( LayoutType.BOTTOM_TOP_LEFT ).getName(), 7 ) +
|
|
|
- "|" + strToLen( n.getX( LayoutType.BOTTOM_TOP_LEFT ) + "", 5 ) +
|
|
|
- "|" + strToLen( !n.isXUndefined( LayoutType.BOTTOM_TOP_LEFT ) + "", 8 ) + "| " +
|
|
|
- "|" + strToLen( n.getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getShift( LayoutType.BOTTOM_TOP_RIGHT ) + "", 7 ) +
|
|
|
- "|" + strToLen( n.getSink( LayoutType.BOTTOM_TOP_RIGHT ).getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getRoot( LayoutType.BOTTOM_TOP_RIGHT ).getName(), 6 ) +
|
|
|
- "|" + strToLen( n.getAlignedTo( LayoutType.BOTTOM_TOP_RIGHT ).getName(), 7 ) +
|
|
|
- "|" + strToLen( n.getX( LayoutType.BOTTOM_TOP_RIGHT ) + "", 5 ) +
|
|
|
- "|" + strToLen( !n.isXUndefined( LayoutType.BOTTOM_TOP_RIGHT ) + "", 8 ) + "|");
|
|
|
- }
|
|
|
- System.out.println( "-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------" );
|
|
|
+ System.out.println( debugInfo() );
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -351,7 +381,7 @@ public class MainView {
|
|
|
menue.add( delayText );
|
|
|
menue.add( delay );
|
|
|
menue.add( treeView );
|
|
|
- //menue.add( stepBackwardInto );
|
|
|
+ menue.add( stepBackwardInto );
|
|
|
menue.add( stepBackwardOut );
|
|
|
menue.add( runBackward );
|
|
|
frame.add( menue, BorderLayout.EAST );
|
|
@@ -378,8 +408,10 @@ public class MainView {
|
|
|
}
|
|
|
combined.setSize( layne.getWidth() / 3, layne.getHeight() / 3 );
|
|
|
combined.setLocation( layne.getWidth() / 3, layne.getHeight() / 3 );
|
|
|
- frame.validate();
|
|
|
- frame.repaint();
|
|
|
+
|
|
|
+ layne.remove( pl );
|
|
|
+ layne.add( pl, 1 );
|
|
|
+ frame.repaint();
|
|
|
}
|
|
|
});
|
|
|
algorithm.start();
|