Skip to content

Commit

Permalink
Implements new API, separate globals and locals, etc...cool stuff.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Oct 20, 2000
1 parent 2793826 commit cd64ae0
Showing 1 changed file with 67 additions and 59 deletions.
126 changes: 67 additions & 59 deletions last/toby/gui/VarViewer.java
Expand Up @@ -20,8 +20,7 @@
package last.toby.gui;

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.util.*;
import javax.swing.*;
import last.toby.interpreter.*;

Expand All @@ -33,26 +32,59 @@
*/
public final class VarViewer extends JComponent implements VarWatcher
{
private Vector vars;
protected Stack globals = null;
protected Stack locals = null;
protected int framePointer = 0;

public VarViewer()
{
super();
vars = new Vector();
setBackground(Color.white);
setDoubleBuffered(true);
} // Constructor


private void drawVar(Graphics g, Intrinsic var,
boolean changed,
int varX, int valX, int y,
FontMetrics fm)
{
String str;

g.setColor((changed) ? Color.red : Color.blue);

str = var.getIdentifier();
g.drawString((str == null) ? "(null)" : str, varX + 2, y);

str = var.toString();
if (str == null)
str = "(null)";
int valOffset = fm.stringWidth(str);
g.drawString(str, (valX - 2) - valOffset, y);
} // drawVar


public void paintComponent(Graphics g)
{
int i;
VarReferenceIntrinsic var;
int y = 0;
int lineCount;
Dimension d = getSize();
int halfWidth = d.width / 2;
FontMetrics fm = g.getFontMetrics(getFont());
String str;
int globalCount = -1;
int localCount = -1;

if (this.globals != null)
globalCount = this.globals.size();

if (this.locals != null)
localCount = this.locals.size();

System.out.println("framepointer == (" + this.framePointer + ").");
System.out.println("localCount == (" + localCount + ").");
for (int v = 0; v < localCount; v++)
System.out.println(" - " + ((Intrinsic) this.locals.elementAt(v)).getIdentifier());

lineCount = d.height / fm.getHeight();

Expand All @@ -61,74 +93,50 @@ public void paintComponent(Graphics g)
g.setColor(Color.black);
y += fm.getHeight();
g.drawLine(0, y, d.width, y);
if (vars.size() > i)

// !!! falses in drawVar calls need to change!

if (i < globalCount)
{
drawVar(g, (Intrinsic) this.globals.elementAt(i),
false, 0, halfWidth, y, fm);
} // if

if ((this.locals != null) && (this.framePointer + i < localCount))
{
var = (VarReferenceIntrinsic) vars.elementAt(i);
str = var.getIdentifier();
// !!!
// if (var.getInScope() == true)
g.setColor(Color.blue);
// else
// {
// g.setColor(Color.darkGray);
// g.drawString((str == null) ? "(null)" : str, 1, y + 1);
// g.setColor(Color.lightGray);
g.drawString((str == null) ? "(null)" : str, 0, y);
// } // else
g.setColor(Color.red);
str = var.toString();
g.drawString((str == null) ? "(null)" : str,
(int) (d.width * 0.75), y);
drawVar(g,
(Intrinsic) this.locals.elementAt(this.framePointer+i),
false, halfWidth, d.width, y, fm);
} // if
} // for

g.setColor(Color.black);
g.drawLine(halfWidth, 0, halfWidth, d.height);
} // paint


// VarWatcher implementation...

public void varBeginInterpretation()
{
vars.removeAllElements();
} // varBeginInterpretation


public void varEndInterpretation(boolean normalTermination)
public void varDefineGlobals(Stack _globalStack)
{
if (normalTermination)
vars.removeAllElements();
} // varEndInterpretation
this.globals = _globalStack;
} // varSetGlobals


public void varUpdated(VarReferenceIntrinsic var)
public void varDefineLocalStack(Stack _localStack)
{
repaint();
} // varUpdate
this.locals = _localStack;
} // varSetLocalStack


public void varCreated(VarReferenceIntrinsic var)
public void varNewStackFrame(int pos)
{
vars.addElement(var);
repaint();
} // varCreated

this.framePointer = pos;
paintImmediately(0, 0, getWidth(), getHeight());
} // varSetFramePointer

public void varDestroyed(VarReferenceIntrinsic var)
{
vars.removeElement(var);
repaint();
} // varDestroyed


public void varInScope(VarReferenceIntrinsic var)
{
repaint();
} // varInScope


public void varOutOfScope(VarReferenceIntrinsic var)
public void varUpdated(VarReferenceIntrinsic var)
{
repaint();
} // varOutOfScope
paintImmediately(0, 0, getWidth(), getHeight());
} // varUpdated

} // VarViewer

Expand Down

0 comments on commit cd64ae0

Please sign in to comment.