001 // COpyright 2004, David Cok
002
003 package escjava.gui;
004
005 import java.lang.reflect.Field;
006 import javax.swing.*;
007 import java.awt.*;
008 import java.awt.event.ActionEvent;
009 import java.awt.event.ActionListener;
010
011 public class GuiOptionsPanel extends JPanel implements ActionListener {
012
013 static public class Settings {
014 public boolean autoExpand = true;
015 public boolean autoScroll = true;
016 public boolean breadthFirst = false;
017 public boolean autoShowErrors = true;
018 }
019
020 public Settings settings = new Settings();
021
022 /** The array contains the text string, field name and the tooltip. */
023 static final public String[][] info = {
024 { "Auto Expand the nodes", "autoExpand", "Automatically expands the nodes as processing progresses"},
025 { "Auto scroll", "autoScroll", "Automatically scroll the window to keep processing point in view (will also expand nodes)"},
026 { "Breadth first checking", "breadthFirst", "Check all nodes at a given level (parsing, typechecking, static checking) before moving to the next level, rather than doing all checks for a given node before checking the next node"},
027 { "Show Error Windows Automatically", "autoShowErrors", "Automatically popup windows showing errors as items are checked" },
028 };
029
030 static final public Class guioptions = escjava.gui.GuiOptionsPanel.Settings.class;
031
032 public GuiOptionsPanel() {
033 init();
034 }
035
036 public void init() {
037 setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
038 removeAll();
039 JCheckBox cb;
040 for (int i = 0; i<info.length; ++i) {
041 String[] iinfo = info[i];
042 try {
043 Field f = guioptions.getField(iinfo[1]);
044 boolean b = f.getBoolean(settings);
045 cb = new JCheckBox(iinfo[0],b);
046 cb.setToolTipText(iinfo[2]);
047 cb.addActionListener(this);
048 add(cb);
049 } catch (Exception e) {
050 System.out.println("FAILED TO RECOGNIZE OPTION " + i + ": " + iinfo[0] + " " + e);
051 }
052 }
053 }
054
055 public void actionPerformed(/*@non_null*/ActionEvent e) {
056 // write back out to the Options structure
057
058 Object source = e.getSource();
059 String name = null;
060 if (source instanceof JCheckBox) {
061 String fname = null;
062 name = ((JCheckBox)source).getText();
063 for (int i=0; i<info.length; ++i) {
064 if (info[i][0].equals(name)) {
065 fname = info[i][1];
066 break;
067 }
068 }
069 boolean value = ((JCheckBox)source).isSelected();
070 try {
071 Field f = guioptions.getField(fname);
072 f.setBoolean(settings,value);
073 } catch (Exception ee) {
074 System.out.println("FAILED TO RECOGNIZE OPTION: " + name + " " + ee);
075 }
076 } else {
077 System.out.println("UNKNOWN GUI OPTION " + name);
078 }
079 }
080
081 }