Package org.jboss.console.navtree

Source Code of org.jboss.console.navtree.AdminTreeBrowser$OpenNodeAccounter

/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.console.navtree;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;

import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.ToolTipManager;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

import org.jboss.console.manager.interfaces.SimpleTreeNodeMenuEntry;
import org.jboss.console.manager.interfaces.TreeAction;
import org.jboss.console.manager.interfaces.TreeNodeMenuEntry;
import org.jboss.console.manager.interfaces.impl.SeparatorTreeNodeMenuEntry;

/**
* Holder of the browser tree and associated handlers. Can then be embedded
* in any code such as applet code. Specific actions are handled
* through a TreeContext callback object used to communicate between this object
* and its container.
*
* @see org.jboss.console.navtree.TreeContext
* @see AppletBrowser
*
* @author  <a href="mailto:sacha.labourey@cogito-info.ch">Sacha Labourey</a>.
* @version $Revision: 81010 $
*
*/

public class AdminTreeBrowser
{
   TreeContext ctx = null;
  
   ConsoleTreeModel tm = null;
   TreeCellRenderer cellRenderer = null;
   TreeSelectionListener selectionListener = null;
   OpenNodeAccounter openNodeAccounter = null;
  
   String webHost = null;
  
   public static final String RIGHT_FRAME_NAME = "right";
  
   /** Creates new form AppletTreeBrowser */
   public AdminTreeBrowser (TreeContext ctx) throws Exception
   {
      this.ctx = ctx;     
     
      tm = new ConsoleTreeModel (ctx);
      cellRenderer = new TreeCellRenderer (ctx);
      //selectionListener = new SelectionListener ();
     
      initComponents ();
     
      openNodeAccounter  = new OpenNodeAccounter(getTree());
     
      //getTree().addTreeSelectionListener (selectionListener);
      getTree().addMouseListener (new PopupMenuMgr());
      //getTree().addTreeExpansionListener (openNodeAccounter);
      getTree().getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION);
      ToolTipManager.sharedInstance().registerComponent(getTree());     
   }
  
   public void refreshTree (boolean force)
   {
      try
      {
         this.tm.refreshTree (force);
      }
      catch (Exception displayed)
      {
         displayed.printStackTrace();
      }
   }
  
     
   /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
   private void initComponents()//GEN-BEGIN:initComponents
   {
      tree = new javax.swing.JTree();

      tree.setCellRenderer(getCellRenderer());
      tree.setModel(getTreeModel());
      tree.setAutoscrolls(true);

   }//GEN-END:initComponents
  
  
   // Variables declaration - do not modify//GEN-BEGIN:variables
   private javax.swing.JTree tree;
   // End of variables declaration//GEN-END:variables
  
   public TreeCellRenderer getCellRenderer ()
   {
      return this.cellRenderer;
   }
  
   public TreeModel getTreeModel ()
   {
      return this.tm;
   }
  
   public TreeSelectionListener getSelectionListener ()
   {
      return this.selectionListener;
   }
  
   public JTree getTree ()
   {
      return this.tree;
   }
  
   /*
    * Don't use SelectionListener as I am not able to detect clicks on an
    * already selected tree node i.e. no refresh is possible by clicking!
    * => Instead I use the PopupMenuMgr below to do the work
    *
   public class SelectionListener implements TreeSelectionListener
   {
     
      public SelectionListener () {}
     
      public void valueChanged (TreeSelectionEvent e)
      {
         System.out.println ("in valueChanged");
         Object node = getTree ().getLastSelectedPathComponent ();
        
         if (node == null) return;
                 
         if (node instanceof NodeWrapper)
         {
            NodeWrapper who = (NodeWrapper)node;
            TreeAction act = who.getAssociatedAction ();
            ctx.doAdminTreeAction (act);           
         }
      }     
   }
   */
  
   // -----------------------------------
  
   public class OpenNodeAccounter
      implements javax.swing.event.TreeExpansionListener, javax.swing.event.TreeModelListener
   {
      protected java.util.TreeSet openNodes = new java.util.TreeSet ();
     
      public OpenNodeAccounter (JTree tree)
      {
         tree.getModel ().addTreeModelListener (this);
      }
     
      public void treeExpanded(javax.swing.event.TreeExpansionEvent event)
      {        
         openNodes.add (((NodeWrapper)(event.getSource ())).getPath ());        
         //System.out.println (event.getPath().getClass ().toString ());
         //openNodes.add (event.getPath ());
      }
     
      public void treeCollapsed(javax.swing.event.TreeExpansionEvent event)
      {
         openNodes.remove (((NodeWrapper)(event.getSource ())).getPath ());
         //openNodes.remove (event.getPath ());
      }
     
      public void treeNodesChanged (javax.swing.event.TreeModelEvent e)
      {
         /*
         java.util.Iterator iter = openNodes.iterator ();
         while (iter.hasNext ())
         {
            javax.swing.tree.TreePath path = (javax.swing.tree.TreePath)iter.next ();
            tree.expandPath (path);
         }
         */
         /*
         RootWrapper root = (RootWrapper)tm.getRoot ();
         int max = root.getChildCount ();
         for (int i=0; i<max ; i++)
         {
            StdNodeWrapper son = (StdNodeWrapper)root.getChild (i);
            if (openNodes.contains (son.getPath ()))
               recursivelyOpen (son);
         }
           */              

      }
     
      public void recursivelyOpen (NodeWrapper son)
      {        
      }
     
      public void treeNodesInserted (javax.swing.event.TreeModelEvent e){}
      public void treeNodesRemoved (javax.swing.event.TreeModelEvent e){}
      public void treeStructureChanged (javax.swing.event.TreeModelEvent e)  { }
     
   }
  
   // -----------------------------------
  
   public class PopupMenuMgr extends MouseAdapter
   {
      HashMap menus = new HashMap ();
     
      public PopupMenuMgr (){}

      public void mousePressed( MouseEvent e )
      {
         mouseReleased(e);
      }    
      public void mouseReleased( MouseEvent e )
      {
         TreePath loc = getTree().getPathForLocation(e.getX(), e.getY());
         if (loc == null)//Path not found because
            return;//right click does not occur on a node or a leaf

         getTree().setSelectionPath (loc);

         if ( e.isPopupTrigger())
         {                       
            Object node = getTree ().getLastSelectedPathComponent ();
            if (node == null) return;
           
            JPopupMenu popup = null;
            if (menus.containsKey (node))
            {
               popup = (JPopupMenu)menus.get (node);
            }
            else if (node instanceof NodeWrapper)
            {
               NodeWrapper who = (NodeWrapper)node;
              
               TreeNodeMenuEntry[] entries = who.getMenuEntries ();
              
               if (entries != null && entries.length > 0)
               {
                  popup = new JPopupMenu();
                  popup.setOpaque(true);
                  popup.setLightWeightPopupEnabled(true);
                  menus.put (node, popup);
                 
                  // we must lazy-create the menu
                  //
                  for (int i=0; i<entries.length; i++)
                  {
                     if (entries[i] instanceof SeparatorTreeNodeMenuEntry)
                     {
                        popup.addSeparator ();
                     }
                     else if (entries[i] instanceof SimpleTreeNodeMenuEntry)
                     {
                        final SimpleTreeNodeMenuEntry txt = (SimpleTreeNodeMenuEntry)entries[i];
                        JMenuItem mi = new JMenuItem(txt.getText ());
                        mi.addActionListener ( new ActionListener ()
                        {
                           public void actionPerformed(ActionEvent e
                           {
                              ctx.doPopupMenuAction (txt);                                     
                           }
                        }                       
                        );
                        popup.add(mi);
                     }
                  }
               }
              
            }                             

            if (popup != null)
               popup.show( (JComponent)e.getSource(), e.getX(), e.getY() );
         }
         else
         {
            Object node = getTree ().getLastSelectedPathComponent ();
                    
            if (node != null && node instanceof NodeWrapper)
            {
               NodeWrapper who = (NodeWrapper)node;
               TreeAction act = who.getAssociatedAction ();
               ctx.doAdminTreeAction (act);           
            }
           
         }
      }
   }
}
TOP

Related Classes of org.jboss.console.navtree.AdminTreeBrowser$OpenNodeAccounter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.