psmith      2003/10/01 16:36:34

  Modified:    src/java/org/apache/log4j/chainsaw
                        LogPanelPreferencePanel.java LogPanel.java
  Log:
  Formatting preference panel is getting closer to being usable.
  
  Hooked up individaul Log Panel's preference dialog
  to the main gui.
  
  Revision  Changes    Path
  1.2       +166 -10   
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.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LogPanelPreferencePanel.java      1 Oct 2003 04:10:49 -0000       1.1
  +++ LogPanelPreferencePanel.java      1 Oct 2003 23:36:34 -0000       1.2
  @@ -49,22 +49,38 @@
   
   package org.apache.log4j.chainsaw;
   
  +import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  +
   import java.awt.BorderLayout;
   import java.awt.Color;
   import java.awt.Dimension;
  +import java.awt.event.ActionEvent;
  +import java.awt.event.ActionListener;
  +
  +import java.beans.PropertyChangeEvent;
  +import java.beans.PropertyChangeListener;
   
   import javax.swing.BorderFactory;
   import javax.swing.Box;
  +import javax.swing.BoxLayout;
  +import javax.swing.ButtonGroup;
   import javax.swing.JButton;
  +import javax.swing.JComponent;
   import javax.swing.JFrame;
   import javax.swing.JLabel;
   import javax.swing.JPanel;
  +import javax.swing.JRadioButton;
   import javax.swing.JScrollPane;
   import javax.swing.JTree;
  +import javax.swing.event.TreeSelectionEvent;
  +import javax.swing.event.TreeSelectionListener;
   import javax.swing.tree.DefaultMutableTreeNode;
   import javax.swing.tree.DefaultTreeCellRenderer;
   import javax.swing.tree.DefaultTreeModel;
  +import javax.swing.tree.DefaultTreeSelectionModel;
   import javax.swing.tree.TreeModel;
  +import javax.swing.tree.TreePath;
  +import javax.swing.tree.TreeSelectionModel;
   
   
   /**
  @@ -73,16 +89,21 @@
    * @author Paul Smith
    */
   public class LogPanelPreferencePanel extends JPanel {
  -  private final LogPanelPreferenceModel model;
  -  final JLabel titleLabel = new JLabel("Selected Pref Panel");
  +  private final LogPanelPreferenceModel committedPreferenceModel;
  +  private final JLabel titleLabel = new JLabel("Selected Pref Panel");
  +  private final JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
  +  private final JPanel selectedPrefPanel = new JPanel(new BorderLayout(0, 3));
  +  private final LogPanelPreferenceModel uncommitedPreferenceModel =
  +    new LogPanelPreferenceModel();
  +  private ActionListener okCancelListener;
   
     public LogPanelPreferencePanel(LogPanelPreferenceModel model) {
  -    this.model = model;
  +    this.committedPreferenceModel = model;
       initComponents();
     }
   
     /**
  -   * Setsup and layouts the components
  +   * Setup and layout for the components
      */
     private void initComponents() {
       //               setBorder(BorderFactory.createLineBorder(Color.red));
  @@ -90,18 +111,16 @@
       setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
   
       final JTree prefTree = new JTree(createTreeModel());
  +    prefTree.setRootVisible(false);
  +
       DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
  -    renderer.setLeafIcon(null);
  +    renderer.setLeafIcon(ChainsawIcons.ICON_PREFERENCES);
       prefTree.setCellRenderer(renderer);
   
       final JScrollPane treeScroll = new JScrollPane(prefTree);
   
       treeScroll.setPreferredSize(new Dimension(200, 240));
   
  -    JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
  -
  -    JPanel selectedPrefPanel = new JPanel(new BorderLayout(0, 3));
  -
       titleLabel.setFont(titleLabel.getFont().deriveFont(16.0f));
       titleLabel.setBorder(BorderFactory.createEtchedBorder());
       titleLabel.setBackground(Color.white);
  @@ -115,7 +134,23 @@
       add(mainPanel, BorderLayout.CENTER);
   
       JButton okButton = new JButton("OK");
  +
  +    okButton.addActionListener(
  +      new ActionListener() {
  +        public void actionPerformed(ActionEvent e) {
  +          committedPreferenceModel.apply(uncommitedPreferenceModel);
  +          hidePanel();
  +        }
  +      });
  +
       JButton cancelButton = new JButton("Cancel");
  +    cancelButton.addActionListener(
  +      new ActionListener() {
  +        public void actionPerformed(ActionEvent e) {
  +          hidePanel();
  +        }
  +      });
  +
       Box buttonBox = Box.createHorizontalBox();
       buttonBox.add(Box.createHorizontalGlue());
       buttonBox.add(okButton);
  @@ -123,6 +158,60 @@
       buttonBox.add(cancelButton);
   
       add(buttonBox, BorderLayout.SOUTH);
  +
  +    DefaultTreeSelectionModel treeSelectionModel =
  +      new DefaultTreeSelectionModel();
  +    treeSelectionModel.setSelectionMode(
  +      TreeSelectionModel.SINGLE_TREE_SELECTION);
  +    prefTree.setSelectionModel(treeSelectionModel);
  +    prefTree.addTreeSelectionListener(
  +      new TreeSelectionListener() {
  +        public void valueChanged(TreeSelectionEvent e) {
  +          TreePath path = e.getNewLeadSelectionPath();
  +          DefaultMutableTreeNode node =
  +            (DefaultMutableTreeNode) path.getLastPathComponent();
  +          setDisplayedPrefPanel((JComponent) node.getUserObject());
  +        }
  +      });
  +
  +    // ensure the first pref panel is selected and displayed
  +    DefaultMutableTreeNode root =
  +      (DefaultMutableTreeNode) prefTree.getModel().getRoot();
  +    DefaultMutableTreeNode firstNode =
  +      (DefaultMutableTreeNode) root.getFirstChild();
  +    prefTree.setSelectionPath(new TreePath(firstNode.getPath()));
  +  }
  +
  +  /**
  +   * Ensures a specific panel is displayed in the spot where
  +   * preferences can be selected.
  +   *
  +  * @param panel
  +  */
  +  protected void setDisplayedPrefPanel(JComponent panel) {
  +    selectedPrefPanel.add(panel, BorderLayout.CENTER);
  +    selectedPrefPanel.invalidate();
  +    selectedPrefPanel.validate();
  +    titleLabel.setText(panel.toString());
  +  }
  +
  +  public void setOkCancelActionListener(ActionListener l) {
  +    this.okCancelListener = l;
  +  }
  +
  +  public void hidePanel() {
  +    if (okCancelListener != null) {
  +      okCancelListener.actionPerformed(null);
  +    }
  +  }
  +
  +  /**
  +   * Ensures this panels DISPLAYED model is in sync with
  +   * the model initially passed to the constructor.
  +   *
  +   */
  +  public void updateModel() {
  +    this.uncommitedPreferenceModel.apply(committedPreferenceModel);
     }
   
     private TreeModel createTreeModel() {
  @@ -131,12 +220,19 @@
       DefaultTreeModel model = new DefaultTreeModel(rootNode);
   
       DefaultMutableTreeNode formatting =
  -      new DefaultMutableTreeNode("Formatting");
  +      new DefaultMutableTreeNode(new FormattingPanel());
       rootNode.add(formatting);
   
       return model;
     }
   
  +  /**
  +   * @return
  +   */
  +  private LogPanelPreferenceModel getModel() {
  +    return uncommitedPreferenceModel;
  +  }
  +
     public static void main(String[] args) {
       JFrame f = new JFrame("Preferences Panel Test Bed");
       LogPanelPreferenceModel model = new LogPanelPreferenceModel();
  @@ -144,5 +240,65 @@
   
       f.setSize(640, 480);
       f.show();
  +  }
  +
  +  /**
  +   * All of the Preferences panels used in this class extend from
  +   * this, it is used to provide standard L&F required by all.
  +   * @author Paul Smith
  +   *
  +   */
  +  private static class BasicPrefPanel extends JPanel {
  +    private BasicPrefPanel() {
  +      //     setBorder(BorderFactory.createLineBorder(Color.red));
  +    }
  +  }
  +
  +  /**
  +   * Provides preference gui's for all the Formatting options
  +   * available for the columns etc.
  +   */
  +  private class FormattingPanel extends BasicPrefPanel {
  +    private FormattingPanel() {
  +      super();
  +      this.initComponents();
  +    }
  +
  +    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));
  +
  +      ButtonGroup bgDateFormat = new ButtonGroup();
  +      final JRadioButton rdISO =
  +        new JRadioButton("ISO 8601 format (yyyy-MM-dd HH:mm:ss)");
  +      rdISO.addActionListener(
  +        new ActionListener() {
  +          public void actionPerformed(ActionEvent e) {
  +            getModel().setUseISO8601Format(rdISO.isSelected());
  +          }
  +        });
  +      rdISO.setSelected(getModel().isUseISO8601Format());
  +      getModel().addPropertyChangeListener(
  +        "useISO8601Format",
  +        new PropertyChangeListener() {
  +          public void propertyChange(PropertyChangeEvent evt) {
  +            rdISO.setSelected(getModel().isUseISO8601Format());
  +          }
  +        });
  +      dateFormatPanel.add(rdISO);
  +
  +      add(dateFormatPanel);
  +      add(Box.createVerticalGlue());
  +    }
  +
  +    public String toString() {
  +      return "Formatting";
  +    }
     }
   }
  
  
  
  1.16      +48 -26    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.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- LogPanel.java     30 Sep 2003 23:26:10 -0000      1.15
  +++ LogPanel.java     1 Oct 2003 23:36:34 -0000       1.16
  @@ -55,6 +55,24 @@
    */
   package org.apache.log4j.chainsaw;
   
  +import org.apache.log4j.Layout;
  +import org.apache.log4j.PatternLayout;
  +import org.apache.log4j.chainsaw.filter.FilterModel;
  +import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  +import org.apache.log4j.chainsaw.icons.LineIconFactory;
  +import org.apache.log4j.chainsaw.layout.DefaultLayoutFactory;
  +import org.apache.log4j.chainsaw.layout.EventDetailLayout;
  +import org.apache.log4j.chainsaw.layout.LayoutEditorPane;
  +import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
  +import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
  +import org.apache.log4j.chainsaw.prefs.SettingsListener;
  +import org.apache.log4j.chainsaw.prefs.SettingsManager;
  +import org.apache.log4j.chainsaw.rule.AbstractRule;
  +import org.apache.log4j.chainsaw.rule.Rule;
  +import org.apache.log4j.helpers.ISO8601DateFormat;
  +import org.apache.log4j.helpers.LogLog;
  +import org.apache.log4j.spi.LoggingEvent;
  +
   import java.awt.BorderLayout;
   import java.awt.Container;
   import java.awt.Cursor;
  @@ -77,8 +95,10 @@
   import java.awt.event.MouseMotionListener;
   import java.awt.event.WindowAdapter;
   import java.awt.event.WindowEvent;
  +
   import java.beans.PropertyChangeEvent;
   import java.beans.PropertyChangeListener;
  +
   import java.io.BufferedInputStream;
   import java.io.BufferedOutputStream;
   import java.io.EOFException;
  @@ -90,8 +110,10 @@
   import java.io.ObjectInputStream;
   import java.io.ObjectOutputStream;
   import java.io.Serializable;
  +
   import java.text.NumberFormat;
   import java.text.SimpleDateFormat;
  +
   import java.util.ArrayList;
   import java.util.Enumeration;
   import java.util.HashMap;
  @@ -145,24 +167,6 @@
   import javax.swing.table.TableColumn;
   import javax.swing.table.TableColumnModel;
   
  -import org.apache.log4j.Layout;
  -import org.apache.log4j.PatternLayout;
  -import org.apache.log4j.chainsaw.filter.FilterModel;
  -import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  -import org.apache.log4j.chainsaw.icons.LineIconFactory;
  -import org.apache.log4j.chainsaw.layout.DefaultLayoutFactory;
  -import org.apache.log4j.chainsaw.layout.EventDetailLayout;
  -import org.apache.log4j.chainsaw.layout.LayoutEditorPane;
  -import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
  -import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
  -import org.apache.log4j.chainsaw.prefs.SettingsListener;
  -import org.apache.log4j.chainsaw.prefs.SettingsManager;
  -import org.apache.log4j.chainsaw.rule.AbstractRule;
  -import org.apache.log4j.chainsaw.rule.Rule;
  -import org.apache.log4j.helpers.ISO8601DateFormat;
  -import org.apache.log4j.helpers.LogLog;
  -import org.apache.log4j.spi.LoggingEvent;
  -
   
   /**
      * LogPanel encapsulates all the necessary bits and pieces of a
  @@ -172,6 +176,7 @@
      */
   public class LogPanel extends DockablePanel implements SettingsListener,
     EventBatchListener {
  +  private final JFrame preferencesFrame = new JFrame();
     private ThrowableRenderPanel throwableRenderPanel;
     private MouseFocusOnAdaptor mouseFocusOnAdaptor = new MouseFocusOnAdaptor();
     private boolean paused = false;
  @@ -191,6 +196,8 @@
     final JSortTable table;
     private final LogPanelPreferenceModel preferenceModel =
       new LogPanelPreferenceModel();
  +  private final LogPanelPreferencePanel preferencesPanel =
  +    new LogPanelPreferencePanel(preferenceModel);
     private String profileName = null;
     private final JDialog detailDialog = new JDialog((JFrame) null, true);
     final JPanel detailPanel = new JPanel(new BorderLayout());
  @@ -221,6 +228,20 @@
       identifier = ident;
       this.statusBar = statusBar;
   
  +    preferencesFrame.setTitle("'" + ident + "' Log Panel Preferences");
  +    preferencesFrame.setIconImage(
  +      ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
  +    preferencesFrame.getContentPane().add(preferencesPanel);
  +
  +    preferencesFrame.setSize(640, 480);
  +
  +    preferencesPanel.setOkCancelActionListener(
  +      new ActionListener() {
  +        public void actionPerformed(ActionEvent e) {
  +          preferencesFrame.setVisible(false);
  +        }
  +      });
  +
       setDetailPaneConversionPattern(
         DefaultLayoutFactory.getDefaultPatternLayout());
       ((EventDetailLayout) toolTipLayout).setConversionPattern(
  @@ -336,11 +357,10 @@
               });
           }
         });
  -      
  +
       /***
        * Setup a popup menu triggered for Timestamp column to allow time stamp format 
changes
        */
  -
       final JPopupMenu dateFormatChangePopup = new JPopupMenu();
       final JRadioButtonMenuItem isoButton =
         new JRadioButtonMenuItem(
  @@ -957,15 +977,15 @@
           }
         });
   
  -    JMenuItem menuItemDisplayFilter =
  -      new JMenuItem("Define display and color filters...");
  -    menuItemDisplayFilter.addActionListener(
  +    JMenuItem menuItemLogPanelPreferences =
  +      new JMenuItem("LogPanel Preferences...");
  +    menuItemLogPanelPreferences.addActionListener(
         new ActionListener() {
           public void actionPerformed(ActionEvent evt) {
             showPreferences();
           }
         });
  -    menuItemDisplayFilter.setIcon(ChainsawIcons.ICON_PREFERENCES);
  +    menuItemLogPanelPreferences.setIcon(ChainsawIcons.ICON_PREFERENCES);
   
       final JCheckBoxMenuItem menuItemToggleToolTips =
         new JCheckBoxMenuItem("Show ToolTips", tooltipsEnabled);
  @@ -1106,7 +1126,8 @@
   
       //       p.add(new JSeparator());
       //    p.add(menuDefineCustomFilter);
  -    //    p.add(menuItemDisplayFilter);
  +    p.add(menuItemLogPanelPreferences);
  +
       //    p.add(menuColumnDisplayFilter);
       //    p.add(menuColumnColorFilter);
       p.add(new JSeparator());
  @@ -1427,7 +1448,8 @@
     }
   
     void showPreferences() {
  -    //      colorDisplaySelector.show();
  +    preferencesPanel.updateModel();
  +    preferencesFrame.show();
     }
   
     EventContainer getModel() {
  
  
  

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

Reply via email to