|
@@ -2,9 +2,14 @@ package view;
|
|
|
|
|
|
import java.awt.Color;
|
|
import java.awt.Color;
|
|
import java.awt.Component;
|
|
import java.awt.Component;
|
|
|
|
+import java.awt.image.BufferedImage;
|
|
|
|
|
|
|
|
+import javax.swing.ImageIcon;
|
|
|
|
+import javax.swing.JLabel;
|
|
import javax.swing.JTree;
|
|
import javax.swing.JTree;
|
|
import javax.swing.tree.DefaultTreeCellRenderer;
|
|
import javax.swing.tree.DefaultTreeCellRenderer;
|
|
|
|
+import javax.swing.tree.TreeNode;
|
|
|
|
+import javax.swing.tree.TreePath;
|
|
|
|
|
|
import animation.PseudoCodeNode;
|
|
import animation.PseudoCodeNode;
|
|
|
|
|
|
@@ -25,11 +30,48 @@ public class PseudoCodeRenderer extends DefaultTreeCellRenderer {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private int countChildren( TreeNode treeNode )
|
|
|
|
+ {
|
|
|
|
+ if( treeNode.isLeaf() )
|
|
|
|
+ return 0;
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ int sum = 0;
|
|
|
|
+ for( int i = 0; i < treeNode.getChildCount(); i++ )
|
|
|
|
+ {
|
|
|
|
+ sum += countChildren( treeNode.getChildAt( i ) ) + 1;
|
|
|
|
+ }
|
|
|
|
+ return sum;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ private int getLineNumber( TreeNode treeNode )
|
|
|
|
+ {
|
|
|
|
+ TreeNode parent = treeNode.getParent();
|
|
|
|
+ if( parent == null )
|
|
|
|
+ return 1;
|
|
|
|
+ int sum = getLineNumber( parent ) + 1;
|
|
|
|
+ for( int i = 0; i < parent.getChildCount(); i++ )
|
|
|
|
+ {
|
|
|
|
+ if( i == parent.getIndex( treeNode ) )
|
|
|
|
+ return sum;
|
|
|
|
+ sum += countChildren( parent.getChildAt( i ) ) + 1;
|
|
|
|
+ }
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean arg2, boolean arg3, boolean arg4, int arg5, boolean arg6) {
|
|
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean arg2, boolean arg3, boolean arg4, int arg5, boolean arg6) {
|
|
|
|
|
|
|
|
+ if( value instanceof PseudoCodeNode )
|
|
|
|
+ {
|
|
|
|
+ BufferedImage rowNumerImg = new BufferedImage( 30, 30, BufferedImage.TYPE_INT_ARGB );
|
|
|
|
+ rowNumerImg.getGraphics().drawString( "" + getLineNumber( (TreeNode) value ), 5, 20 );
|
|
|
|
+ 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);
|
|
Component c = super.getTreeCellRendererComponent(tree, value, arg2, arg3, arg4, arg5, arg6);
|
|
specialColor = false;
|
|
specialColor = false;
|
|
if( value instanceof PseudoCodeNode )
|
|
if( value instanceof PseudoCodeNode )
|