psmith      2003/10/02 16:05:36

  Modified:    src/java/org/apache/log4j/chainsaw
                        LogPanelPreferencePanel.java
  Log:
  Added the column selector panel, although
  it doesn't actually have any functionality hooked up yet.
  
  Revision  Changes    Path
  1.4       +169 -46   
jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java
  
  Index: LogPanelPreferencePanel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LogPanelPreferencePanel.java      2 Oct 2003 08:30:04 -0000       1.3
  +++ LogPanelPreferencePanel.java      2 Oct 2003 23:05:36 -0000       1.4
  @@ -49,14 +49,12 @@
   
   package org.apache.log4j.chainsaw;
   
  -import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  -
   import java.awt.BorderLayout;
   import java.awt.Color;
  +import java.awt.Component;
   import java.awt.Dimension;
   import java.awt.event.ActionEvent;
   import java.awt.event.ActionListener;
  -
   import java.beans.PropertyChangeEvent;
   import java.beans.PropertyChangeListener;
   import java.util.Iterator;
  @@ -65,14 +63,20 @@
   import javax.swing.Box;
   import javax.swing.BoxLayout;
   import javax.swing.ButtonGroup;
  +import javax.swing.DefaultListModel;
   import javax.swing.JButton;
  +import javax.swing.JCheckBox;
   import javax.swing.JComponent;
   import javax.swing.JFrame;
   import javax.swing.JLabel;
  +import javax.swing.JList;
   import javax.swing.JPanel;
   import javax.swing.JRadioButton;
   import javax.swing.JScrollPane;
   import javax.swing.JTree;
  +import javax.swing.ListCellRenderer;
  +import javax.swing.UIManager;
  +import javax.swing.border.Border;
   import javax.swing.event.TreeSelectionEvent;
   import javax.swing.event.TreeSelectionListener;
   import javax.swing.tree.DefaultMutableTreeNode;
  @@ -83,6 +87,8 @@
   import javax.swing.tree.TreePath;
   import javax.swing.tree.TreeSelectionModel;
   
  +import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  +
   
   /**
    * GUI panel used to manipulate the PreferenceModel for a Log Panel
  @@ -97,6 +103,7 @@
     private final LogPanelPreferenceModel uncommitedPreferenceModel =
       new LogPanelPreferenceModel();
     private ActionListener okCancelListener;
  +  private Component currentlyDisplayedPanel = null;
   
     public LogPanelPreferencePanel(LogPanelPreferenceModel model) {
       this.committedPreferenceModel = model;
  @@ -190,10 +197,15 @@
     * @param panel
     */
     protected void setDisplayedPrefPanel(JComponent panel) {
  +    if (currentlyDisplayedPanel != null) {
  +      selectedPrefPanel.remove(currentlyDisplayedPanel);
  +    }
  +
       selectedPrefPanel.add(panel, BorderLayout.CENTER);
  -    selectedPrefPanel.invalidate();
  -    selectedPrefPanel.validate();
  +    currentlyDisplayedPanel = panel;
       titleLabel.setText(panel.toString());
  +    selectedPrefPanel.revalidate();
  +    selectedPrefPanel.repaint();
     }
   
     public void setOkCancelActionListener(ActionListener l) {
  @@ -222,7 +234,12 @@
   
       DefaultMutableTreeNode formatting =
         new DefaultMutableTreeNode(new FormattingPanel());
  +
  +    DefaultMutableTreeNode columns =
  +      new DefaultMutableTreeNode(new ColumnSelectorPanel());
  +
       rootNode.add(formatting);
  +    rootNode.add(columns);
   
       return model;
     }
  @@ -237,7 +254,14 @@
     public static void main(String[] args) {
       JFrame f = new JFrame("Preferences Panel Test Bed");
       LogPanelPreferenceModel model = new LogPanelPreferenceModel();
  -    f.getContentPane().add(new LogPanelPreferencePanel(model));
  +    LogPanelPreferencePanel panel = new LogPanelPreferencePanel(model);
  +    f.getContentPane().add(panel);
  +    panel.setOkCancelActionListener(
  +      new ActionListener() {
  +        public void actionPerformed(ActionEvent e) {
  +          System.exit(1);
  +        }
  +      });
   
       f.setSize(640, 480);
       f.show();
  @@ -277,7 +301,8 @@
   
         ButtonGroup bgDateFormat = new ButtonGroup();
         final JRadioButton rdISO =
  -        new JRadioButton("<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd 
HH:mm:ss)</html>");
  +        new JRadioButton(
  +          "<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd HH:mm:ss)</html>");
         rdISO.addActionListener(
           new ActionListener() {
             public void actionPerformed(ActionEvent e) {
  @@ -295,56 +320,154 @@
         bgDateFormat.add(rdISO);
         dateFormatPanel.add(rdISO);
   
  -     for (Iterator iter = LogPanelPreferenceModel.DATE_FORMATS.iterator(); 
iter.hasNext();) {
  -             final String format = (String) iter.next();
  -             final JRadioButton rdFormat = new JRadioButton(format);
  -             bgDateFormat.add(rdFormat);
  -             rdFormat.addActionListener(new ActionListener(){
  -
  -                     public void actionPerformed(ActionEvent e) {
  -                             getModel().setDateFormatPattern(format);
  -                     }});
  -             getModel().addPropertyChangeListener(
  -               "dateFormatPattern",
  -               new PropertyChangeListener() {
  -                     public void propertyChange(PropertyChangeEvent evt) {
  -                             
rdFormat.setSelected(getModel().getDateFormatPattern().equals(format));
  -                     }
  -               });
  -             dateFormatPanel.add(rdFormat);
  -     }
  +      for (
  +        Iterator iter = LogPanelPreferenceModel.DATE_FORMATS.iterator();
  +          iter.hasNext();) {
  +        final String format = (String) iter.next();
  +        final JRadioButton rdFormat = new JRadioButton(format);
  +        bgDateFormat.add(rdFormat);
  +        rdFormat.addActionListener(
  +          new ActionListener() {
  +            public void actionPerformed(ActionEvent e) {
  +              getModel().setDateFormatPattern(format);
  +            }
  +          });
  +        getModel().addPropertyChangeListener(
  +          "dateFormatPattern",
  +          new PropertyChangeListener() {
  +            public void propertyChange(PropertyChangeEvent evt) {
  +              rdFormat.setSelected(
  +                getModel().getDateFormatPattern().equals(format));
  +            }
  +          });
  +        dateFormatPanel.add(rdFormat);
  +      }
  +
         add(dateFormatPanel);
  -      
  +
         JPanel levelFormatPanel = new JPanel();
         levelFormatPanel.setLayout(
  -       new BoxLayout(levelFormatPanel, BoxLayout.Y_AXIS));
  -      levelFormatPanel.setBorder(BorderFactory.createTitledBorder( 
BorderFactory.createEtchedBorder(), "Level"));
  +        new BoxLayout(levelFormatPanel, BoxLayout.Y_AXIS));
  +      levelFormatPanel.setBorder(
  +        BorderFactory.createTitledBorder(
  +          BorderFactory.createEtchedBorder(), "Level"));
  +
         ButtonGroup bgLevel = new ButtonGroup();
         final JRadioButton rdLevelIcons = new JRadioButton("Icons");
  -       final JRadioButton rdLevelText = new JRadioButton("Text");
  -       bgLevel.add(rdLevelIcons);
  -       bgLevel.add(rdLevelText);
  -
  -       ActionListener levelIconListener = new ActionListener(){
  -
  -                       public void actionPerformed(ActionEvent e) {
  -                               getModel().setLevelIcons(rdLevelIcons.isSelected());
  -                     
  -                       }       };
  -       rdLevelIcons.addActionListener(levelIconListener);
  -       rdLevelText.addActionListener(levelIconListener);
  -     
  -       rdLevelIcons.setSelected(getModel().isLevelIcons());    
  -       
  -       levelFormatPanel.add(rdLevelIcons);
  -       levelFormatPanel.add(rdLevelText);
  -      
  +      final JRadioButton rdLevelText = new JRadioButton("Text");
  +      bgLevel.add(rdLevelIcons);
  +      bgLevel.add(rdLevelText);
  +
  +      ActionListener levelIconListener =
  +        new ActionListener() {
  +          public void actionPerformed(ActionEvent e) {
  +            getModel().setLevelIcons(rdLevelIcons.isSelected());
  +          }
  +        };
  +
  +      rdLevelIcons.addActionListener(levelIconListener);
  +      rdLevelText.addActionListener(levelIconListener);
  +
  +      rdLevelIcons.setSelected(getModel().isLevelIcons());
  +
  +      levelFormatPanel.add(rdLevelIcons);
  +      levelFormatPanel.add(rdLevelText);
  +
         add(levelFormatPanel);
         add(Box.createVerticalGlue());
       }
   
       public String toString() {
         return "Formatting";
  +    }
  +  }
  +
  +     /**
  +      * A ListCellRenderer that display a check box if the value
  +      * has been "checked".
  +      * 
  +      * Borrowed heavily from the excellent book "Swing, 2nd Edition" by
  +      * Matthew Robinson  & Pavel Vorobiev.
  +      * 
  +      * @author Paul Smith
  +      *
  +      */
  +  public class CheckListCellRenderer extends JCheckBox
  +    implements ListCellRenderer {
  +    private final Border noFocusBorder =
  +      BorderFactory.createEmptyBorder(1, 1, 1, 1);
  +
  +    /**
  +     *
  +     */
  +    public CheckListCellRenderer() {
  +      super();
  +      setOpaque(true);
  +      setBorder(noFocusBorder);
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see 
javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, 
java.lang.Object, int, boolean, boolean)
  +     */
  +    public Component getListCellRendererComponent(
  +      JList list, Object value, int index, boolean isSelected,
  +      boolean cellHasFocus) {
  +      setText(value.toString());
  +      setBackground(
  +        isSelected ? list.getSelectionBackground() : list.getBackground());
  +      setForeground(
  +        isSelected ? list.getSelectionForeground() : list.getForeground());
  +      setFont(list.getFont());
  +      setBorder(
  +        cellHasFocus ? UIManager.getBorder("List.focusCellHighlightBorder")
  +                     : noFocusBorder);
  +
  +      //             TODO check the model if this is selected
  +      return this;
  +    }
  +  }
  +
  +     /**
  +      * Allows the user to choose which columns to display.
  +      * 
  +      * @author Paul Smith
  +      *
  +      */
  +  public class ColumnSelectorPanel extends BasicPrefPanel {
  +    ColumnSelectorPanel() {
  +      initComponents();
  +    }
  +
  +    private void initComponents() {
  +      setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  +
  +      Box columnBox = new Box(BoxLayout.Y_AXIS);
  +
  +      //             
columnBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
 "Displayed Columns"));
  +      final JList columnList = new JList();
  +      columnList.setVisibleRowCount(10);
  +
  +      DefaultListModel listModel = new DefaultListModel();
  +
  +      for (
  +        Iterator iter = ChainsawColumns.getColumnsNames().iterator();
  +          iter.hasNext();) {
  +        String name = (String) iter.next();
  +        listModel.addElement(name);
  +      }
  +
  +      columnList.setModel(listModel);
  +
  +      CheckListCellRenderer cellRenderer = new CheckListCellRenderer();
  +      columnList.setCellRenderer(cellRenderer);
  +      columnBox.add(new JScrollPane(columnList));
  +
  +      add(columnBox);
  +      add(Box.createVerticalGlue());
  +    }
  +
  +    public String toString() {
  +      return "<html>Columns <i>(Work in progress)</i></html>";
       }
     }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to