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]