psmith      2003/06/18 17:58:50

  Modified:    src/java/org/apache/log4j/chainsaw ReceiversPanel.java
  Log:
  Added nice close icon button courtesy of Scott Deboy.
  
  Changed the way the mouse works with the Tree.  CTRL-clicking a 
  Socket Receiver now toggles activation of the receiver.
  
  Will move this to a specific popup menu shortly.
  
  Revision  Changes    Path
  1.3       +103 -16   
jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java
  
  Index: ReceiversPanel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ReceiversPanel.java       18 Jun 2003 22:22:45 -0000      1.2
  +++ ReceiversPanel.java       19 Jun 2003 00:58:50 -0000      1.3
  @@ -55,10 +55,20 @@
   import org.apache.log4j.net.SocketReceiver;
   import org.apache.log4j.plugins.PluginRegistry;
   
  +import java.awt.BasicStroke;
   import java.awt.BorderLayout;
  +import java.awt.Color;
  +import java.awt.Component;
  +import java.awt.Graphics;
  +import java.awt.Graphics2D;
   import java.awt.GridBagConstraints;
   import java.awt.GridBagLayout;
  +import java.awt.RenderingHints;
   import java.awt.event.ActionEvent;
  +import java.awt.event.InputEvent;
  +import java.awt.event.MouseAdapter;
  +import java.awt.event.MouseEvent;
  +import java.awt.event.MouseListener;
   
   import java.util.Iterator;
   import java.util.List;
  @@ -66,6 +76,7 @@
   import javax.swing.AbstractAction;
   import javax.swing.Action;
   import javax.swing.BorderFactory;
  +import javax.swing.Icon;
   import javax.swing.ImageIcon;
   import javax.swing.JComponent;
   import javax.swing.JPanel;
  @@ -79,10 +90,10 @@
   
   /**
    * This panel is used to manage all the Receivers configured within Log4j
  - * 
  - * 
  - * @author Paul Smith <[EMAIL PROTECTED]>
    *
  + *
  + * @author Paul Smith <[EMAIL PROTECTED]>
  + * @author Scott Debogy <[EMAIL PROTECTED]>
    */
   class ReceiversPanel extends JPanel {
     private final JTree receiversTree = new JTree();
  @@ -94,6 +105,10 @@
       setBorder(BorderFactory.createEtchedBorder());
       receiversTree.setModel(ReceiversTreeModel.create());
   
  +    receiversTree.setToolTipText("Allows you to manage Log4j Receivers");
  +    
  +
  +    
       /**
        * We need to setup a runnable that updates the tree
        * any time a Socket event happens (opening/closing of a socket).
  @@ -159,21 +174,43 @@
       c.weighty = 1.0;
       buttonPanel.add(pauseReceiverButton, c);
   
  -    c.gridx = 1;
  -    c.weightx = 1.0;
  -    c.weighty = 1.0;
  +    c.gridx = 2;
  +    c.weightx = 0.00;
  +    c.weighty = 0.0;
  +    c.ipadx = 1;
  +    c.ipady = 1;
  +    c.fill = GridBagConstraints.BOTH;
       c.anchor = GridBagConstraints.EAST;
  -    buttonPanel.add(
  -      new SmallButton(
  -        new AbstractAction("Close") {
  +
  +    Action closeAction =
  +      new AbstractAction(null, new CloseIcon(8, 1, 1)) {
           public void actionPerformed(ActionEvent e) {
             logui.toggleReceiversPanel();
           }
  -      }));
  +      };
  +
  +    closeAction.putValue(
  +      Action.SHORT_DESCRIPTION, "Closes the Receiver panel");
   
  -    receiversTree.addTreeSelectionListener(
  -      new TreeSelectionListener() {
  -        public void valueChanged(TreeSelectionEvent e) {
  +    buttonPanel.add(new SmallButton(closeAction));
  +
  +//    receiversTree.addTreeSelectionListener(
  +//      new TreeSelectionListener() {
  +//        public void valueChanged(TreeSelectionEvent e) {
  +//        }
  +//      });
  +    receiversTree.addMouseListener(new MouseAdapter(){
  +      
  +      public void mouseRelease(MouseEvent e) {
  +        handle(e);
  +      }
  +
  +      public void mousePressed(MouseEvent e){
  +        handle(e);      
  +      }
  +      
  +      public void handle(MouseEvent e) {
  +        if((e.getModifiers() & InputEvent.CTRL_MASK)>0) {
             DefaultMutableTreeNode node =
               (DefaultMutableTreeNode) receiversTree
               .getLastSelectedPathComponent();
  @@ -181,20 +218,25 @@
             if (node == null) {
               return;
             }
  +//          e.consume();
   
             Object nodeInfo = node.getUserObject();
   
             if (nodeInfo instanceof SocketReceiver) {
               SocketReceiver receiver = (SocketReceiver) nodeInfo;
  -
  +            
  +            
               if (receiver.isActive()) {
                 receiver.setActive(false);
                 pauseReceiverButtonAction.setEnabled(false);
                 playReceiverButtonAction.setEnabled(true);
  +              logui.getStatusBar().setMessage("Deactivating " + receiver.getName());
  +              
               } else {
                 receiver.setActive(true);
                 pauseReceiverButtonAction.setEnabled(true);
                 playReceiverButtonAction.setEnabled(false);
  +              logui.getStatusBar().setMessage("Activating " + receiver.getName());
               }
   
               updateReceiverTree.run();
  @@ -203,8 +245,8 @@
               playReceiverButtonAction.setEnabled(false);
             }
           }
  -      });
  -
  +      }
  +    });
       JComponent component = receiversTree;
   
       add(new JScrollPane(component), BorderLayout.CENTER);
  @@ -230,4 +272,49 @@
         element.addSocketNodeEventListener(listener);
       }
     }
  +
  +  /**
  +   *
  +   * @author Scott Deboy <[EMAIL PROTECTED]>
  +   *
  +   */
  +  class CloseIcon
  +      implements Icon
  +  {
  +      int size;
  +      int xOffSet;
  +      int yOffSet;
  +
  +      public CloseIcon(int size, int xOffSet, int yOffSet) {
  +          this.size=size;
  +          this.xOffSet=xOffSet;
  +          this.yOffSet=yOffSet;        
  +      }
  +
  +      public int getIconHeight()
  +      {
  +          return size;
  +      }
  +
  +      public int getIconWidth()
  +      {
  +          return size;
  +      }
  +
  +      public void paintIcon(
  +          Component c,
  +          Graphics g,
  +          int x,
  +          int y)
  +      {
  +          Graphics2D g2D = (Graphics2D)g;
  +          g2D.setStroke(new BasicStroke(1.5f));
  +          g2D.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
  +          RenderingHints.VALUE_STROKE_PURE);
  +          g2D.setColor(Color.black);
  +          g2D.drawLine(x + xOffSet, y + yOffSet, x+size +xOffSet, y+size+yOffSet);
  +          g2D.drawLine(x + xOffSet, y+size+yOffSet, x+size+xOffSet, y+yOffSet);
  +      }
  +  }
  +
   }
  
  
  

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

Reply via email to