1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 package org.ximtec.igesture.algorithm.rubine3d.tools;
27
28 import java.awt.event.ActionEvent;
29 import java.awt.event.ActionListener;
30 import java.awt.event.WindowAdapter;
31 import java.awt.event.WindowEvent;
32 import java.util.Iterator;
33 import java.util.List;
34
35 import javax.swing.JButton;
36 import javax.swing.JComboBox;
37 import javax.swing.JFrame;
38 import javax.swing.JLabel;
39 import javax.swing.JTextArea;
40 import javax.swing.JTextField;
41
42 import org.ximtec.igesture.core.Gesture;
43 import org.ximtec.igesture.core.GestureClass;
44 import org.ximtec.igesture.core.GestureSample3D;
45 import org.ximtec.igesture.core.GestureSet;
46 import org.ximtec.igesture.util.additions3d.RecordedGesture3D;
47
48 public class Gesture3DToolUI extends JFrame {
49
50 private String setName;
51 private String className;
52 private int currentSampleNumber;
53 private List<Gesture<RecordedGesture3D>> samples;
54
55 private boolean started;
56
57 private JLabel gestureSetLabel;
58 private JLabel gestureClassLabel;
59 private JLabel gestureSampleLabel;
60
61 private JComboBox gestureSetComboBox;
62 private JComboBox gestureClassComboBox;
63
64
65
66 private JButton removeSetButton;
67
68 private JButton removeClassButton;
69
70 private WiiReaderPanel samplePanel;
71
72 private JButton sampleBackButton;
73
74 private JButton sampleForwardButton;
75
76
77 private JButton removeSampleButton;
78
79
80 private JTextField addGestureSetTextField;
81
82 private JButton addGestureSetButton;
83
84 private JTextField addGestureClassTextField;
85
86 private JButton addGestureClassButton;
87
88 private JButton addGestureSampleButton;
89
90 private JButton startWiiMoteButton;
91
92 private JButton stopWiiMoteButton;
93
94 private JButton recogniseButton;
95
96 private JTextArea resultTextArea;
97
98 private Gesture3DTool controller;
99
100 public Gesture3DToolUI(final Gesture3DTool controller) {
101 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
102
103 setSize(1100, 500);
104 setTitle("WiiMote Test Frame");
105 setLayout(null);
106
107 this.controller = controller;
108
109 started = false;
110
111
112 gestureSetLabel = new JLabel("Choose Gesture Set");
113 gestureSetLabel.setBounds(15, 15, 150, 20);
114 getContentPane().add(gestureSetLabel);
115
116 gestureClassLabel = new JLabel("Choose Gesture Class");
117 gestureClassLabel.setBounds(190, 15, 150, 20);
118 getContentPane().add(gestureClassLabel);
119
120 gestureSampleLabel = new JLabel("Gesture Sample");
121 gestureSampleLabel.setBounds(125, 90, 150, 20);
122 getContentPane().add(gestureSampleLabel);
123
124 gestureSetComboBox = new JComboBox();
125 gestureSetComboBox.setBounds(15, 35, 150, 20);
126 gestureSetComboBox.addActionListener(new gestureSetComboBoxListener());
127 getContentPane().add(gestureSetComboBox);
128
129 gestureClassComboBox = new JComboBox();
130 gestureClassComboBox.setBounds(190, 35, 150, 20);
131 gestureClassComboBox
132 .addActionListener(new gestureClassComboBoxListener());
133 getContentPane().add(gestureClassComboBox);
134
135 removeSetButton = new JButton("Remove Set");
136 removeSetButton.setBounds(15, 60, 150, 25);
137 removeSetButton.addActionListener(new removeSetButtonListener());
138 getContentPane().add(removeSetButton);
139
140 removeClassButton = new JButton("Remove Class");
141 removeClassButton.setBounds(190, 60, 150, 25);
142 removeClassButton.addActionListener(new removeClassButtonListener());
143 getContentPane().add(removeClassButton);
144
145 samplePanel = new WiiReaderPanel(null);
146 samplePanel.setBounds(80, 120, 200, 200);
147 samplePanel.setVisible(true);
148 getContentPane().add(samplePanel);
149
150 sampleBackButton = new JButton("<");
151 sampleBackButton.setBounds(20, 125, 45, 190);
152 sampleBackButton.addActionListener(new sampleBackwardButtonListener());
153 getContentPane().add(sampleBackButton);
154
155 sampleForwardButton = new JButton(">");
156 sampleForwardButton.setBounds(290, 125, 45, 190);
157 sampleForwardButton
158 .addActionListener(new sampleForwardButtonListener());
159 getContentPane().add(sampleForwardButton);
160
161 removeSampleButton = new JButton("Remove Sample");
162 removeSampleButton.setBounds(100, 330, 150, 50);
163 removeSampleButton.addActionListener(new removeSampleButtonListener());
164 getContentPane().add(removeSampleButton);
165
166 addGestureSetTextField = new JTextField("");
167 addGestureSetTextField.setBounds(400, 35, 200, 20);
168 getContentPane().add(addGestureSetTextField);
169
170 addGestureSetButton = new JButton("Add new GestureSet");
171 addGestureSetButton.setBounds(620, 35, 400, 20);
172 addGestureSetButton
173 .addActionListener(new addGestureSetButtonListener());
174 getContentPane().add(addGestureSetButton);
175
176 addGestureClassTextField = new JTextField("");
177 addGestureClassTextField.setBounds(400, 70, 200, 20);
178 getContentPane().add(addGestureClassTextField);
179
180 addGestureClassButton = new JButton(
181 "Add new GestureClass to current GestureSet");
182 addGestureClassButton.setBounds(620, 70, 400, 20);
183 addGestureClassButton
184 .addActionListener(new addGestureClassButtonListener());
185 getContentPane().add(addGestureClassButton);
186
187 WiiReaderPanel wiiInputPanel = controller.getWiiReaderPanel();
188 wiiInputPanel.setBounds(400, 120, 200, 200);
189 getContentPane().add(wiiInputPanel);
190
191 addGestureSampleButton = new JButton(
192 "Add this sample to the current GestureClass");
193 addGestureSampleButton.setBounds(620, 200, 400, 50);
194 addGestureSampleButton
195 .addActionListener(new addGestureSampleButtonListener());
196 getContentPane().add(addGestureSampleButton);
197
198 startWiiMoteButton = new JButton("Connect WiiMote");
199 startWiiMoteButton.setBounds(620, 125, 200, 50);
200 startWiiMoteButton.addActionListener(new startWiiMoteButtonListener());
201 getContentPane().add(startWiiMoteButton);
202
203 stopWiiMoteButton = new JButton("Disconnect WiiMote");
204 stopWiiMoteButton.setBounds(820, 125, 200, 50);
205 stopWiiMoteButton.addActionListener(new stopWiiMoteButtonListener());
206 getContentPane().add(stopWiiMoteButton);
207
208 recogniseButton = new JButton("Recognise this gesture");
209 recogniseButton.setBounds(400, 330, 200, 50);
210 recogniseButton.addActionListener(new recogniseButtonListener());
211 getContentPane().add(recogniseButton);
212
213 resultTextArea = new JTextArea();
214 resultTextArea.setBounds(620, 280, 400, 180);
215 getContentPane().add(resultTextArea);
216
217
218 setGestureSetsBox(controller.getGestureSets());
219 setGestureClassesBox(controller
220 .getGestureSet((String) gestureSetComboBox.getSelectedItem()));
221
222
223 setName = (String) gestureSetComboBox.getSelectedItem();
224 className = (String) gestureClassComboBox.getSelectedItem();
225 currentSampleNumber = 0;
226
227
228 samples = controller.getGestureSamples(setName, className);
229
230
231 this.addWindowListener(new WindowAdapter() {
232 public void windowClosing(WindowEvent e) {
233 System.out.println("Window Closing");
234 controller.disconnectWiiMote();
235 }
236
237 });
238
239
240 this.addWindowListener(new WindowAdapter() {
241 public void windowOpened(WindowEvent e) {
242 System.out.println("Window Opening, setting sample panel");
243 started = true;
244 setSamplePanel();
245 }
246
247 });
248 }
249
250 public void setNextSample() {
251 System.err.print("setNextSample(): Samples size: " + samples.size());
252 if (!(currentSampleNumber + 1 >= samples.size())) {
253 currentSampleNumber = currentSampleNumber + 1;
254
255 }
256 if (samples.size() > 0) {
257 samplePanel.setGesture((GestureSample3D) samples
258 .get(currentSampleNumber));
259 System.err.println(" Sample number displayed: "
260 + currentSampleNumber);
261 }
262 }
263
264 public void setPreviousSample() {
265 System.err
266 .print("setPreviousSample(): Samples size: " + samples.size());
267 if (currentSampleNumber > 0) {
268 currentSampleNumber = currentSampleNumber - 1;
269 } else{
270
271 }
272 if (samples.size() > 0) {
273 samplePanel.setGesture((GestureSample3D) samples
274 .get(currentSampleNumber));
275 System.err.println(" Sample number displayed: "
276 + currentSampleNumber);
277 }
278 }
279
280
281
282
283
284
285 public void setGestureSetsBox(List<GestureSet> gestureSets) {
286
287 gestureSetComboBox.removeAllItems();
288
289 if (gestureSets.size() > 0) {
290
291 for (Iterator<GestureSet> gSetsIter = gestureSets.iterator(); gSetsIter
292 .hasNext();) {
293 GestureSet tempSet = gSetsIter.next();
294 gestureSetComboBox.addItem(tempSet.getName());
295 }
296 }
297 }
298
299 private void setGestureClassesBox(GestureSet gestureSet) {
300
301 gestureClassComboBox.removeAllItems();
302
303 if (gestureSet != null && gestureSet.getGestureClasses().size() > 0) {
304 for (Iterator<GestureClass> gClassIter = gestureSet
305 .getGestureClasses().iterator(); gClassIter.hasNext();) {
306 GestureClass tempClass = gClassIter.next();
307 gestureClassComboBox.addItem(tempClass.getName());
308 }
309 }
310 }
311
312 public void selectGestureSet(String setName) {
313 gestureSetComboBox.setSelectedItem(setName);
314 }
315
316 public void selectGestureSet(int index) {
317 gestureSetComboBox.setSelectedItem(index);
318 }
319
320 public void selectGestureSet(GestureSet set) {
321 gestureSetComboBox.setSelectedItem(set.getName());
322 }
323
324 public void selectGestureClass(String className) {
325 gestureClassComboBox.setSelectedItem(className);
326 }
327
328 public void selectGestureClass(int index) {
329 gestureClassComboBox.setSelectedItem(index);
330 }
331
332 public void selectGestureClass(GestureClass gClass) {
333 gestureClassComboBox.setSelectedItem(gClass.getName());
334 }
335
336 public void setResultField(org.ximtec.igesture.core.ResultSet set) {
337 String text = "Gesture Class: -> Accuracy:\n\n";
338 for (int i = 0; i < set.getResults().size(); i++) {
339 text = text + set.getResult(i).getGestureClass().getName() + " -> "
340 + set.getResult(i).getAccuracy() + "\n";
341 }
342 resultTextArea.setText(text);
343 }
344
345 private void setSamplePanel() {
346 if (controller.getGestureSamples(setName, className).size() > 0
347 && currentSampleNumber < controller.getGestureSamples(setName,
348 className).size()) {
349 samplePanel.setGesture((GestureSample3D) controller
350 .getGestureSamples(setName, className).get(
351 currentSampleNumber));
352 } else {
353 System.err
354 .println("Gesture3DToolUI.setSamplePanel(): currentSampleNumber out of range");
355 samplePanel.setGesture(null);
356 }
357 }
358
359
360
361 private class gestureSetComboBoxListener implements ActionListener {
362 public void actionPerformed(ActionEvent e) {
363
364 setName = (String) gestureSetComboBox.getSelectedItem();
365
366
367 setGestureClassesBox(controller.getGestureSet(setName));
368 currentSampleNumber = 0;
369 if(started)
370 setSamplePanel();
371 }
372 }
373
374 private class gestureClassComboBoxListener implements ActionListener {
375 public void actionPerformed(ActionEvent e) {
376
377 className = (String) gestureClassComboBox.getSelectedItem();
378
379 samples = controller.getGestureSamples(setName, className);
380 currentSampleNumber = 0;
381 if(started)
382 setSamplePanel();
383 }
384 }
385
386 private class addGestureSetButtonListener implements ActionListener {
387 public void actionPerformed(ActionEvent e) {
388 String newSetName = addGestureSetTextField.getText();
389 controller.addGestureSet(newSetName);
390 setGestureSetsBox(controller.getGestureSets());
391 addGestureSetTextField.setText("");
392 gestureClassComboBox.removeAllItems();
393 gestureSetComboBox.setSelectedItem(newSetName);
394 currentSampleNumber = 0;
395 if(started)
396 setSamplePanel();
397 }
398 }
399
400 private class addGestureClassButtonListener implements ActionListener {
401 public void actionPerformed(ActionEvent e) {
402 if (setName == null || setName.equals("")) {
403 System.err.println("No Gesture Set selected.");
404 return;
405 }
406 String newClassName = addGestureClassTextField.getText();
407 controller.addGestureClass(setName, newClassName);
408 setGestureClassesBox(controller.getGestureSet(setName));
409 addGestureClassTextField.setText("");
410 gestureClassComboBox.setSelectedItem(newClassName);
411 currentSampleNumber = 0;
412 if(started)
413 setSamplePanel();
414 }
415 }
416
417 private class addGestureSampleButtonListener implements ActionListener {
418 public void actionPerformed(ActionEvent e) {
419 if (setName == null || setName.equals("")) {
420 System.err.println("No Gesture Set selected.");
421 return;
422 }
423 if (className == null || className.equals("")) {
424 System.err.println("No Gesture Class selected.");
425 return;
426 }
427 controller
428 .addCurrentGestureSampleToGestureClass(setName, className);
429 samples = controller.getGestureSamples(setName, className);
430 }
431 }
432
433 private class sampleForwardButtonListener implements ActionListener {
434 public void actionPerformed(ActionEvent e) {
435
436 setNextSample();
437 }
438 }
439
440 private class sampleBackwardButtonListener implements ActionListener {
441 public void actionPerformed(ActionEvent e) {
442
443 setPreviousSample();
444 }
445 }
446
447 private class startWiiMoteButtonListener implements ActionListener {
448 public void actionPerformed(ActionEvent e) {
449
450 controller.initWiiMote();
451 }
452 }
453
454 private class stopWiiMoteButtonListener implements ActionListener {
455 public void actionPerformed(ActionEvent e) {
456
457 controller.disconnectWiiMote();
458 }
459 }
460
461 private class recogniseButtonListener implements ActionListener {
462 public void actionPerformed(ActionEvent e) {
463
464 controller.recognise(setName);
465 }
466 }
467
468 private class removeSampleButtonListener implements ActionListener {
469 public void actionPerformed(ActionEvent e) {
470
471 controller.removeSample(setName, className, currentSampleNumber);
472 currentSampleNumber = 0;
473
474 if(started)
475 setSamplePanel();
476 }
477 }
478
479 private class removeSetButtonListener implements ActionListener {
480 public void actionPerformed(ActionEvent e) {
481
482 controller.removeSet(setName);
483
484 setGestureSetsBox(controller.getGestureSets());
485 setGestureClassesBox(controller
486 .getGestureSet((String) gestureSetComboBox
487 .getSelectedItem()));
488 if(started)
489 setSamplePanel();
490 }
491 }
492
493 private class removeClassButtonListener implements ActionListener {
494 public void actionPerformed(ActionEvent e) {
495
496 controller.removeClass(setName, className);
497
498 setGestureClassesBox(controller
499 .getGestureSet((String) gestureSetComboBox
500 .getSelectedItem()));
501 if(started)
502 setSamplePanel();
503 }
504 }
505
506 }