updates that were lying around but never got checked in; includes reorg of gui
[slipway.git] / src / edu / berkeley / slipway / mpar / Visualization.java
1 package edu.berkeley.slipway.mpar;
2 import com.atmel.fpslic.*;
3 import java.awt.*;
4 import java.awt.event.*;
5 import byucc.edif.tools.merge.*;
6 import byucc.edif.*;
7 import java.io.*;
8 import java.util.*;
9 import edu.berkeley.slipway.*;
10 import edu.berkeley.abits.*;
11 import com.atmel.fpslic.*;
12 import static com.atmel.fpslic.FpslicConstants.*;
13 import static edu.berkeley.slipway.mpar.PhysicalFpslic.*;
14
15 public class Visualization extends Frame implements MouseMotionListener, MouseListener {
16     public void mouseEntered(MouseEvent e) { }
17     public void mouseExited(MouseEvent e) { }
18     public void mousePressed(MouseEvent e){ }
19     public void mouseReleased(MouseEvent e)  { }
20     public void mouseDragged(MouseEvent e) { }
21     public void mouseClicked(MouseEvent e) {
22         MPARDemo.temperature += 0.05;
23     }
24     public void mouseMoved(MouseEvent e) {
25         PhysicalFpslic.badx = (e.getX() / CELLSEP)-1;
26         PhysicalFpslic.bady = (getHeight()-e.getY()) / CELLSEP;
27     }
28
29     public static final Color MOVED = new Color(0x88, 0x88, 0x88);
30     public static final Color PLAIN = new Color(0xff, 0x88, 0x88);
31     public static final Color EMPTY = new Color(0x88, 0xff, 0x88);
32
33     private final PhysicalFpslic pd;
34
35     public Visualization(PhysicalFpslic pd) {
36         this.pd = pd;
37         setSize(CELLSEP*(pd.width+2), CELLSEP*(pd.height+2));
38         show();
39         setSize(CELLSEP*(pd.width+2), CELLSEP*(pd.height+2));
40         addMouseListener(this);
41         addMouseMotionListener(this);
42     }
43
44     public void draw(Placement placement, Routing routing, boolean drawRouting) {
45         Graphics2D g = (Graphics2D)getGraphics();
46         g.translate(CELLSEP,CELLSEP);
47         g.setColor(Color.white);
48         g.fillRect(-CELLSEP, -CELLSEP, getWidth(), getHeight());
49         g.setColor(Color.black);
50         g.drawString("temperature = " + MPARDemo.temperature,    10, 0);
51         g.drawString("congestion  = " + MPARDemo.congestion,     10, 15);
52         g.drawString("slack = " + (-1 * MPARDemo.timingpenalty), 10, 30);
53         for(int x=0; x<pd.width; x++)
54             for(int y=0; y<pd.height; y++) {
55                 double d = Math.sqrt( (PhysicalFpslic.badx-x)*
56                                       (PhysicalFpslic.badx-x)+
57                                       (PhysicalFpslic.bady-y)*
58                                       (PhysicalFpslic.bady-y) );
59                 d = (PhysicalFpslic.badr - d);
60                 if (d<0) d = 0;
61                 d /= PhysicalFpslic.badr;
62                 int a = 255 - ((int)(255*d));
63                 g.setColor(new Color(a, a, a));
64                 g.fillRect((                         x*CELLSEP - (PLANESEP*3)),
65                            ((pd.height * CELLSEP) - (y*CELLSEP + (PLANESEP*3))),
66                            CELLSEP,
67                            CELLSEP);
68             }
69         if (drawRouting) {
70             routing.draw(g);
71         }
72         for(int x=0; x<pd.width; x++)
73             for(int y=0; y<pd.height; y++) {
74                 if (placement.cellToNode(pd.getCell(x,y)) != null)
75                     g.setColor(PLAIN);
76                 else
77                     g.setColor(EMPTY);
78                 g.fillRect((                       x*CELLSEP)+2,
79                            ((pd.height * CELLSEP) - (y*CELLSEP))+2,
80                            CELLSEP-5*PLANESEP-2,
81                            CELLSEP-5*PLANESEP-2);
82             }
83     }
84
85 }