Ver código fonte

Breakpoints hinzugefügt, die die Annimation automatisch pausieren (nur annimation noch nicht die step knöpfe)

Kolja Strohm 7 anos atrás
pai
commit
41dd1ea446

+ 35 - 0
src/animation/PseudoCodeNode.java

@@ -2,6 +2,7 @@ package animation;
 
 import javax.swing.JTree;
 import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.MutableTreeNode;
 import javax.swing.tree.TreePath;
 
 public class PseudoCodeNode extends DefaultMutableTreeNode {
@@ -13,12 +14,34 @@ public class PseudoCodeNode extends DefaultMutableTreeNode {
     
     private boolean selected;
     private JTree tree;
+    private boolean breakPoint;
+    private AnimationController controller;
     
     public PseudoCodeNode( String description, JTree tree )
     {
         super( description );
         selected = false;
         this.tree = tree;
+        breakPoint = false;
+    }
+    
+    public void setController( AnimationController c )
+    {
+        if( children != null )
+        {
+            for( Object ch : children )
+            {
+                ((PseudoCodeNode)ch).setController( c );
+            }
+        }
+        controller = c;
+    }
+    
+    @Override
+    public void add( MutableTreeNode node )
+    {
+        ((PseudoCodeNode)node).setController( controller );
+        super.add( node );
     }
     
     public JTree getTree()
@@ -33,10 +56,22 @@ public class PseudoCodeNode extends DefaultMutableTreeNode {
     
     public void setSelected( boolean selected )
     {
+        if( selected && breakPoint )
+            controller.setContinuous( false );
         if( selected )
             tree.expandPath( new TreePath( this.getPath() ) );
         else
             tree.collapsePath( new TreePath( this.getPath() ) );
         this.selected = selected;
     }
+    
+    public void setBreakPoint( boolean breakPoint )
+    {
+        this.breakPoint = breakPoint;
+    }
+    
+    public boolean hasBreakPoint()
+    {
+        return breakPoint;
+    }
 }

+ 0 - 7
src/main/Main.java

@@ -1,9 +1,7 @@
 package main;
 import graph.InitializeNodePositions;
 import graph.LayeredGraphNode;
-import graph.RandomGraphGenerator;
 import graph.io.Reader;
-import lib.SweepCrossingMinimizer;
 import view.MainView;
 
 
@@ -21,11 +19,6 @@ public class Main {
 	public static void main(String[] args) {
 		Reader r = new Reader( "logo.json" );
 		LayeredGraphNode graph = r.readInputGraph();
-	    //RandomGraphGenerator r = new RandomGraphGenerator( 0.1, 0.2, 5,5, 5, 5, 1 );
-	    //LayeredGraphNode graph = r.createRandomNode( null, 0 );
-	    //SweepCrossingMinimizer cminzer = new SweepCrossingMinimizer();
-	    //for( int i = 0; i < 10; i++ )
-	    //	cminzer.minimizeCrossings( graph );
 		InitializeNodePositions.placeNodes( graph );
 		new MainView( graph );
 	}

+ 17 - 2
src/view/MainView.java

@@ -14,6 +14,8 @@ import java.awt.event.ComponentEvent;
 import java.awt.event.FocusEvent;
 import java.awt.event.FocusListener;
 import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
 
 import javax.swing.JButton;
 import javax.swing.JDialog;
@@ -30,9 +32,11 @@ import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
 
 import animation.Action;
 import animation.AnimationController;
+import animation.PseudoCodeNode;
 import bk.BKNodePlacement;
 import bk.ExtremalLayoutCalc.LayoutType;
 import graph.InitializeNodePositions;
@@ -672,13 +676,24 @@ public class MainView {
             
         });
         pseudoTree = new JTree();
-        pseudoTree.setModel( new DefaultTreeModel( algorithm.createPseudocodeTree( pseudoTree ) ) );
+        PseudoCodeNode tree = algorithm.createPseudocodeTree( pseudoTree );
+        tree.setController( controller );
+        pseudoTree.setModel( new DefaultTreeModel( tree ) );
         pseudoTree.setCellRenderer( new PseudoCodeRenderer() );
         pseudoTree.setSelectionModel( null );
+        pseudoTree.addMouseListener( new MouseAdapter() {
+            public void mousePressed(MouseEvent e) {
+                TreePath selPath = pseudoTree.getPathForLocation(e.getX(), e.getY());
+                if( selPath != null && e.getClickCount() == 3 ) {
+                    ((PseudoCodeNode)selPath.getLastPathComponent()).setBreakPoint( !((PseudoCodeNode)selPath.getLastPathComponent()).hasBreakPoint() );
+                    pseudoTree.repaint();
+                }
+            }
+        } );
         JScrollPane treeView = new JScrollPane( pseudoTree );
         treeView.setBounds( 10,  110,  380, 380 );
         
-        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.setSize( (int)graph.getWidth( LayoutType.TOP_BOTTOM_LEFT ) * 2 + 575, (int)graph.getHeight( LayoutType.TOP_BOTTOM_LEFT ) * 2 + 200 );
 		frame.setLocation( 100, 100 );
 		frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
 		frame.setVisible( true );

+ 14 - 15
src/view/PseudoCodeRenderer.java

@@ -63,25 +63,24 @@ public class PseudoCodeRenderer extends DefaultTreeCellRenderer {
     @Override
     public Component getTreeCellRendererComponent(JTree tree, Object value, boolean arg2, boolean arg3, boolean arg4, int arg5, boolean arg6) {
 
-        if( value instanceof PseudoCodeNode )
+        PseudoCodeNode node = (PseudoCodeNode) value;
+        BufferedImage rowNumerImg = new BufferedImage( 30, 30, BufferedImage.TYPE_INT_ARGB );
+        Graphics2D g = (Graphics2D) rowNumerImg.getGraphics();
+        if( node.hasBreakPoint() )
         {
-            BufferedImage rowNumerImg = new BufferedImage( 30, 30, BufferedImage.TYPE_INT_ARGB );
-            Graphics2D g = (Graphics2D) rowNumerImg.getGraphics();
-            g.setColor( Color.BLACK );
-            g.drawString( "" + getLineNumber( (TreeNode) value ), 5, 20 );
-            g.dispose();
-            this.setClosedIcon( new ImageIcon( rowNumerImg ) );
-            this.setOpenIcon( new ImageIcon( rowNumerImg ) );
-            this.setLeafIcon( new ImageIcon( rowNumerImg ) );
+            g.setColor( Color.RED );
+            g.fillOval(20, 10, 10, 10 );
         }
+        g.setColor( Color.BLACK );
+        g.drawString( "" + getLineNumber( (TreeNode) value ), 5, 20 );
+        g.dispose();
+        this.setClosedIcon( new ImageIcon( rowNumerImg ) );
+        this.setOpenIcon( new ImageIcon( rowNumerImg ) );
+        this.setLeafIcon( new ImageIcon( rowNumerImg ) );
         Component c = super.getTreeCellRendererComponent(tree, value, arg2, arg3, arg4, arg5, arg6);
         specialColor = false;
-        if( value instanceof PseudoCodeNode )
-        {
-            PseudoCodeNode node = (PseudoCodeNode) value;
-            if(node.isSelected()) {
-                specialColor = true;
-            }
+        if(node.isSelected()) {
+            specialColor = true;
         }
         return c;
     }