PseudoCodeRenderer.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package view;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Font;
  5. import javax.swing.JTree;
  6. import javax.swing.tree.DefaultTreeCellRenderer;
  7. import lib.TextLayoutHelper;
  8. import processor.Memory;
  9. import processor.PseudoCodeNode;
  10. import processor.Memory.Visibility;
  11. /**
  12. * A tree-like display of pseudocode.
  13. * Extends {@link DefaultTreeCellRenderer}
  14. * @author kolja
  15. *
  16. */
  17. public class PseudoCodeRenderer extends DefaultTreeCellRenderer {
  18. private static final long serialVersionUID = 1L;
  19. private Color specialColor = null;
  20. private Memory mem;
  21. private String toolTip = "";
  22. public void setMemory( Memory m )
  23. {
  24. mem = m;
  25. }
  26. @Override
  27. public Color getBackgroundNonSelectionColor() {
  28. if(specialColor != null) {
  29. return specialColor;
  30. } else {
  31. return RenderHelper.BACKGROUND_COLOR;
  32. }
  33. }
  34. @Override
  35. public Color getForeground() {
  36. return new Color(0xa9b7c6);
  37. }
  38. @Override
  39. public Font getFont() {
  40. return RenderHelper.font;
  41. }
  42. @Override
  43. public String getToolTipText()
  44. {
  45. return toolTip;
  46. }
  47. @Override
  48. public Component getTreeCellRendererComponent(JTree tree, Object value, boolean arg2, boolean arg3, boolean arg4, int arg5, boolean arg6) {
  49. PseudoCodeNode node = (PseudoCodeNode) value;
  50. this.doLayout();
  51. this.setClosedIcon( null );
  52. this.setOpenIcon( null );
  53. this.setLeafIcon( null );
  54. super.getTreeCellRendererComponent(tree, value, arg2, arg3, arg4, arg5, arg6);
  55. specialColor = null;
  56. if(node.isSelected()) {
  57. specialColor = new Color(0x2d6099);
  58. } else if (node.hasBreakPoint()) {
  59. specialColor = RenderHelper.BREAKPOINT_COLOR;
  60. }
  61. setText((String)node.getUserObject());
  62. toolTip = "<html>";
  63. for( String var : TextLayoutHelper.getVariables( (String)node.getUserObject() ) )
  64. {
  65. if( mem != null )
  66. {
  67. synchronized( mem ) {
  68. if( mem.isSomewhereDefined( var, Visibility.LOCAL ) )
  69. {
  70. Object val = mem.read( var, Visibility.LOCAL );
  71. if( val != null )
  72. toolTip += var + "=" + val.toString() + "<br>";
  73. }
  74. }
  75. }
  76. }
  77. if( toolTip.equals( "<html>" ) )
  78. toolTip += "no variables found in the stack";
  79. else
  80. toolTip = toolTip.substring( 0, toolTip.length() - 4 );
  81. toolTip += "</html>";
  82. return this;
  83. }
  84. }