1 package edu.berkeley.obits.gui;
3 import static edu.berkeley.obits.device.atmel.AtmelDevice.Constants.*;
4 import static edu.berkeley.obits.device.atmel.AtmelDevice.Util.*;
5 import edu.berkeley.obits.*;
6 import edu.berkeley.obits.device.atmel.*;
8 import java.awt.geom.*;
9 import java.awt.event.*;
10 import java.awt.color.*;
11 import org.ibex.util.*;
16 public abstract class ZoomingPanel extends JComponent implements KeyListener, MouseMotionListener {
22 public boolean drag = false;
25 protected AffineTransform transform = new AffineTransform();
26 private Point2D recenter;
27 private Point2D recenter2;
29 public ZoomingPanel() {
30 setDoubleBuffered(true);
32 addMouseMotionListener(this);
35 public abstract void _paint(Graphics2D g);
37 public final void paint(Graphics _g) {
38 Graphics2D g = (Graphics2D)_g;
42 g.translate(5, -1 * getHeight() + 10);
44 transform = g.getTransform();
46 Point2D p = new Point2D.Float();
47 if (recenter != null) {
48 transform.transform(recenter, p);
49 transform.preConcatenate(AffineTransform.getTranslateInstance(dragx - p.getX(),
52 g.setTransform(transform);
55 g.setColor(Color.blue);
56 g.drawLine((int)(recenter.getX() - 10),
57 (int)(recenter.getY() - 10),
58 (int)(recenter.getX() + 10),
59 (int)(recenter.getY() + 10));
60 g.drawLine((int)(recenter.getX() + 10),
61 (int)(recenter.getY() - 10),
62 (int)(recenter.getX() - 10),
63 (int)(recenter.getY() + 10));
69 public void keyTyped(KeyEvent k) {
71 public void keyReleased(KeyEvent k) {
72 if (k.getKeyCode() == k.VK_ALT) {
80 public void keyPressed(KeyEvent k) {
81 if (k.getKeyCode() == k.VK_ALT) {
85 recenter = new Point2D.Float(dragx, dragy);
87 transform.inverseTransform(recenter, recenter);
88 } catch (Exception e) {
92 char c = k.getKeyChar();
94 case '+': scale += 0.1; repaint(); return;
95 case '-': scale -= 0.1; repaint(); return;
96 case 'z': scale = 1.0; recenter = null; repaint(); return;
99 public void mouseMoved(MouseEvent m) {
101 Cell oldcell = whichCell(mousex, mousey);
102 Cell newcell = whichCell(m.getX(), m.getY());
103 System.out.println((oldcell==null ? "old=null" : ("old=" + oldcell._x+","+oldcell._y+" "))+
104 (newcell==null ? "new=null" : ("new=" + newcell._x+","+newcell._y+" ")));
105 if (oldcell != newcell) {
106 if (oldcell != null) oldcell.in = false;
107 if (newcell != null) newcell.in = true;
114 if (mousey > dragy + 5) {
115 scale = 1 / ((1 / oscale) + ((mousey - dragy) / 50.0));
116 } else if (mousey < dragy - 5) {
117 scale = oscale + ((dragy - mousey) / 50.0);
126 public boolean isFocusable() { return true; }
128 public void mouseDragged(MouseEvent m) {
133 public void mousePressed(MouseEvent m) {
134 recenter = new Point2D.Float(m.getX(), m.getY());
136 transform.transform(recenter, recenter);
137 } catch (Exception e) {
142 public void mouseEntered(MouseEvent e) { }
143 public void mouseExited(MouseEvent e) { }
144 public void mouseClicked(MouseEvent e) { }
145 public void mouseReleased(MouseEvent e) { }