ObsStoreView.java

import java.awt.*;
import store.*;
import obsstore.*;
import java.util.*;

public class ObsStoreView extends Canvas implements Observer {
   ObservableStore store;
   int i=0;

   public ObsStoreView(ObservableStore s) 
      {store = s; s.addObserver(this);}

   public STORE store() { return store; }

   public void paint(Graphics g) {
      Dimension extent = minimumSize();
      PaintFun pf = new PaintFun(g);
      g.drawRect(0,0,extent.width,extent.height);
      g.translate(5,extent.height-5);
      store.execute(pf);
      g.translate(5,-(extent.height-5));
   }

   public Dimension minimumSize() {
      DimensionFun f = new DimensionFun(getGraphics().getFontMetrics());
      store.execute(f);
      return new Dimension(f.width()+10,f.height()+10);
   }

   public Dimension preferredSize() {return minimumSize();}

   public void update(Observable o, Object args) {
      resize(preferredSize());
      repaint();
   }

   public boolean mouseDown(Event e, int x, int y) {
      if (e.metaDown()) store.remove();
         else store.add(new Integer(i++));
      return true;
  }
}

class DimensionFun implements FUNCTION {

   FontMetrics fm;
   int width=0;
   int height=0;
   int deltaH;

   DimensionFun(FontMetrics fm) {
      this.fm = fm; 
      deltaH = fm.getMaxAscent() + fm.getMaxDescent();
   }

   public Object value(Object o) {
      String s = ""+o;
      width = Math.max(width,fm.stringWidth(s));
      height += deltaH;
      return s;
   }

   int width() { return width; }
   int height() { return height; }
}

class PaintFun implements FUNCTION {
   Graphics g;
   int y = 0;
   int deltaH, descent;

   PaintFun(Graphics g) {
      this.g = g; 
      FontMetrics fm = g.getFontMetrics();
      deltaH = fm.getMaxAscent() + fm.getMaxDescent();
      descent = fm.getMaxDescent();
   }

   public Object value(Object o) {
      g.drawString(""+o,0,y-descent);
      y -= deltaH;
      return null;
   }
}


On to ObsStoreSizeView.java Part of mvc
Hubert Baumeister
June 21, 1997

Imprint | Data Protection