psmith      2003/09/01 20:38:38

  Modified:    src/java/org/apache/log4j/chainsaw LoggerNameTreePanel.java
  Log:
  Changed the minitoolbar for this component to be a JToolbar
  just like the Receiver panel does.  This gives us nicer
  L&F on some l&f's. more consistent anyway.
  
  Exposed an Edit button, plus added a Close button with
  associated action functionality to hide the Logger Name tree.
  
  Revision  Changes    Path
  1.3       +155 -9    
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LoggerNameTreePanel.java  1 Sep 2003 22:33:32 -0000       1.2
  +++ LoggerNameTreePanel.java  2 Sep 2003 03:38:38 -0000       1.3
  @@ -55,6 +55,9 @@
   import org.apache.log4j.helpers.LogLog;
   
   import java.awt.BorderLayout;
  +import java.awt.Component;
  +import java.awt.Dimension;
  +import java.awt.FlowLayout;
   import java.awt.event.ActionEvent;
   import java.awt.event.InputEvent;
   import java.awt.event.MouseAdapter;
  @@ -68,16 +71,23 @@
   import javax.swing.AbstractAction;
   import javax.swing.Action;
   import javax.swing.BorderFactory;
  +import javax.swing.Box;
   import javax.swing.BoxLayout;
  +import javax.swing.Icon;
   import javax.swing.ImageIcon;
   import javax.swing.JButton;
   import javax.swing.JPanel;
   import javax.swing.JScrollPane;
  +import javax.swing.JToolBar;
   import javax.swing.JTree;
   import javax.swing.ToolTipManager;
  +import javax.swing.UIManager;
  +import javax.swing.event.TreeModelEvent;
  +import javax.swing.event.TreeModelListener;
   import javax.swing.event.TreeSelectionEvent;
   import javax.swing.event.TreeSelectionListener;
   import javax.swing.tree.DefaultMutableTreeNode;
  +import javax.swing.tree.DefaultTreeCellRenderer;
   import javax.swing.tree.DefaultTreeSelectionModel;
   import javax.swing.tree.TreeNode;
   import javax.swing.tree.TreePath;
  @@ -93,9 +103,13 @@
     private static final int WARN_DEPTH = 4;
     private final JTree logTree;
     private final JScrollPane scrollTree;
  -  private final JPanel toolbarPanel = new JPanel();
  +  private final JToolBar toolbar = new JToolBar();
     private final JButton expandButton = new SmallButton();
  +  private final JButton closeButton = new SmallButton();
  +  private final JButton editLoggerButton = new SmallButton();
     private final Action expandAction;
  +  private final Action closeAction;
  +  private final Action editLoggerAction;
   
     /**
      * @param logTreeModel
  @@ -105,7 +119,7 @@
       setBorder(BorderFactory.createEtchedBorder());
   
       logTree =
  -      new LoggerNameTree(logTreeModel) {
  +      new JTree(logTreeModel) {
             public String getToolTipText(MouseEvent ev) {
               if (ev == null) {
                 return null;
  @@ -134,6 +148,34 @@
           };
   
       ToolTipManager.sharedInstance().registerComponent(logTree);
  +    logTree.setPreferredSize(new Dimension(400, 400));
  +    logTree.setCellRenderer(new LoggerNameTreeCellRenderer());
  +
  +    //       ============================================
  +    logTreeModel.addTreeModelListener(
  +      new TreeModelListener() {
  +        public void treeNodesChanged(TreeModelEvent e) {
  +          ensureRootExpanded();
  +        }
  +
  +        public void treeNodesInserted(TreeModelEvent e) {
  +          ensureRootExpanded();
  +        }
  +
  +        public void treeNodesRemoved(TreeModelEvent e) {
  +          ensureRootExpanded();
  +        }
  +
  +        private void ensureRootExpanded() {
  +          logTree.expandRow(0);
  +        }
  +
  +        public void treeStructureChanged(TreeModelEvent e) {
  +          ensureRootExpanded();
  +        }
  +      });
  +
  +    logTree.setEditable(false);
   
       //       TODO decide if Multi-selection is useful, and how it would work 
       TreeSelectionModel selectionModel = new DefaultTreeSelectionModel();
  @@ -143,21 +185,42 @@
       logTree.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
       scrollTree = new JScrollPane(logTree);
   
  -    toolbarPanel.setLayout(new BoxLayout(toolbarPanel, BoxLayout.X_AXIS));
  +    toolbar.setLayout(new BoxLayout(toolbar, BoxLayout.X_AXIS));
   
       expandAction = createExpandAction();
  +    editLoggerAction = createEditLoggerAction();
  +    closeAction = createCloseAction();
   
       setupListeners();
       configureToolbarPanel();
   
  -    add(toolbarPanel, BorderLayout.NORTH);
  +    add(toolbar, BorderLayout.NORTH);
       add(scrollTree, BorderLayout.CENTER);
     }
   
     /**
  -  * Configures varoius listeners etc for the components within
  -  * this Class.
  +   * 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, new CloseIcon(8, 1, 1));
  +
  +    return action;
  +  }
  +
  +  /**
  +    * Configures varoius listeners etc for the components within
  +    * this Class.
  +    */
     private void setupListeners() {
       /**
          * Enable the actions depending on state of the tree selection
  @@ -167,6 +230,7 @@
           public void valueChanged(TreeSelectionEvent e) {
             TreePath path = e.getNewLeadSelectionPath();
             expandAction.setEnabled(path != null);
  +          editLoggerAction.setEnabled(path != null);
           }
         });
   
  @@ -184,11 +248,32 @@
                 && ((e.getModifiers() & InputEvent.CTRL_MASK) > 0)
                 && ((e.getModifiers() & InputEvent.BUTTON1_MASK) > 0)) {
               expandCurrentlySelectedNode();
  +          } else if (e.getClickCount() > 1) {
  +            LogLog.debug("Ignoring dbl click event " + e);
             }
           }
         });
     }
   
  +  private Action createEditLoggerAction() {
  +    Action action =
  +      new AbstractAction() {
  +        public void actionPerformed(ActionEvent e) {
  +          // TODO Auto-generated method stub
  +        }
  +      };
  +
  +    action.putValue(Action.NAME, "Edit filters/colors");
  +    action.putValue(
  +      Action.SHORT_DESCRIPTION,
  +      "Allows you to specify filters and coloring for this Logger");
  +    action.putValue(
  +      Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_EDIT_RECEIVER));
  +    action.setEnabled(false);
  +
  +    return action;
  +  }
  +
     /**
      * Creates an action that is used to expand the selected node
      * and all children
  @@ -204,7 +289,8 @@
   
       action.putValue(Action.NAME, "Expand branch");
       action.putValue(
  -      Action.SHORT_DESCRIPTION, "Expands all the child nodes recursively");
  +      Action.SHORT_DESCRIPTION,
  +      "Expands all the child nodes of the currently selected node, recursively");
       action.putValue(
         Action.SMALL_ICON, new ImageIcon(ChainsawIcons.UNDOCKED_ICON));
       action.setEnabled(false);
  @@ -220,6 +306,12 @@
     private void expandCurrentlySelectedNode() {
       TreePath[] paths = logTree.getSelectionPaths();
   
  +    if (paths == null) {
  +      return;
  +    }
  +
  +    LogLog.debug("Expanding all children of selected node");
  +
       for (int i = 0; i < paths.length; i++) {
         TreePath path = paths[i];
         DefaultMutableTreeNode treeNode =
  @@ -272,8 +364,62 @@
        * component
        */
     private void configureToolbarPanel() {
  +    toolbar.setFloatable(false);
  +
       expandButton.setAction(expandAction);
  -    expandButton.setText("");
  -    toolbarPanel.add(expandButton);
  +    expandButton.setText(null);
  +    editLoggerButton.setAction(editLoggerAction);
  +    editLoggerButton.setText(null);
  +    closeButton.setAction(closeAction);
  +    closeButton.setText(null);
  +
  +    toolbar.add(expandButton);
  +    toolbar.add(editLoggerButton);
  +    toolbar.addSeparator();
  +
  +    toolbar.add(Box.createHorizontalGlue());
  +    toolbar.add(closeButton);
  +    toolbar.add(Box.createHorizontalStrut(5));
  +  }
  +
  +  /**
  +        *
  +        * @author Paul Smith <[EMAIL PROTECTED]>
  +        *
  +        */
  +  private static class LoggerNameTreeCellRenderer
  +    extends DefaultTreeCellRenderer {
  +    private JPanel panel = new JPanel();
  +
  +    private LoggerNameTreeCellRenderer() {
  +      super();
  +      panel.setBackground(UIManager.getColor("Tree.textBackground"));
  +
  +      Icon leafIcon = getDefaultLeafIcon();
  +      Icon icon = new ImageIcon(ChainsawIcons.WINDOW_ICON);
  +
  +      panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
  +      panel.add(this);
  +
  +      setLeafIcon(null);
  +      setOpaque(false);
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see 
javax.swing.tree.TreeCellRenderer#getTreeCellRendererComponent(javax.swing.JTree, 
java.lang.Object, boolean, boolean, boolean, int, boolean)
  +     */
  +    public Component getTreeCellRendererComponent(
  +      JTree tree, Object value, boolean sel, boolean expanded, boolean leaf,
  +      int row, boolean hasFocus) {
  +      Component component =
  +        super.getTreeCellRendererComponent(
  +          tree, value, sel, expanded, leaf, row, hasFocus);
  +
  +      if (row == 0) {
  +      } else {
  +      }
  +
  +      return panel;
  +    }
     }
   }
  
  
  

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

Reply via email to