Source code: myComponents/imageButtonPanel.java
1 /* Evolvo - Image Generator
2 * Copyright (C) 2000 Andrew Molloy
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19 package myComponents;
20
21 import javax.swing.*;
22 import exptree.utilities.*;
23 import exptree.*;
24 import java.util.Properties;
25 import settings.*;
26 import java.util.Random;
27 import java.awt.*;
28
29 public class imageButtonPanel extends JPanel
30 {
31 Properties prop;
32 globalSettings settings;
33 variablePackage variables;
34 myButtonGroup imageButtonGroup = new myButtonGroup();
35 imageToggleButton buttons[] = new imageToggleButton[12];
36 Dimension size;
37 Random theRandom;
38
39 public imageButtonPanel(globalSettings s,
40 Random randomNumber,
41 Dimension d,
42 imageToggleButton[] newButtons)
43 {
44 super(new GridLayout(3,3));
45 settings = s;
46 size = new Dimension(d);
47 theRandom = randomNumber;
48 prop = settings.getProperties();
49 variables = new variablePackage();
50 int start, end;
51
52 myProgressMonitor pm = new myProgressMonitor(this,
53 "Generating Images...",
54 "",
55 0,
56 9 * size.height);
57 pm.setProgress(0);
58 pm.setMillisToDecideToPopup(500);
59
60 if ( newButtons == null )
61 {
62 start = 0;
63 end = 9;
64 }
65 else if ( newButtons[1] == null )
66 {
67 start = 1;
68 end = 9;
69 buttons[0] = newButtons[0];
70 }
71 else if ( newButtons.length == 9 )
72 {
73 start = 0;
74 end = 0;
75 for (int i = 0; i < 9 ; i++)
76 {
77 buttons[i] = newButtons[i];
78 }
79 }
80 else
81 {
82 start = 0;
83 end = 9;
84 }
85
86 for (int i = start; i < end; i++)
87 {
88 buttons[i] = getImageToggleButton(randomNumber, size, pm);
89 }
90 for (int i = 0; i < 9; i++)
91 {
92 buttons[i].setActionCommand(new Integer(i).toString());
93 imageButtonGroup.add(buttons[i]);
94 add(buttons[i]);
95 }
96 }
97
98 public imageToggleButton[] getButtons()
99 {
100 return buttons;
101 }
102
103 public imageToggleButton getSelectedButton()
104 {
105 ButtonModel selected = imageButtonGroup.getSelection();
106 imageToggleButton selectedButton;
107
108 if (selected == null)
109 {
110 return null;
111 }
112 selectedButton = buttons[new Integer(selected.getActionCommand()).intValue()];
113
114 return selectedButton;
115 }
116
117 public void stop()
118 {
119 imageToggleButton selected = getSelectedButton();
120 if (selected == null)
121 {
122 for (int i=0; i < 9; i++)
123 {
124 buttons[i].stop();
125 }
126 }
127 else
128 {
129 for (int i = 0; i < 9; i++)
130 {
131 if (buttons[i] != selected)
132 {
133 buttons[i].stop();
134 }
135 }
136 }
137 }
138
139 public void makeNewButtons(globalSettings s, imageToggleButton[] newButtons)
140 {
141 settings = s;
142 int start, end;
143
144 myProgressMonitor pm = new myProgressMonitor(this,
145 "Generating Images...",
146 "",
147 0,
148 9 * size.height);
149 pm.setProgress(0);
150 pm.setMillisToDecideToPopup(500);
151
152 for (int i = 0; i < 9; i++)
153 {
154 buttons[i].setVisible(false);
155 }
156
157 imageButtonGroup = new myButtonGroup();
158 removeAll();
159
160 if ( newButtons == null )
161 {
162 start = 0;
163 end = 9;
164 }
165 else if ( newButtons[1] == null )
166 {
167 start = 1;
168 end = 9;
169 buttons[0] = newButtons[0];
170 }
171 else if ( newButtons.length == 9)
172 {
173 start = 0;
174 end = 0;
175 for (int i = 0; i < 9 ; i++)
176 {
177 buttons[i] = newButtons[i];
178 }
179 }
180 else
181 {
182 start = 0;
183 end = 9;
184 }
185
186 for (int i = start; i < end; i++)
187 {
188 buttons[i].stop();
189 buttons[i] = getImageToggleButton(theRandom, size, pm);
190 }
191 for (int i = 0; i < 9; i++)
192 {
193 buttons[i].setVisible(true);
194 buttons[i].setActionCommand(new Integer(i).toString());
195 imageButtonGroup.add(buttons[i]);
196 add(buttons[i]);
197 }
198
199 for (int i = start; i < end; i++)
200 {
201 buttons[i].getImageGenerator().startIt();
202 }
203 }
204
205 imageToggleButton getImageToggleButton(Random randomNumber,
206 Dimension d,
207 myProgressMonitor pm)
208 {
209 generator gen[] = new generator[3];
210 for (int i=0; i < 3; i++)
211 {
212 gen[i] = new generator(settings, variables);
213 }
214
215 expressionTree test[] = new expressionTree[3];
216 for (int i=0; i < 3; i++)
217 {
218 Random newRandom = new Random(randomNumber.nextLong());
219 test[i] = gen[i].generate(newRandom);
220 }
221
222 imageGenerator imgG = new imageGenerator(
223 settings,
224 new imageGeneratorParams(variables, test),
225 pm,
226 d);
227
228 return new imageToggleButton(imgG);
229 }
230
231 public void setFirstButton(imageToggleButton imgB)
232 {
233 imageToggleButton buttns[] = new imageToggleButton[9];
234 buttns[0] = imgB;
235 for (int i = 1; i < 9; i++)
236 {
237 buttns[i] = buttons[i];
238 }
239 makeNewButtons(null,buttns);
240 }
241
242 public void start()
243 {
244 for (int i = 0; i < 9; i++)
245 {
246 buttons[i].getImageGenerator().startIt();
247 }
248 }
249 }