1 package edu.berkeley.slipway.gui;
3 import com.atmel.fpslic.*;
4 import static com.atmel.fpslic.FpslicConstants.*;
5 import edu.berkeley.slipway.*;
7 import java.awt.geom.*;
8 import java.awt.event.*;
9 import static java.awt.event.KeyEvent.*;
10 import java.awt.color.*;
11 import org.ibex.util.*;
16 public abstract class ZoomingPanel2 extends JComponent implements KeyListener, MouseMotionListener, MouseListener {
18 HashSet<Gui2.Cell> cells = new HashSet<Gui2.Cell>();
21 public boolean shiftkey = false;
22 public Gui2.Cell oldcell = null;
23 public abstract Gui2.Cell whichCell(int x, int y);
24 public boolean mousebutton = false;
25 public boolean xkey = false;
26 public boolean ykey = false;
27 public abstract void pressed();
28 public abstract void released();
34 public boolean drag = false;
37 protected AffineTransform transform = new AffineTransform();
38 private Point2D recenter = new Point2D.Double(-100, 2500);
39 private Point2D recenter2;
41 public ZoomingPanel2() {
42 setDoubleBuffered(true);
44 addMouseMotionListener(this);
45 addMouseListener(this);
48 public abstract void _paint(Graphics2D g);
50 public final void paint(Graphics _g) {
51 Graphics2D g = (Graphics2D)_g;
55 g.translate(5, -1 * getHeight() + 10);
57 transform = g.getTransform();
59 Point2D p = new Point2D.Float();
60 if (recenter != null) {
61 transform.transform(recenter, p);
62 transform.preConcatenate(AffineTransform.getTranslateInstance(dragx - p.getX(),
65 g.setTransform(transform);
68 g.setColor(Color.blue);
69 g.drawLine((int)(recenter.getX() - 10),
70 (int)(recenter.getY() - 10),
71 (int)(recenter.getX() + 10),
72 (int)(recenter.getY() + 10));
73 g.drawLine((int)(recenter.getX() + 10),
74 (int)(recenter.getY() - 10),
75 (int)(recenter.getX() - 10),
76 (int)(recenter.getY() + 10));
82 public void keyTyped(KeyEvent k) {
84 public void keyReleased(KeyEvent k) {
85 shiftkey = (k.getModifiers() & k.SHIFT_MASK) != 0;
86 if (k.getKeyCode() == k.VK_ALT) {
93 switch(k.getKeyCode()) {
94 case VK_X: xkey = false; return;
95 case VK_Y: ykey = false; return;
99 public void keyPressed(KeyEvent k) {
100 shiftkey = (k.getModifiers() & k.SHIFT_MASK) != 0;
102 char c = k.getKeyChar();
106 public void keyPressed0(KeyEvent k) {
108 if (k.getKeyCode() == k.VK_ALT) {
112 recenter = new Point2D.Float(dragx, dragy);
114 transform.inverseTransform(recenter, recenter);
115 } catch (Exception e) {
119 Gui2.Cell cell = whichCell(mousex, mousey);
120 FpslicDevice.Cell c = cell == null ? null : cell.cell;
121 if ((k.getModifiers() & k.ALT_MASK) != 0 || (k.getModifiers() & k.META_MASK) != 0)
122 switch(k.getKeyCode()) {
136 int save1y = c.fpslic().cell(19,22).ylut();
137 int save1x = c.fpslic().cell(19,22).xlut();
138 int save2y = c.fpslic().cell(20,22).ylut();
139 int save2x = c.fpslic().cell(20,22).xlut();
140 c.fpslic().cell(19,22).ylut(0xff);
141 c.fpslic().cell(19,22).xlut(0xff);
142 for(int i=0; i<800; i++) {
143 c.fpslic().cell(20,22).ylut(0xff);
144 c.fpslic().cell(20,22).xlut(0xff);
146 c.fpslic().cell(20,22).ylut(0x00);
147 c.fpslic().cell(20,22).xlut(0x00);
150 c.fpslic().cell(19,22).ylut(save1y);
151 c.fpslic().cell(19,22).xlut(save1x);
152 c.fpslic().cell(20,22).ylut(save2y);
153 c.fpslic().cell(20,22).xlut(save2x);
154 System.out.println("done");
158 case VK_BACK_QUOTE: {
165 c.xlut(LUT_SELF & LUT_OTHER);
166 c.ylut(LUT_SELF & LUT_OTHER);
178 c.ylut((LUT_SELF & ~LUT_OTHER) |
179 (LUT_Z & ~LUT_OTHER) |
196 c.xlut((LUT_SELF & ~LUT_OTHER) |
197 (LUT_Z & ~LUT_OTHER) |
226 c.xlut(LUT_SELF | LUT_OTHER | LUT_Z);
227 c.ylut(LUT_SELF | LUT_OTHER | LUT_Z);
249 else switch(k.getKeyCode()) {
250 case VK_ESCAPE: scale = 1.0; recenter = null; repaint(); return;
252 case VK_BACK_QUOTE: case VK_0: case VK_1: case VK_2: case VK_3: case VK_4: {
253 int i = k.getKeyCode()==VK_BACK_QUOTE ? NONE : (L0 + (k.getKeyChar() - '0'));
255 case 'x': c.xi(i); break;
256 case 'y': case 'q': c.yi(i); break;
257 case 'w': c.wi(i); break;
258 case 'z': c.zi(i); break;
259 case 'o': c.out(i, !c.out(i)); break;
260 case 'h': c.h(i, !c.hx(i)); break;
261 case 'v': c.v(i, !c.vx(i)); break;
267 case VK_W: if (lastChar == 'w') c.wi(NONE); repaint(); return;
268 case VK_X: if (lastChar == 'x') c.xi(NONE); repaint(); return;
269 case VK_Y: if (lastChar == 'y') c.yi(NONE); repaint(); return;
270 case VK_Z: if (lastChar == 'z') c.zi(NONE); repaint(); return;
271 case VK_Q: if (lastChar == 'q') c.yi(NONE); repaint(); return;
274 if (lastChar == 'x') { c.xo(true); repaint(); return; }
275 if (lastChar == 'y' || lastChar == 'q') { c.yo(true); repaint(); return; }
277 case XLUT: c.c(YLUT); break;
278 case YLUT: c.c(ZMUX); break;
279 case ZMUX: c.c(XLUT); break;
280 default: c.c(ZMUX); break;
285 case VK_F: c.f(!c.f()); repaint(); return;
287 Gui2.Cell gc = whichCell(mousex,mousey);
288 gc.scanme = !gc.scanme;
289 //case VK_S: c.ff_reset_value(!c.ff_reset_value()); repaint(); return;
290 case VK_R: c.b(!c.b()); repaint(); return;
313 case H4: c.oe(V4); break;
314 case V4: c.oe(NONE); break;
315 case NONE: c.oe(H4); break;
331 public void mouseMoved(MouseEvent m) {
332 Gui2.Cell newcell = whichCell(m.getX(), m.getY());
333 if (oldcell != newcell) {
334 if (oldcell != null) oldcell.in = false;
335 if (newcell != null) newcell.in = true;
342 if (mousey > dragy + 5) {
343 scale = 1 / ((1 / oscale) + ((mousey - dragy) / 50.0));
344 } else if (mousey < dragy - 5) {
345 scale = oscale + ((dragy - mousey) / 50.0);
354 public boolean isFocusable() { return true; }
356 public void mouseDragged(MouseEvent m) { mouseMoved(m); }
357 public void mousePressed(MouseEvent m) {
361 public void mouseEntered(MouseEvent e) { }
362 public void mouseExited(MouseEvent e) { }
363 public void mouseClicked(MouseEvent e) { }
364 public void mouseReleased(MouseEvent e) {