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]