psmith      2003/09/15 15:13:27

  Modified:    src/java/org/apache/log4j/chainsaw LoggerNameTreePanel.java
                        LogUI.java LogPanel.java
  Log:
  Added the concept of "hidding" a logger by being able
  to add it to an Ignore list.
  
  Only Loggers that are not on the Ignored list are shown.
  
  Revision  Changes    Path
  1.10      +216 -64   
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.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- LoggerNameTreePanel.java  11 Sep 2003 10:34:22 -0000      1.9
  +++ LoggerNameTreePanel.java  15 Sep 2003 22:13:26 -0000      1.10
  @@ -64,7 +64,9 @@
   import java.util.ArrayList;
   import java.util.Collections;
   import java.util.Enumeration;
  +import java.util.HashSet;
   import java.util.List;
  +import java.util.Set;
   
   import javax.swing.AbstractAction;
   import javax.swing.Action;
  @@ -83,6 +85,9 @@
   import javax.swing.JTree;
   import javax.swing.SwingUtilities;
   import javax.swing.ToolTipManager;
  +import javax.swing.event.ChangeEvent;
  +import javax.swing.event.ChangeListener;
  +import javax.swing.event.EventListenerList;
   import javax.swing.event.TreeModelEvent;
   import javax.swing.event.TreeModelListener;
   import javax.swing.event.TreeSelectionEvent;
  @@ -114,12 +119,15 @@
     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 Action editLoggerAction;
     private final Action focusOnAction;
  +  private final Action hideAction;
  +  private final Action clearIgnoreListAction;
   
     //  private final EventListenerList focusOnActionListeners =
     //    new EventListenerList();
  @@ -128,6 +136,8 @@
       new LoggerNameTreeCellRenderer();
     private final LoggerTreePopupMenu popupMenu;
     private final PopupListener popupListener;
  +  private final Set hiddenSet = new HashSet();
  +  private final EventListenerList listenerList = new EventListenerList();
   
     /**
      * @param logTreeModel
  @@ -148,7 +158,13 @@
   
               TreePath path = logTree.getPathForLocation(ev.getX(), ev.getY());
   
  -            return getLoggerName(path);
  +            String loggerName = getLoggerName(path);
  +
  +            if (hiddenSet.contains(loggerName)) {
  +              loggerName += " (you are ignoring this logger)";
  +            }
  +
  +            return loggerName;
             }
           };
   
  @@ -158,16 +174,16 @@
       //       ============================================
       logTreeModel.addTreeModelListener(
         new TreeModelListener() {
  -             private boolean latched = false;
  +        private boolean latched = false;
  +
           public void treeNodesChanged(TreeModelEvent e) {
  -          
           }
   
           public void treeNodesInserted(TreeModelEvent e) {
             if (!latched) {
  -                     ensureRootExpanded();
  -                     latched = true;
  -             }
  +            ensureRootExpanded();
  +            latched = true;
  +          }
           }
   
           public void treeNodesRemoved(TreeModelEvent e) {
  @@ -194,6 +210,8 @@
       closeAction = createCloseAction();
       collapseAction = createCollapseAction();
       focusOnAction = createFocusOnAction();
  +    hideAction = createIgnoreAction();
  +    clearIgnoreListAction = createClearIgnoreListAction();
   
       popupMenu = new LoggerTreePopupMenu();
       popupListener = new PopupListener(popupMenu);
  @@ -206,6 +224,90 @@
     }
   
     /**
  +   * 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) {
  +    listenerList.add(ChangeListener.class, l);
  +  }
  +
  +  public void removeChangeListener(ChangeListener l) {
  +    listenerList.remove(ChangeListener.class, l);
  +  }
  +
  +  /**
  +  * @return
  +  */
  +  private Action createClearIgnoreListAction() {
  +    Action action =
  +      new AbstractAction("Clear Ignore list", null) {
  +        public void actionPerformed(ActionEvent e) {
  +          ignoreLoggerButton.setSelected(false);
  +          logTreeModel.reload();
  +          hiddenSet.clear();
  +        }
  +      };
  +
  +    action.putValue(
  +      Action.SHORT_DESCRIPTION,
  +      "Removes all entries from the Ignore list so you can see their events in the 
view");
  +
  +    return action;
  +  }
  +
  +  /**
  +    * @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;
  +  }
  +
  +  /**
  +   * @param logger
  +   */
  +  protected void toggleHiddenLogger(String logger) {
  +    if (!hiddenSet.contains(logger)) {
  +      hiddenSet.add(logger);
  +    } else {
  +      hiddenSet.remove(logger);
  +    }
  +
  +    firePropertyChange("hiddenSet", (Object) null, (Object) null);
  +  }
  +
  +  /**
  +   * Returns an unmodifiable set of those Loggers marked as hidden.
  +   * @return
  +   */
  +  Set getHiddenSet() {
  +    return Collections.unmodifiableSet(hiddenSet);
  +  }
  +
  +  /**
     * @return
     */
     private Action createFocusOnAction() {
  @@ -229,7 +331,7 @@
     }
   
     private void toggleFocusOnState() {
  -     setFocusOnSelected(!isFocusOnSelected());
  +    setFocusOnSelected(!isFocusOnSelected());
     }
   
     /**
  @@ -277,14 +379,16 @@
     }
   
     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));
  -                     
  -             }});
  +    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));
  +        }
  +      });
     }
   
     /**
  @@ -339,19 +443,34 @@
         new TreeSelectionListener() {
           public void valueChanged(TreeSelectionEvent e) {
             TreePath path = e.getNewLeadSelectionPath();
  -          TreeNode node=null;
  -          if(path!=null){
  -             node = (TreeNode) path.getLastPathComponent();
  +          TreeNode node = null;
  +
  +          if (path != null) {
  +            node = (TreeNode) path.getLastPathComponent();
             }
  +
             //          editLoggerAction.setEnabled(path != null);
  -          focusOnAction.setEnabled(path != null && node!=null && 
node.getParent()!=null);
  -          
  -          if(!focusOnAction.isEnabled()){
  -             setFocusOnSelected(false);
  +          String logger = getCurrentlySelectedLoggerName();
  +          focusOnAction.setEnabled(
  +            (path != null) && (node != null) && (node.getParent() != null) && 
!hiddenSet.contains(logger));
  +          hideAction.setEnabled(
  +            (path != null) && (node != null) && (node.getParent() != null));
  +
  +          if (!focusOnAction.isEnabled()) {
  +            setFocusOnSelected(false);
             }
  +
  +
             expandAction.setEnabled(path != null);
  +
  +          if (logger != null) {
  +            boolean isHidden = hiddenSet.contains(logger);
  +            popupMenu.hideCheck.setSelected(isHidden);
  +            ignoreLoggerButton.setSelected(isHidden);
  +          }
  +
             collapseAction.setEnabled(path != null);
  -          
  +
             reconfigureFocusOnText();
           }
         });
  @@ -360,15 +479,20 @@
   
       /**
        * This listener ensures the Tool bar toggle button and popup menu check box
  -     * stay in sync
  +     * 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());
  -          logTreeModel.nodeChanged(
  -            (TreeNode) logTree.getSelectionPath().getLastPathComponent());
  +
  +          if (logTree.getSelectionPath() != null) {
  +            logTreeModel.nodeChanged(
  +              (TreeNode) logTree.getSelectionPath().getLastPathComponent());
  +          }
  +          fireChangeEvent();
           }
         });
   
  @@ -379,7 +503,6 @@
       logTree.addMouseListener(
         new MouseAdapter() {
           public void mouseClicked(MouseEvent e) {
  -
             if (
               (e.getClickCount() > 1)
                 && ((e.getModifiers() & InputEvent.CTRL_MASK) > 0)
  @@ -387,50 +510,56 @@
               expandCurrentlySelectedNode();
               e.consume();
             } else if (e.getClickCount() > 1) {
  -          super.mouseClicked(e);
  +            super.mouseClicked(e);
               LogLog.debug("Ignoring dbl click event " + e);
             }
           }
         });
     }
  - 
   
  -    private void reconfigureFocusOnText() {
  -        String logger = getCurrentlySelectedLoggerName();
  -        if(logger == null || logger.length()==0) {
  -            focusOnAction.putValue(Action.NAME, "Focus On...");
  -        } else {
  -            focusOnAction.putValue(Action.NAME, "Focus On '" + logger + "'");
  -        }
  -        
  -        // need to ensure the button doens't update itself with the text, looks 
stupid otherwise
  -        focusOnLoggerButton.setText(null);
  +  private void reconfigureFocusOnText() {
  +    String logger = getCurrentlySelectedLoggerName();
  +
  +    if ((logger == null) || (logger.length() == 0)) {
  +      focusOnAction.putValue(Action.NAME, "Focus On...");
  +    } else {
  +      focusOnAction.putValue(Action.NAME, "Focus On '" + logger + "'");
       }
  -    
  -    /**
  -     * Returns true if the FocusOn element has been selected
  -     * @return true if the FocusOn action/lement has been selected
  -     */
  +
  +    // need to ensure the button doens't update itself with the text, looks stupid 
otherwise
  +    focusOnLoggerButton.setText(null);
  +  }
  +
  +  /**
  +   * 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);
  -     }
   
  +  void setFocusOnSelected(boolean selected) {
  +    if (selected) {
  +      focusOnAction.putValue("checked", Boolean.TRUE);
  +    } else {
  +      focusOnAction.putValue("checked", null);
  +    }
     }
  -  void addFocusOnPropertyChangeListener(PropertyChangeListener l) {
  -      focusOnAction.addPropertyChangeListener(l);
  -  }
   
  -  void removeFocusOnPropertyChangeListener(PropertyChangeListener l) {
  -    focusOnAction.removePropertyChangeListener(l);    
  +  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);
  +    }
     }
  -  
  +
     private Action createEditLoggerAction() {
       Action action =
         new AbstractAction() {
  @@ -535,15 +664,17 @@
   
       for (int i = 0; i < paths.length; i++) {
         TreePath path = paths[i];
  +
         /**
  -       * Handle an expansion of the Root node by only doing the first level.  
  +       * Handle an expansion of the Root node by only doing the first level.
          * Safe...
          */
  -      if(path.getPathCount()==1){
  -             logTree.expandPath(path);
  -             return;
  +      if (path.getPathCount() == 1) {
  +        logTree.expandPath(path);
  +
  +        return;
         }
  -      
  +
         DefaultMutableTreeNode treeNode =
           (DefaultMutableTreeNode) path.getLastPathComponent();
   
  @@ -602,6 +733,8 @@
       collapseButton.setText(null);
       focusOnLoggerButton.setAction(focusOnAction);
       focusOnLoggerButton.setText(null);
  +    ignoreLoggerButton.setAction(hideAction);
  +    ignoreLoggerButton.setText(null);
   
       expandButton.setFont(expandButton.getFont().deriveFont(Font.BOLD));
       collapseButton.setFont(collapseButton.getFont().deriveFont(Font.BOLD));
  @@ -615,7 +748,9 @@
       toolbar.add(collapseButton);
       toolbar.addSeparator();
       toolbar.add(focusOnLoggerButton);
  -    toolbar.add(editLoggerButton);
  +    toolbar.add(ignoreLoggerButton);
  +
  +    //    toolbar.add(editLoggerButton);
       toolbar.addSeparator();
   
       toolbar.add(Box.createHorizontalGlue());
  @@ -661,12 +796,24 @@
           component.setFont(originalFont.deriveFont(Font.PLAIN));
         }
   
  +      originalFont = component.getFont();
  +
  +      String logger =
  +        ((DefaultMutableTreeNode) value).getUserObject().toString();
  +
  +      if (hiddenSet.contains(logger)) {
  +        component.setEnabled(false);
  +      } else {
  +        component.setEnabled(true);
  +      }
  +
         return component;
       }
     }
   
     private class LoggerTreePopupMenu extends JPopupMenu {
       JCheckBoxMenuItem focusOnCheck = new JCheckBoxMenuItem();
  +    JCheckBoxMenuItem hideCheck = new JCheckBoxMenuItem();
   
       private LoggerTreePopupMenu() {
         initMenu();
  @@ -680,8 +827,13 @@
         add(collapseAction);
         addSeparator();
         focusOnCheck.setAction(focusOnAction);
  +      hideCheck.setAction(hideAction);
         add(focusOnCheck);
  -      add(editLoggerAction);
  +      add(hideCheck);
  +
  +      //      add(editLoggerAction);
  +      addSeparator();
  +      add(clearIgnoreListAction);
       }
   
       /* (non-Javadoc)
  
  
  
  1.29      +0 -1      jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java
  
  Index: LogUI.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- LogUI.java        15 Sep 2003 06:38:35 -0000      1.28
  +++ LogUI.java        15 Sep 2003 22:13:26 -0000      1.29
  @@ -558,7 +558,6 @@
   
                public void propertyChange(PropertyChangeEvent evt) {
                        double dataRate = ((Double)evt.getNewValue()).doubleValue();
  -                     LogLog.debug("dataRate=" + dataRate);
                        statusBar.setDataRate(dataRate);
                        
                }});
  
  
  
  1.10      +97 -65    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.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- LogPanel.java     14 Sep 2003 04:08:16 -0000      1.9
  +++ LogPanel.java     15 Sep 2003 22:13:27 -0000      1.10
  @@ -55,6 +55,22 @@
    */
   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.helpers.LogLog;
  +import org.apache.log4j.spi.LoggingEvent;
  +
   import java.awt.BorderLayout;
   import java.awt.Container;
   import java.awt.Dimension;
  @@ -73,8 +89,10 @@
   import java.awt.event.MouseMotionAdapter;
   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;
  @@ -86,7 +104,9 @@
   import java.io.ObjectInputStream;
   import java.io.ObjectOutputStream;
   import java.io.Serializable;
  +
   import java.text.NumberFormat;
  +
   import java.util.ArrayList;
   import java.util.Enumeration;
   import java.util.HashMap;
  @@ -129,32 +149,16 @@
   import javax.swing.ListSelectionModel;
   import javax.swing.SwingUtilities;
   import javax.swing.event.ChangeEvent;
  +import javax.swing.event.ChangeListener;
   import javax.swing.event.DocumentEvent;
   import javax.swing.event.DocumentListener;
   import javax.swing.event.ListSelectionEvent;
   import javax.swing.event.ListSelectionListener;
   import javax.swing.event.TableColumnModelEvent;
   import javax.swing.event.TableColumnModelListener;
  -import javax.swing.table.AbstractTableModel;
   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.helpers.LogLog;
  -import org.apache.log4j.spi.LoggingEvent;
  -
   
   /**
      * LogPanel encapsulates all the necessary bits and pieces of a
  @@ -233,15 +237,20 @@
             table.addColumn(new TableColumn(e.getNewModelIndex()));
           }
         });
  -    tableModel.addPropertyChangeListener("cyclic", new PropertyChangeListener(){
  -
  -      public void propertyChange(PropertyChangeEvent arg0) {
  -        if(tableModel.isCyclic()){
  -          statusBar.setMessage("Changed to Cyclic Mode. Maximum # events kept: " + 
tableModel.getMaxSize());
  -        } else{
  -          statusBar.setMessage("Changed to Unlimited Mode. Warning, you may run out 
of memory.");
  -        }       
  -      }});
  +    tableModel.addPropertyChangeListener(
  +      "cyclic",
  +      new PropertyChangeListener() {
  +        public void propertyChange(PropertyChangeEvent arg0) {
  +          if (tableModel.isCyclic()) {
  +            statusBar.setMessage(
  +              "Changed to Cyclic Mode. Maximum # events kept: "
  +              + tableModel.getMaxSize());
  +          } else {
  +            statusBar.setMessage(
  +              "Changed to Unlimited Mode. Warning, you may run out of memory.");
  +          }
  +        }
  +      });
       table.setRowHeight(20);
       table.setShowGrid(false);
   
  @@ -262,21 +271,39 @@
        * We listen for when the FocusOn action changes, and then ensure the 
Refinement filter is set
        * accordingly.
        */
  -    logTreePanel.addFocusOnPropertyChangeListener(
  -      new PropertyChangeListener() {
  -        public void propertyChange(PropertyChangeEvent evt) {
  -          if (logTreePanel.isFocusOnSelected()) {
  -            final String loggerName =
  -              logTreePanel.getCurrentlySelectedLoggerName();
  -            ruleMediator.setRefinementRule(
  -              new AbstractRule() {
  -                public boolean evaluate(LoggingEvent e) {
  -                  return e.getLoggerName().startsWith(loggerName);
  -                }
  -              });
  -          } else {
  -            ruleMediator.setRefinementRule(null);
  -          }
  +    logTreePanel.addChangeListener(
  +      new ChangeListener() {
  +        public void stateChanged(ChangeEvent evt) {
  +          final String currentlySelectedLoggerName =
  +            logTreePanel.getCurrentlySelectedLoggerName();
  +
  +          /**
  +           * We run this later so that the GUI gets a chance to repaint
  +           * etc, this might take a little time.
  +           */
  +          SwingUtilities.invokeLater(
  +            new Runnable() {
  +              public void run() {
  +                ruleMediator.setRefinementRule(
  +                  new AbstractRule() {
  +                    public boolean evaluate(LoggingEvent e) {
  +                      boolean isHidden =
  +                        logTreePanel.getHiddenSet().contains(
  +                          e.getLoggerName());
  +                      boolean result = !isHidden;
  +
  +                      if (result && logTreePanel.isFocusOnSelected()) {
  +                        result =
  +                          result
  +                          && e.getLoggerName().startsWith(
  +                            currentlySelectedLoggerName);
  +                      }
  +
  +                      return result;
  +                    }
  +                  });
  +              }
  +            });
           }
         });
   
  @@ -624,17 +651,22 @@
       detailToolbar.add(editDetailButton);
       detailToolbar.addSeparator();
       detailToolbar.add(Box.createHorizontalStrut(5));
  -    
  -    Action closeDetailAction = new AbstractAction(null, 
LineIconFactory.createCloseIcon()){
   
  -      public void actionPerformed(ActionEvent arg0) {
  -        toggleDetailPanel();
  -      }};
  -    closeDetailAction.putValue(Action.SHORT_DESCRIPTION, "Hides the Detail Panel");
  +    Action closeDetailAction =
  +      new AbstractAction(null, LineIconFactory.createCloseIcon()) {
  +        public void actionPerformed(ActionEvent arg0) {
  +          toggleDetailPanel();
  +        }
  +      };
  +
  +    closeDetailAction.putValue(
  +      Action.SHORT_DESCRIPTION, "Hides the Detail Panel");
  +
       SmallButton closeDetailButton = new SmallButton(closeDetailAction);
       detailToolbar.add(closeDetailButton);
   
       detailPanel.add(detailToolbar, BorderLayout.NORTH);
  +
       JPopupMenu editDetailPopupMenu = new JPopupMenu();
       editDetailPopupMenu.add(editDetailAction);
       editDetailPopupMenu.addSeparator();
  @@ -852,16 +884,15 @@
       menuItemScrollBottom.setIcon(
         new ImageIcon(ChainsawIcons.SCROLL_TO_BOTTOM));
   
  -//    JMenuItem menuItemRemoveColorFilter =
  -//      new JMenuItem("Remove all color filters");
  -//    menuItemRemoveColorFilter.addActionListener(
  -//      new ActionListener() {
  -//        public void actionPerformed(ActionEvent evt) {
  -//          //            colorDisplaySelector.clearColors();
  -//          colorFilter.clear();
  -//        }
  -//      });
  -
  +    //    JMenuItem menuItemRemoveColorFilter =
  +    //      new JMenuItem("Remove all color filters");
  +    //    menuItemRemoveColorFilter.addActionListener(
  +    //      new ActionListener() {
  +    //        public void actionPerformed(ActionEvent evt) {
  +    //          //            colorDisplaySelector.clearColors();
  +    //          colorFilter.clear();
  +    //        }
  +    //      });
       JMenuItem menuItemColumnSelector =
         new JMenuItem("Select display columns...");
       menuItemColumnSelector.addActionListener(
  @@ -920,21 +951,22 @@
       p.add(new JSeparator());
   
       p.add(menuItemDisplayFilter);
  -    p.add(menuColumnDisplayFilter);
  -    p.add(menuColumnColorFilter);
  +
  +    //    p.add(menuColumnDisplayFilter);
  +    //    p.add(menuColumnColorFilter);
       p.add(new JSeparator());
   
  -    JMenu removeSubMenu = new JMenu("Remove");
  +    //    JMenu removeSubMenu = new JMenu("Remove");
       JMenu selectSubMenu = new JMenu("Select");
   
       selectSubMenu.add(menuItemColumnSelector);
   
  -//    removeSubMenu.add(menuItemRemoveColorFilter);
  -    removeSubMenu.add(menuItemRemoveDisplayFilter);
  -
  -    p.add(selectSubMenu);
  -    p.add(removeSubMenu);
  +    //    removeSubMenu.add(menuItemRemoveColorFilter);
  +    //    removeSubMenu.add(menuItemRemoveDisplayFilter);
  +    p.add(menuItemColumnSelector);
   
  +    //    p.add(selectSubMenu);
  +    //    p.add(removeSubMenu);
       final PopupListener popupListener = new PopupListener(p);
   
       eventsPane.addMouseListener(popupListener);
  
  
  

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

Reply via email to