psmith      2003/12/16 18:06:50

  Modified:    src/java/org/apache/log4j/chainsaw
                        LogPanelPreferencePanel.java LogPanel.java
                        LogPanelPreferenceModel.java
  Log:
  Exposed the logger Tree panel visibilty though
  the pref gui and the popup menu using the standard pattern.
  
  Revision  Changes    Path
  1.17      +535 -374  
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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- LogPanelPreferencePanel.java      16 Dec 2003 21:57:40 -0000      1.16
  +++ LogPanelPreferencePanel.java      17 Dec 2003 02:06:50 -0000      1.17
  @@ -87,427 +87,588 @@
    *
    * @author Paul Smith
    */
  -public class LogPanelPreferencePanel extends AbstractPreferencePanel {
  -    private final LogPanelPreferenceModel committedPreferenceModel;
  -    private final LogPanelPreferenceModel uncommittedPreferenceModel = new 
LogPanelPreferenceModel();
  -    private JTextField loggerPrecision = new JTextField(5);
  -
  -    public LogPanelPreferencePanel(LogPanelPreferenceModel model) {
  -        this.committedPreferenceModel = model;
  -        initComponents();
  -
  -        getOkButton().addActionListener(new ActionListener() {
  -                public void actionPerformed(ActionEvent e) {
  -                    
uncommittedPreferenceModel.setLoggerPrecision(loggerPrecision.getText());
  -                    committedPreferenceModel.apply(uncommittedPreferenceModel);
  -                    hidePanel();
  -                }
  -            });
  -
  -        getCancelButton().addActionListener(new ActionListener() {
  -                public void actionPerformed(ActionEvent e) {
  -                    hidePanel();
  -                }
  -            });
  -    }
  -
  -    /**
  -     * Ensures this panels DISPLAYED model is in sync with
  -     * the model initially passed to the constructor.
  -     *
  -     */
  -    public void updateModel() {
  -        this.uncommittedPreferenceModel.apply(committedPreferenceModel);
  -    }
  -
  -    protected TreeModel createTreeModel() {
  -        final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(
  -                "Preferences");
  -        DefaultTreeModel model = new DefaultTreeModel(rootNode);
  -
  -        DefaultMutableTreeNode formatting = new DefaultMutableTreeNode(new 
FormattingPanel());
  -
  -        DefaultMutableTreeNode columns = new DefaultMutableTreeNode(new 
ColumnSelectorPanel());
  -
  -        rootNode.add(formatting);
  -        rootNode.add(columns);
  -
  -        return model;
  -    }
  -
  -    /**
  -     * @return
  -     */
  -    private LogPanelPreferenceModel getModel() {
  -        return uncommittedPreferenceModel;
  -    }
  -
  -    public static void main(String[] args) {
  -        JFrame f = new JFrame("Preferences Panel Test Bed");
  -        LogPanelPreferenceModel model = new LogPanelPreferenceModel();
  -        LogPanelPreferencePanel panel = new LogPanelPreferencePanel(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();
  -    }
  -
  -    /**
  -     * Provides preference gui's for all the Formatting options
  -     * available for the columns etc.
  -     */
  -    private class FormattingPanel extends BasicPrefPanel {
  -        private final JCheckBox toolTips = new JCheckBox(
  -                "Show Event Detail Tooltips");
  -        private final JCheckBox detailPanelVisible = new JCheckBox(
  -                "Show Event Detail panel");
  -        private final JCheckBox scrollToBottom= new JCheckBox(
  -        "Scroll to bottom (view tracks with new events)");
  -        private JRadioButton rdCustom = new JRadioButton("Custom Format");
  -        private JTextField customFormatText = new JTextField("", 10);
  -        private final JRadioButton rdISO = new JRadioButton(
  -                "<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd HH:mm:ss)</html>");
  -        private final JRadioButton rdLevelIcons = new JRadioButton("Icons");
  -        private final JRadioButton rdLevelText = new JRadioButton("Text");
  -        
  -        private FormattingPanel() {
  -            super("Formatting");
  -            this.initComponents();
  -            setupListeners();
  +public class LogPanelPreferencePanel extends AbstractPreferencePanel
  +{
  +  //~ Instance fields =========================================================
  +
  +  private final LogPanelPreferenceModel committedPreferenceModel;
  +  private JTextField loggerPrecision = new JTextField(5);
  +  private final LogPanelPreferenceModel uncommittedPreferenceModel =
  +    new LogPanelPreferenceModel();
  +
  +  //~ Constructors ============================================================
  +
  +  public LogPanelPreferencePanel(LogPanelPreferenceModel model)
  +  {
  +    this.committedPreferenceModel = model;
  +    initComponents();
  +
  +    getOkButton().addActionListener(new ActionListener()
  +      {
  +        public void actionPerformed(ActionEvent e)
  +        {
  +          uncommittedPreferenceModel.setLoggerPrecision(
  +            loggerPrecision.getText());
  +          committedPreferenceModel.apply(uncommittedPreferenceModel);
  +          hidePanel();
           }
  +      });
   
  -        /**
  -         * 
  -         */
  -        private void setupListeners()
  +    getCancelButton().addActionListener(new ActionListener()
  +      {
  +        public void actionPerformed(ActionEvent e)
           {
  -          rdCustom.addActionListener(new ActionListener() {
  -            public void actionPerformed(ActionEvent e) {
  -              customFormatText.setEnabled(rdCustom.isSelected());
  -              customFormatText.setText("");
  -              customFormatText.grabFocus();
  -            }
  -          });
  -          getModel().addPropertyChangeListener("dateFormatPattern",
  -              new PropertyChangeListener() {
  -                public void propertyChange(PropertyChangeEvent evt) {
  -                  /**
  -                   * we need to make sure we are not reacting to the user typing, 
so only do this
  -                   * if the text box is not the same as the model
  -                   */
  -                  if (getModel().isCustomDateFormat() &&
  -                      !customFormatText.getText().equals(evt.getNewValue()
  -                          .toString())) {
  -                    customFormatText.setText(getModel()
  -                        .getDateFormatPattern());
  -                    rdCustom.setSelected(true);
  -                    customFormatText.setEnabled(true);
  -                  } else {
  -                    rdCustom.setSelected(false);
  -                  }
  -                }
  -              });          
  -          
  -          
  -          rdISO.addActionListener(new ActionListener() {
  -            public void actionPerformed(ActionEvent e) {
  -              getModel().setDateFormatPattern("ISO8601");
  -              customFormatText.setEnabled(rdCustom.isSelected());
  -            }
  -          });
  -          getModel().addPropertyChangeListener("dateFormatPattern",
  -              new PropertyChangeListener() {
  -                public void propertyChange(PropertyChangeEvent evt) {
  -                  rdISO.setSelected(getModel().isUseISO8601Format());
  -                }
  -              });        
  -
  -          
  -          customFormatText.getDocument().addDocumentListener(new DocumentListener() 
{
  -            public void textChanged() {
  -              getModel().setDateFormatPattern(customFormatText.getText());
  -            }
  -
  -            public void changedUpdate(DocumentEvent e) {
  -              textChanged();
  -            }
  -
  -            public void insertUpdate(DocumentEvent e) {
  -              textChanged();
  -            }
  -
  -            public void removeUpdate(DocumentEvent e) {
  -              textChanged();
  -            }
  -          });
  -          
  -          ActionListener levelIconListener = new ActionListener() {
  -            public void actionPerformed(ActionEvent e) {
  -              getModel().setLevelIcons(rdLevelIcons.isSelected());
  -            }
  -          };
  +          hidePanel();
  +        }
  +      });
  +  }
   
  -          rdLevelIcons.addActionListener(levelIconListener);
  -          rdLevelText.addActionListener(levelIconListener);
  +  //~ Methods =================================================================
   
  -          getModel().addPropertyChangeListener("levelIcons",
  -              new PropertyChangeListener() {
  -                public void propertyChange(PropertyChangeEvent evt) {
  -                  boolean value = ((Boolean) evt.getNewValue()).booleanValue();
  -                  rdLevelIcons.setSelected(value);
  -                  rdLevelText.setSelected(!value);
  -                }
  -              });
  -          toolTips.addActionListener(new ActionListener() {
  -            public void actionPerformed(ActionEvent e) {
  -              getModel().setToolTips(toolTips.isSelected());
  -            }
  -          });
  -          getModel().addPropertyChangeListener("toolTips",
  -              new PropertyChangeListener() {
  -                public void propertyChange(PropertyChangeEvent evt) {
  -                  boolean value = ((Boolean) evt.getNewValue()).booleanValue();
  -                  toolTips.setSelected(value);
  -                }
  -              });
  -          
  -          detailPanelVisible.addActionListener(new ActionListener() {
  -            public void actionPerformed(ActionEvent e) {
  -              getModel().setDetailPaneVisible(detailPanelVisible.isSelected());
  -            }
  -          });
  +  /**
  +   * DOCUMENT ME!
  +   *
  +   * @param args DOCUMENT ME!
  +   */
  +  public static void main(String[] args)
  +  {
  +    JFrame f = new JFrame("Preferences Panel Test Bed");
  +    LogPanelPreferenceModel model = new LogPanelPreferenceModel();
  +    LogPanelPreferencePanel panel = new LogPanelPreferencePanel(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);
  +        }
  +      });
   
  -          getModel().addPropertyChangeListener("detailPaneVisible",
  -              new PropertyChangeListener() {
  -                public void propertyChange(PropertyChangeEvent evt) {
  -                  boolean value = ((Boolean) evt.getNewValue()).booleanValue();
  -                  detailPanelVisible.setSelected(value);
  -                }
  -              });
  -          
  -          scrollToBottom.addActionListener(new ActionListener() {
  -            public void actionPerformed(ActionEvent e) {
  -              getModel().setScrollToBottom(scrollToBottom.isSelected());
  -            }
  -          });
  +    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);
  +  }
  +
  +  protected TreeModel createTreeModel()
  +  {
  +    final DefaultMutableTreeNode rootNode =
  +      new DefaultMutableTreeNode("Preferences");
  +    DefaultTreeModel model = new DefaultTreeModel(rootNode);
  +
  +    DefaultMutableTreeNode visuals =
  +      new DefaultMutableTreeNode(new VisualsPrefPanel());
  +    DefaultMutableTreeNode formatting =
  +      new DefaultMutableTreeNode(new FormattingPanel());
  +    DefaultMutableTreeNode columns =
  +      new DefaultMutableTreeNode(new ColumnSelectorPanel());
  +
  +    rootNode.add(visuals);
  +    rootNode.add(formatting);
  +    rootNode.add(columns);
  +
  +    return model;
  +  }
  +
  +  /**
  +   * DOCUMENT ME!
  +   *
  +   * @return
  +   */
  +  private LogPanelPreferenceModel getModel()
  +  {
  +    return uncommittedPreferenceModel;
  +  }
  +
  +  //~ Inner Classes ===========================================================
  +
  +  /**
  +   * Allows the user to choose which columns to display.
  +   *
  +   * @author Paul Smith
  +   *
  +   */
  +  public class ColumnSelectorPanel extends BasicPrefPanel
  +  {
  +    //~ Constructors ==========================================================
  +
  +    ColumnSelectorPanel()
  +    {
  +      super("Columns");
  +      initComponents();
  +    }
   
  -          getModel().addPropertyChangeListener("scrollToBottom",
  -              new PropertyChangeListener() {
  -                public void propertyChange(PropertyChangeEvent evt) {
  -                  boolean value = ((Boolean) evt.getNewValue()).booleanValue();
  -                  scrollToBottom.setSelected(value);
  -                }
  -              });
  -          
  -          
  -        }
  +    //~ Methods ===============================================================
   
  -        private void initComponents() {
  -            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  +    private void initComponents()
  +    {
  +      setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
   
  -            add(toolTips);
  -            add(detailPanelVisible);
  -            add(scrollToBottom);
  +      Box columnBox = new Box(BoxLayout.Y_AXIS);
   
  -            JPanel dateFormatPanel = new JPanel();
  -            dateFormatPanel.setBorder(BorderFactory.createTitledBorder(
  -                    BorderFactory.createEtchedBorder(), "Timestamp"));
  -            dateFormatPanel.setLayout(new BoxLayout(dateFormatPanel,
  -                    BoxLayout.Y_AXIS));
  -            dateFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
  +      //             
columnBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
 "Displayed Columns"));
  +      final JList columnList = new JList();
  +      columnList.setVisibleRowCount(10);
   
  -            customFormatText.setPreferredSize(new Dimension(100, 20));
  -            customFormatText.setMaximumSize(customFormatText.getPreferredSize());
  -            customFormatText.setMinimumSize(customFormatText.getPreferredSize());
  -            customFormatText.setEnabled(false);
  +      final ModifiableListModel listModel = new ModifiableListModel();
   
  +      for (
  +        Iterator iter = ChainsawColumns.getColumnsNames().iterator();
  +          iter.hasNext();)
  +      {
  +        String name = (String) iter.next();
  +        listModel.addElement(name);
  +      }
   
  -            rdCustom.setSelected(getModel().isCustomDateFormat());
  +      columnList.setModel(listModel);
   
  +      CheckListCellRenderer cellRenderer = new CheckListCellRenderer()
  +        {
  +          protected boolean isSelected(Object value)
  +          {
  +            return LogPanelPreferencePanel.this.getModel().isColumnVisible(
  +              value.toString());
  +          }
  +        };
   
  +      getModel().addPropertyChangeListener(
  +        "visibleColumns", new PropertyChangeListener()
  +        {
  +          public void propertyChange(PropertyChangeEvent evt)
  +          {
  +            listModel.fireContentsChanged();
  +          }
  +        });
   
  -            ButtonGroup bgDateFormat = new ButtonGroup();
  +      columnList.addMouseListener(new MouseAdapter()
  +        {
  +          public void mouseClicked(MouseEvent e)
  +          {
  +            if (
  +              (e.getClickCount() > 1)
  +                && ((e.getModifiers() & MouseEvent.BUTTON1_MASK) > 0))
  +            {
  +              int i = columnList.locationToIndex(e.getPoint());
  +
  +              if (i >= 0)
  +              {
  +                Object column = listModel.get(i);
  +                getModel().toggleColumn(column.toString());
  +              }
  +            }
  +            else
  +            {
  +            }
  +          }
  +        });
  +      columnList.setCellRenderer(cellRenderer);
  +      columnBox.add(new JScrollPane(columnList));
   
  -            rdISO.setAlignmentX(0);
  -            rdISO.setSelected(getModel().isUseISO8601Format());
  +      add(columnBox);
  +      add(Box.createVerticalGlue());
  +    }
  +  }
   
  -            bgDateFormat.add(rdISO);
  -            dateFormatPanel.add(rdISO);
  +  /**
  +   * Provides preference gui's for all the Formatting options
  +   * available for the columns etc.
  +   */
  +  private class FormattingPanel extends BasicPrefPanel
  +  {
  +    //~ Instance fields =======================================================
  +
  +    private JTextField customFormatText = new JTextField("", 10);
  +    private JRadioButton rdCustom = new JRadioButton("Custom Format");
  +    private final JRadioButton rdISO =
  +      new JRadioButton(
  +        "<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd HH:mm:ss)</html>");
  +    private final JRadioButton rdLevelIcons = new JRadioButton("Icons");
  +    private final JRadioButton rdLevelText = new JRadioButton("Text");
  +
  +    //~ Constructors ==========================================================
  +
  +    private FormattingPanel()
  +    {
  +      super("Formatting");
  +      this.initComponents();
  +      setupListeners();
  +    }
   
  -            for (Iterator iter = LogPanelPreferenceModel.DATE_FORMATS.iterator();
  -                    iter.hasNext();) {
  -                final String format = (String) iter.next();
  -                final JRadioButton rdFormat = new JRadioButton(format);
  -                rdFormat.setAlignmentX(0);
  -
  -                bgDateFormat.add(rdFormat);
  -                rdFormat.addActionListener(new ActionListener() {
  -                        public void actionPerformed(ActionEvent e) {
  -                            getModel().setDateFormatPattern(format);
  -                            customFormatText.setEnabled(rdCustom.isSelected());
  -                        }
  -                    });
  -                getModel().addPropertyChangeListener("dateFormatPattern",
  -                    new PropertyChangeListener() {
  -                        public void propertyChange(PropertyChangeEvent evt) {
  -                            rdFormat.setSelected(getModel()
  -                                                     .getDateFormatPattern()
  -                                                     .equals(format));
  -                        }
  -                    });
  +    //~ Methods ===============================================================
   
  -                dateFormatPanel.add(rdFormat);
  +    private void initComponents()
  +    {
  +      setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  +
  +      JPanel dateFormatPanel = new JPanel();
  +      dateFormatPanel.setBorder(
  +        BorderFactory.createTitledBorder(
  +          BorderFactory.createEtchedBorder(), "Timestamp"));
  +      dateFormatPanel.setLayout(
  +        new BoxLayout(dateFormatPanel, BoxLayout.Y_AXIS));
  +      dateFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
  +
  +      customFormatText.setPreferredSize(new Dimension(100, 20));
  +      customFormatText.setMaximumSize(customFormatText.getPreferredSize());
  +      customFormatText.setMinimumSize(customFormatText.getPreferredSize());
  +      customFormatText.setEnabled(false);
  +
  +      rdCustom.setSelected(getModel().isCustomDateFormat());
  +
  +      ButtonGroup bgDateFormat = new ButtonGroup();
  +
  +      rdISO.setAlignmentX(0);
  +      rdISO.setSelected(getModel().isUseISO8601Format());
  +
  +      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);
  +        rdFormat.setAlignmentX(0);
  +
  +        bgDateFormat.add(rdFormat);
  +        rdFormat.addActionListener(new ActionListener()
  +          {
  +            public void actionPerformed(ActionEvent e)
  +            {
  +              getModel().setDateFormatPattern(format);
  +              customFormatText.setEnabled(rdCustom.isSelected());
               }
  -
  -            // add a custom date format
  -            if (getModel().isCustomDateFormat()) {
  -                customFormatText.setText(getModel().getDateFormatPattern());
  -                customFormatText.setEnabled(true);
  +          });
  +        getModel().addPropertyChangeListener(
  +          "dateFormatPattern", new PropertyChangeListener()
  +          {
  +            public void propertyChange(PropertyChangeEvent evt)
  +            {
  +              rdFormat.setSelected(
  +                getModel().getDateFormatPattern().equals(format));
               }
  +          });
   
  +        dateFormatPanel.add(rdFormat);
  +      }
   
  -            rdCustom.setAlignmentX(0);
  -            bgDateFormat.add(rdCustom);
  -
  -            Box customBox = Box.createHorizontalBox();
  -
  -            //      Following does not work in JDK 1.3.1
  -            //      customBox.setAlignmentX(0);
  -            customBox.add(rdCustom);
  -            customBox.add(customFormatText);
  -            customBox.add(Box.createHorizontalGlue());
  -            dateFormatPanel.add(customBox);
  -
  -            //      dateFormatPanel.add(Box.createVerticalGlue());
  -            add(dateFormatPanel);
  -
  -            JPanel levelFormatPanel = new JPanel();
  -            levelFormatPanel.setLayout(new BoxLayout(levelFormatPanel,
  -                    BoxLayout.Y_AXIS));
  -            levelFormatPanel.setBorder(BorderFactory.createTitledBorder(
  -                    BorderFactory.createEtchedBorder(), "Level"));
  -            levelFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
  -
  -            ButtonGroup bgLevel = new ButtonGroup();
  -            bgLevel.add(rdLevelIcons);
  -            bgLevel.add(rdLevelText);
  -
  +      // add a custom date format
  +      if (getModel().isCustomDateFormat())
  +      {
  +        customFormatText.setText(getModel().getDateFormatPattern());
  +        customFormatText.setEnabled(true);
  +      }
  +
  +      rdCustom.setAlignmentX(0);
  +      bgDateFormat.add(rdCustom);
  +
  +      Box customBox = Box.createHorizontalBox();
  +
  +      //      Following does not work in JDK 1.3.1
  +      //      customBox.setAlignmentX(0);
  +      customBox.add(rdCustom);
  +      customBox.add(customFormatText);
  +      customBox.add(Box.createHorizontalGlue());
  +      dateFormatPanel.add(customBox);
  +
  +      //      dateFormatPanel.add(Box.createVerticalGlue());
  +      add(dateFormatPanel);
  +
  +      JPanel levelFormatPanel = new JPanel();
  +      levelFormatPanel.setLayout(
  +        new BoxLayout(levelFormatPanel, BoxLayout.Y_AXIS));
  +      levelFormatPanel.setBorder(
  +        BorderFactory.createTitledBorder(
  +          BorderFactory.createEtchedBorder(), "Level"));
  +      levelFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
  +
  +      ButtonGroup bgLevel = new ButtonGroup();
  +      bgLevel.add(rdLevelIcons);
  +      bgLevel.add(rdLevelText);
  +
  +      rdLevelIcons.setSelected(getModel().isLevelIcons());
  +
  +      levelFormatPanel.add(rdLevelIcons);
  +      levelFormatPanel.add(rdLevelText);
  +
  +      add(levelFormatPanel);
  +
  +      JPanel loggerFormatPanel = new JPanel();
  +      loggerFormatPanel.setLayout(
  +        new BoxLayout(loggerFormatPanel, BoxLayout.Y_AXIS));
  +      loggerFormatPanel.setBorder(
  +        BorderFactory.createTitledBorder(
  +          BorderFactory.createEtchedBorder(), "Logger"));
  +      loggerFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
  +
  +      final JLabel precisionLabel =
  +        new JLabel("Precision (package depth displayed)");
  +      final JLabel precisionLabel2 =
  +        new JLabel("leave blank to display full logger");
  +
  +      loggerFormatPanel.add(precisionLabel);
  +      loggerFormatPanel.add(precisionLabel2);
   
  -            rdLevelIcons.setSelected(getModel().isLevelIcons());
  +      JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
   
  -            levelFormatPanel.add(rdLevelIcons);
  -            levelFormatPanel.add(rdLevelText);
  +      p.add(loggerPrecision);
  +      loggerFormatPanel.add(p);
   
  -            add(levelFormatPanel);
  +      add(loggerFormatPanel);
   
  -            toolTips.setSelected(getModel().isToolTips());
  +      add(Box.createVerticalGlue());
  +    }
   
  +    /**
  +     * DOCUMENT ME!
  +    */
  +    private void setupListeners()
  +    {
  +      rdCustom.addActionListener(new ActionListener()
  +        {
  +          public void actionPerformed(ActionEvent e)
  +          {
  +            customFormatText.setEnabled(rdCustom.isSelected());
  +            customFormatText.setText("");
  +            customFormatText.grabFocus();
  +          }
  +        });
  +      getModel().addPropertyChangeListener(
  +        "dateFormatPattern", new PropertyChangeListener()
  +        {
  +          public void propertyChange(PropertyChangeEvent evt)
  +          {
  +            /**
  +             * we need to make sure we are not reacting to the user typing, so only 
do this
  +             * if the text box is not the same as the model
  +             */
  +            if (
  +              getModel().isCustomDateFormat()
  +                && !customFormatText.getText().equals(
  +                  evt.getNewValue().toString()))
  +            {
  +              customFormatText.setText(getModel().getDateFormatPattern());
  +              rdCustom.setSelected(true);
  +              customFormatText.setEnabled(true);
  +            }
  +            else
  +            {
  +              rdCustom.setSelected(false);
  +            }
  +          }
  +        });
   
  +      rdISO.addActionListener(new ActionListener()
  +        {
  +          public void actionPerformed(ActionEvent e)
  +          {
  +            getModel().setDateFormatPattern("ISO8601");
  +            customFormatText.setEnabled(rdCustom.isSelected());
  +          }
  +        });
  +      getModel().addPropertyChangeListener(
  +        "dateFormatPattern", new PropertyChangeListener()
  +        {
  +          public void propertyChange(PropertyChangeEvent evt)
  +          {
  +            rdISO.setSelected(getModel().isUseISO8601Format());
  +          }
  +        });
   
  -            detailPanelVisible.setSelected(getModel().isDetailPaneVisible());
  +      customFormatText.getDocument().addDocumentListener(
  +        new DocumentListener()
  +        {
  +          public void textChanged()
  +          {
  +            getModel().setDateFormatPattern(customFormatText.getText());
  +          }
  +
  +          public void changedUpdate(DocumentEvent e)
  +          {
  +            textChanged();
  +          }
  +
  +          public void insertUpdate(DocumentEvent e)
  +          {
  +            textChanged();
  +          }
  +
  +          public void removeUpdate(DocumentEvent e)
  +          {
  +            textChanged();
  +          }
  +        });
   
  +      ActionListener levelIconListener = new ActionListener()
  +        {
  +          public void actionPerformed(ActionEvent e)
  +          {
  +            getModel().setLevelIcons(rdLevelIcons.isSelected());
  +          }
  +        };
   
  -            JPanel loggerFormatPanel = new JPanel();
  -            loggerFormatPanel.setLayout(new BoxLayout(loggerFormatPanel,
  -                    BoxLayout.Y_AXIS));
  -            loggerFormatPanel.setBorder(BorderFactory.createTitledBorder(
  -                    BorderFactory.createEtchedBorder(), "Logger"));
  -            loggerFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
  +      rdLevelIcons.addActionListener(levelIconListener);
  +      rdLevelText.addActionListener(levelIconListener);
   
  -            final JLabel precisionLabel = new JLabel(
  -                    "Precision (package depth displayed)");
  -            final JLabel precisionLabel2 = new JLabel(
  -                    "leave blank to display full logger");
  +      getModel().addPropertyChangeListener(
  +        "levelIcons", new PropertyChangeListener()
  +        {
  +          public void propertyChange(PropertyChangeEvent evt)
  +          {
  +            boolean value = ((Boolean) evt.getNewValue()).booleanValue();
  +            rdLevelIcons.setSelected(value);
  +            rdLevelText.setSelected(!value);
  +          }
  +        });
  +    }
  +  }
   
  -            loggerFormatPanel.add(precisionLabel);
  -            loggerFormatPanel.add(precisionLabel2);
  +  /**
  +   * DOCUMENT ME!
  +   *
  +   * @author $author$
  +   * @version $Revision$, $Date$
  +   *
  +   * @author psmith
  +   *
  +   */
  +  private class VisualsPrefPanel extends BasicPrefPanel
  +  {
  +    //~ Instance fields =======================================================
  +
  +    private final JCheckBox detailPanelVisible =
  +      new JCheckBox("Show Event Detail panel");
  +
  +    private final JCheckBox loggerTreePanel =
  +      new JCheckBox("Show Logger Tree panel");
  +    private final JCheckBox scrollToBottom =
  +      new JCheckBox("Scroll to bottom (view tracks with new events)");
  +    private final JCheckBox toolTips =
  +      new JCheckBox("Show Event Detail Tooltips");
   
  -            JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
  +    //~ Constructors ==========================================================
   
  -            p.add(loggerPrecision);
  -            loggerFormatPanel.add(p);
  +    /**
  +     * Creates a new VisualsPrefPanel object.
  +    */
  +    private VisualsPrefPanel()
  +    {
  +      super("Visuals");
  +      initPanelComponents();
  +      setupListeners();
  +    }
   
  -            add(loggerFormatPanel);
  +    //~ Methods ===============================================================
   
  -            add(Box.createVerticalGlue());
  -        }
  +    /**
  +     * DOCUMENT ME!
  +    */
  +    private void initPanelComponents()
  +    {
  +      setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  +
  +      add(toolTips);
  +      add(detailPanelVisible);
  +      add(loggerTreePanel);
  +      add(scrollToBottom);
  +
  +      toolTips.setSelected(getModel().isToolTips());
  +      detailPanelVisible.setSelected(getModel().isDetailPaneVisible());
  +      loggerTreePanel.setSelected(getModel().isLogTreePanelVisible());
       }
   
       /**
  -     * Allows the user to choose which columns to display.
  -     *
  -     * @author Paul Smith
  -     *
  -     */
  -    public class ColumnSelectorPanel extends BasicPrefPanel {
  -        ColumnSelectorPanel() {
  -            super("Columns");
  -            initComponents();
  -        }
  -
  -        private void initComponents() {
  -            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  -
  -            Box columnBox = new Box(BoxLayout.Y_AXIS);
  +     * DOCUMENT ME!
  +    */
  +    private void setupListeners()
  +    {
  +      toolTips.addActionListener(new ActionListener()
  +        {
  +          public void actionPerformed(ActionEvent e)
  +          {
  +            getModel().setToolTips(toolTips.isSelected());
  +          }
  +        });
  +      getModel().addPropertyChangeListener(
  +        "toolTips", new PropertyChangeListener()
  +        {
  +          public void propertyChange(PropertyChangeEvent evt)
  +          {
  +            boolean value = ((Boolean) evt.getNewValue()).booleanValue();
  +            toolTips.setSelected(value);
  +          }
  +        });
   
  -            //               
columnBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
 "Displayed Columns"));
  -            final JList columnList = new JList();
  -            columnList.setVisibleRowCount(10);
  +      detailPanelVisible.addActionListener(new ActionListener()
  +        {
  +          public void actionPerformed(ActionEvent e)
  +          {
  +            getModel().setDetailPaneVisible(detailPanelVisible.isSelected());
  +          }
  +        });
   
  -            final ModifiableListModel listModel = new ModifiableListModel();
  +      getModel().addPropertyChangeListener(
  +        "detailPaneVisible", new PropertyChangeListener()
  +        {
  +          public void propertyChange(PropertyChangeEvent evt)
  +          {
  +            boolean value = ((Boolean) evt.getNewValue()).booleanValue();
  +            detailPanelVisible.setSelected(value);
  +          }
  +        });
   
  -            for (Iterator iter = ChainsawColumns.getColumnsNames().iterator();
  -                    iter.hasNext();) {
  -                String name = (String) iter.next();
  -                listModel.addElement(name);
  -            }
  +      scrollToBottom.addActionListener(new ActionListener()
  +        {
  +          public void actionPerformed(ActionEvent e)
  +          {
  +            getModel().setScrollToBottom(scrollToBottom.isSelected());
  +          }
  +        });
   
  -            columnList.setModel(listModel);
  +      getModel().addPropertyChangeListener(
  +        "scrollToBottom", new PropertyChangeListener()
  +        {
  +          public void propertyChange(PropertyChangeEvent evt)
  +          {
  +            boolean value = ((Boolean) evt.getNewValue()).booleanValue();
  +            scrollToBottom.setSelected(value);
  +          }
  +        });
   
  -            CheckListCellRenderer cellRenderer = new CheckListCellRenderer() {
  -                    protected boolean isSelected(Object value) {
  -                        return LogPanelPreferencePanel.this.getModel()
  -                                                           
.isColumnVisible(value.toString());
  -                    }
  -                };
  -
  -            getModel().addPropertyChangeListener("visibleColumns",
  -                new PropertyChangeListener() {
  -                    public void propertyChange(PropertyChangeEvent evt) {
  -                        listModel.fireContentsChanged();
  -                    }
  -                });
  -
  -            columnList.addMouseListener(new MouseAdapter() {
  -                    public void mouseClicked(MouseEvent e) {
  -                        if ((e.getClickCount() > 1) &&
  -                                ((e.getModifiers() & MouseEvent.BUTTON1_MASK) > 0)) 
{
  -                            int i = columnList.locationToIndex(e.getPoint());
  -
  -                            if (i >= 0) {
  -                                Object column = listModel.get(i);
  -                                getModel().toggleColumn(column.toString());
  -                            }
  -                        } else {
  -                        }
  -                    }
  -                });
  -            columnList.setCellRenderer(cellRenderer);
  -            columnBox.add(new JScrollPane(columnList));
  +      loggerTreePanel.addActionListener(new ActionListener()
  +        {
  +          public void actionPerformed(ActionEvent e)
  +          {
  +            getModel().setLogTreePanelVisible(loggerTreePanel.isSelected());
  +          }
  +        });
   
  -            add(columnBox);
  -            add(Box.createVerticalGlue());
  -        }
  +      getModel().addPropertyChangeListener(
  +        "logTreePanelVisible", new PropertyChangeListener()
  +        {
  +          public void propertyChange(PropertyChangeEvent evt)
  +          {
  +            boolean value = ((Boolean) evt.getNewValue()).booleanValue();
  +            loggerTreePanel.setSelected(value);
  +          }
  +        });
       }
  +  }
   }
  
  
  
  1.40      +21 -0     jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanel.java
  
  Index: LogPanel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanel.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- LogPanel.java     16 Dec 2003 21:57:40 -0000      1.39
  +++ LogPanel.java     17 Dec 2003 02:06:50 -0000      1.40
  @@ -841,6 +841,23 @@
                   }
               });
   
  +        final JCheckBoxMenuItem menuItemLoggerTree = new JCheckBoxMenuItem("Logger 
Tree panel");
  +        menuItemLoggerTree.addActionListener(new ActionListener() {
  +
  +          public void actionPerformed(ActionEvent e)
  +          {
  +            
getPreferenceModel().setLogTreePanelVisible(menuItemLoggerTree.isSelected());
  +            
  +          }});
  +        getPreferenceModel().addPropertyChangeListener("logTreePanelVisible", new 
PropertyChangeListener() {
  +
  +          public void propertyChange(PropertyChangeEvent evt)
  +          {
  +            boolean value = ((Boolean)evt.getNewValue()).booleanValue();
  +            menuItemLoggerTree.setSelected(value);
  +          }});
  +        
  +        
           menuItemFocusOn.addActionListener(new ActionListener() {
                   public void actionPerformed(ActionEvent evt) {
                       if (currentPoint != null) {
  @@ -974,6 +991,7 @@
           p.add(menuItemToggleDetails);
           p.add(menuItemToggleToolTips);
           p.add(menuItemScrollBottom);
  +        p.add(menuItemLoggerTree);
   
           p.add(new JSeparator());
           p.add(menuItemToggleDock);
  @@ -1385,6 +1403,9 @@
               getPreferenceModel().isScrollToBottom());
           event.saveSetting("detailPaneVisible",
               getPreferenceModel().isDetailPaneVisible());
  +        event.saveSetting("logTreePanelVisible",
  +            getPreferenceModel().isLogTreePanelVisible());
  +        
   
           saveColumnSettings();
           saveColorSettings();
  
  
  
  1.10      +1 -0      
jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java
  
  Index: LogPanelPreferenceModel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- LogPanelPreferenceModel.java      16 Dec 2003 11:16:34 -0000      1.9
  +++ LogPanelPreferenceModel.java      17 Dec 2003 02:06:50 -0000      1.10
  @@ -168,6 +168,7 @@
       setToolTips(that.isToolTips());
       setScrollToBottom(that.isScrollToBottom());
       setDetailPaneVisible(that.isDetailPaneVisible());
  +    setLogTreePanelVisible(that.isLogTreePanelVisible());
   
       /**
        * First, iterate and ADD new columns, (this means notifications of adds go out 
first
  
  
  

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

Reply via email to