psmith      2003/06/17 23:29:38

  Modified:    src/java/org/apache/log4j/chainsaw LogUI.java
                        ChainsawToolBarAndMenus.java
  Added:       src/java/org/apache/log4j/chainsaw ReceiversPanel.java
  Log:
  * factored out the Receiver panel into its own class.
  
  * Changed the panels home from a Dialog to a snapable
  location within the main Chainsaw2 window.  I have to say, this
  looks a lot better, IMHO.  F6 now toggles the display within the window.
  
  Revision  Changes    Path
  1.104     +30 -4     
jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/LogUI.java
  
  Index: LogUI.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/LogUI.java,v
  retrieving revision 1.103
  retrieving revision 1.104
  diff -u -r1.103 -r1.104
  --- LogUI.java        18 Jun 2003 04:00:06 -0000      1.103
  +++ LogUI.java        18 Jun 2003 06:29:38 -0000      1.104
  @@ -65,10 +65,13 @@
   
   import java.awt.BorderLayout;
   import java.awt.Component;
  +import java.awt.Container;
   import java.awt.Dimension;
   import java.awt.Event;
   import java.awt.FlowLayout;
   import java.awt.Font;
  +import java.awt.GridBagConstraints;
  +import java.awt.GridBagLayout;
   import java.awt.Point;
   import java.awt.Toolkit;
   import java.awt.event.ActionEvent;
  @@ -113,6 +116,7 @@
   import javax.swing.BorderFactory;
   import javax.swing.ButtonGroup;
   import javax.swing.ImageIcon;
  +import javax.swing.JButton;
   import javax.swing.JCheckBox;
   import javax.swing.JCheckBoxMenuItem;
   import javax.swing.JComboBox;
  @@ -132,6 +136,7 @@
   import javax.swing.JTable;
   import javax.swing.JTextField;
   import javax.swing.JToolBar;
  +import javax.swing.JTree;
   import javax.swing.JWindow;
   import javax.swing.KeyStroke;
   import javax.swing.ListSelectionModel;
  @@ -144,10 +149,13 @@
   import javax.swing.event.ListSelectionListener;
   import javax.swing.event.TableColumnModelEvent;
   import javax.swing.event.TableColumnModelListener;
  +import javax.swing.event.TreeSelectionEvent;
  +import javax.swing.event.TreeSelectionListener;
   import javax.swing.table.AbstractTableModel;
   import javax.swing.table.TableColumn;
   import javax.swing.table.TableColumnModel;
   import javax.swing.table.TableModel;
  +import javax.swing.tree.DefaultMutableTreeNode;
   
   
   /**
  @@ -187,6 +195,7 @@
     private static final String STATUS_BAR = "StatusBar";
     private static final String COLUMNS_EXTENSION = ".columns";
     private static ChainsawSplash splash;
  +  private JPanel receiversPanel;
     ChainsawTabbedPane tabbedPane;
     private JToolBar toolbar;
     private final ChainsawStatusBar statusBar = new ChainsawStatusBar();
  @@ -271,6 +280,7 @@
      *
      */
     private void initGUI() {
  +    receiversPanel = new ReceiversPanel(this);
       tbms = new ChainsawToolBarAndMenus(this);
       toolbar = tbms.getToolbar();
       setJMenuBar(tbms.getMenubar());
  @@ -369,10 +379,9 @@
       }
   
       List utilLevels = new ArrayList();
  -    Iterator iter = utilList.iterator();
   
  -    while (iter.hasNext()) {
  -      utilLevels.add(iter.next().toString());
  +    for (Iterator iterator = utilLevels.iterator(); iterator.hasNext();) {
  +      utilLevels.add(iterator.next().toString());
       }
   
       levelMap.put(ChainsawConstants.UTIL_LOGGING_EVENT_TYPE, utilLevels);
  @@ -532,6 +541,22 @@
         tabbedPane.getComponentAt(tabbedPane.indexOfTab("Welcome")));
     }
   
  +  void toggleReceiversPanel() {
  +    SwingUtilities.invokeLater(
  +      new Runnable() {
  +        public void run() {
  +          if (getContentPane().isAncestorOf(receiversPanel)) {
  +            getContentPane().remove(receiversPanel);
  +          } else {
  +            getContentPane().add(receiversPanel, BorderLayout.WEST);
  +          }
  +
  +          getContentPane().invalidate();
  +          getContentPane().validate();
  +        }
  +      });
  +  }
  +
     ChainsawStatusBar getStatusBar() {
       return statusBar;
     }
  @@ -561,7 +586,7 @@
             try {
               int progress = 1;
               final int delay = 100;
  -            
  +
               handler.close();
               panel.setProgress(progress++);
   
  @@ -1005,6 +1030,7 @@
       try {
         UIManager.setLookAndFeel(lookAndFeelClassName);
         SwingUtilities.updateComponentTreeUI(this);
  +      SwingUtilities.updateComponentTreeUI(receiversPanel);
         tbms.lookAndFeelUpdated();
   
         if (tbms != null) {
  
  
  
  1.42      +3 -377    
jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
  
  Index: ChainsawToolBarAndMenus.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- ChainsawToolBarAndMenus.java      18 Jun 2003 04:07:40 -0000      1.41
  +++ ChainsawToolBarAndMenus.java      18 Jun 2003 06:29:38 -0000      1.42
  @@ -138,7 +138,6 @@
   class ChainsawToolBarAndMenus implements ChangeListener, SettingsListener {
     private static final String SETTING_RESPONSIVENESS = "Responsiveness";
     private static final String SETTING_TAB_PLACEMENT = "tab.placement";
  -  final JDialog receiversWindow;
     final JTextField findTextField;
     private final Action clearAction;
     private final Action closeAction;
  @@ -175,7 +174,6 @@
   
     ChainsawToolBarAndMenus(final LogUI logui) {
       this.logui = logui;
  -    receiversWindow = new JDialog(logui, "Receivers", false);
       toolbar = new JToolBar(JToolBar.HORIZONTAL);
       menuBar = new JMenuBar();
       fileMenu = new FileMenu(logui);
  @@ -422,7 +420,6 @@
     }
   
     void lookAndFeelUpdated() {
  -    SwingUtilities.updateComponentTreeUI(receiversWindow);
       fileMenu.lookAndFeelUpdated();
     }
   
  @@ -684,7 +681,7 @@
       viewMenu.add(tabMenu);
       viewMenu.add(responsiveNess);
       viewMenu.addSeparator();
  -    viewMenu.add(showReceiversAction);
  +    viewMenu.add(new JCheckBoxMenuItem(showReceiversAction));
       viewMenu.add(lookAndFeelMenu);
   
       JMenu helpMenu = new JMenu("Help");
  @@ -816,147 +813,13 @@
      * @return
      */
     private Action createShowReceiversAction() {
  -    final JTree tree = new JTree(ReceiversTreeModel.create());
  -
  -    /**
  -     * We need to setup a runnable that updates the tree
  -     * any time a Socket event happens (opening/closing of a socket).
  -     *
  -     * We do this by installing a SocketNodeEventListener in ALL the
  -     * registered SocketReceivers
  -     */
  -    final Runnable updateReceiverTree =
  -      new Runnable() {
  -        public void run() {
  -          tree.setModel(ReceiversTreeModel.create());
  -        }
  -      };
  -
  -    tree.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
  -
  -    tree.setCellRenderer(new ReceiverTreeCellRenderer());
  -
  -    final Container container = receiversWindow.getContentPane();
  -    container.setLayout(new BorderLayout());
  -
  -    JPanel buttonPanel = new JPanel(new GridBagLayout());
  -    GridBagConstraints c = new GridBagConstraints();
  -
  -    final Action playReceiverButtonAction =
  -      new AbstractAction() {
  -        public void actionPerformed(ActionEvent e) {
  -        }
  -      };
  -
  -    playReceiverButtonAction.putValue(
  -      Action.SHORT_DESCRIPTION, "Resumes the seleted Node");
  -    playReceiverButtonAction.putValue(
  -      Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_RESUME_RECEIVER));
  -    playReceiverButtonAction.setEnabled(false);
  -
  -    SmallButton playReceiverButton = new SmallButton(playReceiverButtonAction);
  -
  -    final Action pauseReceiverButtonAction =
  -      new AbstractAction() {
  -        public void actionPerformed(ActionEvent e) {
  -        }
  -      };
  -
  -    pauseReceiverButtonAction.putValue(
  -      Action.SHORT_DESCRIPTION, "Pauses the selected Node");
  -    pauseReceiverButtonAction.putValue(
  -      Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
  -    pauseReceiverButtonAction.setEnabled(false);
  -
  -    SmallButton pauseReceiverButton =
  -      new SmallButton(pauseReceiverButtonAction);
  -
  -    c.weightx = 0.0;
  -    c.weighty = 0.0;
  -    c.ipadx = 2;
  -    c.ipady = 2;
  -    c.gridx = 0;
  -    c.gridy = 0;
  -    c.fill = GridBagConstraints.NONE;
  -    c.anchor = GridBagConstraints.WEST;
  -    buttonPanel.add(playReceiverButton, c);
  -
  -    c.gridx = 1;
  -    c.weightx = 1.0;
  -    c.weighty = 1.0;
  -    buttonPanel.add(pauseReceiverButton, c);
  -
  -    tree.addTreeSelectionListener(
  -      new TreeSelectionListener() {
  -        public void valueChanged(TreeSelectionEvent e) {
  -          DefaultMutableTreeNode node =
  -            (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
  -
  -          if (node == null) {
  -            return;
  -          }
  -
  -          Object nodeInfo = node.getUserObject();
  -
  -          if (nodeInfo instanceof SocketReceiver) {
  -            SocketReceiver receiver = (SocketReceiver) nodeInfo;
  -
  -            if (receiver.isActive()) {
  -              receiver.setActive(false);
  -              pauseReceiverButtonAction.setEnabled(false);
  -              playReceiverButtonAction.setEnabled(true);
  -            } else {
  -              receiver.setActive(true);
  -              pauseReceiverButtonAction.setEnabled(true);
  -              playReceiverButtonAction.setEnabled(false);
  -            }
  -
  -            updateReceiverTree.run();
  -          } else {
  -            pauseReceiverButtonAction.setEnabled(false);
  -            playReceiverButtonAction.setEnabled(false);
  -          }
  -        }
  -      });
  -
  -    JComponent component = tree;
  -    container.add(new JScrollPane(component), BorderLayout.CENTER);
  -    container.add(buttonPanel, BorderLayout.NORTH);
  -
  -    receiversWindow.setSize(320, 240);
  -
       final Action action =
  -      new AbstractAction("Show Receivers...") {
  +      new AbstractAction("Show Receivers") {
           public void actionPerformed(ActionEvent arg0) {
  -          tree.setModel(ReceiversTreeModel.create());
  -          receiversWindow.setLocationRelativeTo(logui);
  -
  -          if (!receiversWindow.isVisible()) {
  -            receiversWindow.setVisible(true);
  -          }
  -        }
  -      };
  -
  -    SocketNodeEventListener listener =
  -      new SocketNodeEventListener() {
  -        public void socketOpened(String remoteInfo) {
  -          SwingUtilities.invokeLater(updateReceiverTree);
  -        }
  -
  -        public void socketClosedEvent(Exception e) {
  -          SwingUtilities.invokeLater(updateReceiverTree);
  +          logui.toggleReceiversPanel();
           }
         };
   
  -    List socketReceivers =
  -      PluginRegistry.getPlugins(
  -        LogManager.getLoggerRepository(), SocketReceiver.class);
  -
  -    for (Iterator iter = socketReceivers.iterator(); iter.hasNext();) {
  -      SocketReceiver element = (SocketReceiver) iter.next();
  -      element.addSocketNodeEventListener(listener);
  -    }
  -
       action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_E));
       action.putValue(
         Action.SHORT_DESCRIPTION,
  @@ -1240,242 +1103,5 @@
       action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FIND));
   
       return action;
  -  }
  -
  -  /**
  -   * A better button class that has nice roll over effects.
  -   *
  -   * This class is borrowed (quite heavily, but with modifications)
  -   * from the "Swing: Second Edition"
  -   * book by Matthew Robinson and Pavel Vorobeiv. An excellent book on Swing.
  -   *
  -   * @author Matthew Robinson
  -   * @author Pavel Vorobeiv
  -   * @author Paul Smith <[EMAIL PROTECTED]>
  -   *
  -   */
  -  class SmallButton extends JButton implements MouseListener {
  -    protected Border m_inactive = new EmptyBorder(3, 3, 3, 3);
  -    protected Border m_border = m_inactive;
  -    protected Border m_lowered = new SoftBevelBorder(BevelBorder.LOWERED);
  -    protected Border m_raised = new SoftBevelBorder(BevelBorder.RAISED);
  -    protected Insets m_ins = new Insets(4, 4, 4, 4);
  -
  -    public SmallButton() {
  -      super();
  -      setBorder(m_inactive);
  -      setMargin(m_ins);
  -      setRequestFocusEnabled(false);
  -      addMouseListener(this);
  -    }
  -
  -    public SmallButton(Action act) {
  -      this();
  -      setAction(act);
  -      setRequestFocusEnabled(false);
  -
  -      //      addActionListener(act);
  -      addMouseListener(this);
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @return DOCUMENT ME!
  -     */
  -    public float getAlignmentY() {
  -      return 0.5f;
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @return DOCUMENT ME!
  -     */
  -    public Border getBorder() {
  -      return m_border;
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @return DOCUMENT ME!
  -     */
  -    public Insets getInsets() {
  -      return m_ins;
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mouseClicked(MouseEvent e) {
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mouseEntered(MouseEvent e) {
  -      if (isEnabled()) {
  -        m_border = m_raised;
  -        setBorder(m_raised);
  -      }
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mouseExited(MouseEvent e) {
  -      m_border = m_inactive;
  -      setBorder(m_inactive);
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mousePressed(MouseEvent e) {
  -      m_border = m_lowered;
  -      setBorder(m_lowered);
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mouseReleased(MouseEvent e) {
  -      m_border = m_inactive;
  -      setBorder(m_inactive);
  -    }
  -  }
  -
  -  /**
  -   * A better button class that has nice roll over effects.
  -   *
  -   * This class is borrowed (quite heavily, but with modifications)
  -   * from the "Swing: Second Edition"
  -   * book by Matthew Robinson and Pavel Vorobeiv. An excellent book on Swing.
  -   *
  -   * @author Matthew Robinson
  -   * @author Pavel Vorobeiv
  -   * @author Paul Smith <[EMAIL PROTECTED]>
  -   */
  -  class SmallToggleButton extends JToggleButton implements ItemListener,
  -    MouseListener {
  -    protected Border m_highlighted = new SoftBevelBorder(BevelBorder.RAISED);
  -    protected Border m_raised = BorderFactory.createEmptyBorder();
  -    protected Border m_inactive = m_raised;
  -    protected Border m_border = m_inactive;
  -    protected Border m_lowered = new SoftBevelBorder(BevelBorder.LOWERED);
  -    protected Insets m_ins = new Insets(4, 4, 4, 4);
  -
  -    public SmallToggleButton() {
  -      super();
  -      setHorizontalAlignment(CENTER);
  -      setBorder(isSelected() ? m_lowered : m_raised);
  -      setMargin(m_ins);
  -      setRequestFocusEnabled(false);
  -      addItemListener(this);
  -      addMouseListener(this);
  -      setText("");
  -    }
  -
  -    public SmallToggleButton(Action action) {
  -      this();
  -      setAction(action);
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @return DOCUMENT ME!
  -     */
  -    public float getAlignmentY() {
  -      return 0.5f;
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @return DOCUMENT ME!
  -     */
  -    public Border getBorder() {
  -      return m_border;
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @return DOCUMENT ME!
  -     */
  -    public Insets getInsets() {
  -      return m_ins;
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void itemStateChanged(ItemEvent e) {
  -      setBorder(isSelected() ? m_lowered : m_raised);
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mouseClicked(MouseEvent e) {
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mouseEntered(MouseEvent e) {
  -      if (isEnabled()) {
  -        m_border = m_highlighted;
  -        setBorder(m_highlighted);
  -      }
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mouseExited(MouseEvent e) {
  -      m_border = m_inactive;
  -      setBorder(m_inactive);
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mousePressed(MouseEvent e) {
  -      m_border = m_lowered;
  -      setBorder(m_lowered);
  -    }
  -
  -    /**
  -     * DOCUMENT ME!
  -     *
  -     * @param e DOCUMENT ME!
  -     */
  -    public void mouseReleased(MouseEvent e) {
  -      m_border = m_inactive;
  -      setBorder(m_inactive);
  -    }
     }
   }
  
  
  
  1.1                  
jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java
  
  Index: ReceiversPanel.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package org.apache.log4j.chainsaw;
  
  import org.apache.log4j.LogManager;
  import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  import org.apache.log4j.net.SocketNodeEventListener;
  import org.apache.log4j.net.SocketReceiver;
  import org.apache.log4j.plugins.PluginRegistry;
  
  import java.awt.BorderLayout;
  import java.awt.GridBagConstraints;
  import java.awt.GridBagLayout;
  import java.awt.event.ActionEvent;
  
  import java.util.Iterator;
  import java.util.List;
  
  import javax.swing.AbstractAction;
  import javax.swing.Action;
  import javax.swing.BorderFactory;
  import javax.swing.ImageIcon;
  import javax.swing.JComponent;
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.JTree;
  import javax.swing.SwingUtilities;
  import javax.swing.event.TreeSelectionEvent;
  import javax.swing.event.TreeSelectionListener;
  import javax.swing.tree.DefaultMutableTreeNode;
  
  
  /**
   * This panel is used to manage all the Receivers configured within Log4j
   * 
   * 
   * @author Paul Smith <[EMAIL PROTECTED]>
   *
   */
  class ReceiversPanel extends JPanel {
    private final JTree receiversTree = new JTree();
    private final LogUI logui;
  
    ReceiversPanel(final LogUI logui) {
      super(new BorderLayout());
      this.logui = logui;
  
      receiversTree.setModel(ReceiversTreeModel.create());
  
      /**
       * We need to setup a runnable that updates the tree
       * any time a Socket event happens (opening/closing of a socket).
       *
       * We do this by installing a SocketNodeEventListener in ALL the
       * registered SocketReceivers
       */
      final Runnable updateReceiverTree =
        new Runnable() {
          public void run() {
            receiversTree.setModel(ReceiversTreeModel.create());
          }
        };
  
      receiversTree.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
  
      receiversTree.setCellRenderer(new ReceiverTreeCellRenderer());
  
      JPanel buttonPanel = new JPanel(new GridBagLayout());
      GridBagConstraints c = new GridBagConstraints();
  
      final Action playReceiverButtonAction =
        new AbstractAction() {
          public void actionPerformed(ActionEvent e) {
          }
        };
  
      playReceiverButtonAction.putValue(
        Action.SHORT_DESCRIPTION, "Resumes the selected Node");
      playReceiverButtonAction.putValue(
        Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_RESUME_RECEIVER));
      playReceiverButtonAction.setEnabled(false);
  
      SmallButton playReceiverButton = new SmallButton(playReceiverButtonAction);
  
      final Action pauseReceiverButtonAction =
        new AbstractAction() {
          public void actionPerformed(ActionEvent e) {
          }
        };
  
      pauseReceiverButtonAction.putValue(
        Action.SHORT_DESCRIPTION, "Pauses the selected Node");
      pauseReceiverButtonAction.putValue(
        Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
      pauseReceiverButtonAction.setEnabled(false);
  
      SmallButton pauseReceiverButton =
        new SmallButton(pauseReceiverButtonAction);
  
      c.weightx = 0.0;
      c.weighty = 0.0;
      c.ipadx = 2;
      c.ipady = 2;
      c.gridx = 0;
      c.gridy = 0;
      c.fill = GridBagConstraints.NONE;
      c.anchor = GridBagConstraints.WEST;
      buttonPanel.add(playReceiverButton, c);
  
      c.gridx = 1;
      c.weightx = 1.0;
      c.weighty = 1.0;
      buttonPanel.add(pauseReceiverButton, c);
  
      c.gridx = 1;
      c.weightx = 1.0;
      c.weighty = 1.0;
      c.anchor = GridBagConstraints.EAST;
      buttonPanel.add(
        new SmallButton(
          new AbstractAction("Close") {
          public void actionPerformed(ActionEvent e) {
            logui.toggleReceiversPanel();
          }
        }));
  
      receiversTree.addTreeSelectionListener(
        new TreeSelectionListener() {
          public void valueChanged(TreeSelectionEvent e) {
            DefaultMutableTreeNode node =
              (DefaultMutableTreeNode) receiversTree
              .getLastSelectedPathComponent();
  
            if (node == null) {
              return;
            }
  
            Object nodeInfo = node.getUserObject();
  
            if (nodeInfo instanceof SocketReceiver) {
              SocketReceiver receiver = (SocketReceiver) nodeInfo;
  
              if (receiver.isActive()) {
                receiver.setActive(false);
                pauseReceiverButtonAction.setEnabled(false);
                playReceiverButtonAction.setEnabled(true);
              } else {
                receiver.setActive(true);
                pauseReceiverButtonAction.setEnabled(true);
                playReceiverButtonAction.setEnabled(false);
              }
  
              updateReceiverTree.run();
            } else {
              pauseReceiverButtonAction.setEnabled(false);
              playReceiverButtonAction.setEnabled(false);
            }
          }
        });
  
      JComponent component = receiversTree;
  
      add(new JScrollPane(component), BorderLayout.CENTER);
      add(buttonPanel, BorderLayout.NORTH);
  
      SocketNodeEventListener listener =
        new SocketNodeEventListener() {
          public void socketOpened(String remoteInfo) {
            SwingUtilities.invokeLater(updateReceiverTree);
          }
  
          public void socketClosedEvent(Exception e) {
            SwingUtilities.invokeLater(updateReceiverTree);
          }
        };
  
      List socketReceivers =
        PluginRegistry.getPlugins(
          LogManager.getLoggerRepository(), SocketReceiver.class);
  
      for (Iterator iter = socketReceivers.iterator(); iter.hasNext();) {
        SocketReceiver element = (SocketReceiver) iter.next();
        element.addSocketNodeEventListener(listener);
      }
    }
  }
  
  
  

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

Reply via email to