EOS 2  1.1.0
Einfache Objektbasierte Sprache
ViewPanel.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.geo.gui;
2 
3 import de.lathanda.eos.base.MutableColor;
4 import de.lathanda.eos.base.Picture2D;
5 import de.lathanda.eos.base.math.Point;
6 import de.lathanda.eos.base.util.GuiToolkit;
7 import de.lathanda.eos.geo.Window;
8 import de.lathanda.eos.geo.gui.event.CursorListener;
9 import de.lathanda.eos.geo.gui.event.FigureListener;
10 
11 import java.awt.Dimension;
12 import java.awt.Graphics;
13 import java.awt.Graphics2D;
14 import java.awt.event.ComponentEvent;
15 import java.awt.event.ComponentListener;
16 import java.awt.event.MouseEvent;
17 import java.awt.event.MouseListener;
18 import java.awt.event.MouseMotionListener;
19 import java.awt.geom.AffineTransform;
20 import java.util.LinkedList;
21 import javax.swing.JPanel;
22 
23 
29 public class ViewPanel extends JPanel {
30  private static final long serialVersionUID = -5101516605708249038L;
31 
32  private final CursorMulticaster cursorMulticaster;
33  private final Window window;
34  private final Picture2D gmm;
35  private int prefHeight;
36  private int prefWidth;
37  public ViewPanel(Window window) {
38  this.window = window;
39  gmm = new Picture2D(200, 200, this);
40  cursorMulticaster = this.new CursorMulticaster();
41  prefHeight = gmm.mm2pixel(200/GuiToolkit.getUnit());
42  prefWidth = gmm.mm2pixel(200/GuiToolkit.getUnit());
43  window.addFigureListener(this.new DataListener());
44  ViewMouseListener vml = this.new ViewMouseListener();
45  addMouseMotionListener(vml);
46  addMouseListener(vml);
47  addComponentListener(this.new ResizeListener());
48  }
49 
50  @Override
51  protected void paintComponent(Graphics g) {
52  super.paintComponent(g);
53  AffineTransform af = ((Graphics2D)g).getTransform();
54  gmm.setGraphics((Graphics2D)g);
56  drawSetting();
57  ((Graphics2D)g).setTransform(af);
58  }
59  public int mm2pixel(double mm) {
60  return gmm.mm2pixel(mm);
61  }
62  public double pixel2mm(int pixel) {
63  return gmm.pixel2mm(pixel);
64  }
65  private void drawSetting() {
66  window.draw(gmm);
67  }
68 
69  @Override
70  public Dimension getPreferredSize() {
71  return new Dimension(prefWidth, prefHeight);
72  }
73  public void zoomIn() {
74  double scale = gmm.getScale();
75  if (scale < 10000000) {
76  gmm.setScale(scale * 1.1d);
77  repaint();
78  }
79  }
80 
81  public void zoomOut() {
82  double scale = gmm.getScale();
83  if (scale > 0.00000001) {
84  gmm.setScale(scale / 1.1d);
85  repaint();
86  }
87  }
88 
89  public void zoom100() {
90  gmm.setScale(1d);
91  repaint();
92  }
93  public void setZoom(double zoom) {
94  gmm.setScale(zoom);
95  repaint();
96  }
97  public void setCenter(double x, double y) {
98  gmm.setCenter(x, y);
99  repaint();
100  }
102  cursorMulticaster.add(cl);
103  }
105  cursorMulticaster.remove(cl);
106  }
107  public void moveView(int dx, int dy) {
108  gmm.drag(dx, dy);
109  repaint();
110  }
111 
112  void setGridColor(MutableColor color) {
113  gmm.setGridColor(color);
114  repaint();
115  }
116 
117  MutableColor getGridColor() {
118  return gmm.getGridColor();
119  }
120 
121  void setHeightMM(double height) {
122  prefHeight = gmm.mm2pixel(height);
123  }
124 
125  void setWidthMM(double width) {
126  prefWidth = gmm.mm2pixel(width);
127  }
128  double getHeightMM() {
129  return gmm.pixel2mm(prefHeight);
130  }
131 
132  double getWidthMM() {
133  return gmm.pixel2mm(prefWidth);
134  }
135  void setGridWidth(double gridwidth) {
136  gmm.setGridWidth(gridwidth);
137  repaint();
138  }
139 
140  double getGridWidth() {
141  return gmm.getGridWidth();
142  }
143 
144  void setGridVisible(boolean b) {
145  gmm.setGridVisible(b);
146  repaint();
147  }
148  boolean getGridVisible() {
149  return gmm.getGridVisible();
150  }
151  protected class DataListener implements FigureListener {
152  @Override
153  public void dataChanged() {
154  repaint();
155  }
156  }
157 
158 
159  protected class ViewMouseListener implements MouseMotionListener, MouseListener {
160  int x;
161  int y;
162  @Override
163  public void mouseDragged(MouseEvent e) {
164  if ((e.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) != 0) {
165  moveView(x - e.getX(), y - e.getY());
166  x = e.getX();
167  y = e.getY();
168  }
169  }
170 
171  @Override
172  public void mouseMoved(MouseEvent e) {
173  cursorMulticaster.fireCursorMoved(
174  gmm.pointFromPixel(e.getX(), e.getY())
175  );
176  }
177 
178  @Override
179  public void mouseClicked(MouseEvent e) { }
180 
181  @Override
182  public void mousePressed(MouseEvent e) {
183  if ((e.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) != 0) {
184  x = e.getX();
185  y = e.getY();
186  }
187  if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) != 0) {
188  cursorMulticaster.fireCursorDown(gmm.pointFromPixel(e.getX(), e.getY()));
189  }
190  }
191 
192  @Override
193  public void mouseReleased(MouseEvent e) {
194  if (e.getButton() == MouseEvent.BUTTON1) {
195  cursorMulticaster.fireCursorUp(gmm.pointFromPixel(e.getX(), e.getY()));
196  }
197  }
198 
199  @Override
200  public void mouseEntered(MouseEvent e) { }
201 
202  @Override
203  public void mouseExited(MouseEvent e) { }
204  }
205  protected class CursorMulticaster {
206  private final LinkedList<CursorListener> cursorListener;
207  protected CursorMulticaster() {
208  cursorListener = new LinkedList<>();
209  }
210  void add(CursorListener cl) {
211  cursorListener.add(cl);
212  }
213  void remove(CursorListener cl) {
214  cursorListener.remove(cl);
215  }
216  void fireCursorMoved(Point p) {
217  cursorListener.forEach((cl) -> {
218  cl.cursorMoved(p);
219  });
220  }
221  void fireCursorDown(Point p) {
222  cursorListener.forEach((cl) -> {
223  cl.cursorDown(p);
224  });
225  }
226  void fireCursorUp(Point p) {
227  cursorListener.forEach((cl) -> {
228  cl.cursorUp(p);
229  });
230  }
231  }
232  protected class ResizeListener implements ComponentListener {
233 
234  @Override
235  public void componentResized(ComponentEvent e) {
236  gmm.setSize(getWidth(), getHeight());
237  prefHeight = getWidth();
238  prefWidth = getHeight();
239  repaint();
240  }
241 
242  @Override
243  public void componentMoved(ComponentEvent e) { }
244 
245  @Override
246  public void componentShown(ComponentEvent e) { }
247 
248  @Override
249  public void componentHidden(ComponentEvent e) { }
250 
251  }
252 }
double pixel2mm(int pixel)
Definition: Picture2D.java:134
void setGridColor(MutableColor color)
Definition: Picture2D.java:366
void setGridWidth(double gridwidth)
Definition: Picture2D.java:381
final void setSize(int width, int height)
Definition: Picture2D.java:79
void setGridVisible(boolean b)
Definition: Picture2D.java:395
Point pointFromPixel(int x, int y)
Definition: Picture2D.java:176
void setScale(double scale)
Definition: Picture2D.java:91
void setGraphics(Graphics2D g)
Definition: Picture2D.java:62
void drag(int dx, int dy)
Definition: Picture2D.java:108
void setCenter(double x, double y)
Definition: Picture2D.java:117
void draw(Picture g)
Definition: Window.java:58
void addFigureListener(FigureListener gol)
Definition: Window.java:63
void removeCursorListener(CursorListener cl)
Definition: ViewPanel.java:104
void addCursorListener(CursorListener cl)
Definition: ViewPanel.java:101
void moveView(int dx, int dy)
Definition: ViewPanel.java:107
void setCenter(double x, double y)
Definition: ViewPanel.java:97
Impressum