psmith 2003/09/30 16:26:10
Modified: src/java/org/apache/log4j/chainsaw LogPanel.java
Log:
Beginnings of use of the LogPanelPreferenceModel.
Timestamp column format can now be customized
by right clickings on the Timestamp column header
and choosing a different format. Right now there is
only "Simple time" as an alternative to the ISO8601
formatter. Eventually other simple formats, plus
a custom format editor will be provided.
At the moment, this preference model is not persisted
between sessions.
WIP.
Revision Changes Path
1.15 +110 -32 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.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- LogPanel.java 26 Sep 2003 08:16:27 -0000 1.14
+++ LogPanel.java 30 Sep 2003 23:26:10 -0000 1.15
@@ -55,23 +55,6 @@
*/
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.LogLog;
-import org.apache.log4j.spi.LoggingEvent;
-
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Cursor;
@@ -94,10 +77,8 @@
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;
@@ -109,9 +90,8 @@
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;
@@ -131,7 +111,6 @@
import javax.swing.ButtonGroup;
import javax.swing.ComboBoxModel;
import javax.swing.ImageIcon;
-import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JComponent;
@@ -162,10 +141,28 @@
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
-import javax.swing.event.TableModelListener;
+import javax.swing.event.TableModelEvent;
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
@@ -192,6 +189,8 @@
final DockablePanel externalPanel;
final Action dockingAction;
final JSortTable table;
+ private final LogPanelPreferenceModel preferenceModel =
+ new LogPanelPreferenceModel();
private String profileName = null;
private final JDialog detailDialog = new JDialog((JFrame) null, true);
final JPanel detailPanel = new JPanel(new BorderLayout());
@@ -337,8 +336,87 @@
});
}
});
+
+ /***
+ * Setup a popup menu triggered for Timestamp column to allow time stamp format
changes
+ */
+
+ final JPopupMenu dateFormatChangePopup = new JPopupMenu();
+ final JRadioButtonMenuItem isoButton =
+ new JRadioButtonMenuItem(
+ new AbstractAction("Use ISO8601Format") {
+ public void actionPerformed(ActionEvent e) {
+ preferenceModel.setUseISO8601Format(true);
+ }
+ });
+ final JRadioButtonMenuItem simpleTimeButton =
+ new JRadioButtonMenuItem(
+ new AbstractAction("Use simple time") {
+ public void actionPerformed(ActionEvent e) {
+ preferenceModel.setUseISO8601Format(false);
+ preferenceModel.setAlternateDateFormatPattern("HH:mm:ss");
+ }
+ });
+
+ ButtonGroup dfBG = new ButtonGroup();
+ dfBG.add(isoButton);
+ dfBG.add(simpleTimeButton);
+ isoButton.setSelected(true);
+ dateFormatChangePopup.add(isoButton);
+ dateFormatChangePopup.add(simpleTimeButton);
setLayout(new BorderLayout());
+ table.getTableHeader().addMouseListener(
+ new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ checkEvent(e);
+ }
+
+ public void mousePressed(MouseEvent e) {
+ checkEvent(e);
+ }
+
+ public void mouseReleased(MouseEvent e) {
+ checkEvent(e);
+ }
+
+ private void checkEvent(MouseEvent e) {
+ if (e.isPopupTrigger()) {
+ TableColumnModel colModel = table.getColumnModel();
+ int index = colModel.getColumnIndexAtX(e.getX());
+ int modelIndex = colModel.getColumn(index).getModelIndex();
+
+ if ((modelIndex + 1) == ChainsawColumns.INDEX_TIMESTAMP_COL_NAME) {
+ dateFormatChangePopup.show(e.getComponent(), e.getX(), e.getY());
+ }
+ }
+ }
+ });
+
+ PropertyChangeListener datePrefsChangeListener =
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ LogPanelPreferenceModel model =
+ (LogPanelPreferenceModel) evt.getSource();
+
+ isoButton.setSelected(model.isUseISO8601Format());
+ simpleTimeButton.setSelected(!model.isUseISO8601Format());
+
+ if (model.isUseISO8601Format()) {
+ renderer.setDateFormatter(new ISO8601DateFormat());
+ } else {
+ renderer.setDateFormatter(
+ new SimpleDateFormat(model.getAlternateDateFormatPattern()));
+ }
+
+ table.tableChanged(new TableModelEvent(getModel()));
+ }
+ };
+
+ preferenceModel.addPropertyChangeListener(
+ "useISO8601Format", datePrefsChangeListener);
+ preferenceModel.addPropertyChangeListener(
+ "alternateDateFormatPattern", datePrefsChangeListener);
// TODO reload new Display rule for this panel
// displayFilter = loadDisplayFilter(ident);
@@ -1901,20 +1979,20 @@
}
public void mouseMoved(MouseEvent e) {
-// LogLog.debug(e.toString());
+ // LogLog.debug(e.toString());
int col = table.columnAtPoint(e.getPoint());
-
-// TODO This is a Bug or something, but InputEvent.CTRL_DOWN_MASK only works
-// in JDK 1.4.2 when the LoggerTreePanel is open, if it is closed, it doesn't
work... CTRL_DOWN_MASK
-// is ok though... Strange. Copied the mask from 1.4.2 here
+ // TODO This is a Bug or something, but InputEvent.CTRL_DOWN_MASK only
works
+ // in JDK 1.4.2 when the LoggerTreePanel is open, if it is closed, it doesn't
work... CTRL_DOWN_MASK
+ // is ok though... Strange. Copied the mask from 1.4.2 here
if (
- ((e.getModifiers() & (1 << 7))> 0) || ((e.getModifiers() &
InputEvent.CTRL_MASK)> 0)
- && isFocusableColumn(col)) {
+ ((e.getModifiers() & (1 << 7)) > 0)
+ || (((e.getModifiers() & InputEvent.CTRL_MASK) > 0)
+ && isFocusableColumn(col))) {
table.setCursor(ChainsawColumns.CURSOR_FOCUS_ON);
} else {
-// LogLog.debug("MouseMoved, ((e.getModifiers() & InputEvent.CTRL_MASK) >
0)=" + ((e.getModifiers() & InputEvent.CTRL_MASK) > 0) + ", isFocusableColumn(col)="
+ isFocusableColumn(col));
-// LogLog.debug(e.toString());
+ // LogLog.debug("MouseMoved, ((e.getModifiers() &
InputEvent.CTRL_MASK) > 0)=" + ((e.getModifiers() & InputEvent.CTRL_MASK) > 0) + ",
isFocusableColumn(col)=" + isFocusableColumn(col));
+ // LogLog.debug(e.toString());
table.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]