View Javadoc
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   * (C) 2006 - 2013 Thomas Woehlke.
18   * https://thomas-woehlke.blogspot.com/2016/01/mandelbrot-set-drawn-by-turing-machine.html
19   * @author Thomas Woehlke
20   * Date: 04.02.2006
21   * Time: 18:47:46
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      * TODO write doc.
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 }