psmith 2003/12/19 02:13:15 Modified: src/java/org/apache/log4j/chainsaw ApplicationPreferenceModelPanel.java Log: Jalopied. App Pref panel can now handle L&F. Revision Changes Path 1.7 +374 -308 jakarta-log4j/src/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java Index: ApplicationPreferenceModelPanel.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ApplicationPreferenceModelPanel.java 16 Dec 2003 00:45:26 -0000 1.6 +++ ApplicationPreferenceModelPanel.java 19 Dec 2003 10:13:15 -0000 1.7 @@ -46,14 +46,20 @@ * Apache Software Foundation, please see <http://www.apache.org/>. * */ + package org.apache.log4j.chainsaw; +import org.apache.log4j.helpers.LogLog; + import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; + import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; + import java.util.Dictionary; +import java.util.Enumeration; import java.util.Hashtable; import javax.swing.BorderFactory; @@ -68,14 +74,13 @@ import javax.swing.JSlider; import javax.swing.JTextField; import javax.swing.SwingConstants; +import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; -import org.apache.log4j.helpers.LogLog; - /** * A panel used by the user to modify any application-wide preferences. @@ -84,351 +89,412 @@ * */ public class ApplicationPreferenceModelPanel extends AbstractPreferencePanel { + private ApplicationPreferenceModel committedPreferenceModel; + private ApplicationPreferenceModel uncommittedPreferenceModel = + new ApplicationPreferenceModel(); + JTextField identifierExpression; + + ApplicationPreferenceModelPanel(ApplicationPreferenceModel model) { + this.committedPreferenceModel = model; + initComponents(); + getOkButton().addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + uncommittedPreferenceModel.setIdentifierExpression( + identifierExpression.getText()); + committedPreferenceModel.apply(uncommittedPreferenceModel); + hidePanel(); + } + }); - private ApplicationPreferenceModel committedPreferenceModel; - private ApplicationPreferenceModel uncommittedPreferenceModel = - new ApplicationPreferenceModel(); - JTextField identifierExpression; - - ApplicationPreferenceModelPanel(ApplicationPreferenceModel model) { - this.committedPreferenceModel = model; - initComponents(); - getOkButton().addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - uncommittedPreferenceModel.setIdentifierExpression(identifierExpression.getText()); - committedPreferenceModel.apply(uncommittedPreferenceModel); - hidePanel(); - } - }); - - getCancelButton().addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - hidePanel(); - } - }); - } - - public static void main(String[] args) { + getCancelButton().addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + hidePanel(); + } + }); + } - JFrame f = new JFrame("App Preferences Panel Test Bed"); - ApplicationPreferenceModel model = new ApplicationPreferenceModel(); - ApplicationPreferenceModelPanel panel = - new ApplicationPreferenceModelPanel(model); - f.getContentPane().add(panel); - - model.addPropertyChangeListener(new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - LogLog.warn(evt.toString()); - - } - }); - panel.setOkCancelActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - System.exit(1); - } - }); + public static void main(String[] args) { + JFrame f = new JFrame("App Preferences Panel Test Bed"); + ApplicationPreferenceModel model = new ApplicationPreferenceModel(); + ApplicationPreferenceModelPanel panel = + new ApplicationPreferenceModelPanel(model); + f.getContentPane().add(panel); + + model.addPropertyChangeListener( + new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + LogLog.warn(evt.toString()); + } + }); + panel.setOkCancelActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.exit(1); + } + }); - f.setSize(640, 480); - f.show(); + f.setSize(640, 480); + f.show(); + } + + /** + * Ensures this panels DISPLAYED model is in sync with + * the model initially passed to the constructor. + * + */ + public void updateModel() { + this.uncommittedPreferenceModel.apply(committedPreferenceModel); + } + + /* (non-Javadoc) + * @see org.apache.log4j.chainsaw.AbstractPreferencePanel#createTreeModel() + */ + protected TreeModel createTreeModel() { + final DefaultMutableTreeNode rootNode = + new DefaultMutableTreeNode("Preferences"); + DefaultTreeModel model = new DefaultTreeModel(rootNode); + + DefaultMutableTreeNode general = + new DefaultMutableTreeNode(new GeneralAllPrefPanel()); + + DefaultMutableTreeNode visuals = + new DefaultMutableTreeNode(new VisualsPrefPanel()); + + rootNode.add(general); + rootNode.add(visuals); + + return model; + } + + public class VisualsPrefPanel extends BasicPrefPanel { + private final JRadioButton topPlacement = new JRadioButton("Top"); + private final JRadioButton bottomPlacement = new JRadioButton("Bottom"); + private final JCheckBox statusBar = new JCheckBox("Show Status bar"); + private final JCheckBox toolBar = new JCheckBox("Show Toolbar"); + private final JCheckBox receivers = new JCheckBox("Show Receivers"); + private UIManager.LookAndFeelInfo[] lookAndFeels = + UIManager.getInstalledLookAndFeels(); + private final ButtonGroup lookAndFeelGroup = new ButtonGroup(); + + private VisualsPrefPanel() { + super("Visuals"); + setupComponents(); + setupListeners(); } /** - * Ensures this panels DISPLAYED model is in sync with - * the model initially passed to the constructor. * */ - public void updateModel() { - this.uncommittedPreferenceModel.apply(committedPreferenceModel); - } - - /* (non-Javadoc) - * @see org.apache.log4j.chainsaw.AbstractPreferencePanel#createTreeModel() - */ - protected TreeModel createTreeModel() { + private void setupListeners() { + topPlacement.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + uncommittedPreferenceModel.setTabPlacement(SwingConstants.TOP); + } + }); + bottomPlacement.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + uncommittedPreferenceModel.setTabPlacement(SwingConstants.BOTTOM); + } + }); - final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode( - "Preferences"); - DefaultTreeModel model = new DefaultTreeModel(rootNode); - - DefaultMutableTreeNode general = new DefaultMutableTreeNode( - new GeneralAllPrefPanel()); - - DefaultMutableTreeNode visuals = new DefaultMutableTreeNode( - new VisualsPrefPanel()); - - rootNode.add(general); - rootNode.add(visuals); - - return model; + statusBar.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + uncommittedPreferenceModel.setStatusBar(statusBar.isSelected()); + } + }); - } + toolBar.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + uncommittedPreferenceModel.setToolbar(toolBar.isSelected()); + } + }); - public class VisualsPrefPanel extends BasicPrefPanel { + receivers.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + uncommittedPreferenceModel.setReceivers(receivers.isSelected()); + } + }); + + uncommittedPreferenceModel.addPropertyChangeListener( + "tabPlacement", + new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + int value = ((Integer) evt.getNewValue()).intValue(); - private final JRadioButton topPlacement = new JRadioButton("Top"); - private final JRadioButton bottomPlacement = new JRadioButton("Bottom"); + switch (value) { + case SwingConstants.TOP: + topPlacement.setSelected(true); - private final JCheckBox statusBar = new JCheckBox("Show Status bar"); - private final JCheckBox toolBar = new JCheckBox("Show Toolbar"); - private final JCheckBox receivers = new JCheckBox("Show Receivers"); - - private VisualsPrefPanel() { - super("Visuals"); - setupComponents(); - setupListeners(); - } + break; - /** - * - */ - private void setupListeners() { - topPlacement.addActionListener(new ActionListener() { + case SwingConstants.BOTTOM: + bottomPlacement.setSelected(true); - public void actionPerformed(ActionEvent e) { - uncommittedPreferenceModel.setTabPlacement(SwingConstants.TOP); - }}); - bottomPlacement.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - uncommittedPreferenceModel.setTabPlacement(SwingConstants.BOTTOM); - }}); - - statusBar.addActionListener(new ActionListener() { + break; - public void actionPerformed(ActionEvent e) { - uncommittedPreferenceModel.setStatusBar(statusBar.isSelected()); - }}); - - toolBar.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - uncommittedPreferenceModel.setToolbar(toolBar.isSelected()); - }}); - - receivers.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - uncommittedPreferenceModel.setReceivers(receivers.isSelected()); - }}); - - uncommittedPreferenceModel.addPropertyChangeListener("tabPlacement", new PropertyChangeListener() { + default: + break; + } + } + }); + uncommittedPreferenceModel.addPropertyChangeListener( + "statusBar", + new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { - int value = ((Integer)evt.getNewValue()).intValue(); - switch (value) { - case SwingConstants.TOP : - topPlacement.setSelected(true); - break; - case SwingConstants.BOTTOM : - bottomPlacement.setSelected(true); - break; - - default : - break; - } - }}); - - uncommittedPreferenceModel.addPropertyChangeListener("statusBar", new PropertyChangeListener() { - + statusBar.setSelected( + ((Boolean) evt.getNewValue()).booleanValue()); + } + }); + + uncommittedPreferenceModel.addPropertyChangeListener( + "toolbar", + new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { - statusBar.setSelected(((Boolean)evt.getNewValue()).booleanValue()); - - }}); - - uncommittedPreferenceModel.addPropertyChangeListener("toolbar", new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - toolBar.setSelected(((Boolean)evt.getNewValue()).booleanValue()); - - }}); - - uncommittedPreferenceModel.addPropertyChangeListener("receivers", new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - receivers.setSelected(((Boolean)evt.getNewValue()).booleanValue()); - - }}); - } - - /** - * - */ - private void setupComponents() { - setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - - - - JPanel tabPlacementBox = new JPanel(); - tabPlacementBox.setLayout(new BoxLayout(tabPlacementBox, BoxLayout.Y_AXIS)); - - tabPlacementBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Tab Placement")); - - ButtonGroup tabPlacementGroup = new ButtonGroup(); - - tabPlacementGroup.add(topPlacement); - tabPlacementGroup.add(bottomPlacement); - - - tabPlacementBox.add(topPlacement); - tabPlacementBox.add(bottomPlacement); - - add(tabPlacementBox); - add(statusBar); - add(receivers); - add(toolBar); - - - - } + toolBar.setSelected(((Boolean) evt.getNewValue()).booleanValue()); + } + }); + + uncommittedPreferenceModel.addPropertyChangeListener( + "receivers", + new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + receivers.setSelected( + ((Boolean) evt.getNewValue()).booleanValue()); + } + }); + uncommittedPreferenceModel.addPropertyChangeListener("lookAndFeelClassName", new PropertyChangeListener(){ + + public void propertyChange(PropertyChangeEvent evt) { + + String lf = evt.getNewValue().toString(); + + Enumeration enumeration = lookAndFeelGroup.getElements(); + while(enumeration.hasMoreElements()) { + JRadioButton button = (JRadioButton) enumeration.nextElement(); + if(button.getName().equals(lf)) { + button.setSelected(true); + break; + } + } + }}); } + /** - * @author psmith * */ - public class GeneralAllPrefPanel extends BasicPrefPanel { + private void setupComponents() { + setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - private final JCheckBox showNoReceiverWarning = new JCheckBox( - "Prompt me on startup if there are no Receivers defined"); - private final JSlider responsiveSlider = new JSlider(JSlider.HORIZONTAL, - 1, 4, 2); - - Dictionary sliderLabelMap = new Hashtable(); - - /** - * @param title - */ - public GeneralAllPrefPanel() { - super("General"); + JPanel tabPlacementBox = new JPanel(); + tabPlacementBox.setLayout( + new BoxLayout(tabPlacementBox, BoxLayout.Y_AXIS)); + + tabPlacementBox.setBorder( + BorderFactory.createTitledBorder( + BorderFactory.createEtchedBorder(), "Tab Placement")); + + ButtonGroup tabPlacementGroup = new ButtonGroup(); + + tabPlacementGroup.add(topPlacement); + tabPlacementGroup.add(bottomPlacement); + + tabPlacementBox.add(topPlacement); + tabPlacementBox.add(bottomPlacement); + + add(tabPlacementBox); + add(statusBar); + add(receivers); + add(toolBar); + + JPanel lfPanel = new JPanel(); + lfPanel.setLayout(new BoxLayout(lfPanel, BoxLayout.Y_AXIS)); + lfPanel.setBorder( + BorderFactory.createTitledBorder( + BorderFactory.createEtchedBorder(), "Look & Feel")); + + for (int i = 0; i < lookAndFeels.length; i++) { + final UIManager.LookAndFeelInfo lfInfo = lookAndFeels[i]; + final JRadioButton lfItem = new JRadioButton(lfInfo.getName()); + lfItem.setName(lfInfo.getClassName()); + lfItem.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + uncommittedPreferenceModel.setLookAndFeelClassName( + lfInfo.getClassName()); + } + }); + lookAndFeelGroup.add(lfItem); + lfPanel.add(lfItem); + } - GeneralAllPrefPanel.this.initComponents(); + try { + final Class gtkLF = + Class.forName("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); + final JRadioButton lfIGTK = new JRadioButton("GTK+ 2.0"); + lfIGTK.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + uncommittedPreferenceModel.setLookAndFeelClassName( + gtkLF.getName()); + } + }); + lookAndFeelGroup.add(lfIGTK); + lfPanel.add(lfIGTK); + } catch (Exception e) { + LogLog.debug("Can't find new GTK L&F, might be Windows, or <JDK1.4.2"); + } + add(lfPanel); + + add(new JLabel("Look and Feel change will apply the next time you start Chainsaw")); + } + } - } + /** + * @author psmith + * + */ + public class GeneralAllPrefPanel extends BasicPrefPanel { + private final JCheckBox showNoReceiverWarning = + new JCheckBox("Prompt me on startup if there are no Receivers defined"); + private final JSlider responsiveSlider = + new JSlider(JSlider.HORIZONTAL, 1, 4, 2); + Dictionary sliderLabelMap = new Hashtable(); - private void initComponents() { - setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + /** + * @param title + */ + public GeneralAllPrefPanel() { + super("General"); - identifierExpression = new JTextField(20); + GeneralAllPrefPanel.this.initComponents(); + } - Box p = new Box(BoxLayout.X_AXIS); + private void initComponents() { + setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - p.add(showNoReceiverWarning); - p.add(Box.createHorizontalGlue()); - - setupInitialValues(); - setupListeners(); - - initSliderComponent(); - add(responsiveSlider); - JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT)); - - p1.add(new JLabel("Tab identifier")); - p1.add(Box.createHorizontalStrut(5)); - p1.add(identifierExpression); - add(p1); - add(p); - add(Box.createVerticalGlue()); - } + identifierExpression = new JTextField(20); - private void initSliderComponent() { - responsiveSlider.setToolTipText( - "Adjust to set the responsiveness of the app. How often the view is updated."); - responsiveSlider.setSnapToTicks(true); - responsiveSlider.setLabelTable(sliderLabelMap); - responsiveSlider.setPaintLabels(true); - responsiveSlider.setPaintTrack(true); + Box p = new Box(BoxLayout.X_AXIS); - responsiveSlider.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), "Responsiveness")); + p.add(showNoReceiverWarning); + p.add(Box.createHorizontalGlue()); -// responsiveSlider.setAlignmentY(0); -// responsiveSlider.setAlignmentX(0); - } + setupInitialValues(); + setupListeners(); - private void setupListeners() { - uncommittedPreferenceModel.addPropertyChangeListener( - "showNoReceiverWarning", new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - showNoReceiverWarning.setSelected( - ((Boolean) evt.getNewValue()).booleanValue()); - - } - }); - uncommittedPreferenceModel.addPropertyChangeListener( - "identifierExpression", new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - identifierExpression.setText(evt.getNewValue().toString()); - } - }); - - uncommittedPreferenceModel.addPropertyChangeListener( - "responsiveness", new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - - int value = ((Integer) evt.getNewValue()).intValue(); - - if (value >= 1000) { - - int newValue = (value - 750) / 1000; - LogLog.debug( - "Adjusting old Responsiveness value from " + - value + " to " + newValue); - value = newValue; - } - - responsiveSlider.setValue(value); - } - }); - - showNoReceiverWarning.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - uncommittedPreferenceModel.setShowNoReceiverWarning( - showNoReceiverWarning.isSelected()); - } - }); - - responsiveSlider.getModel().addChangeListener( - new ChangeListener() { - public void stateChanged(ChangeEvent e) { - - if (responsiveSlider.getValueIsAdjusting()) { - - /** - * We'll wait until it stops. - */ - } else { - - int value = responsiveSlider.getValue(); - - if (value == 0) { - value = 1; - } - - LogLog.debug("Adjust responsiveness to " + value); - uncommittedPreferenceModel.setResponsiveness( - value); - } - } - }); - } + initSliderComponent(); + add(responsiveSlider); - private void setupInitialValues() { - sliderLabelMap.put(new Integer(1), new JLabel("Fastest")); - sliderLabelMap.put(new Integer(2), new JLabel("Fast")); - sliderLabelMap.put(new Integer(3), new JLabel("Medium")); - sliderLabelMap.put(new Integer(4), new JLabel("Slow")); + JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// + p1.add(new JLabel("Tab identifier")); + p1.add(Box.createHorizontalStrut(5)); + p1.add(identifierExpression); + add(p1); + add(p); + add(Box.createVerticalGlue()); + } + + private void initSliderComponent() { + responsiveSlider.setToolTipText( + "Adjust to set the responsiveness of the app. How often the view is updated."); + responsiveSlider.setSnapToTicks(true); + responsiveSlider.setLabelTable(sliderLabelMap); + responsiveSlider.setPaintLabels(true); + responsiveSlider.setPaintTrack(true); + + responsiveSlider.setBorder( + BorderFactory.createTitledBorder( + BorderFactory.createEtchedBorder(), "Responsiveness")); + + // responsiveSlider.setAlignmentY(0); + // responsiveSlider.setAlignmentX(0); + } + + private void setupListeners() { + uncommittedPreferenceModel.addPropertyChangeListener( + "showNoReceiverWarning", + new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { showNoReceiverWarning.setSelected( - uncommittedPreferenceModel.isShowNoReceiverWarning()); - identifierExpression.setText(uncommittedPreferenceModel.getIdentifierExpression()); - } + ((Boolean) evt.getNewValue()).booleanValue()); + } + }); + uncommittedPreferenceModel.addPropertyChangeListener( + "identifierExpression", + new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + identifierExpression.setText(evt.getNewValue().toString()); + } + }); + + uncommittedPreferenceModel.addPropertyChangeListener( + "responsiveness", + new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + int value = ((Integer) evt.getNewValue()).intValue(); + + if (value >= 1000) { + int newValue = (value - 750) / 1000; + LogLog.debug( + "Adjusting old Responsiveness value from " + value + " to " + + newValue); + value = newValue; + } + + responsiveSlider.setValue(value); + } + }); + + showNoReceiverWarning.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + uncommittedPreferenceModel.setShowNoReceiverWarning( + showNoReceiverWarning.isSelected()); + } + }); + + responsiveSlider.getModel().addChangeListener( + new ChangeListener() { + public void stateChanged(ChangeEvent e) { + if (responsiveSlider.getValueIsAdjusting()) { + /** + * We'll wait until it stops. + */ + } else { + int value = responsiveSlider.getValue(); + if (value == 0) { + value = 1; + } + + LogLog.debug("Adjust responsiveness to " + value); + uncommittedPreferenceModel.setResponsiveness(value); + } + } + }); } + private void setupInitialValues() { + sliderLabelMap.put(new Integer(1), new JLabel("Fastest")); + sliderLabelMap.put(new Integer(2), new JLabel("Fast")); + sliderLabelMap.put(new Integer(3), new JLabel("Medium")); + sliderLabelMap.put(new Integer(4), new JLabel("Slow")); + + // + showNoReceiverWarning.setSelected( + uncommittedPreferenceModel.isShowNoReceiverWarning()); + identifierExpression.setText( + uncommittedPreferenceModel.getIdentifierExpression()); + } + } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]