Ver Fonte

Merge remote-tracking branch 'origin/master'

Eren Yilmaz há 6 anos atrás
pai
commit
6cefb40594

+ 13 - 0
src/animation/PseudoCodeNode.java

@@ -56,6 +56,19 @@ public class PseudoCodeNode extends DefaultMutableTreeNode {
         return selected;
     }
     
+    public boolean hasSelectedSubnode()
+    {
+    	if( children != null )
+    	{
+	    	for( Object ch : children )
+	        {
+	            if( ((PseudoCodeNode)ch).isSelected() || ((PseudoCodeNode)ch).hasSelectedSubnode() )
+	            	return true;
+	        }
+    	}
+    	return false;
+    }
+    
     /**
      * highlight this line of pseudocode.
      * should be called when the line is entered, as it triggers breakpoints

BIN
src/img/current_line.png


+ 1 - 0
src/view/MainView.java

@@ -695,6 +695,7 @@ public class MainView {
         pseudoTree.setBackground(RenderHelper.BACKGROUND_COLOR);
         PseudoCodeNode tree = algorithm.createPseudocodeTree( pseudoTree );
         tree.setController( controller );
+        pseudoTree.setBackground( new Color( 0x1e1e1e ) );
         pseudoTree.setModel( new DefaultTreeModel( tree ) );
         pseudoTree.setCellRenderer( new PseudoCodeRenderer() );
         pseudoTree.setSelectionModel( null );

+ 1 - 1
src/view/NiceButton.java

@@ -27,7 +27,7 @@ public class NiceButton extends JButton implements MouseListener {
      */
     public NiceButton( String name )
     {
-        super( NiceButton.class.getResource( "../img/" + name + ".png" ) != null ? makeColorTransparent( new ImageIcon( NiceButton.class.getResource( "../img/" + name + ".png" ) ).getImage().getScaledInstance( 40, 40, Image.SCALE_AREA_AVERAGING ), Color.WHITE, 0 ) : new ImageIcon() );
+        super( NiceButton.class.getResource( "/img/" + name + ".png" ) != null ? makeColorTransparent( new ImageIcon( NiceButton.class.getResource( "/img/" + name + ".png" ) ).getImage().getScaledInstance( 40, 40, Image.SCALE_AREA_AVERAGING ), Color.WHITE, 0 ) : new ImageIcon() );
         setSize( 40, 40 );
         addMouseListener( this );
         setBorderPainted( false );

+ 20 - 5
src/view/PseudoCodeRenderer.java

@@ -20,8 +20,9 @@ import animation.PseudoCodeNode;
  *
  */
 public class PseudoCodeRenderer extends DefaultTreeCellRenderer {
-
+	
     private static final long serialVersionUID = 1L;
+    private static ImageIcon currentLine = new ImageIcon( PseudoCodeNode.class.getResource( "/img/current_line.png" ) );
     
     private Color specialColor = null;
 
@@ -78,15 +79,29 @@ public class PseudoCodeRenderer extends DefaultTreeCellRenderer {
     public Component getTreeCellRendererComponent(JTree tree, Object value, boolean arg2, boolean arg3, boolean arg4, int arg5, boolean arg6) {
 
         PseudoCodeNode node = (PseudoCodeNode) value;
-        BufferedImage rowNumerImg = new BufferedImage( 30, 30, BufferedImage.TYPE_INT_ARGB );
+        int width = 10;
+        if( !node.hasSelectedSubnode() && node.isSelected() )
+            width += 25;
+        if( node.hasBreakPoint() )
+            width += 15;
+        String line = "" + getLineNumber( (TreeNode) value );
+        width += tree.getFontMetrics( this.getFont() ).stringWidth( line );
+        BufferedImage rowNumerImg = new BufferedImage( width, 30, BufferedImage.TYPE_INT_ARGB );
         Graphics2D g = (Graphics2D) rowNumerImg.getGraphics();
+        int x = 5;
+        if( !node.hasSelectedSubnode() && node.isSelected() )
+        {
+        	g.drawImage( currentLine.getImage(), x, 5, 20, 20, null );
+        	x += 25;
+        }
+        g.setColor( RenderHelper.CURRENT_LINE_COLOR );
+        g.drawString( line, x, 20 );
+        x += g.getFontMetrics().stringWidth( line ) + 5;
         if( node.hasBreakPoint() )
         {
             g.setColor( new Color (0xe7887a) );
-            g.fillOval(20, 10, 10, 10 );
+            g.fillOval(x, 10, 10, 10 );
         }
-        g.setColor( RenderHelper.CURRENT_LINE_COLOR );
-        g.drawString( "" + getLineNumber( (TreeNode) value ), 5, 20 );
         g.dispose();
         this.setClosedIcon( new ImageIcon( rowNumerImg ) );
         this.setOpenIcon( new ImageIcon( rowNumerImg ) );