Ticket #1622: prefJPanel.java

File prefJPanel.java, 24.8 KB (added by Henry Loenwind, 18 years ago)
Line 
1/*
2 * prefJPanel.java
3 *
4 * Created on 28. September 2008, 17:47
5 */
6
7package org.openstreetmap.josm.gui.preferences;
8import static org.openstreetmap.josm.tools.I18n.tr;
9import javax.swing.table.TableModel;
10import javax.swing.table.AbstractTableModel;
11import java.awt.event.KeyEvent;
12import java.util.Map;
13import java.util.LinkedHashMap;
14import javax.swing.event.ListSelectionListener;
15import javax.swing.event.ListSelectionEvent;
16import javax.swing.ListSelectionModel;
17import org.openstreetmap.josm.tools.ShortCut;
18import javax.swing.JEditorPane;
19import javax.swing.JScrollPane;
20import org.openstreetmap.josm.Main;
21
22/**
23 * This is the keyboard preferences content.
24 * If someone wants to merge it with ShortcutPreference.java, feel free.
25 */
26public class prefJPanel extends javax.swing.JPanel {
27
28 // table of shortcuts
29 private TableModel model;
30 // comboboxes of modifier groups, mapping selectedIndex to real data
31 private static int[] modifInts = new int[]{
32 -1,
33 0,
34 KeyEvent.SHIFT_DOWN_MASK,
35 KeyEvent.CTRL_DOWN_MASK,
36 KeyEvent.ALT_DOWN_MASK,
37 KeyEvent.META_DOWN_MASK,
38 KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK,
39 KeyEvent.ALT_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK,
40 KeyEvent.META_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK,
41 KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK,
42 KeyEvent.CTRL_DOWN_MASK | KeyEvent.META_DOWN_MASK,
43 KeyEvent.ALT_DOWN_MASK | KeyEvent.META_DOWN_MASK,
44 KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK | KeyEvent.ALT_DOWN_MASK,
45 KeyEvent.META_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK | KeyEvent.ALT_DOWN_MASK
46 };
47 // and here are the texts fro the comboboxes
48 private static String[] modifList = new String[] {
49 tr("disabled"),
50 tr("no modifier"),
51 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[2]).getModifiers()),
52 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[3]).getModifiers()),
53 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[4]).getModifiers()),
54 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[5]).getModifiers()),
55 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[6]).getModifiers()),
56 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[7]).getModifiers()),
57 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[8]).getModifiers()),
58 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[9]).getModifiers()),
59 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[10]).getModifiers()),
60 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[11]).getModifiers()),
61 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[12]).getModifiers()),
62 KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, modifInts[13]).getModifiers())
63 };
64 // this are the display(!) texts for the checkboxes. Let the JVM do the i18n for us <g>.
65 // Ok, there's a real reason for this: The JVM should know best how the keys are labelled
66 // on the physical keyboard. What language pack is installed in JOSM is completely
67 // independent from the keyboard's labelling. But the operation system's locale
68 // usually matches the keyboard. This even works with my English Windows and my German
69 // keyboard.
70 private static String SHIFT = KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.SHIFT_DOWN_MASK).getModifiers());
71 private static String CTRL = KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK).getModifiers());
72 private static String ALT = KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.ALT_DOWN_MASK).getModifiers());
73 private static String META = KeyEvent.getKeyModifiersText(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.META_DOWN_MASK).getModifiers());
74
75 // A list of keys to present the user. Sadly this really is a list of keys Java knows about,
76 // not a list of real physical keys. If someone knows how to get that list?
77 private static Map<Integer, String> keyList = setKeyList();
78
79 private static Map<Integer, String> setKeyList() {
80 Map<Integer, String> list = new LinkedHashMap<Integer, String>();
81 // I hate this, but I found no alternative...
82 for (int i = 0; i < 65534; i++) {
83 String s = KeyEvent.getKeyText(i);
84 if (s != null && s.length() > 0 && !s.contains("Unknown")) {
85 list.put(new Integer(i), s);
86 //System.out.println(i+": "+s);
87 }
88 }
89 list.put(new Integer(-1), "");
90 return list;
91 }
92
93 /** Creates new form prefJPanel */
94 // Ain't those auto-generated comments helpful or what? <g>
95 public prefJPanel(TableModel model) {
96 this.model = model;
97 initComponents();
98 }
99
100 private void initComponents() {
101 java.awt.GridBagConstraints gridBagConstraints;
102
103 // Did I mention auto-generated? That's the reason we
104 // have lots of properties here and not some arrays...
105 prefTabPane = new javax.swing.JTabbedPane();
106 shortcutTab = new javax.swing.JPanel();
107 listPane = new javax.swing.JPanel();
108 listScrollPane = new javax.swing.JScrollPane();
109 shortcutTable = new javax.swing.JTable();
110 shortcutEditPane = new javax.swing.JPanel();
111 cbDefault = new javax.swing.JCheckBox();
112 jLabel4 = new javax.swing.JLabel();
113 cbShift = new javax.swing.JCheckBox();
114 cbDisable = new javax.swing.JCheckBox();
115 cbCtrl = new javax.swing.JCheckBox();
116 tfKeyLabel = new javax.swing.JLabel();
117 cbAlt = new javax.swing.JCheckBox();
118 tfKey = new javax.swing.JComboBox();
119 cbMeta = new javax.swing.JCheckBox();
120 jLabel6 = new javax.swing.JLabel();
121 modifierTab = new javax.swing.JPanel();
122 editGroupPane = new javax.swing.JPanel();
123 jLabel1 = new javax.swing.JLabel();
124 bxPrim1 = new javax.swing.JComboBox();
125 jLabel2 = new javax.swing.JLabel();
126 bxSec1 = new javax.swing.JComboBox();
127 jLabel3 = new javax.swing.JLabel();
128 bxTer1 = new javax.swing.JComboBox();
129 menuGroupPane = new javax.swing.JPanel();
130 jLabel7 = new javax.swing.JLabel();
131 bxPrim2 = new javax.swing.JComboBox();
132 jLabel8 = new javax.swing.JLabel();
133 bxSec2 = new javax.swing.JComboBox();
134 jLabel9 = new javax.swing.JLabel();
135 bxTer2 = new javax.swing.JComboBox();
136 hotkeyGroupPane = new javax.swing.JPanel();
137 jLabel10 = new javax.swing.JLabel();
138 bxPrim3 = new javax.swing.JComboBox();
139 jLabel11 = new javax.swing.JLabel();
140 bxSec3 = new javax.swing.JComboBox();
141 jLabel12 = new javax.swing.JLabel();
142 bxTer3 = new javax.swing.JComboBox();
143 subwindowGroupPane = new javax.swing.JPanel();
144 jLabel13 = new javax.swing.JLabel();
145 bxPrim4 = new javax.swing.JComboBox();
146 jLabel14 = new javax.swing.JLabel();
147 bxSec4 = new javax.swing.JComboBox();
148 jLabel15 = new javax.swing.JLabel();
149 bxTer4 = new javax.swing.JComboBox();
150 infoTab = new javax.swing.JPanel();
151 cbAction action = new cbAction(this);
152 bxAction action2 = new bxAction();
153
154 setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS));
155
156 // If someone wants to move this text into some resource, feel free.
157 infoTab.setLayout(new javax.swing.BoxLayout(shortcutTab, javax.swing.BoxLayout.Y_AXIS));
158 JEditorPane editor = new JEditorPane();
159 editor.setEditable(false);
160 editor.setContentType("text/html");
161 editor.setText(
162 tr("<h1><a name=\"top\">Keyboard Shortcuts</a></h1>")+
163 tr("<p>Please note that shortcuts keys are assigned to the actions when JOSM is started. So you need to <b>restart</b> "
164 +"JOSM to see your changes.</p>")+
165 tr("<p>Furthermore, the shortcuts are activated when the actions are assigned to a menu entry of button for the first "
166 +"time. So some of your changes may become active even without restart --- but also without collistion handling. "
167 +"This is another reason to <b>restart</b> JOSM after making any changes here.</p>")+
168 tr("<p>You may notice that the key selection list on the next page lists all keys that exist on all kinds of keyboards "
169 +"Java knows about, not just those keys that exist on your keyboard. Please use only those values that correspond to "
170 +"a real key on your keyboard. So if your keyboard has no 'Copy' key (PC keyboard don't have them, Sun keyboards do), "
171 +"the do not use it. Also there will be 'keys' listed that correspond to a shortcut on your keyboard (e.g. ':'/Colon). "
172 +"Please also do not use them, use the base key (';'/Semicolon on US keyboards, '.'/Period on German keyboards, ...) "
173 +"instead. Not doing so may result in conflicts, as there is no way for JOSM to know that Ctrl+Shift+; and Ctrl+: "
174 +"actually is the same thing on an US keyboard...</p>")+
175 tr("<p>Thank you for your understanding</p>")+
176 tr("<h1>Modifier Groups</h1>")+
177 tr("<p>The last page lists the modifier keys JOSM will automatically assign to shortcuts. For every of the four kinds "
178 +"of shortcuts there are three alternatives. JOSM will try those alternative in the listed order when managing a "
179 +"conflict. If all alternatives would result in shortcuts that are already taken, it will assign a random shortcut "
180 +"instead.</p>")+
181 tr("<p>The pseudo-modifier 'disabled' will disable the shortcut when encountered.</p>")
182 );
183 editor.setCaretPosition(0); // scroll up
184 prefTabPane.addTab(tr("Read First"), new JScrollPane(editor));
185
186 shortcutTab.setLayout(new javax.swing.BoxLayout(shortcutTab, javax.swing.BoxLayout.Y_AXIS));
187
188 listPane.setLayout(new java.awt.GridLayout());
189
190 // This is the list of shortcuts:
191 shortcutTable.setModel(model);
192 shortcutTable.getSelectionModel().addListSelectionListener(new cbAction(this));
193 //shortcutTable.setFillsViewportHeight(true); Java 1.6
194 shortcutTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
195 listScrollPane.setViewportView(shortcutTable);
196
197 listPane.add(listScrollPane);
198
199 shortcutTab.add(listPane);
200
201 // and here follows the edit area. I won't object to someone re-designing it, it looks, um, "minimalistic" ;)
202 shortcutEditPane.setLayout(new java.awt.GridLayout(5, 2));
203
204 cbDefault.setAction(action);
205 cbDefault.setText(tr("Use default"));
206 shortcutEditPane.add(cbDefault);
207
208 shortcutEditPane.add(jLabel4);
209
210 cbShift.setAction(action);
211 cbShift.setText(SHIFT); // see above for why no tr()
212 shortcutEditPane.add(cbShift);
213
214 cbDisable.setAction(action);
215 cbDisable.setText(tr("Disable"));
216 shortcutEditPane.add(cbDisable);
217
218 cbCtrl.setAction(action);
219 cbCtrl.setText(CTRL); // see above for why no tr()
220 shortcutEditPane.add(cbCtrl);
221
222 tfKeyLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
223 tfKeyLabel.setText(tr("Key:"));
224 shortcutEditPane.add(tfKeyLabel);
225
226 cbAlt.setAction(action);
227 cbAlt.setText(ALT); // see above for why no tr()
228 shortcutEditPane.add(cbAlt);
229
230 tfKey.setAction(action);
231 tfKey.setModel(new javax.swing.DefaultComboBoxModel(keyList.values().toArray()));
232 shortcutEditPane.add(tfKey);
233
234 cbMeta.setAction(action);
235 cbMeta.setText(META); // see above for why no tr()
236 shortcutEditPane.add(cbMeta);
237
238 jLabel6.setText(tr("Attention: Use real keyboard keys only!"));
239 shortcutEditPane.add(jLabel6);
240
241 action.actionPerformed(null); // init checkboxes
242
243 shortcutTab.add(shortcutEditPane);
244
245 prefTabPane.addTab(tr("Keyboard Shortcuts"), shortcutTab);
246
247 // next is the modfier group tab.
248 // Would be a nice array if I had done it by hand. But then, it would be finished next year or so...
249 modifierTab.setLayout(new java.awt.GridLayout(0, 1));
250
251 editGroupPane.setBorder(javax.swing.BorderFactory.createTitledBorder(tr("Edit Shortcuts")));
252 editGroupPane.setLayout(new java.awt.GridLayout(3, 5));
253
254 jLabel1.setText(tr("Primary"));
255 editGroupPane.add(jLabel1);
256
257 bxPrim1.setModel(new javax.swing.DefaultComboBoxModel(modifList));
258 editGroupPane.add(bxPrim1);
259
260 jLabel2.setText(tr("Secondary:"));
261 editGroupPane.add(jLabel2);
262
263 bxSec1.setModel(new javax.swing.DefaultComboBoxModel(modifList));
264 editGroupPane.add(bxSec1);
265
266 jLabel3.setText(tr("Tertiary:"));
267 editGroupPane.add(jLabel3);
268
269 bxTer1.setModel(new javax.swing.DefaultComboBoxModel(modifList));
270 editGroupPane.add(bxTer1);
271
272 modifierTab.add(editGroupPane);
273
274 menuGroupPane.setBorder(javax.swing.BorderFactory.createTitledBorder(tr("Menu Shortcuts")));
275 menuGroupPane.setLayout(new java.awt.GridLayout(3, 5));
276
277 jLabel7.setText(tr("Primary"));
278 menuGroupPane.add(jLabel7);
279
280 bxPrim2.setModel(new javax.swing.DefaultComboBoxModel(modifList));
281 menuGroupPane.add(bxPrim2);
282
283 jLabel8.setText(tr("Secondary:"));
284 menuGroupPane.add(jLabel8);
285
286 bxSec2.setModel(new javax.swing.DefaultComboBoxModel(modifList));
287 menuGroupPane.add(bxSec2);
288
289 jLabel9.setText(tr("Tertiary:"));
290 menuGroupPane.add(jLabel9);
291
292 bxTer2.setModel(new javax.swing.DefaultComboBoxModel(modifList));
293 menuGroupPane.add(bxTer2);
294
295 modifierTab.add(menuGroupPane);
296
297 hotkeyGroupPane.setBorder(javax.swing.BorderFactory.createTitledBorder(tr("Hotkey Shortcuts")));
298 hotkeyGroupPane.setLayout(new java.awt.GridLayout(3, 5));
299
300 jLabel10.setText(tr("Primary"));
301 hotkeyGroupPane.add(jLabel10);
302
303 bxPrim3.setModel(new javax.swing.DefaultComboBoxModel(modifList));
304 hotkeyGroupPane.add(bxPrim3);
305
306 jLabel11.setText(tr("Secondary:"));
307 hotkeyGroupPane.add(jLabel11);
308
309 bxSec3.setModel(new javax.swing.DefaultComboBoxModel(modifList));
310 hotkeyGroupPane.add(bxSec3);
311
312 jLabel12.setText(tr("Tertiary:"));
313 hotkeyGroupPane.add(jLabel12);
314
315 bxTer3.setModel(new javax.swing.DefaultComboBoxModel(modifList));
316 hotkeyGroupPane.add(bxTer3);
317
318 modifierTab.add(hotkeyGroupPane);
319
320 subwindowGroupPane.setBorder(javax.swing.BorderFactory.createTitledBorder(tr("Subwindow Shortcuts")));
321 subwindowGroupPane.setLayout(new java.awt.GridLayout(3, 5));
322
323 jLabel13.setText(tr("Primary"));
324 subwindowGroupPane.add(jLabel13);
325
326 bxPrim4.setModel(new javax.swing.DefaultComboBoxModel(modifList));
327 subwindowGroupPane.add(bxPrim4);
328
329 jLabel14.setText(tr("Secondary:"));
330 subwindowGroupPane.add(jLabel14);
331
332 bxSec4.setModel(new javax.swing.DefaultComboBoxModel(modifList));
333 subwindowGroupPane.add(bxSec4);
334
335 jLabel15.setText(tr("Tertiary:"));
336 subwindowGroupPane.add(jLabel15);
337
338 bxTer4.setModel(new javax.swing.DefaultComboBoxModel(modifList));
339 subwindowGroupPane.add(bxTer4);
340
341 initbx();
342 bxPrim1.setAction(action2);
343 bxSec1.setAction(action2);
344 bxTer1.setAction(action2);
345 bxPrim2.setAction(action2);
346 bxSec2.setAction(action2);
347 bxTer2.setAction(action2);
348 bxPrim3.setAction(action2);
349 bxSec3.setAction(action2);
350 bxTer3.setAction(action2);
351 bxPrim4.setAction(action2);
352 bxSec4.setAction(action2);
353 bxTer4.setAction(action2);
354
355 modifierTab.add(subwindowGroupPane);
356
357 prefTabPane.addTab(tr("Modifier Groups"), modifierTab);
358
359 add(prefTabPane);
360 }
361
362 // this allows to edit shortcuts. it:
363 // * sets the edit controls to the selected shortcut
364 // * enabled/disables the controls as needed
365 // * writes the user's changes to the shortcut
366 // And after I finally had it working, I realized that those two methods
367 // are playing ping-pong (politically correct: table tennis, I know) and
368 // even have some duplicated code. Feel free to refactor, If you have
369 // more expirience with GUI coding than I have.
370 private class cbAction extends javax.swing.AbstractAction implements ListSelectionListener {
371 private prefJPanel panel;
372 public cbAction (prefJPanel panel) {
373 this.panel = panel;
374 }
375 public void valueChanged(ListSelectionEvent e) {
376 ListSelectionModel lsm = panel.shortcutTable.getSelectionModel(); // can't use e here
377 if (!lsm.isSelectionEmpty()) {
378 int row = lsm.getMinSelectionIndex();
379 ShortCut sc = (ShortCut)panel.model.getValueAt(row, -1);
380 panel.cbDefault.setSelected(!sc.getAssignedUser());
381 panel.cbDisable.setSelected(sc.getKeyStroke() == null);
382 panel.cbShift.setSelected(sc.getAssignedModifier() != -1 && (sc.getAssignedModifier() & KeyEvent.SHIFT_DOWN_MASK) != 0);
383 panel.cbCtrl.setSelected(sc.getAssignedModifier() != -1 && (sc.getAssignedModifier() & KeyEvent.CTRL_DOWN_MASK) != 0);
384 panel.cbAlt.setSelected(sc.getAssignedModifier() != -1 && (sc.getAssignedModifier() & KeyEvent.ALT_DOWN_MASK) != 0);
385 panel.cbMeta.setSelected(sc.getAssignedModifier() != -1 && (sc.getAssignedModifier() & KeyEvent.META_DOWN_MASK) != 0);
386 if (sc.getKeyStroke() != null) {
387 tfKey.setSelectedItem(keyList.get(sc.getKeyStroke().getKeyCode()));
388 } else {
389 tfKey.setSelectedItem(keyList.get(-1));
390 }
391 if (sc.getAutomatic()) {
392 panel.cbDefault.setEnabled(false);
393 panel.cbDisable.setEnabled(false);
394 panel.cbShift.setEnabled(false);
395 panel.cbCtrl.setEnabled(false);
396 panel.cbAlt.setEnabled(false);
397 panel.cbMeta.setEnabled(false);
398 panel.tfKey.setEnabled(false);
399 } else {
400 panel.cbDefault.setEnabled(true);
401 actionPerformed(null);
402 }
403 } else {
404 panel.cbDefault.setEnabled(false);
405 panel.cbDisable.setEnabled(false);
406 panel.cbShift.setEnabled(false);
407 panel.cbCtrl.setEnabled(false);
408 panel.cbAlt.setEnabled(false);
409 panel.cbMeta.setEnabled(false);
410 panel.tfKey.setEnabled(false);
411 }
412 }
413 public void actionPerformed(java.awt.event.ActionEvent e) {
414 ListSelectionModel lsm = panel.shortcutTable.getSelectionModel();
415 if (lsm != null && !lsm.isSelectionEmpty()) {
416 if (e != null) { // only if we've been called by a user action
417 int row = lsm.getMinSelectionIndex();
418 ShortCut sc = (ShortCut)panel.model.getValueAt(row, -1);
419 sc.setAssignedUser(!panel.cbDefault.isSelected());
420 if (panel.cbDisable.isSelected()) {
421 sc.setAssignedModifier(-1);
422 } else if (panel.tfKey.getSelectedItem().equals("")) {
423 sc.setAssignedModifier(KeyEvent.VK_CANCEL);
424 } else {
425 sc.setAssignedModifier(
426 (panel.cbShift.isSelected() ? KeyEvent.SHIFT_DOWN_MASK : 0) |
427 (panel.cbCtrl.isSelected() ? KeyEvent.CTRL_DOWN_MASK : 0) |
428 (panel.cbAlt.isSelected() ? KeyEvent.ALT_DOWN_MASK : 0) |
429 (panel.cbMeta.isSelected() ? KeyEvent.META_DOWN_MASK : 0)
430 );
431 for (Map.Entry<Integer, String> entry : keyList.entrySet()) {
432 if (entry.getValue().equals(panel.tfKey.getSelectedItem())) {
433 sc.setAssignedKey(entry.getKey());
434 }
435 }
436 }
437 valueChanged(null);
438 }
439 boolean state = !panel.cbDefault.isSelected();
440 panel.cbDisable.setEnabled(state);
441 state = state && !panel.cbDisable.isSelected();
442 panel.cbShift.setEnabled(state);
443 panel.cbCtrl.setEnabled(state);
444 panel.cbAlt.setEnabled(state);
445 panel.cbMeta.setEnabled(state);
446 panel.tfKey.setEnabled(state);
447 } else {
448 panel.cbDefault.setEnabled(false);
449 panel.cbDisable.setEnabled(false);
450 panel.cbShift.setEnabled(false);
451 panel.cbCtrl.setEnabled(false);
452 panel.cbAlt.setEnabled(false);
453 panel.cbMeta.setEnabled(false);
454 panel.tfKey.setEnabled(false);
455 }
456 }
457 }
458
459 // this handles the modifier groups
460 private class bxAction extends javax.swing.AbstractAction {
461 public void actionPerformed(java.awt.event.ActionEvent e) {
462 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_DEFAULT+ShortCut.GROUP_EDIT), Integer.toString( modifInts[bxPrim1.getSelectedIndex()] ));
463 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_ALT1 +ShortCut.GROUP_EDIT), Integer.toString( modifInts[ bxSec1.getSelectedIndex()] ));
464 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_ALT2 +ShortCut.GROUP_EDIT), Integer.toString( modifInts[ bxTer1.getSelectedIndex()] ));
465
466 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_DEFAULT+ShortCut.GROUP_MENU), Integer.toString( modifInts[bxPrim2.getSelectedIndex()] ));
467 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_ALT1 +ShortCut.GROUP_MENU), Integer.toString( modifInts[ bxSec2.getSelectedIndex()] ));
468 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_ALT2 +ShortCut.GROUP_MENU), Integer.toString( modifInts[ bxTer2.getSelectedIndex()] ));
469
470 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_DEFAULT+ShortCut.GROUP_HOTKEY), Integer.toString( modifInts[bxPrim3.getSelectedIndex()] ));
471 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_ALT1 +ShortCut.GROUP_HOTKEY), Integer.toString( modifInts[ bxSec3.getSelectedIndex()] ));
472 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_ALT2 +ShortCut.GROUP_HOTKEY), Integer.toString( modifInts[ bxTer3.getSelectedIndex()] ));
473
474 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_DEFAULT+ShortCut.GROUP_LAYER), Integer.toString( modifInts[bxPrim4.getSelectedIndex()] ));
475 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_ALT1 +ShortCut.GROUP_LAYER), Integer.toString( modifInts[ bxSec4.getSelectedIndex()] ));
476 Main.pref.put("shortcut.groups."+(ShortCut.GROUPS_ALT2 +ShortCut.GROUP_LAYER), Integer.toString( modifInts[ bxTer4.getSelectedIndex()] ));
477 }
478 }
479
480 private void initbx() {
481 setBx(bxPrim1, "shortcut.groups."+(ShortCut.GROUPS_DEFAULT+ShortCut.GROUP_EDIT));
482 setBx(bxSec1, "shortcut.groups."+(ShortCut.GROUPS_ALT1 +ShortCut.GROUP_EDIT));
483 setBx(bxTer1, "shortcut.groups."+(ShortCut.GROUPS_ALT2 +ShortCut.GROUP_EDIT));
484
485 setBx(bxPrim2, "shortcut.groups."+(ShortCut.GROUPS_DEFAULT+ShortCut.GROUP_MENU));
486 setBx(bxSec2, "shortcut.groups."+(ShortCut.GROUPS_ALT1 +ShortCut.GROUP_MENU));
487 setBx(bxTer2, "shortcut.groups."+(ShortCut.GROUPS_ALT2 +ShortCut.GROUP_MENU));
488
489 setBx(bxPrim3, "shortcut.groups."+(ShortCut.GROUPS_DEFAULT+ShortCut.GROUP_HOTKEY));
490 setBx(bxSec3, "shortcut.groups."+(ShortCut.GROUPS_ALT1 +ShortCut.GROUP_HOTKEY));
491 setBx(bxTer3, "shortcut.groups."+(ShortCut.GROUPS_ALT2 +ShortCut.GROUP_HOTKEY));
492
493 setBx(bxPrim4, "shortcut.groups."+(ShortCut.GROUPS_DEFAULT+ShortCut.GROUP_LAYER));
494 setBx(bxSec4, "shortcut.groups."+(ShortCut.GROUPS_ALT1 +ShortCut.GROUP_LAYER));
495 setBx(bxTer4, "shortcut.groups."+(ShortCut.GROUPS_ALT2 +ShortCut.GROUP_LAYER));
496 }
497 private void setBx(javax.swing.JComboBox bx, String key) {
498 int target = Main.pref.getInteger(key, -1);
499 for (int i = 0; i < modifInts.length; i++) {
500 if (modifInts[i] == target) {
501 bx.setSelectedIndex(i);
502 }
503 }
504 }
505
506 private javax.swing.JComboBox bxPrim1;
507 private javax.swing.JComboBox bxPrim2;
508 private javax.swing.JComboBox bxPrim3;
509 private javax.swing.JComboBox bxPrim4;
510 private javax.swing.JComboBox bxSec1;
511 private javax.swing.JComboBox bxSec2;
512 private javax.swing.JComboBox bxSec3;
513 private javax.swing.JComboBox bxSec4;
514 private javax.swing.JComboBox bxTer1;
515 private javax.swing.JComboBox bxTer2;
516 private javax.swing.JComboBox bxTer3;
517 private javax.swing.JComboBox bxTer4;
518 private javax.swing.JCheckBox cbAlt;
519 private javax.swing.JCheckBox cbCtrl;
520 private javax.swing.JCheckBox cbDefault;
521 private javax.swing.JCheckBox cbDisable;
522 private javax.swing.JCheckBox cbMeta;
523 private javax.swing.JCheckBox cbShift;
524 private javax.swing.JPanel editGroupPane;
525 private javax.swing.JPanel hotkeyGroupPane;
526 private javax.swing.JLabel jLabel1;
527 private javax.swing.JLabel jLabel10;
528 private javax.swing.JLabel jLabel11;
529 private javax.swing.JLabel jLabel12;
530 private javax.swing.JLabel jLabel13;
531 private javax.swing.JLabel jLabel14;
532 private javax.swing.JLabel jLabel15;
533 private javax.swing.JLabel jLabel2;
534 private javax.swing.JLabel jLabel3;
535 private javax.swing.JLabel jLabel4;
536 private javax.swing.JLabel jLabel6;
537 private javax.swing.JLabel jLabel7;
538 private javax.swing.JLabel jLabel8;
539 private javax.swing.JLabel jLabel9;
540 private javax.swing.JPanel listPane;
541 private javax.swing.JScrollPane listScrollPane;
542 private javax.swing.JPanel menuGroupPane;
543 private javax.swing.JPanel modifierTab;
544 private javax.swing.JTabbedPane prefTabPane;
545 private javax.swing.JPanel shortcutEditPane;
546 private javax.swing.JPanel shortcutTab;
547 private javax.swing.JTable shortcutTable;
548 private javax.swing.JPanel subwindowGroupPane;
549 private javax.swing.JComboBox tfKey;
550 private javax.swing.JLabel tfKeyLabel;
551 private javax.swing.JPanel infoTab;
552}