|
@@ -12,7 +12,12 @@ import javax.swing.JTree;
|
|
|
import javax.swing.tree.DefaultTreeCellRenderer;
|
|
|
import javax.swing.tree.TreeNode;
|
|
|
|
|
|
+import animation.Memory;
|
|
|
+import animation.Memory.MemoryType;
|
|
|
import animation.PseudoCodeNode;
|
|
|
+import graph.LayeredGraphEdge;
|
|
|
+import graph.LayeredGraphNode;
|
|
|
+import lib.TextLayoutHelper;
|
|
|
|
|
|
/**
|
|
|
* A tree-like display of pseudocode.
|
|
@@ -26,6 +31,14 @@ public class PseudoCodeRenderer extends DefaultTreeCellRenderer {
|
|
|
private static ImageIcon currentLine = new ImageIcon( PseudoCodeNode.class.getResource( "/img/current_line.png" ) );
|
|
|
|
|
|
private Color specialColor = null;
|
|
|
+
|
|
|
+ private Memory mem;
|
|
|
+ private String toolTip = "";
|
|
|
+
|
|
|
+ public void setMemory( Memory m )
|
|
|
+ {
|
|
|
+ mem = m;
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public Color getBackgroundNonSelectionColor() {
|
|
@@ -76,6 +89,12 @@ public class PseudoCodeRenderer extends DefaultTreeCellRenderer {
|
|
|
return new Font("Monospaced", Font.PLAIN, 12);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public String getToolTipText()
|
|
|
+ {
|
|
|
+ return toolTip;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean arg2, boolean arg3, boolean arg4, int arg5, boolean arg6) {
|
|
|
|
|
@@ -118,6 +137,44 @@ public class PseudoCodeRenderer extends DefaultTreeCellRenderer {
|
|
|
specialColor = RenderHelper.BREAKPOINT_COLOR;
|
|
|
}
|
|
|
setText((String)node.getUserObject());
|
|
|
+ toolTip = "<html>";
|
|
|
+ for( String var : TextLayoutHelper.getVariables( (String)node.getUserObject() ) )
|
|
|
+ {
|
|
|
+ if( mem != null && mem.isSomewhereDefined( var, MemoryType.LOCAL ) )
|
|
|
+ {
|
|
|
+ Object val = mem.read( var, MemoryType.LOCAL );
|
|
|
+ String sVal = "";
|
|
|
+ if( val instanceof LayeredGraphNode )
|
|
|
+ {
|
|
|
+ if( ((LayeredGraphNode)val).getName() == null )
|
|
|
+ sVal = "unnamed Node";
|
|
|
+ else
|
|
|
+ sVal = ((LayeredGraphNode)val).getName();
|
|
|
+ }
|
|
|
+ else if( val instanceof LayeredGraphEdge )
|
|
|
+ {
|
|
|
+ sVal = "(";
|
|
|
+ if( ((LayeredGraphEdge)val).getSources().get( 0 ).getName() == null )
|
|
|
+ sVal += "unnamed Node";
|
|
|
+ else
|
|
|
+ sVal += ((LayeredGraphEdge)val).getSources().get( 0 ).getName();
|
|
|
+ sVal += ",";
|
|
|
+ if( ((LayeredGraphEdge)val).getTargets().get( 0 ).getName() == null )
|
|
|
+ sVal += "unnamed Node";
|
|
|
+ else
|
|
|
+ sVal += ((LayeredGraphEdge)val).getTargets().get( 0 ).getName();
|
|
|
+ sVal += ")";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ sVal = val.toString();
|
|
|
+ toolTip += var + "=" + sVal + "<br>";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( toolTip.equals( "<html>" ) )
|
|
|
+ toolTip += "no variables found in the stack";
|
|
|
+ else
|
|
|
+ toolTip = toolTip.substring( 0, toolTip.length() - 4 );
|
|
|
+ toolTip += "</html>";
|
|
|
return this;
|
|
|
}
|
|
|
|