1 package org.woehlke.computer.kurzweil.tabs.sierpinskitriangle;
2
3 import org.woehlke.computer.kurzweil.application.ComputerKurzweilProperties;
4 import org.woehlke.computer.kurzweil.tabs.sierpinskitriangle.ui.PanelButtons;
5 import org.woehlke.computer.kurzweil.commons.ui.PanelCopyright;
6 import org.woehlke.computer.kurzweil.commons.ui.PanelSubtitle;
7 import org.woehlke.computer.kurzweil.commons.model.turing.Point;
8
9 import javax.accessibility.Accessible;
10 import javax.swing.*;
11 import java.awt.*;
12 import java.awt.event.*;
13 import java.awt.image.ImageObserver;
14 import java.io.Serializable;
15
16
17
18
19
20
21
22
23 public class SierpinskiTriangleTab extends JFrame implements ImageObserver,
24 MenuContainer,
25 Serializable,
26 Accessible,
27 WindowListener,
28 MouseListener {
29
30 private volatile SierpinskiTriangleController mandelbrotController;
31 private volatile SierpinskiTriangleCanvas canvas;
32 private volatile SierpinskiTriangleModel mandelbrotModel;
33 private volatile Rectangle rectangleBounds;
34 private volatile Dimension dimensionSize;
35
36 public SierpinskiTriangleTab(ComputerKurzweilProperties properties) {
37 super(properties.getWator().getView().getTitle());
38 this.mandelbrotModel = new SierpinskiTriangleModel(properties,this);
39 BoxLayout layout = new BoxLayout(rootPane, BoxLayout.PAGE_AXIS);
40 this.canvas = new SierpinskiTriangleCanvas(mandelbrotModel);
41 this.mandelbrotController = new SierpinskiTriangleController(mandelbrotModel, this);
42 PanelButtons/sierpinskitriangle/ui/PanelButtons.html#PanelButtons">PanelButtons panelButtons = new PanelButtons(this.mandelbrotModel);
43 PanelSubtitles/ui/PanelSubtitle.html#PanelSubtitle">PanelSubtitle panelSubtitle = new PanelSubtitle(properties.getWator().getView().getSubtitle());
44 PanelCopyrightui/PanelCopyright.html#PanelCopyright">PanelCopyright panelCopyright = new PanelCopyright(properties.getAllinone().getView().getCopyright());
45 JSeparator separator = new JSeparator();
46 rootPane.setLayout(layout);
47 rootPane.add(panelSubtitle);
48 rootPane.add(canvas);
49 rootPane.add(panelCopyright);
50 rootPane.add(separator);
51 rootPane.add(panelButtons);
52 addWindowListener(this);
53 this.canvas.addMouseListener( this);
54 showMeInit();
55 setModeSwitch();
56 this.mandelbrotController.start();
57 }
58
59 public void windowOpened(WindowEvent e) {
60 showMe();
61 }
62
63 public void windowClosing(WindowEvent e) {
64 this.mandelbrotController.exit();
65 }
66
67 public void windowClosed(WindowEvent e) {
68 this.mandelbrotController.exit();
69 }
70
71 public void windowIconified(WindowEvent e) {}
72
73 public void windowDeiconified(WindowEvent e) {
74 showMe();
75 }
76
77 public void windowActivated(WindowEvent e) {
78 showMe();
79 }
80
81 public void windowDeactivated(WindowEvent e) {}
82
83
84 @Override
85 public void mouseClicked(MouseEvent e) {
86 Pointuter/kurzweil/commons/model/turing/Point.html#Point">Point c = new Point(e.getX(), e.getY());
87 this.mandelbrotModel.click(c);
88 showMe();
89 }
90
91 @Override
92 public void mousePressed(MouseEvent e) {}
93
94 @Override
95 public void mouseReleased(MouseEvent e) {}
96
97 @Override
98 public void mouseEntered(MouseEvent e) {}
99
100 @Override
101 public void mouseExited(MouseEvent e) {}
102
103 public void showMeInit() {
104 pack();
105 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
106 double width = this.rootPane.getWidth();
107 double height = this.canvas.getHeight() + 180;
108 double startX = (screenSize.getWidth() - width) / 2d;
109 double startY = (screenSize.getHeight() - height) / 2d;
110 int myheight = Double.valueOf(height).intValue();
111 int mywidth = Double.valueOf(width).intValue();
112 int mystartX = Double.valueOf(startX).intValue();
113 int mystartY = Double.valueOf(startY).intValue();
114 this.rectangleBounds = new Rectangle(mystartX, mystartY, mywidth, myheight);
115 this.dimensionSize = new Dimension(mywidth, myheight);
116 this.setBounds(this.rectangleBounds);
117 this.setSize(this.dimensionSize);
118 this.setPreferredSize(this.dimensionSize);
119 this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
120 setVisible(true);
121 toFront();
122 }
123
124
125
126
127 public void showMe() {
128 this.pack();
129 this.setBounds(this.rectangleBounds);
130 this.setSize(this.dimensionSize);
131 this.setPreferredSize(this.dimensionSize);
132 this.setVisible(true);
133 this.toFront();
134 }
135
136 public void setModeSwitch() {
137 canvas.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
138 }
139
140 public void setModeZoom() {
141 canvas.setCursor(new Cursor(Cursor.HAND_CURSOR));
142 }
143
144 public SierpinskiTriangleCanvas getCanvas() {
145 return canvas;
146 }
147 }