psmith 2003/12/16 20:28:05
Modified: src/java/org/apache/log4j/chainsaw LoggerNameTreePanel.java
LogPanel.java
Log:
A LogPanel's Logger name ignore list is now saved and loaded with the
preferences.
Revision Changes Path
1.21 +868 -606
jakarta-log4j/src/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java
Index: LoggerNameTreePanel.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- LoggerNameTreePanel.java 16 Dec 2003 00:45:26 -0000 1.20
+++ LoggerNameTreePanel.java 17 Dec 2003 04:28:04 -0000 1.21
@@ -46,11 +46,17 @@
* Apache Software Foundation, please see <http://www.apache.org/>.
*
*/
-
/*
*/
package org.apache.log4j.chainsaw;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.icons.LineIconFactory;
+import org.apache.log4j.helpers.LogLog;
+import org.apache.log4j.rule.AbstractRule;
+import org.apache.log4j.rule.Rule;
+import org.apache.log4j.spi.LoggingEvent;
+
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Cursor;
@@ -64,9 +70,12 @@
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
+
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
@@ -107,13 +116,6 @@
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.chainsaw.icons.LineIconFactory;
-import org.apache.log4j.helpers.LogLog;
-import org.apache.log4j.rule.AbstractRule;
-import org.apache.log4j.rule.Rule;
-import org.apache.log4j.spi.LoggingEvent;
-
/**
* A panel that encapsulates the Logger Name tree, with associated actions
@@ -122,118 +124,62 @@
*
* @author Paul Smith <[EMAIL PROTECTED]>
*/
-final class LoggerNameTreePanel extends JPanel implements Rule {
- private final class MouseKeyIconListener
- extends MouseMotionAdapter
- implements MouseMotionListener {
- Cursor focusOnCursor =
Toolkit.getDefaultToolkit().createCustomCursor(ChainsawIcons.FOCUS_ON_ICON.getImage(),
new Point(10,10), "");
- Cursor ignoreCursor =
Toolkit.getDefaultToolkit().createCustomCursor(ChainsawIcons.IGNORE_ICON.getImage(),
new Point(10,10), "");
- /* (non-Javadoc)
- * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
- */
- public void mouseMoved(MouseEvent e) {
-// LogLog.debug(e.toString());
- if((e.getModifiers() & InputEvent.CTRL_MASK)>0 && (e.getModifiers() &
InputEvent.SHIFT_MASK)>0) {
- logTree.setCursor(ignoreCursor);
- }else if((e.getModifiers() & InputEvent.CTRL_MASK)>0) {
- logTree.setCursor(focusOnCursor);
- }else {
- logTree.setCursor(Cursor.getDefaultCursor());
- }
- }
-}
- private final class MouseFocusOnListener extends MouseAdapter {
-
- /* (non-Javadoc)
- * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
- */
- public void mouseClicked(MouseEvent e) {
- if(e.getClickCount()>1 && (e.getModifiers() & InputEvent.CTRL_MASK)>0 &&
(e.getModifiers() & InputEvent.SHIFT_MASK)>0) {
- ignoreLoggerAtPoint(e.getPoint());
- e.consume();
- fireChangeEvent();
- }else if(e.getClickCount()>1 &&(e.getModifiers() & InputEvent.CTRL_MASK)>0) {
- focusAnLoggerAtPoint(e.getPoint());
- e.consume();
- fireChangeEvent();
- }
- }
+final class LoggerNameTreePanel extends JPanel implements Rule
+{
+ //~ Static fields/initializers ==============================================
- /**
- * @param point
- */
- private void focusAnLoggerAtPoint(Point point) {
- String logger = getLoggerAtPoint(point);
- if(logger!=null) {
- toggleFocusOnState();
- }
- }
+ private static final int WARN_DEPTH = 4;
- /**
- * @param point
- * @return
- */
- private String getLoggerAtPoint(Point point) {
- TreePath path = logTree.getPathForLocation(point.x, point.y);
- if(path!=null) {
- return getLoggerName(path);
- }
- return null;
- }
+ //~ Instance fields =========================================================
- /**
- * @param point
- */
- private void ignoreLoggerAtPoint(Point point) {
- String logger = getLoggerAtPoint(point);
- if(logger!=null) {
- toggleHiddenLogger(logger);
- }
-
- }
- }
- private static final int WARN_DEPTH = 4;
- private final JTree logTree;
- private final JScrollPane scrollTree;
- private final JToolBar toolbar = new JToolBar();
- private final JButton expandButton = new SmallButton();
- private final JButton collapseButton = new SmallButton();
+ private LoggerNameTreeCellRenderer cellRenderer =
+ new LoggerNameTreeCellRenderer();
+ private final Action clearIgnoreListAction;
+ private final Action closeAction;
private final JButton closeButton = new SmallButton();
- private final SmallToggleButton focusOnLoggerButton =
- new SmallToggleButton();
- private final SmallToggleButton ignoreLoggerButton = new SmallToggleButton();
- private final JButton editLoggerButton = new SmallButton();
- private final Action expandAction;
private final Action collapseAction;
- private final Action closeAction;
+ private final JButton collapseButton = new SmallButton();
private final Action editLoggerAction;
+ private final JButton editLoggerButton = new SmallButton();
+ private final Action expandAction;
+ private final JButton expandButton = new SmallButton();
private final Action focusOnAction;
+ private final SmallToggleButton focusOnLoggerButton =
+ new SmallToggleButton();
+ private final Set hiddenSet = new HashSet();
private final Action hideAction;
- private final Action clearIgnoreListAction;
-
+
private final JList ignoreList = new JList();
private final JScrollPane ignoreListScroll = new JScrollPane(ignoreList);
+ private final SmallToggleButton ignoreLoggerButton = new SmallToggleButton();
+ private final EventListenerList listenerList = new EventListenerList();
+ private final JTree logTree;
// private final EventListenerList focusOnActionListeners =
// new EventListenerList();
private final LogPanelLoggerTreeModel logTreeModel;
- private LoggerNameTreeCellRenderer cellRenderer =
- new LoggerNameTreeCellRenderer();
- private final LoggerTreePopupMenu popupMenu;
private final PopupListener popupListener;
- private final Set hiddenSet = new HashSet();
- private final EventListenerList listenerList = new EventListenerList();
- private Rule ruleDelegate =
- new AbstractRule() {
- public boolean evaluate(LoggingEvent e) {
+ private final LoggerTreePopupMenu popupMenu;
+ private Rule ruleDelegate = new AbstractRule()
+ {
+ public boolean evaluate(LoggingEvent e)
+ {
return true;
}
};
+ private final JScrollPane scrollTree;
+ private final JToolBar toolbar = new JToolBar();
+
+ //~ Constructors ============================================================
+
/**
+ * Creates a new LoggerNameTreePanel object.
+ *
* @param logTreeModel
*/
- LoggerNameTreePanel(LogPanelLoggerTreeModel logTreeModel) {
+ LoggerNameTreePanel(LogPanelLoggerTreeModel logTreeModel)
+ {
super();
this.logTreeModel = logTreeModel;
@@ -241,46 +187,55 @@
setBorder(BorderFactory.createEtchedBorder());
logTree =
- new JTree(logTreeModel) {
- public String getToolTipText(MouseEvent ev) {
- if (ev == null) {
- return null;
- }
-
- TreePath path = logTree.getPathForLocation(ev.getX(), ev.getY());
+ new JTree(logTreeModel)
+ {
+ public String getToolTipText(MouseEvent ev)
+ {
+ if (ev == null)
+ {
+ return null;
+ }
- String loggerName = getLoggerName(path);
+ TreePath path = logTree.getPathForLocation(ev.getX(), ev.getY());
- if (hiddenSet.contains(loggerName)) {
- loggerName += " (you are ignoring this logger)";
- }
+ String loggerName = getLoggerName(path);
- return loggerName;
+ if (hiddenSet.contains(loggerName))
+ {
+ loggerName += " (you are ignoring this logger)";
}
- };
+
+ return loggerName;
+ }
+ };
ToolTipManager.sharedInstance().registerComponent(logTree);
logTree.setCellRenderer(cellRenderer);
// ============================================
- logTreeModel.addTreeModelListener(
- new TreeModelListener() {
+ logTreeModel.addTreeModelListener(new TreeModelListener()
+ {
private boolean latched = false;
- public void treeNodesChanged(TreeModelEvent e) {
+ public void treeNodesChanged(TreeModelEvent e)
+ {
}
- public void treeNodesInserted(TreeModelEvent e) {
- if (!latched) {
+ public void treeNodesInserted(TreeModelEvent e)
+ {
+ if (!latched)
+ {
ensureRootExpanded();
latched = true;
}
}
- public void treeNodesRemoved(TreeModelEvent e) {
+ public void treeNodesRemoved(TreeModelEvent e)
+ {
}
- public void treeStructureChanged(TreeModelEvent e) {
+ public void treeStructureChanged(TreeModelEvent e)
+ {
}
});
@@ -312,114 +267,123 @@
add(toolbar, BorderLayout.NORTH);
add(scrollTree, BorderLayout.CENTER);
-
+
add(ignoreListScroll, BorderLayout.SOUTH);
-
- CheckListCellRenderer cellRenderer = new CheckListCellRenderer(){
- protected boolean isSelected(Object value) {
- return true;
- }
-
- };
-
+ CheckListCellRenderer cellRenderer = new CheckListCellRenderer()
+ {
+ protected boolean isSelected(Object value)
+ {
+ return true;
+ }
+ };
+
ignoreList.setCellRenderer(cellRenderer);
-
- ignoreList.addMouseListener(new MouseAdapter(){
-
- public void mouseClicked(MouseEvent e) {
- if (e.getClickCount()>1 && (e.getModifiers() & InputEvent.BUTTON1_MASK)>0) {
- int index = ignoreList.locationToIndex(e.getPoint());
-
- if (index>=0) {
- String string =
- ignoreList.getModel().getElementAt(index).toString();
- toggleHiddenLogger(string);
- fireChangeEvent();
- /**
- * TODO this needs to get the node that has this logger and fire a
visual update
- */
- LoggerNameTreePanel.this.logTreeModel.nodeStructureChanged((TreeNode)
LoggerNameTreePanel.this.logTreeModel.getRoot());
+
+ ignoreList.addMouseListener(new MouseAdapter()
+ {
+ public void mouseClicked(MouseEvent e)
+ {
+ if (
+ (e.getClickCount() > 1)
+ && ((e.getModifiers() & InputEvent.BUTTON1_MASK) > 0))
+ {
+ int index = ignoreList.locationToIndex(e.getPoint());
+
+ if (index >= 0)
+ {
+ String string =
+ ignoreList.getModel().getElementAt(index).toString();
+ toggleHiddenLogger(string);
+ fireChangeEvent();
+
+ /**
+ * TODO this needs to get the node that has this logger and fire a
visual update
+ */
+ LoggerNameTreePanel.this.logTreeModel.nodeStructureChanged(
+ (TreeNode) LoggerNameTreePanel.this.logTreeModel.getRoot());
+ }
}
}
-
- }
-
- });
+ });
}
+ //~ Methods =================================================================
+
/**
* Adds a change Listener to this LoggerNameTreePanel to be notfied
* when the State of the Focus or Hidden details have changed.
*
* @param l
*/
- public void addChangeListener(ChangeListener l) {
+ public void addChangeListener(ChangeListener l)
+ {
listenerList.add(ChangeListener.class, l);
}
- public void removeChangeListener(ChangeListener l) {
- listenerList.remove(ChangeListener.class, l);
+ /* (non-Javadoc)
+ * @see
org.apache.log4j.chainsaw.rule.Rule#evaluate(org.apache.log4j.spi.LoggingEvent)
+ */
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public boolean evaluate(LoggingEvent e)
+ {
+ return ruleDelegate.evaluate(e);
}
/**
- * @return
- */
- private Action createClearIgnoreListAction() {
- Action action =
- new AbstractAction("Clear Ignore list", null) {
- public void actionPerformed(ActionEvent e) {
- ignoreLoggerButton.setSelected(false);
- logTreeModel.reload();
- hiddenSet.clear();
- fireChangeEvent();
- }
- };
-
- action.putValue(
- Action.SHORT_DESCRIPTION,
- "Removes all entries from the Ignore list so you can see their events in the
view");
-
- return action;
+ * DOCUMENT ME!
+ *
+ * @param l DOCUMENT ME!
+ */
+ public void removeChangeListener(ChangeListener l)
+ {
+ listenerList.remove(ChangeListener.class, l);
}
/**
- * @return
- */
- private Action createIgnoreAction() {
- Action action =
- new AbstractAction(
- "Ignore this Logger", new ImageIcon(ChainsawIcons.ICON_COLLAPSE)) {
- public void actionPerformed(ActionEvent e) {
- String logger = getCurrentlySelectedLoggerName();
-
- if (logger != null) {
- toggleHiddenLogger(logger);
- logTreeModel.nodeChanged(
- (TreeNode) logTree.getSelectionPath().getLastPathComponent());
- ignoreLoggerButton.setSelected(hiddenSet.contains(logger));
- focusOnAction.setEnabled(!hiddenSet.contains(logger));
- popupMenu.hideCheck.setSelected(hiddenSet.contains(logger));
- }
-
- fireChangeEvent();
- }
- };
+ * Ensures the Focus is set to a specific logger name
+ * @param logger
+ */
+ public void setFocusOn(String logger)
+ {
+ DefaultMutableTreeNode node = logTreeModel.lookupLogger(logger);
- action.putValue(
- Action.SHORT_DESCRIPTION,
- "Adds the selected Logger to your Ignore list, filtering those events from
view");
+ if (node != null)
+ {
+ TreeNode[] nodes = node.getPath();
+ TreePath treePath = new TreePath(nodes);
+ logTree.setSelectionPath(treePath);
- return action;
+ if (!focusOnLoggerButton.isSelected())
+ {
+ focusOnLoggerButton.doClick();
+ }
+ }
+ else
+ {
+ LogLog.error("failed to lookup logger " + logger);
+ }
}
/**
+ * DOCUMENT ME!
+ *
* @param logger
*/
- protected void toggleHiddenLogger(String logger) {
- if (!hiddenSet.contains(logger)) {
+ protected void toggleHiddenLogger(String logger)
+ {
+ if (!hiddenSet.contains(logger))
+ {
hiddenSet.add(logger);
- } else {
+ }
+ else
+ {
hiddenSet.remove(logger);
}
@@ -427,42 +391,6 @@
}
/**
- * Returns an unmodifiable set of those Loggers marked as hidden.
- * @return
- */
- Set getHiddenSet() {
- return Collections.unmodifiableSet(hiddenSet);
- }
-
- /**
- * @return
- */
- private Action createFocusOnAction() {
- final Action action =
- new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- toggleFocusOnState();
- }
- };
-
- action.putValue(Action.NAME, "Focus");
- action.putValue(
- Action.SHORT_DESCRIPTION,
- "Allows you to Focus on the selected logger by setting a filter that discards
all but this Logger");
- action.putValue(
- Action.SMALL_ICON, new ImageIcon(ChainsawIcons.WINDOW_ICON));
-
- action.setEnabled(false);
-
- return action;
- }
-
- private void toggleFocusOnState() {
- setFocusOnSelected(!isFocusOnSelected());
- hideAction.setEnabled(!isFocusOnSelected());
- }
-
- /**
* Returns the full name of the Logger that is represented by
* the currently selected Logger node in the tree.
*
@@ -471,10 +399,12 @@
* If multiple Nodes are selected, the first path is used
* @return Logger Name or null if nothing selected
*/
- String getCurrentlySelectedLoggerName() {
+ String getCurrentlySelectedLoggerName()
+ {
TreePath[] paths = logTree.getSelectionPaths();
- if ((paths == null) || (paths.length == 0)) {
+ if ((paths == null) || (paths.length == 0))
+ {
return null;
}
@@ -484,18 +414,32 @@
}
/**
+ * Returns an unmodifiable set of those Loggers marked as hidden.
+ * @return
+ */
+ Set getHiddenSet()
+ {
+ return Collections.unmodifiableSet(hiddenSet);
+ }
+
+ /**
* Returns the full
+ * @param path DOCUMENT ME!
* @return
*/
- String getLoggerName(TreePath path) {
- if (path != null) {
+ String getLoggerName(TreePath path)
+ {
+ if (path != null)
+ {
Object[] objects = path.getPath();
StringBuffer buf = new StringBuffer();
- for (int i = 1; i < objects.length; i++) {
+ for (int i = 1; i < objects.length; i++)
+ {
buf.append(objects[i].toString());
- if (i < (objects.length - 1)) {
+ if (i < (objects.length - 1))
+ {
buf.append(".");
}
}
@@ -506,260 +450,201 @@
return null;
}
- private void ensureRootExpanded() {
- LogLog.debug("Ensuring Root node is expanded.");
-
- final DefaultMutableTreeNode root =
- (DefaultMutableTreeNode) logTreeModel.getRoot();
- SwingUtilities.invokeLater(
- new Runnable() {
- public void run() {
- logTree.expandPath(new TreePath(root));
- }
- });
+ /**
+ * adds a Collection of Strings to the ignore List and notifise all listeners of
+ * both the "hiddenSet" property and those expecting the Rule to change
+ * via the ChangeListener interface
+ * @param fqnLoggersToIgnore
+ */
+ void ignore(Collection fqnLoggersToIgnore)
+ {
+ hiddenSet.addAll(fqnLoggersToIgnore);
+ firePropertyChange("hiddenSet", null, null);
+ fireChangeEvent();
}
/**
- * @return
- */
- private Action createCollapseAction() {
- Action action =
- new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- collapseCurrentlySelectedNode();
- }
- };
-
- action.putValue(Action.SMALL_ICON, LineIconFactory.createCollapseIcon());
- action.putValue(Action.NAME, "Collapse Branch");
- action.putValue(
- Action.SHORT_DESCRIPTION,
- "Collapses all the children of the currently selected node");
- action.setEnabled(false);
-
- return action;
+ * Returns true if the FocusOn element has been selected
+ * @return true if the FocusOn action/lement has been selected
+ */
+ boolean isFocusOnSelected()
+ {
+ return focusOnAction.getValue("checked") != null;
}
- /**
- * An action that closes (hides) this panel
- * @return
- */
- private Action createCloseAction() {
- Action action =
- new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- LoggerNameTreePanel.this.setVisible(false);
- }
- };
-
- action.putValue(Action.NAME, "Close");
- action.putValue(Action.SHORT_DESCRIPTION, "Closes the Logger panel");
- action.putValue(Action.SMALL_ICON, LineIconFactory.createCloseIcon());
-
- return action;
+ void setFocusOnSelected(boolean selected)
+ {
+ if (selected)
+ {
+ focusOnAction.putValue("checked", Boolean.TRUE);
+ }
+ else
+ {
+ focusOnAction.putValue("checked", null);
+ }
}
/**
- * Configures varoius listeners etc for the components within
- * this Class.
- */
- private void setupListeners() {
-
- logTree.addMouseMotionListener(new MouseKeyIconListener());
- /**
- * Enable the actions depending on state of the tree selection
- */
- logTree.addTreeSelectionListener(
- new TreeSelectionListener() {
- public void valueChanged(TreeSelectionEvent e) {
- TreePath path = e.getNewLeadSelectionPath();
- TreeNode node = null;
-
- if (path != null) {
- node = (TreeNode) path.getLastPathComponent();
- }
+ * Given the currently selected nodes
+ * collapses all the children of those nodes.
+ *
+ */
+ private void collapseCurrentlySelectedNode()
+ {
+ TreePath[] paths = logTree.getSelectionPaths();
- // editLoggerAction.setEnabled(path != null);
- String logger = getCurrentlySelectedLoggerName();
- focusOnAction.setEnabled(
- (path != null) && (node != null) && (node.getParent() != null)
- && !hiddenSet.contains(logger));
- hideAction.setEnabled(
- (path != null) && (node != null) && (node.getParent() != null)
- && !isFocusOnSelected());
+ if (paths == null)
+ {
+ return;
+ }
- if (!focusOnAction.isEnabled()) {
- setFocusOnSelected(false);
- } else {
- }
+ if (LogLog.isDebugEnabled())
+ {
+ LogLog.debug("Collapsing all children of selected node");
+ }
- expandAction.setEnabled(path != null);
+ for (int i = 0; i < paths.length; i++)
+ {
+ TreePath path = paths[i];
+ DefaultMutableTreeNode node =
+ (DefaultMutableTreeNode) path.getLastPathComponent();
+ Enumeration enumeration = node.depthFirstEnumeration();
- if (logger != null) {
- boolean isHidden = hiddenSet.contains(logger);
- popupMenu.hideCheck.setSelected(isHidden);
- ignoreLoggerButton.setSelected(isHidden);
- }
+ while (enumeration.hasMoreElements())
+ {
+ DefaultMutableTreeNode child =
+ (DefaultMutableTreeNode) enumeration.nextElement();
- collapseAction.setEnabled(path != null);
+ if ((child.getParent() != null) && (child != node))
+ {
+ TreeNode[] nodes =
+ ((DefaultMutableTreeNode) child.getParent()).getPath();
- reconfigureMenuText();
+ TreePath treePath = new TreePath(nodes);
+ logTree.collapsePath(treePath);
}
- });
+ }
+ }
- logTree.addMouseListener(popupListener);
+ ensureRootExpanded();
+ }
- /**
- * This listener ensures the Tool bar toggle button and popup menu check box
- * stay in sync, plus notifies all the ChangeListeners that
- * an effective filter criteria has been modified
+ /**
+ * configures all the components that are used in the mini-toolbar of this
+ * component
*/
- focusOnAction.addPropertyChangeListener(
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- popupMenu.focusOnCheck.setSelected(isFocusOnSelected());
- focusOnLoggerButton.setSelected(isFocusOnSelected());
-
- if (logTree.getSelectionPath() != null) {
- logTreeModel.nodeChanged(
- (TreeNode) logTree.getSelectionPath().getLastPathComponent());
- }
+ private void configureToolbarPanel()
+ {
+ toolbar.setFloatable(false);
- fireChangeEvent();
- }
- });
+ expandButton.setAction(expandAction);
+ expandButton.setText(null);
+ collapseButton.setAction(collapseAction);
+ collapseButton.setText(null);
+ focusOnLoggerButton.setAction(focusOnAction);
+ focusOnLoggerButton.setText(null);
+ ignoreLoggerButton.setAction(hideAction);
+ ignoreLoggerButton.setText(null);
- hideAction.addPropertyChangeListener(
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- if (logTree.getSelectionPath() != null) {
- logTreeModel.nodeChanged(
- (TreeNode) logTree.getSelectionPath().getLastPathComponent());
- }
+ expandButton.setFont(expandButton.getFont().deriveFont(Font.BOLD));
+ collapseButton.setFont(collapseButton.getFont().deriveFont(Font.BOLD));
- fireChangeEvent();
- }
- });
+ editLoggerButton.setAction(editLoggerAction);
+ editLoggerButton.setText(null);
+ closeButton.setAction(closeAction);
+ closeButton.setText(null);
-// /**
-// * Now add a MouseListener that fires the expansion
-// * action if CTRL + DBL CLICK is done.
-// */
-// logTree.addMouseListener(
-// new MouseAdapter() {
-// public void mouseClicked(MouseEvent e) {
-// if (
-// (e.getClickCount() > 1)
-// && ((e.getModifiers() & InputEvent.CTRL_MASK) > 0)
-// && ((e.getModifiers() & InputEvent.BUTTON1_MASK) > 0)) {
-// expandCurrentlySelectedNode();
-// e.consume();
-// } else if (e.getClickCount() > 1) {
-// super.mouseClicked(e);
-// LogLog.debug("Ignoring dbl click event " + e);
-// }
-// }
-// });
+ toolbar.add(expandButton);
+ toolbar.add(collapseButton);
+ toolbar.addSeparator();
+ toolbar.add(focusOnLoggerButton);
+ toolbar.add(ignoreLoggerButton);
- logTree.addMouseListener(new MouseFocusOnListener());
- /**
- * We listen for when the FocusOn action changes, and then translate
- * that to a RuleChange
- */
- addChangeListener(
- new ChangeListener() {
- public void stateChanged(ChangeEvent evt) {
- final String currentlySelectedLoggerName =
- getCurrentlySelectedLoggerName();
+ // toolbar.add(editLoggerButton);
+ toolbar.addSeparator();
- ruleDelegate =
- new AbstractRule() {
- public boolean evaluate(LoggingEvent e) {
- boolean isHidden =
- getHiddenSet().contains(e.getLoggerName());
- boolean result = !isHidden;
-
- if (result && isFocusOnSelected()) {
- result =
- result
- && e.getLoggerName().startsWith(
- currentlySelectedLoggerName);
- }
+ toolbar.add(Box.createHorizontalGlue());
+ toolbar.add(closeButton);
+ toolbar.add(Box.createHorizontalStrut(5));
+ }
- return result;
- }
- };
- firePropertyChange("rule", null, null);
+ /**
+ * DOCUMENT ME!
+ *
+ * @return
+ */
+ private Action createClearIgnoreListAction()
+ {
+ Action action = new AbstractAction("Clear Ignore list", null)
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ ignoreLoggerButton.setSelected(false);
+ logTreeModel.reload();
+ hiddenSet.clear();
+ fireChangeEvent();
}
- });
-
- addPropertyChangeListener("hiddenSet",new PropertyChangeListener(){
-
- public void propertyChange(PropertyChangeEvent arg0) {
+ };
- DefaultListModel model = new DefaultListModel();
-
- List sortedIgnoreList = new ArrayList(getHiddenSet());
- Collections.sort(sortedIgnoreList);
- for (Iterator iter = sortedIgnoreList.iterator(); iter.hasNext();) {
- String string = (String) iter.next();
- model.addElement(string);
- }
- ignoreList.setModel(model);
- }});
+ action.putValue(
+ Action.SHORT_DESCRIPTION,
+ "Removes all entries from the Ignore list so you can see their events in the
view");
+ return action;
}
- private void reconfigureMenuText() {
- String logger = getCurrentlySelectedLoggerName();
+ /**
+ * An action that closes (hides) this panel
+ * @return
+ */
+ private Action createCloseAction()
+ {
+ Action action = new AbstractAction()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ LoggerNameTreePanel.this.setVisible(false);
+ }
+ };
- if ((logger == null) || (logger.length() == 0)) {
- focusOnAction.putValue(Action.NAME, "Focus On...");
- hideAction.putValue(Action.NAME, "Ignore ...");
- } else {
- focusOnAction.putValue(Action.NAME, "Focus On '" + logger + "'");
- hideAction.putValue(Action.NAME, "Ignore '" + logger + "'");
- }
+ action.putValue(Action.NAME, "Close");
+ action.putValue(Action.SHORT_DESCRIPTION, "Closes the Logger panel");
+ action.putValue(Action.SMALL_ICON, LineIconFactory.createCloseIcon());
- // need to ensure the button doens't update itself with the text, looks stupid
otherwise
- focusOnLoggerButton.setText(null);
- ignoreLoggerButton.setText(null);
+ return action;
}
/**
- * Returns true if the FocusOn element has been selected
- * @return true if the FocusOn action/lement has been selected
- */
- boolean isFocusOnSelected() {
- return focusOnAction.getValue("checked") != null;
- }
-
- void setFocusOnSelected(boolean selected) {
- if (selected) {
- focusOnAction.putValue("checked", Boolean.TRUE);
- } else {
- focusOnAction.putValue("checked", null);
- }
- }
-
- private void fireChangeEvent() {
- ChangeListener[] listeners =
- (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
- ChangeEvent e = null;
+ * DOCUMENT ME!
+ *
+ * @return
+ */
+ private Action createCollapseAction()
+ {
+ Action action = new AbstractAction()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ collapseCurrentlySelectedNode();
+ }
+ };
- for (int i = 0; i < listeners.length; i++) {
- if (e == null) {
- e = new ChangeEvent(this);
- }
+ action.putValue(Action.SMALL_ICON, LineIconFactory.createCollapseIcon());
+ action.putValue(Action.NAME, "Collapse Branch");
+ action.putValue(
+ Action.SHORT_DESCRIPTION,
+ "Collapses all the children of the currently selected node");
+ action.setEnabled(false);
- listeners[i].stateChanged(e);
- }
+ return action;
}
- private Action createEditLoggerAction() {
- Action action =
- new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
+ private Action createEditLoggerAction()
+ {
+ Action action = new AbstractAction()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
// TODO Auto-generated method stub
}
};
@@ -783,10 +668,12 @@
* and all children
* @return an Action
*/
- private Action createExpandAction() {
- Action action =
- new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
+ private Action createExpandAction()
+ {
+ Action action = new AbstractAction()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
expandCurrentlySelectedNode();
}
};
@@ -802,190 +689,403 @@
}
/**
- * Given the currently selected nodes
- * collapses all the children of those nodes.
+ * DOCUMENT ME!
+ *
+ * @return
+ */
+ private Action createFocusOnAction()
+ {
+ final Action action = new AbstractAction()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ toggleFocusOnState();
+ }
+ };
+
+ action.putValue(Action.NAME, "Focus");
+ action.putValue(
+ Action.SHORT_DESCRIPTION,
+ "Allows you to Focus on the selected logger by setting a filter that discards
all but this Logger");
+ action.putValue(
+ Action.SMALL_ICON, new ImageIcon(ChainsawIcons.WINDOW_ICON));
+
+ action.setEnabled(false);
+
+ return action;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return
+ */
+ private Action createIgnoreAction()
+ {
+ Action action =
+ new AbstractAction(
+ "Ignore this Logger", new ImageIcon(ChainsawIcons.ICON_COLLAPSE))
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ String logger = getCurrentlySelectedLoggerName();
+
+ if (logger != null)
+ {
+ toggleHiddenLogger(logger);
+ logTreeModel.nodeChanged(
+ (TreeNode) logTree.getSelectionPath().getLastPathComponent());
+ ignoreLoggerButton.setSelected(hiddenSet.contains(logger));
+ focusOnAction.setEnabled(!hiddenSet.contains(logger));
+ popupMenu.hideCheck.setSelected(hiddenSet.contains(logger));
+ }
+
+ fireChangeEvent();
+ }
+ };
+
+ action.putValue(
+ Action.SHORT_DESCRIPTION,
+ "Adds the selected Logger to your Ignore list, filtering those events from
view");
+
+ return action;
+ }
+
+ private void ensureRootExpanded()
+ {
+ if (LogLog.isDebugEnabled())
+ {
+ LogLog.debug("Ensuring Root node is expanded.");
+ }
+
+ final DefaultMutableTreeNode root =
+ (DefaultMutableTreeNode) logTreeModel.getRoot();
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ logTree.expandPath(new TreePath(root));
+ }
+ });
+ }
+
+ /**
+ * Expands the currently selected node (if any)
+ * including all the children.
*
*/
- private void collapseCurrentlySelectedNode() {
+ private void expandCurrentlySelectedNode()
+ {
TreePath[] paths = logTree.getSelectionPaths();
- if (paths == null) {
+ if (paths == null)
+ {
return;
}
- LogLog.debug("Collapsing all children of selected node");
+ if (LogLog.isDebugEnabled())
+ {
+ LogLog.debug("Expanding all children of selected node");
+ }
- for (int i = 0; i < paths.length; i++) {
+ for (int i = 0; i < paths.length; i++)
+ {
TreePath path = paths[i];
- DefaultMutableTreeNode node =
+
+ /**
+ * TODO this is commented out, right now it expands all nodes including the
root, so if there is a large tree..... look out.
+ */
+
+ // /**
+ // * Handle an expansion of the Root node by only doing the first level.
+ // * Safe...
+ // */
+ // if (path.getPathCount() == 1) {
+ // logTree.expandPath(path);
+ //
+ // return;
+ // }
+
+ DefaultMutableTreeNode treeNode =
(DefaultMutableTreeNode) path.getLastPathComponent();
- Enumeration enumeration = node.depthFirstEnumeration();
- while (enumeration.hasMoreElements()) {
- DefaultMutableTreeNode child =
- (DefaultMutableTreeNode) enumeration.nextElement();
+ Enumeration depthEnum = treeNode.depthFirstEnumeration();
- if (child.getParent() != null && child!=node) {
- TreeNode[] nodes =
- ((DefaultMutableTreeNode) child.getParent()).getPath();
+ if (!depthEnum.hasMoreElements())
+ {
+ break;
+ }
+
+ List depths = new ArrayList();
+
+ while (depthEnum.hasMoreElements())
+ {
+ depths.add(
+ new Integer(
+ ((DefaultMutableTreeNode) depthEnum.nextElement()).getDepth()));
+ }
+
+ Collections.sort(depths);
+ Collections.reverse(depths);
+
+ int maxDepth = ((Integer) depths.get(0)).intValue();
+
+ if (maxDepth > WARN_DEPTH)
+ {
+ LogLog.warn("Should warn user, depth=" + maxDepth);
+ }
+
+ depthEnum = treeNode.depthFirstEnumeration();
+ while (depthEnum.hasMoreElements())
+ {
+ DefaultMutableTreeNode node =
+ (DefaultMutableTreeNode) depthEnum.nextElement();
+
+ if (node.isLeaf())
+ {
+ TreeNode[] nodes =
+ ((DefaultMutableTreeNode) node.getParent()).getPath();
TreePath treePath = new TreePath(nodes);
- logTree.collapsePath(treePath);
+
+ LogLog.debug("Expanding path:" + treePath);
+
+ logTree.expandPath(treePath);
}
}
}
+ }
- ensureRootExpanded();
+ private void fireChangeEvent()
+ {
+ ChangeListener[] listeners =
+ (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
+ ChangeEvent e = null;
+
+ for (int i = 0; i < listeners.length; i++)
+ {
+ if (e == null)
+ {
+ e = new ChangeEvent(this);
+ }
+
+ listeners[i].stateChanged(e);
+ }
}
- /**
- * Expands the currently selected node (if any)
- * including all the children.
- *
- */
- private void expandCurrentlySelectedNode() {
- TreePath[] paths = logTree.getSelectionPaths();
+ private void reconfigureMenuText()
+ {
+ String logger = getCurrentlySelectedLoggerName();
+
+ if ((logger == null) || (logger.length() == 0))
+ {
+ focusOnAction.putValue(Action.NAME, "Focus On...");
+ hideAction.putValue(Action.NAME, "Ignore ...");
+ }
+ else
+ {
+ focusOnAction.putValue(Action.NAME, "Focus On '" + logger + "'");
+ hideAction.putValue(Action.NAME, "Ignore '" + logger + "'");
+ }
+
+ // need to ensure the button doens't update itself with the text, looks stupid
otherwise
+ focusOnLoggerButton.setText(null);
+ ignoreLoggerButton.setText(null);
+ }
- if (paths == null) {
- return;
- }
+ /**
+ * Configures varoius listeners etc for the components within
+ * this Class.
+ */
+ private void setupListeners()
+ {
+ logTree.addMouseMotionListener(new MouseKeyIconListener());
- LogLog.debug("Expanding all children of selected node");
+ /**
+ * Enable the actions depending on state of the tree selection
+ */
+ logTree.addTreeSelectionListener(new TreeSelectionListener()
+ {
+ public void valueChanged(TreeSelectionEvent e)
+ {
+ TreePath path = e.getNewLeadSelectionPath();
+ TreeNode node = null;
- for (int i = 0; i < paths.length; i++) {
- TreePath path = paths[i];
+ if (path != null)
+ {
+ node = (TreeNode) path.getLastPathComponent();
+ }
-/**
- * TODO this is commented out, right now it expands all nodes including the root,
so if there is a large tree..... look out.
- */
-// /**
-// * Handle an expansion of the Root node by only doing the first level.
-// * Safe...
-// */
-// if (path.getPathCount() == 1) {
-// logTree.expandPath(path);
-//
-// return;
-// }
+ // editLoggerAction.setEnabled(path != null);
+ String logger = getCurrentlySelectedLoggerName();
+ focusOnAction.setEnabled(
+ (path != null) && (node != null) && (node.getParent() != null)
+ && !hiddenSet.contains(logger));
+ hideAction.setEnabled(
+ (path != null) && (node != null) && (node.getParent() != null)
+ && !isFocusOnSelected());
- DefaultMutableTreeNode treeNode =
- (DefaultMutableTreeNode) path.getLastPathComponent();
+ if (!focusOnAction.isEnabled())
+ {
+ setFocusOnSelected(false);
+ }
+ else
+ {
+ }
- Enumeration depthEnum = treeNode.depthFirstEnumeration();
+ expandAction.setEnabled(path != null);
- if (!depthEnum.hasMoreElements()) {
- break;
- }
+ if (logger != null)
+ {
+ boolean isHidden = hiddenSet.contains(logger);
+ popupMenu.hideCheck.setSelected(isHidden);
+ ignoreLoggerButton.setSelected(isHidden);
+ }
- List depths = new ArrayList();
+ collapseAction.setEnabled(path != null);
- while (depthEnum.hasMoreElements()) {
- depths.add(
- new Integer(
- ((DefaultMutableTreeNode) depthEnum.nextElement()).getDepth()));
- }
+ reconfigureMenuText();
+ }
+ });
- Collections.sort(depths);
- Collections.reverse(depths);
+ logTree.addMouseListener(popupListener);
- int maxDepth = ((Integer) depths.get(0)).intValue();
+ /**
+ * This listener ensures the Tool bar toggle button and popup menu check box
+ * stay in sync, plus notifies all the ChangeListeners that
+ * an effective filter criteria has been modified
+ */
+ focusOnAction.addPropertyChangeListener(new PropertyChangeListener()
+ {
+ public void propertyChange(PropertyChangeEvent evt)
+ {
+ popupMenu.focusOnCheck.setSelected(isFocusOnSelected());
+ focusOnLoggerButton.setSelected(isFocusOnSelected());
- if (maxDepth > WARN_DEPTH) {
- LogLog.warn("Should warn user, depth=" + maxDepth);
- }
+ if (logTree.getSelectionPath() != null)
+ {
+ logTreeModel.nodeChanged(
+ (TreeNode) logTree.getSelectionPath().getLastPathComponent());
+ }
- depthEnum = treeNode.depthFirstEnumeration();
+ fireChangeEvent();
+ }
+ });
- while (depthEnum.hasMoreElements()) {
- DefaultMutableTreeNode node =
- (DefaultMutableTreeNode) depthEnum.nextElement();
+ hideAction.addPropertyChangeListener(new PropertyChangeListener()
+ {
+ public void propertyChange(PropertyChangeEvent evt)
+ {
+ if (logTree.getSelectionPath() != null)
+ {
+ logTreeModel.nodeChanged(
+ (TreeNode) logTree.getSelectionPath().getLastPathComponent());
+ }
- if (node.isLeaf()) {
- TreeNode[] nodes =
- ((DefaultMutableTreeNode) node.getParent()).getPath();
- TreePath treePath = new TreePath(nodes);
+ fireChangeEvent();
+ }
+ });
- LogLog.debug("Expanding path:" + treePath);
+ // /**
+ // * Now add a MouseListener that fires the expansion
+ // * action if CTRL + DBL CLICK is done.
+ // */
+ // logTree.addMouseListener(
+ // new MouseAdapter() {
+ // public void mouseClicked(MouseEvent e) {
+ // if (
+ // (e.getClickCount() > 1)
+ // && ((e.getModifiers() & InputEvent.CTRL_MASK) > 0)
+ // && ((e.getModifiers() & InputEvent.BUTTON1_MASK) > 0)) {
+ // expandCurrentlySelectedNode();
+ // e.consume();
+ // } else if (e.getClickCount() > 1) {
+ // super.mouseClicked(e);
+ // LogLog.debug("Ignoring dbl click event " + e);
+ // }
+ // }
+ // });
- logTree.expandPath(treePath);
- }
- }
- }
- }
+ logTree.addMouseListener(new MouseFocusOnListener());
- /**
- * configures all the components that are used in the mini-toolbar of this
- * component
+ /**
+ * We listen for when the FocusOn action changes, and then translate
+ * that to a RuleChange
*/
- private void configureToolbarPanel() {
- toolbar.setFloatable(false);
+ addChangeListener(new ChangeListener()
+ {
+ public void stateChanged(ChangeEvent evt)
+ {
+ final String currentlySelectedLoggerName =
+ getCurrentlySelectedLoggerName();
- expandButton.setAction(expandAction);
- expandButton.setText(null);
- collapseButton.setAction(collapseAction);
- collapseButton.setText(null);
- focusOnLoggerButton.setAction(focusOnAction);
- focusOnLoggerButton.setText(null);
- ignoreLoggerButton.setAction(hideAction);
- ignoreLoggerButton.setText(null);
+ ruleDelegate =
+ new AbstractRule()
+ {
+ public boolean evaluate(LoggingEvent e)
+ {
+ boolean isHidden = getHiddenSet().contains(e.getLoggerName());
+ boolean result = !isHidden;
+
+ if (result && isFocusOnSelected())
+ {
+ result =
+ result
+ && e.getLoggerName().startsWith(
+ currentlySelectedLoggerName);
+ }
- expandButton.setFont(expandButton.getFont().deriveFont(Font.BOLD));
- collapseButton.setFont(collapseButton.getFont().deriveFont(Font.BOLD));
+ return result;
+ }
+ };
+ firePropertyChange("rule", null, null);
+ }
+ });
- editLoggerButton.setAction(editLoggerAction);
- editLoggerButton.setText(null);
- closeButton.setAction(closeAction);
- closeButton.setText(null);
+ addPropertyChangeListener("hiddenSet", new PropertyChangeListener()
+ {
+ public void propertyChange(PropertyChangeEvent arg0)
+ {
+ DefaultListModel model = new DefaultListModel();
- toolbar.add(expandButton);
- toolbar.add(collapseButton);
- toolbar.addSeparator();
- toolbar.add(focusOnLoggerButton);
- toolbar.add(ignoreLoggerButton);
+ List sortedIgnoreList = new ArrayList(getHiddenSet());
+ Collections.sort(sortedIgnoreList);
- // toolbar.add(editLoggerButton);
- toolbar.addSeparator();
+ for (Iterator iter = sortedIgnoreList.iterator(); iter.hasNext();)
+ {
+ String string = (String) iter.next();
+ model.addElement(string);
+ }
- toolbar.add(Box.createHorizontalGlue());
- toolbar.add(closeButton);
- toolbar.add(Box.createHorizontalStrut(5));
+ ignoreList.setModel(model);
+ }
+ });
}
- /**
- * Ensures the Focus is set to a specific logger name
- * @param string
- */
- public void setFocusOn(String logger) {
- DefaultMutableTreeNode node = logTreeModel.lookupLogger(logger);
-
- if (node != null) {
- TreeNode[] nodes = node.getPath();
- TreePath treePath = new TreePath(nodes);
- logTree.setSelectionPath(treePath);
-
- if (!focusOnLoggerButton.isSelected()) {
- focusOnLoggerButton.doClick();
- }
- } else {
- LogLog.error("failed to lookup logger " + logger);
- }
+ private void toggleFocusOnState()
+ {
+ setFocusOnSelected(!isFocusOnSelected());
+ hideAction.setEnabled(!isFocusOnSelected());
}
- /* (non-Javadoc)
- * @see
org.apache.log4j.chainsaw.rule.Rule#evaluate(org.apache.log4j.spi.LoggingEvent)
- */
- public boolean evaluate(LoggingEvent e) {
- return ruleDelegate.evaluate(e);
- }
+ //~ Inner Classes ===========================================================
/**
- *
- * @author Paul Smith <[EMAIL PROTECTED]>
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision$, $Date$
+ *
+ * @author Paul Smith <[EMAIL PROTECTED]>
*
*/
- private class LoggerNameTreeCellRenderer extends DefaultTreeCellRenderer {
+ private class LoggerNameTreeCellRenderer extends DefaultTreeCellRenderer
+ {
+ //~ Constructors ==========================================================
+
// private JPanel panel = new JPanel();
- private LoggerNameTreeCellRenderer() {
+ private LoggerNameTreeCellRenderer()
+ {
super();
// panel.setBackground(UIManager.getColor("Tree.textBackground"));
@@ -998,12 +1098,28 @@
setOpaque(false);
}
+ //~ Methods ===============================================================
+
/* (non-Javadoc)
* @see
javax.swing.tree.TreeCellRenderer#getTreeCellRendererComponent(javax.swing.JTree,
java.lang.Object, boolean, boolean, boolean, int, boolean)
*/
+ /**
+ * DOCUMENT ME!
+ *
+ * @param tree DOCUMENT ME!
+ * @param value DOCUMENT ME!
+ * @param sel DOCUMENT ME!
+ * @param expanded DOCUMENT ME!
+ * @param leaf DOCUMENT ME!
+ * @param row DOCUMENT ME!
+ * @param hasFocus DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
public Component getTreeCellRendererComponent(
JTree tree, Object value, boolean sel, boolean expanded, boolean leaf,
- int row, boolean hasFocus) {
+ int row, boolean hasFocus)
+ {
JLabel component =
(JLabel) super.getTreeCellRendererComponent(
tree, value, sel, expanded, leaf, row, hasFocus);
@@ -1012,7 +1128,8 @@
int style = Font.PLAIN;
- if (sel && focusOnLoggerButton.isSelected()) {
+ if (sel && focusOnLoggerButton.isSelected())
+ {
style = style | Font.BOLD;
}
@@ -1020,43 +1137,78 @@
getLoggerName(
new TreePath(((DefaultMutableTreeNode) value).getPath()));
- if (hiddenSet.contains(logger)) {
+ if (hiddenSet.contains(logger))
+ {
// component.setEnabled(false);
// component.setIcon(leaf?null:getDefaultOpenIcon());
style = style | Font.ITALIC;
// LogLog.debug("TreeRenderer: '" + logger + "' is in hiddenSet,
italicizing");
- } else {
+ }
+ else
+ {
// LogLog.debug("TreeRenderer: '" + logger + "' is NOT in
hiddenSet, leaving plain");
// component.setEnabled(true);
}
- if (originalFont!=null)
+ if (originalFont != null)
{
Font font2 = originalFont.deriveFont(style);
+
if (font2 != null)
{
component.setFont(font2);
}
-
}
return component;
}
}
- private class LoggerTreePopupMenu extends JPopupMenu {
+ private class LoggerTreePopupMenu extends JPopupMenu
+ {
+ //~ Instance fields =======================================================
+
JCheckBoxMenuItem focusOnCheck = new JCheckBoxMenuItem();
JCheckBoxMenuItem hideCheck = new JCheckBoxMenuItem();
- private LoggerTreePopupMenu() {
+ //~ Constructors ==========================================================
+
+ private LoggerTreePopupMenu()
+ {
initMenu();
}
+ //~ Methods ===============================================================
+
+ /* (non-Javadoc)
+ * @see javax.swing.JPopupMenu#show(java.awt.Component, int, int)
+ */
/**
- *
- */
- private void initMenu() {
+ * DOCUMENT ME!
+ *
+ * @param invoker DOCUMENT ME!
+ * @param x DOCUMENT ME!
+ * @param y DOCUMENT ME!
+ */
+ public void show(Component invoker, int x, int y)
+ {
+ DefaultMutableTreeNode node =
+ (DefaultMutableTreeNode) logTree.getLastSelectedPathComponent();
+
+ if (node == null)
+ {
+ return;
+ }
+
+ super.show(invoker, x, y);
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ private void initMenu()
+ {
add(expandAction);
add(collapseAction);
addSeparator();
@@ -1069,19 +1221,129 @@
addSeparator();
add(clearIgnoreListAction);
}
+ }
+
+ private final class MouseFocusOnListener extends MouseAdapter
+ {
+ //~ Methods ===============================================================
/* (non-Javadoc)
- * @see javax.swing.JPopupMenu#show(java.awt.Component, int, int)
- */
- public void show(Component invoker, int x, int y) {
- DefaultMutableTreeNode node =
- (DefaultMutableTreeNode) logTree.getLastSelectedPathComponent();
+ * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+ */
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseClicked(MouseEvent e)
+ {
+ if (
+ (e.getClickCount() > 1)
+ && ((e.getModifiers() & InputEvent.CTRL_MASK) > 0)
+ && ((e.getModifiers() & InputEvent.SHIFT_MASK) > 0))
+ {
+ ignoreLoggerAtPoint(e.getPoint());
+ e.consume();
+ fireChangeEvent();
+ }
+ else if (
+ (e.getClickCount() > 1)
+ && ((e.getModifiers() & InputEvent.CTRL_MASK) > 0))
+ {
+ focusAnLoggerAtPoint(e.getPoint());
+ e.consume();
+ fireChangeEvent();
+ }
+ }
- if (node == null) {
- return;
+ /**
+ * DOCUMENT ME!
+ *
+ * @param point
+ */
+ private void focusAnLoggerAtPoint(Point point)
+ {
+ String logger = getLoggerAtPoint(point);
+
+ if (logger != null)
+ {
+ toggleFocusOnState();
}
+ }
- super.show(invoker, x, y);
+ /**
+ * DOCUMENT ME!
+ *
+ * @param point
+ * @return
+ */
+ private String getLoggerAtPoint(Point point)
+ {
+ TreePath path = logTree.getPathForLocation(point.x, point.y);
+
+ if (path != null)
+ {
+ return getLoggerName(path);
+ }
+
+ return null;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param point
+ */
+ private void ignoreLoggerAtPoint(Point point)
+ {
+ String logger = getLoggerAtPoint(point);
+
+ if (logger != null)
+ {
+ toggleHiddenLogger(logger);
+ }
+ }
+ }
+
+ private final class MouseKeyIconListener extends MouseMotionAdapter
+ implements MouseMotionListener
+ {
+ //~ Instance fields =======================================================
+
+ Cursor focusOnCursor =
+ Toolkit.getDefaultToolkit().createCustomCursor(
+ ChainsawIcons.FOCUS_ON_ICON.getImage(), new Point(10, 10), "");
+ Cursor ignoreCursor =
+ Toolkit.getDefaultToolkit().createCustomCursor(
+ ChainsawIcons.IGNORE_ICON.getImage(), new Point(10, 10), "");
+
+ //~ Methods ===============================================================
+
+ /* (non-Javadoc)
+ * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
+ */
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseMoved(MouseEvent e)
+ {
+ // LogLog.debug(e.toString());
+ if (
+ ((e.getModifiers() & InputEvent.CTRL_MASK) > 0)
+ && ((e.getModifiers() & InputEvent.SHIFT_MASK) > 0))
+ {
+ logTree.setCursor(ignoreCursor);
+ }
+ else if ((e.getModifiers() & InputEvent.CTRL_MASK) > 0)
+ {
+ logTree.setCursor(focusOnCursor);
+ }
+ else
+ {
+ logTree.setCursor(Cursor.getDefaultCursor());
+ }
}
}
}
1.41 +9 -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.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- LogPanel.java 17 Dec 2003 02:06:50 -0000 1.40
+++ LogPanel.java 17 Dec 2003 04:28:04 -0000 1.41
@@ -1407,6 +1407,13 @@
getPreferenceModel().isLogTreePanelVisible());
+ Set set = logTreePanel.getHiddenSet();
+ int index = 0;
+ for (Iterator iter = set.iterator(); iter.hasNext(); )
+ {
+ Object logger = (Object) iter.next();
+ event.saveSetting("Logger.Ignore." + index++, logger.toString() );
+ }
saveColumnSettings();
saveColorSettings();
}
@@ -1497,6 +1504,8 @@
lowerPanel.setDividerLocation(0.5d);
+ logTreePanel.ignore(event.getSettingsStartingWith("Logger.Ignore."));
+
File f = new File(SettingsManager.getInstance().getSettingsDirectory() +
File.separator + identifier + LogUI.COLUMNS_EXTENSION);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]