Updated documentation. Added game of life. Refactoring launcher panel.
[sixth-3d-demos.git] / src / main / java / eu / svjatoslav / sixth / e3d / examples / launcher / MenuPanel.java
1 /*
2  * Sixth 3D engine demos. Copyright ©2012-2016, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of version 3 of the GNU Lesser General Public License
6  * or later as published by the Free Software Foundation.
7  */
8
9 package eu.svjatoslav.sixth.e3d.examples.launcher;
10
11 import eu.svjatoslav.sixth.e3d.examples.*;
12
13 import javax.swing.*;
14 import javax.swing.GroupLayout.Alignment;
15 import javax.swing.LayoutStyle.ComponentPlacement;
16 import java.awt.event.ActionEvent;
17 import java.io.IOException;
18
19 class MenuPanel extends JPanel {
20     private static final long serialVersionUID = 2012721856427052560L;
21
22     public MenuPanel() {
23
24         final JLabel chooseExample = new JLabel("Choose an example to launch.");
25
26         final JButton showTextEditors = new JButton(new ShowTextEditors());
27         final JButton showSinusMap = new JButton(new ShowSinusMap());
28         final JButton showRain = new JButton(new ShowRain());
29         final JButton showPointCloud = new JButton(new ShowPointcloud());
30         final JButton showMathGraphs = new JButton(new ShowMathGraphs());
31         final JButton showOctree = new JButton(new ShowOctree());
32
33         final GroupLayout groupLayout = new GroupLayout(this);
34         groupLayout
35                 .setHorizontalGroup(groupLayout
36                         .createParallelGroup(Alignment.LEADING)
37                         .addGroup(
38                                 groupLayout
39                                         .createSequentialGroup()
40                                         .addContainerGap()
41                                         .addGroup(
42                                                 groupLayout
43                                                         .createParallelGroup(
44                                                                 Alignment.LEADING)
45                                                         .addGroup(
46                                                                 Alignment.TRAILING,
47                                                                 groupLayout
48                                                                         .createSequentialGroup()
49                                                                         .addComponent(
50                                                                                 chooseExample,
51                                                                                 GroupLayout.PREFERRED_SIZE,
52                                                                                 426,
53                                                                                 GroupLayout.PREFERRED_SIZE)
54                                                                         .addContainerGap(
55                                                                                 GroupLayout.DEFAULT_SIZE,
56                                                                                 Short.MAX_VALUE))
57                                                         .addGroup(
58                                                                 Alignment.TRAILING,
59                                                                 groupLayout
60                                                                         .createSequentialGroup()
61                                                                         .addGroup(
62                                                                                 groupLayout
63                                                                                         .createParallelGroup(
64                                                                                                 Alignment.TRAILING)
65                                                                                         .addComponent(
66                                                                                                 showOctree,
67                                                                                                 Alignment.LEADING,
68                                                                                                 GroupLayout.DEFAULT_SIZE,
69                                                                                                 331,
70                                                                                                 Short.MAX_VALUE)
71                                                                                         .addComponent(
72                                                                                                 showMathGraphs,
73                                                                                                 Alignment.LEADING,
74                                                                                                 GroupLayout.DEFAULT_SIZE,
75                                                                                                 331,
76                                                                                                 Short.MAX_VALUE)
77                                                                                         .addComponent(
78                                                                                                 showPointCloud,
79                                                                                                 Alignment.LEADING,
80                                                                                                 GroupLayout.DEFAULT_SIZE,
81                                                                                                 331,
82                                                                                                 Short.MAX_VALUE)
83                                                                                         .addComponent(
84                                                                                                 showRain,
85                                                                                                 Alignment.LEADING,
86                                                                                                 GroupLayout.DEFAULT_SIZE,
87                                                                                                 331,
88                                                                                                 Short.MAX_VALUE)
89                                                                                         .addComponent(
90                                                                                                 showSinusMap,
91                                                                                                 Alignment.LEADING,
92                                                                                                 GroupLayout.DEFAULT_SIZE,
93                                                                                                 GroupLayout.DEFAULT_SIZE,
94                                                                                                 Short.MAX_VALUE)
95                                                                                         .addComponent(
96                                                                                                 showTextEditors,
97                                                                                                 GroupLayout.DEFAULT_SIZE,
98                                                                                                 331,
99                                                                                                 Short.MAX_VALUE))
100                                                                         .addGap(107)))));
101         groupLayout.setVerticalGroup(groupLayout.createParallelGroup(
102                 Alignment.LEADING).addGroup(
103                 groupLayout
104                         .createSequentialGroup()
105                         .addGap(7)
106                         .addComponent(chooseExample, GroupLayout.PREFERRED_SIZE,
107                                 58, GroupLayout.PREFERRED_SIZE)
108                         .addPreferredGap(ComponentPlacement.RELATED)
109                         .addComponent(showTextEditors)
110                         .addPreferredGap(ComponentPlacement.RELATED)
111                         .addComponent(showSinusMap)
112                         .addPreferredGap(ComponentPlacement.RELATED)
113                         .addComponent(showRain)
114                         .addPreferredGap(ComponentPlacement.RELATED)
115                         .addComponent(showPointCloud)
116                         .addPreferredGap(ComponentPlacement.RELATED)
117                         .addComponent(showMathGraphs)
118                         .addPreferredGap(ComponentPlacement.RELATED)
119                         .addComponent(showOctree)
120                         .addContainerGap(137, Short.MAX_VALUE)));
121         setLayout(groupLayout);
122
123     }
124
125     private class ShowTextEditors extends AbstractAction {
126         private static final long serialVersionUID = 5197962166765841015L;
127
128         public ShowTextEditors() {
129             putValue(NAME, "Text editors");
130         }
131
132         @Override
133         public void actionPerformed(final ActionEvent e) {
134             TextEditorDemo.main(null);
135         }
136     }
137
138     private class ShowSinusMap extends AbstractAction {
139         private static final long serialVersionUID = -896479509963403828L;
140
141         public ShowSinusMap() {
142             putValue(NAME, "Wireframe sphere and ploygon landscape");
143         }
144
145         @Override
146         public void actionPerformed(final ActionEvent e) {
147             SphereDemo.main(null);
148         }
149     }
150
151     private class ShowRain extends AbstractAction {
152         private static final long serialVersionUID = 8566009849873897321L;
153
154         public ShowRain() {
155             putValue(NAME, "Raining numbers");
156         }
157
158         @Override
159         public void actionPerformed(final ActionEvent e) {
160             try {
161                 RainingNumbersDemo.main(null);
162             } catch (final IOException e1) {
163                 e1.printStackTrace();
164             }
165         }
166     }
167
168     private class ShowPointcloud extends AbstractAction {
169         private static final long serialVersionUID = -5369105936409884389L;
170
171         public ShowPointcloud() {
172             putValue(NAME, "Pointcloud galaxy");
173         }
174
175         @Override
176         public void actionPerformed(final ActionEvent e) {
177             PointCloudDemo.main(null);
178         }
179     }
180
181     private class ShowMathGraphs extends AbstractAction {
182         private static final long serialVersionUID = -8486796142555764460L;
183
184         public ShowMathGraphs() {
185             putValue(NAME, "Mathematical graphs");
186         }
187
188         @Override
189         public void actionPerformed(final ActionEvent e) {
190             try {
191                 GraphDemo.main(null);
192             } catch (final IOException e1) {
193                 e1.printStackTrace();
194             }
195         }
196     }
197
198     private class ShowOctree extends AbstractAction {
199         private static final long serialVersionUID = -6210703594848004946L;
200
201         public ShowOctree() {
202             putValue(NAME, "Volumetric Octree");
203         }
204
205         @Override
206         public void actionPerformed(final ActionEvent e) {
207             try {
208                 OctreeDemo.main(null);
209             } catch (final IOException e1) {
210                 e1.printStackTrace();
211             }
212         }
213     }
214 }