001 /*
002 * Copyright (c) 1995-2010, The University of Sheffield. See the file
003 * COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
004 *
005 * This file is part of GATE (see http://gate.ac.uk/), and is free
006 * software, licenced under the GNU Library General Public License,
007 * Version 2, June 1991 (in the distribution as file licence.html,
008 * and also available at http://gate.ac.uk/gate/licence.html).
009 *
010 * Valentin Tablan 15/11/2001
011 *
012 * $Id: OptionsDialog.java 13685 2011-04-18 11:16:55Z valyt $
013 *
014 */
015 package gate.gui;
016
017 import java.awt.*;
018 import java.awt.event.ActionEvent;
019 import java.awt.event.ActionListener;
020 import java.beans.PropertyChangeEvent;
021 import java.beans.PropertyChangeListener;
022 import java.util.*;
023 import java.util.List;
024
025 import javax.swing.*;
026 import javax.swing.plaf.FontUIResource;
027
028 import gate.Gate;
029 import gate.GateConstants;
030 import gate.swing.JFontChooser;
031 import gate.util.GateRuntimeException;
032 import gate.util.OptionsMap;
033
034 /**
035 * The options dialog for Gate.
036 */
037 public class OptionsDialog extends JDialog {
038 public OptionsDialog(Frame owner){
039 super(owner, "GATE Options", true);
040 MainFrame.getGuiRoots().add(this);
041 }
042
043 protected void initLocalData(){
044 lookAndFeelClassName = userConfig.getString(GateConstants.LOOK_AND_FEEL);
045 textComponentsFont = userConfig.getFont(GateConstants.TEXT_COMPONENTS_FONT);
046 menusFont = userConfig.getFont(GateConstants.MENUS_FONT);
047 componentsFont = userConfig.getFont(GateConstants.OTHER_COMPONENTS_FONT);
048 dirtyGUI = false;
049 }
050
051
052 protected void initGuiComponents(){
053 getContentPane().removeAll();
054 mainTabbedPane = new JTabbedPane(JTabbedPane.TOP);
055 getContentPane().setLayout(new BoxLayout(getContentPane(),
056 BoxLayout.Y_AXIS));
057 getContentPane().add(mainTabbedPane);
058 Box vBox;
059 Box hBox;
060 Box hBox2;
061
062 /*******************
063 * Appearance pane *
064 *******************/
065
066 //the LNF combo
067 List<LNFData> supportedLNFs = new ArrayList<LNFData>();
068 LNFData currentLNF = null;
069 UIManager.LookAndFeelInfo[] lnfs = UIManager.getInstalledLookAndFeels();
070 for (UIManager.LookAndFeelInfo lnf : lnfs) {
071 try {
072 Class lnfClass = Class.forName(lnf.getClassName());
073 if (((LookAndFeel) (lnfClass.newInstance())).isSupportedLookAndFeel()) {
074 if (lnf.getName().equals(UIManager.getLookAndFeel().getName())) {
075 supportedLNFs.add(currentLNF =
076 new LNFData(lnf.getClassName(), lnf.getName()));
077 } else {
078 supportedLNFs.add(new LNFData(lnf.getClassName(), lnf.getName()));
079 }
080 }
081 } catch (Exception e) {
082 e.printStackTrace();
083 }
084 }
085 lnfCombo = new JComboBox(supportedLNFs.toArray());
086 lnfCombo.setSelectedItem(currentLNF);
087 lnfCombo.setToolTipText("Be aware that only 'Metal' is fully tested.");
088
089 fontBG = new ButtonGroup();
090 textBtn = new JRadioButton("Text components font");
091 textBtn.setActionCommand("text");
092 fontBG.add(textBtn);
093 menuBtn = new JRadioButton("Menu components font");
094 menuBtn.setActionCommand("menu");
095 fontBG.add(menuBtn);
096 otherCompsBtn = new JRadioButton("Other components font");
097 otherCompsBtn.setActionCommand("other");
098 fontBG.add(otherCompsBtn);
099
100 JPanel appearanceBox = new JPanel();
101 appearanceBox.setLayout(new BoxLayout(appearanceBox, BoxLayout.Y_AXIS));
102 appearanceBox.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
103
104 appearanceBox.add(Box.createVerticalStrut(5));
105
106 vBox = Box.createVerticalBox();
107 vBox.setBackground(getContentPane().getBackground());
108 vBox.setBorder(BorderFactory.createTitledBorder(" Look and Feel "));
109 vBox.add(Box.createVerticalStrut(5));
110 hBox = Box.createHorizontalBox();
111 hBox.add(Box.createHorizontalStrut(5));
112 hBox.add(lnfCombo);
113 hBox.add(Box.createHorizontalStrut(5));
114 vBox.add(hBox);
115 vBox.add(Box.createVerticalStrut(5));
116 appearanceBox.add(vBox);
117
118 appearanceBox.add(Box.createVerticalStrut(5));
119
120 hBox = Box.createHorizontalBox();
121 hBox.setBorder(BorderFactory.createTitledBorder(" Font options "));
122 hBox.add(Box.createHorizontalStrut(5));
123 vBox = Box.createVerticalBox();
124 vBox.add(textBtn);
125 vBox.add(Box.createVerticalStrut(5));
126 vBox.add(menuBtn);
127 vBox.add(Box.createVerticalStrut(5));
128 vBox.add(otherCompsBtn);
129 vBox.add(Box.createVerticalStrut(5));
130 vBox.add(Box.createVerticalGlue());
131 hBox.add(Box.createHorizontalStrut(5));
132 hBox.add(vBox);
133 fontChooser = new JFontChooser();
134 hBox.add(fontChooser);
135 hBox.add(Box.createHorizontalStrut(5));
136
137 appearanceBox.add(hBox);
138
139 mainTabbedPane.add("Appearance", appearanceBox);
140
141 /*****************
142 * Advanced pane *
143 *****************/
144
145 saveOptionsChk = new JCheckBox("Save options on exit",
146 userConfig.getBoolean(GateConstants.SAVE_OPTIONS_ON_EXIT));
147 saveOptionsChk.setToolTipText(
148 "Remembers the options set in this dialogue.");
149
150 saveSessionChk = new JCheckBox("Save session on exit",
151 userConfig.getBoolean(GateConstants.SAVE_SESSION_ON_EXIT));
152 saveSessionChk.setToolTipText(
153 "Reloads the same resources in the tree on next start.");
154
155 includeFeaturesOnPreserveFormatChk = new JCheckBox(
156 "Include annotation features for \"Save preserving format\"",
157 userConfig.getBoolean(
158 GateConstants.SAVE_FEATURES_WHEN_PRESERVING_FORMAT));
159
160 addSpaceOnMarkupUnpackChk = new JCheckBox(
161 "Add space on markup unpack if needed", true);
162 addSpaceOnMarkupUnpackChk.setToolTipText(
163 "Adds a space instead of concatenate words separated by a XML tag");
164 if ( (userConfig.get(GateConstants
165 .DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME) != null)
166 && !userConfig.getBoolean(GateConstants
167 .DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME) )
168 addSpaceOnMarkupUnpackChk.setSelected(false);
169
170 browserComboBox = new JComboBox(new String[] {
171 "Default browser", "Java", "Custom"});
172 browserComboBox.setPrototypeDisplayValue("Default browser");
173 browserComboBox.setToolTipText(
174 "Use Java or Custom only if Default doesn't work.");
175 browserCommandLineTextField = new JTextField(15);
176 String commandLine =
177 userConfig.getString(MainFrame.class.getName()+".browsercommandline");
178 if(commandLine == null || commandLine.trim().length() == 0
179 || commandLine.equals("Set dynamically when you display help.")) {
180 // option not configured or empty or default browser
181 browserComboBox.setSelectedItem("Default browser");
182 browserCommandLineTextField.setEnabled(false);
183 }
184 else if(commandLine.equals("Internal Java browser.")) {
185 browserComboBox.setSelectedItem("Java");
186 browserCommandLineTextField.setEnabled(false);
187 }
188 else {
189 browserComboBox.setSelectedItem("Custom");
190 }
191 browserCommandLineTextField.setText((commandLine == null)?"":commandLine);
192
193 treeSelectViewChk = new JCheckBox("Tree select view",
194 userConfig.getBoolean(MainFrame.class.getName()+".treeselectview"));
195 treeSelectViewChk.setToolTipText(
196 "Selection in left resources tree select the main view");
197
198 viewSelectTreeChk = new JCheckBox("View select in tree",
199 userConfig.getBoolean(MainFrame.class.getName()+".viewselecttree"));
200 viewSelectTreeChk.setToolTipText(
201 "Selection of the main view select item in left resources tree");
202
203 JPanel advancedBox = new JPanel();
204 advancedBox.setLayout(new BoxLayout(advancedBox, BoxLayout.Y_AXIS));
205 advancedBox.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
206
207 advancedBox.add(Box.createVerticalStrut(5));
208
209 hBox = Box.createHorizontalBox();
210 hBox.setBorder(BorderFactory.createTitledBorder(" Advanced features "));
211 hBox.add(Box.createHorizontalStrut(5));
212 vBox = Box.createVerticalBox();
213 vBox.add(includeFeaturesOnPreserveFormatChk);
214 vBox.add(Box.createVerticalStrut(5));
215 vBox.add(addSpaceOnMarkupUnpackChk);
216 vBox.add(Box.createVerticalStrut(5));
217 hBox.add(vBox);
218 hBox.add(Box.createHorizontalStrut(5));
219 hBox.add(Box.createHorizontalGlue());
220 advancedBox.add(hBox);
221
222 advancedBox.add(Box.createVerticalStrut(5));
223
224 hBox = Box.createHorizontalBox();
225 hBox.setBorder(BorderFactory.createTitledBorder(" Session persistence "));
226 hBox.add(Box.createHorizontalStrut(5));
227 hBox2 = Box.createHorizontalBox();
228 hBox2.add(saveOptionsChk);
229 hBox2.add(Box.createVerticalStrut(5));
230 hBox2.add(saveSessionChk);
231 hBox2.add(Box.createVerticalStrut(5));
232 hBox.add(hBox2);
233 hBox.add(Box.createHorizontalStrut(5));
234 hBox.add(Box.createHorizontalGlue());
235 advancedBox.add(hBox);
236
237 advancedBox.add(Box.createVerticalStrut(5));
238
239 hBox = Box.createHorizontalBox();
240 hBox.setBorder(BorderFactory.createTitledBorder(" Help browser "));
241 hBox.add(Box.createHorizontalStrut(5));
242 vBox = Box.createVerticalBox();
243 vBox.add(browserComboBox);
244 vBox.add(Box.createVerticalStrut(5));
245 vBox.add(browserCommandLineTextField);
246 vBox.add(Box.createVerticalStrut(5));
247 hBox.add(vBox);
248 hBox.add(Box.createHorizontalStrut(5));
249 advancedBox.add(hBox);
250
251 hBox = Box.createHorizontalBox();
252 hBox.setBorder(BorderFactory.createTitledBorder(
253 " Link resources tree selection and the main view "));
254 hBox.add(Box.createHorizontalStrut(5));
255 hBox2 = Box.createHorizontalBox();
256 hBox2.add(treeSelectViewChk);
257 hBox2.add(Box.createVerticalStrut(5));
258 hBox2.add(viewSelectTreeChk);
259 hBox2.add(Box.createVerticalStrut(5));
260 hBox.add(hBox2);
261 hBox.add(Box.createHorizontalStrut(5));
262 hBox.add(Box.createHorizontalGlue());
263 advancedBox.add(hBox);
264
265 mainTabbedPane.add("Advanced", advancedBox);
266
267 /******************
268 * Dialog buttons *
269 ******************/
270
271 Box buttonsBox = Box.createHorizontalBox();
272 okButton = new JButton(new OKAction());
273 buttonsBox.add(okButton);
274 buttonsBox.add(Box.createHorizontalStrut(10));
275 buttonsBox.add(cancelButton = new JButton(new CancelAction()));
276
277 getContentPane().add(Box.createVerticalStrut(10));
278 getContentPane().add(buttonsBox);
279 getContentPane().add(Box.createVerticalStrut(10));
280
281 getRootPane().setDefaultButton(okButton);
282 }
283
284 protected void initListeners(){
285 lnfCombo.addActionListener(new ActionListener() {
286 public void actionPerformed(ActionEvent e) {
287 if(!lookAndFeelClassName.equals(
288 ((LNFData)lnfCombo.getSelectedItem()).className)
289 ){
290 dirtyGUI = true;
291 lookAndFeelClassName = ((LNFData)lnfCombo.getSelectedItem()).
292 className;
293 }
294 }
295 });
296
297 fontChooser.addPropertyChangeListener(new PropertyChangeListener() {
298 public void propertyChange(PropertyChangeEvent e) {
299 if(e.getPropertyName().equals("fontValue")){
300 String selectedFont = fontBG.getSelection().getActionCommand();
301 if(selectedFont.equals("text")){
302 textComponentsFont = (Font)e.getNewValue();
303 dirtyGUI = true;
304 }else if(selectedFont.equals("menu")){
305 menusFont = (Font)e.getNewValue();
306 dirtyGUI = true;
307 }else if(selectedFont.equals("other")){
308 componentsFont = (Font)e.getNewValue();
309 dirtyGUI = true;
310 }
311 }
312 }
313 });
314
315 textBtn.addActionListener(new ActionListener() {
316 public void actionPerformed(ActionEvent e) {
317 if(textBtn.isSelected()) selectedFontChanged();
318 selectedFontBtn = "text";
319 fontChooser.setFontValue(textComponentsFont);
320 }
321 });
322
323 menuBtn.addActionListener(new ActionListener() {
324 public void actionPerformed(ActionEvent e) {
325 if(menuBtn.isSelected()) selectedFontChanged();
326 selectedFontBtn = "menu";
327 fontChooser.setFontValue(menusFont);
328 }
329 });
330
331 otherCompsBtn.addActionListener(new ActionListener() {
332 public void actionPerformed(ActionEvent e) {
333 if(otherCompsBtn.isSelected()) selectedFontChanged();
334 selectedFontBtn = "other";
335 fontChooser.setFontValue(componentsFont);
336 }
337 });
338
339 textBtn.setSelected(true);
340
341 browserComboBox.addActionListener(new ActionListener() {
342 public void actionPerformed(ActionEvent e) {
343 if(browserComboBox.getSelectedItem() == null) {
344 return;
345 }
346 String item = (String)browserComboBox.getSelectedItem();
347 browserCommandLineTextField.setEnabled(item.equals("Custom"));
348 if(item.equals("Default browser")) {
349 browserCommandLineTextField.setText(
350 "Set dynamically when you display help.");
351 }
352 else if(item.equals("Java")) {
353 browserCommandLineTextField.setText("Internal Java browser.");
354 }
355 else if(item.equals("Custom")) {
356 browserCommandLineTextField.setText("firefox %file");
357 }
358 }
359 });
360
361 // define keystrokes action bindings at the level of the main window
362 InputMap inputMap = ((JComponent)this.getContentPane())
363 .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
364 ActionMap actionMap = ((JComponent)this.getContentPane()).getActionMap();
365 inputMap.put(KeyStroke.getKeyStroke("ENTER"), "Apply");
366 actionMap.put("Apply", new OKAction());
367 inputMap.put(KeyStroke.getKeyStroke("ESCAPE"), "Cancel");
368 actionMap.put("Cancel", new CancelAction());
369 }
370
371 protected void selectedFontChanged(){
372 if(selectedFontBtn != null){
373 //save the old font
374 if(selectedFontBtn.equals("text")){
375 textComponentsFont = fontChooser.getFontValue();
376 }else if(selectedFontBtn.equals("menu")){
377 menusFont = fontChooser.getFontValue();
378 }else if(selectedFontBtn.equals("other")){
379 componentsFont = fontChooser.getFontValue();
380 }
381 }
382 }
383
384 public void showDialog(){
385 initLocalData();
386 initGuiComponents();
387 initListeners();
388 textBtn.doClick();
389
390 pack();
391 setLocationRelativeTo(getOwner());
392 setVisible(true);
393 selectedFontBtn = null;
394 }
395
396 public static void main(String args[]){
397 try{
398 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
399 }catch(Exception e){
400 e.printStackTrace();
401 }
402 final JFrame frame = new JFrame("Foo frame");
403 frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
404 JButton btn = new JButton("Show dialog");
405 btn.addActionListener(new ActionListener() {
406 public void actionPerformed(ActionEvent e) {
407 OptionsDialog dialog = new OptionsDialog(frame);
408 dialog.pack();
409 dialog.showDialog();
410 }
411 });
412 frame.getContentPane().add(btn);
413 frame.pack();
414 frame.setVisible(true);
415 System.out.println("Font: " + UIManager.getFont("Button.font"));
416 }// main
417
418
419 protected static void setUIDefaults(Object[] keys, Object value) {
420 for(int i = 0; i < keys.length; i++){
421 UIManager.put(keys[i], value);
422 }
423 }// setUIDefaults(Object[] keys, Object value)
424
425 /**
426 * Updates the Swing defaults table with the provided font to be used for the
427 * text components
428 */
429 public static void setTextComponentsFont(Font font){
430 setUIDefaults(textComponentsKeys, new FontUIResource(font));
431 userConfig.put(GateConstants.TEXT_COMPONENTS_FONT, font);
432 }
433
434 /**
435 * Updates the Swing defaults table with the provided font to be used for the
436 * menu components
437 */
438 public static void setMenuComponentsFont(Font font){
439 setUIDefaults(menuKeys, new FontUIResource(font));
440 userConfig.put(GateConstants.MENUS_FONT, font);
441 }
442
443 /**
444 * Updates the Swing defaults table with the provided font to be used for
445 * various compoents that neither text or menu components
446 */
447 public static void setComponentsFont(Font font){
448 setUIDefaults(componentsKeys, new FontUIResource(font));
449 userConfig.put(GateConstants.OTHER_COMPONENTS_FONT, font);
450 }
451
452 class OKAction extends AbstractAction{
453 OKAction(){
454 super("OK");
455 }
456
457 public void actionPerformed(ActionEvent evt) {
458 if(dirtyGUI){
459 setMenuComponentsFont(menusFont);
460 setComponentsFont(componentsFont);
461 setTextComponentsFont(textComponentsFont);
462 userConfig.put(GateConstants.LOOK_AND_FEEL, lookAndFeelClassName);
463 try{
464 UIManager.setLookAndFeel(lookAndFeelClassName);
465 }catch(Exception e){
466 throw new GateRuntimeException(
467 "Error while setting the look and feel", e);
468 }
469 Iterator rootsIter = MainFrame.getGuiRoots().iterator();
470 while(rootsIter.hasNext()){
471 try{
472 SwingUtilities.updateComponentTreeUI((Component)rootsIter.next());
473 }catch(Exception e){
474 throw new GateRuntimeException(
475 "Error while updating the graphical interface", e);
476 }
477 }
478 }
479
480 userConfig.put(GateConstants.SAVE_OPTIONS_ON_EXIT,
481 saveOptionsChk.isSelected());
482 userConfig.put(GateConstants.SAVE_SESSION_ON_EXIT,
483 saveSessionChk.isSelected());
484 userConfig.put(GateConstants.SAVE_FEATURES_WHEN_PRESERVING_FORMAT,
485 includeFeaturesOnPreserveFormatChk.isSelected());
486 userConfig.put(GateConstants.DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME,
487 addSpaceOnMarkupUnpackChk.isSelected());
488 userConfig.put(MainFrame.class.getName()+".browsercommandline",
489 browserCommandLineTextField.getText());
490 userConfig.put(MainFrame.class.getName()+".treeselectview",
491 treeSelectViewChk.isSelected());
492 userConfig.put(MainFrame.class.getName()+".viewselecttree",
493 viewSelectTreeChk.isSelected());
494 setVisible(false);
495 }// void actionPerformed(ActionEvent evt)
496 }
497
498 protected class CancelAction extends AbstractAction {
499 public CancelAction(){
500 super("Cancel");
501 }
502 public void actionPerformed(ActionEvent evt){
503 setVisible(false);
504 }
505 }
506
507 protected static class LNFData{
508 public LNFData(String className, String name){
509 this.className = className;
510 this.name = name;
511 }
512
513 public String toString(){
514 return name;
515 }
516
517 String className;
518 String name;
519 }
520
521
522 public static String[] menuKeys = new String[]{"CheckBoxMenuItem.acceleratorFont",
523 "CheckBoxMenuItem.font",
524 "Menu.acceleratorFont",
525 "Menu.font",
526 "MenuBar.font",
527 "MenuItem.acceleratorFont",
528 "MenuItem.font",
529 "RadioButtonMenuItem.acceleratorFont",
530 "RadioButtonMenuItem.font"};
531
532 public static String[] componentsKeys =
533 new String[]{"Button.font",
534 "CheckBox.font",
535 "ColorChooser.font",
536 "ComboBox.font",
537 "InternalFrame.titleFont",
538 "Label.font",
539 "List.font",
540 "OptionPane.font",
541 "Panel.font",
542 "PasswordField.font",
543 "PopupMenu.font",
544 "ProgressBar.font",
545 "RadioButton.font",
546 "ScrollPane.font",
547 "TabbedPane.font",
548 "Table.font",
549 "TableHeader.font",
550 "TextField.font",
551 "TitledBorder.font",
552 "ToggleButton.font",
553 "ToolBar.font",
554 "ToolTip.font",
555 "Tree.font",
556 "Viewport.font"};
557
558 public static String[] textComponentsKeys =
559 new String[]{"EditorPane.font",
560 "TextArea.font",
561 "TextPane.font"};
562
563 /**
564 * The main tabbed pane
565 */
566 protected JTabbedPane mainTabbedPane;
567
568 /**
569 * Radio button used to set the font for text components
570 */
571 protected JRadioButton textBtn;
572
573 /**
574 * The OK button for the dialog. It's set as protected so it can be accessed
575 * by subclasses in other projects.
576 */
577 protected JButton okButton;
578
579 /**
580 * The Cancel button for the dialog. It's set as protected so it can be
581 * accessed by subclasses in other projects.
582 */
583 protected JButton cancelButton;
584
585 /**
586 * which text is currently being edited; values are: "text", "menu", "other"
587 */
588 protected String selectedFontBtn = null;
589
590 /**
591 * Radio button used to set the font for menu components
592 */
593 protected JRadioButton menuBtn;
594
595 /**
596 * Radio button used to set the font for other components
597 */
598 protected JRadioButton otherCompsBtn;
599
600 /**
601 * Button group for the font setting radio buttons
602 */
603 protected ButtonGroup fontBG;
604
605 /**
606 * The font chooser used for selecting fonts
607 */
608 protected JFontChooser fontChooser;
609
610 /**
611 * The "Save Options on close" checkbox
612 */
613 protected JCheckBox saveOptionsChk;
614
615 /**
616 * The "Save Session on close" checkbox
617 */
618 protected JCheckBox saveSessionChk;
619
620 /**
621 * The "Include Annotation Features in Save Preserving Format" checkbox
622 */
623 protected JCheckBox includeFeaturesOnPreserveFormatChk;
624
625 /**
626 * The "Add extra space markup unpack if needed" checkbox
627 */
628 protected JCheckBox addSpaceOnMarkupUnpackChk;
629
630 /**
631 * The name of the look and feel class
632 */
633 protected String lookAndFeelClassName;
634
635 /**
636 * The font to be used for the menus; cached value for the one in the user
637 * config map.
638 */
639 protected Font menusFont;
640
641 /**
642 * The font to be used for text components; cached value for the one in the
643 * user config map.
644 */
645 protected Font textComponentsFont;
646
647 /**
648 * The font to be used for GUI components; cached value for the one in the
649 * user config map.
650 */
651 protected Font componentsFont;
652
653 /**
654 * This flag becomes true when an GUI related option has been changed
655 */
656 protected boolean dirtyGUI;
657
658 /**
659 * The combobox for the look and feel selection
660 */
661 protected JComboBox lnfCombo;
662
663 /**
664 * List of browsers. Update the browserCommandLineTextField.
665 */
666 protected JComboBox browserComboBox;
667
668 /**
669 * Browser command line.
670 */
671 protected JTextField browserCommandLineTextField;
672
673 protected JCheckBox treeSelectViewChk;
674
675 protected JCheckBox viewSelectTreeChk;
676
677 protected static OptionsMap userConfig = Gate.getUserConfig();
678 }
|