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(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 }