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]