1
2
3
4 package org.ximtec.igesture.tool.view.devicemanager.wizard;
5
6 import java.awt.BorderLayout;
7 import java.awt.Color;
8 import java.util.ArrayList;
9 import java.util.Map;
10
11 import javax.swing.BorderFactory;
12 import javax.swing.DefaultListModel;
13 import javax.swing.JCheckBox;
14 import javax.swing.JComponent;
15 import javax.swing.JList;
16 import javax.swing.JPanel;
17 import javax.swing.JScrollPane;
18 import javax.swing.ListSelectionModel;
19 import javax.swing.event.ListSelectionEvent;
20 import javax.swing.event.ListSelectionListener;
21
22 import org.netbeans.spi.wizard.Summary;
23 import org.netbeans.spi.wizard.WizardBranchController;
24 import org.netbeans.spi.wizard.WizardController;
25 import org.netbeans.spi.wizard.WizardException;
26 import org.netbeans.spi.wizard.WizardPanelProvider;
27 import org.ximtec.igesture.algorithm.Algorithm;
28 import org.ximtec.igesture.algorithm.AlgorithmException;
29 import org.ximtec.igesture.configuration.Configuration;
30 import org.ximtec.igesture.core.GestureSet;
31 import org.ximtec.igesture.tool.view.devicemanager.DeviceManagerController;
32 import org.ximtec.igesture.Recogniser;
33
34
35
36
37
38 public class AddDeviceWizardBranchController extends WizardBranchController {
39
40 public AddDeviceWizardBranchController(DeviceManagerController manager) {
41 super(new AddDeviceWizardProvider(manager));
42 }
43
44 protected WizardPanelProvider getPanelProviderForStep (String step, Map settings) {
45 String which = (String) settings.get ("recogniser");
46 if (which == null) {
47 return null;
48 } else if ("Existing Recogniser".equals(which)) {
49 return getExistingPanel();
50 } else if ("New Recogniser".equals(which)) {
51 return getNewPanel();
52 } else {
53 throw new IllegalArgumentException (which);
54 }
55 }
56
57 private WizardPanelProvider getNewPanel() {
58 return new NewRecogniserWizardProvider();
59 }
60
61
62
63
64 private WizardPanelProvider getExistingPanel() {
65 return new ExistingRecogniserWizardProvider();
66 }
67
68 private class ExistingRecogniserWizardProvider extends WizardPanelProvider
69 {
70 public ExistingRecogniserWizardProvider()
71 {
72 super("Add Device ...", new String[]{"existing"}, new String[]{"Choose a Recogniser"});
73 }
74
75
76
77
78 @Override
79 protected JComponent createPanel(final WizardController controller, String id, final Map settings)
80 {
81 controller.setProblem("You must select a Recogniser");
82
83 JPanel panel = new JPanel();
84 panel.setLayout(new BorderLayout());
85 final JList recogniserList = new JList();
86 final DefaultListModel model = new DefaultListModel();
87 recogniserList.setModel(model);
88 recogniserList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
89
90
91 model.addElement("Recogniser 1");
92 model.addElement("Recogniser 2");
93
94 recogniserList.addListSelectionListener(new ListSelectionListener(){
95
96 @Override
97 public void valueChanged(ListSelectionEvent e) {
98 if(!e.getValueIsAdjusting())
99 {
100 controller.setProblem(null);
101 settings.put("recogniser", model.getElementAt(recogniserList.getSelectedIndex()));
102 System.out.println(model.getElementAt(recogniserList.getSelectedIndex()));
103 }
104 }
105 });
106
107 JScrollPane scrollList = new JScrollPane(recogniserList);
108 scrollList.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY), "Recognisers"));
109 panel.add(scrollList,BorderLayout.CENTER);
110 return panel;
111 }
112
113 @Override
114 public Object finish(Map wizardData) throws WizardException {
115
116
117 String[] items = new String[wizardData.size()];
118 items[0] = "Connection:\t" + wizardData.get("connection");
119 items[1] = "Device:\t" + wizardData.get("device");
120 items[2] = "User:\t" + wizardData.get("user");
121 items[3] = "Recogniser:\t" + wizardData.get("recogniser");
122
123
124 ArrayList<Object> result = new ArrayList<Object>();
125 result.add(wizardData.get("device"));
126 result.add(wizardData.get("user"));
127 result.add(wizardData.get("recogniser"));
128
129 return Summary.create(items,result);
130 }
131
132 }
133
134 private class NewRecogniserWizardProvider extends WizardPanelProvider
135 {
136
137 public NewRecogniserWizardProvider()
138 {
139 super("Add device...", new String[]{"new"}, new String[]{"Create a new Recogniser"});
140 }
141
142
143
144
145 @Override
146 protected JComponent createPanel(final WizardController controller, String id, final Map settings) {
147
148 controller.setProblem("Select at least one gesture set and one algorithm");
149 JPanel panel = new JPanel();
150 panel.setLayout(new BorderLayout());
151
152 final JList algList = new JList();
153 final DefaultListModel algModel = new DefaultListModel();
154 algList.setModel(algModel);
155 algModel.addElement("Rubine");
156
157 JScrollPane algScroll = new JScrollPane(algList);
158 algScroll.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY), "Algorithms"));
159
160 final JList setList = new JList();
161 final DefaultListModel setModel = new DefaultListModel();
162 setList.setModel(setModel);
163 setModel.addElement("2D");
164 setModel.addElement("3D");
165
166 JScrollPane setScroll = new JScrollPane(setList);
167 setScroll.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY), "Gesture Sets"));
168
169 ListSelectionListener l = new ListSelectionListener(){
170
171 @Override
172 public void valueChanged(ListSelectionEvent e) {
173 if(!e.getValueIsAdjusting())
174 {
175 if(algList.getSelectedIndex() > -1 && setList.getSelectedIndex() > -1)
176 {
177 Algorithm a = (Algorithm) algModel.getElementAt(algList.getSelectedIndex());
178 GestureSet gs = (GestureSet) setModel.getElementAt(setList.getSelectedIndex());
179 Configuration config = new Configuration();
180 config.addAlgorithm(a.getClass().getName());
181 config.addGestureSet(gs);
182 try {
183 Recogniser recogniser = new Recogniser(config);
184 settings.put("recogniser", recogniser);
185 } catch (AlgorithmException e1) {
186 e1.printStackTrace();
187 }
188
189 controller.setProblem(null);
190 }
191 }
192
193 }
194
195 };
196
197 algList.addListSelectionListener(l);
198 setList.addListSelectionListener(l);
199
200 JPanel listPanel = new JPanel();
201 listPanel.add(algScroll);
202 listPanel.add(setScroll);
203
204 JPanel optionsPanel = new JPanel();
205 JCheckBox chkMultimodal = new JCheckBox("Multi-modal Support");
206 optionsPanel.add(chkMultimodal);
207
208 panel.add(listPanel,BorderLayout.CENTER);
209 panel.add(optionsPanel, BorderLayout.SOUTH);
210 return panel;
211 }
212
213 @Override
214 public Object finish(Map wizardData) throws WizardException {
215
216
217 String[] items = new String[wizardData.size()];
218 items[0] = "Connection:\t" + wizardData.get("connection");
219 items[1] = "Device:\t" + wizardData.get("device");
220 items[2] = "User:\t" + wizardData.get("user");
221 items[3] = "Recogniser:\t" + wizardData.get("recogniser");
222
223
224 ArrayList<Object> result = new ArrayList<Object>();
225 result.add(wizardData.get("device"));
226 result.add(wizardData.get("user"));
227 result.add(wizardData.get("recogniser"));
228
229 return Summary.create(items,result);
230 }
231
232 }
233
234 }