Author: clopes
Date: 2012-10-11 12:57:29 -0700 (Thu, 11 Oct 2012)
New Revision: 30655

Modified:
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
Log:
Fixes #1128 : The context menu item "Rename Network Collection" is now disabled 
when more than one root-network is selected

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
 2012-10-11 19:12:26 UTC (rev 30654)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
 2012-10-11 19:57:29 UTC (rev 30655)
@@ -43,9 +43,11 @@
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.WeakHashMap;
 
 import javax.swing.BorderFactory;
@@ -131,6 +133,8 @@
        private final DynamicTaskFactoryProvisioner factoryProvisioner;
 
        private final JPopupMenu popup;
+       private JMenuItem editRootNetworTitle;
+       
        private final Map<TaskFactory, JMenuItem> popupMap;
        private final Map<TaskFactory, CyAction> popupActions;
        private final Map<CyTable, CyNetwork> nameTables;
@@ -148,6 +152,8 @@
        private final EditNetworkTitleTaskFactory rootNetworkTitleEditor;
        private final JPopupMenu rootPopupMenu; 
        private CyRootNetwork selectedRoot;
+       private Set<CyRootNetwork> selectedRootSet;
+
        /**
         * 
         * @param appMgr
@@ -161,7 +167,7 @@
                                                final CyNetworkViewManager 
netViewMgr,
                                                final BirdsEyeViewHandler bird,
                                                final DialogTaskManager taskMgr,
-                                               DynamicTaskFactoryProvisioner 
factoryProvisioner,
+                                               final 
DynamicTaskFactoryProvisioner factoryProvisioner,
                                                final 
EditNetworkTitleTaskFactory networkTitleEditor) {
                super();
 
@@ -173,7 +179,6 @@
                this.taskMgr = taskMgr;
                this.factoryProvisioner = factoryProvisioner;
                
-               
                root = new NetworkTreeNode("Network Root", null);
                treeTableModel = new NetworkTreeTableModel(this, root);
                treeTable = new JTreeTable(treeTableModel);
@@ -207,13 +212,12 @@
 
                this.rootNetworkTitleEditor = networkTitleEditor;
                rootPopupMenu = new JPopupMenu();
-               JMenuItem editRootNetworTitle = new JMenuItem("Rename Network 
Collection...");
+               editRootNetworTitle = new JMenuItem("Rename Network 
Collection...");
                editRootNetworTitle.addActionListener(new ActionListener() {
                        
                        @Override
                        public void actionPerformed(ActionEvent e) {
-                               
-                               taskMgr.execute( 
rootNetworkTitleEditor.createTaskIterator(selectedRoot));
+                               
taskMgr.execute(rootNetworkTitleEditor.createTaskIterator(selectedRoot));
                        }
                });
                rootPopupMenu.add(editRootNetworTitle);
@@ -275,7 +279,8 @@
                treeTable.addMouseListener(new PopupListener());
        }
 
-       private void addFactory(TaskFactory factory, 
@SuppressWarnings("rawtypes") Map props) {
+       @SuppressWarnings({ "unchecked", "rawtypes" })
+       private void addFactory(TaskFactory factory, Map props) {
                CyAction action;
                if ( props.containsKey("enableFor") )
                        action = new TaskFactoryTunableAction(taskMgr, factory, 
props, appMgr, netViewMgr);
@@ -334,17 +339,17 @@
                addFactory(provisioner, props);
        }
 
-       public void 
removeNetworkCollectionTaskFactory(NetworkCollectionTaskFactory factory, Map 
props) {
+       public void 
removeNetworkCollectionTaskFactory(NetworkCollectionTaskFactory factory, 
@SuppressWarnings("rawtypes") Map props) {
                removeFactory(provisionerMap.remove(factory));
        }
 
-       public void 
addNetworkViewCollectionTaskFactory(NetworkViewCollectionTaskFactory factory, 
Map props) {
+       public void 
addNetworkViewCollectionTaskFactory(NetworkViewCollectionTaskFactory factory, 
@SuppressWarnings("rawtypes") Map props) {
                TaskFactory provisioner = factoryProvisioner.createFor(factory);
                provisionerMap.put(factory, provisioner);
                addFactory(provisioner, props);
        }
 
-       public void 
removeNetworkViewCollectionTaskFactory(NetworkViewCollectionTaskFactory 
factory, Map props) {
+       public void 
removeNetworkViewCollectionTaskFactory(NetworkViewCollectionTaskFactory 
factory, @SuppressWarnings("rawtypes") Map props) {
                removeFactory(provisionerMap.remove(factory));
        }
 
@@ -508,30 +513,19 @@
        public void handleEvent(final SetCurrentNetworkEvent e) {
                final CyNetwork cnet = e.getNetwork();
 
-               if (cnet == null) {
-                       logger.debug("Got null for current network.");
+               if (cnet == null)
                        return;
-               }
 
                final NetworkTreeNode node = (NetworkTreeNode) 
treeTable.getTree().getLastSelectedPathComponent();
                final CyNetwork selectedNet = node != null ? node.getNetwork() 
: null;
 
-               if (!cnet.equals(selectedNet)) {
-                       SwingUtilities.invokeLater(new Runnable() {
-                               public void run() {
-                                       updateNetworkTreeSelection(true);
-                               }
-                       });
-               }
+               if (!cnet.equals(selectedNet))
+                       updateNetworkTreeSelection();
        }
 
        @Override
        public void handleEvent(final SetSelectedNetworksEvent e) {
-               SwingUtilities.invokeLater(new Runnable() {
-                       public void run() {
-                               updateNetworkTreeSelection(false);
-                       }
-               });
+               updateNetworkTreeSelection();
        }
 
        @Override
@@ -616,7 +610,7 @@
        /**
         * Update selected row.
         */
-       private final void updateNetworkTreeSelection(final boolean singleSet) {
+       private final void updateNetworkTreeSelection() {
                final List<CyNetwork> selectedNetworks = 
appMgr.getSelectedNetworks();
 
                // Phase 1: Add selected path from GUI status
@@ -641,9 +635,15 @@
                        final int row = treeTable.getTree().getRowForPath(tp);
                        maxRow = Math.max(maxRow, row);
                }
-
-               treeTable.getTree().scrollRowToVisible(maxRow);
-               treeTable.repaint();
+               
+               final int row = maxRow;
+               
+               SwingUtilities.invokeLater(new Runnable() {
+                       public void run() {
+                               treeTable.getTree().scrollRowToVisible(row);
+                               treeTable.repaint();
+                       }
+               });
        }
 
        /**
@@ -728,30 +728,33 @@
        }
        
        private void selectAllSubnetwork(){
+               if (selectedRootSet == null)
+                       return;
                
                final List<CyNetwork> selectedNetworks = new 
LinkedList<CyNetwork>();
+               CyNetwork cn = null;
+               NetworkTreeNode node = null;
                
-               // This is a "network set" node...
-               // When selecting root node, all of the subnetworks are 
selected.
-               CyRootNetwork root = selectedRoot;
-
-               final NetworkTreeNode node = this.network2nodeMap.get(root);
-               
-               // Creates a list of all selected networks
-               List<CySubNetwork> subNetworks = root.getSubNetworkList();
-               
-               for (CySubNetwork sn : subNetworks) {
-                       if (netMgr.networkExists(sn.getSUID()))
-                               selectedNetworks.add(sn);
+               for (final CyRootNetwork root : selectedRootSet) {
+                       // This is a "network set" node...
+                       // When selecting root node, all of the subnetworks are 
selected.
+                       node = this.network2nodeMap.get(root);
+                       
+                       // Creates a list of all selected networks
+                       List<CySubNetwork> subNetworks = 
root.getSubNetworkList();
+                       
+                       for (CySubNetwork sn : subNetworks) {
+                               if (netMgr.networkExists(sn.getSUID()))
+                                       selectedNetworks.add(sn);
+                       }
+                       
+                       cn = root;
                }
                
-               CyNetwork cn = root;
-               
                // Determine the current network
                if (!selectedNetworks.isEmpty())
                        cn = ((NetworkTreeNode) 
node.getFirstChild()).getNetwork();
                
-               
                final List<CyNetworkView> selectedViews = new 
ArrayList<CyNetworkView>();
                
                for (final CyNetwork n : selectedNetworks) {
@@ -805,7 +808,6 @@
                 * display the popup
                 */
                private final void maybeShowPopup(final MouseEvent e) {
-                       
                        // Ignore if not valid trigger.
                        if (!e.isPopupTrigger())
                                return;
@@ -817,44 +819,97 @@
 
                        final JTree tree = treeTable.getTree();
                        final TreePath treePath = tree.getPathForRow(row);
-                       CyNetwork rootnetwork;
+                       Long networkID = null;
                        
-                       Long networkID = -1L;
                        try {
-                               rootnetwork = ((NetworkTreeNode) 
treePath.getLastPathComponent()).getNetwork();
-                               networkID = rootnetwork.getSUID();
-                       } catch (NullPointerException nullExp) {
+                               final CyNetwork clickedNet = ((NetworkTreeNode) 
treePath.getLastPathComponent()).getNetwork();
+                               
+                               if (clickedNet instanceof CyRootNetwork) {
+                                       networkID = null;
+                                       selectedRoot = (CyRootNetwork) 
clickedNet;
+                               } else {
+                                       networkID = clickedNet.getSUID();
+                                       selectedRoot = null;
+                               }
+                       } catch (NullPointerException npe) {
                                // The tree root does not represent a network, 
ignore it.
                                return;
                        }
 
-                       if (rootnetwork instanceof CyRootNetwork)
-                       {
-                               selectedRoot = (CyRootNetwork) rootnetwork;
-                               rootPopupMenu.show(e.getComponent(), e.getX(), 
e.getY());
-                               return;
-                       }
-                       
-                       final CyNetwork network = netMgr.getNetwork(networkID);
+                       if (networkID != null) {
+                               final CyNetwork network = 
netMgr.getNetwork(networkID);
+                               
+                               if (network != null) {
+                                       // if the network is not selected, 
select it
+                                       final List<CyNetwork> selectedList = 
appMgr.getSelectedNetworks();
+                                       
+                                       if (selectedList == null || 
!selectedList.contains(network)) {
+                                               
appMgr.setCurrentNetwork(network);
+                                               
appMgr.setSelectedNetworks(Arrays.asList(new CyNetwork[]{ network }));
+                                               final Collection<CyNetworkView> 
netViews = netViewMgr.getNetworkViews(network);
+                                               
appMgr.setSelectedNetworkViews(new ArrayList<CyNetworkView>(netViews));
+                                       }
+                                       
+                                       // Always repaint, because the 
rendering of the tree selection
+                                       // may be out of sync with the 
AppManager one
+                                       SwingUtilities.invokeLater(new 
Runnable() {
+                                               public void run() {
+                                                       treeTable.repaint();
+                                               }
+                                       });
+                                       
+                                       // enable/disable any actions based on 
state of system
+                                       for (CyAction action : 
popupActions.values())
+                                               action.updateEnableState();
 
-                       if (network != null) {
-                               // if the network is not selected, select it
-                               final List<CyNetwork> selectedList = 
appMgr.getSelectedNetworks();
+                                       // then popup menu
+                                       popup.show(e.getComponent(), e.getX(), 
e.getY());
+                               }
+                       } else if (selectedRoot != null) {
+                               // if the right-clicked root-network is not 
selected, select it (other selected items will be unselected)
+                               selectedRootSet = 
getSelectionNetworks(CyRootNetwork.class);
                                
-                               if (selectedList == null || 
!selectedList.contains(network)) {
-                                       appMgr.setCurrentNetwork(network);
-                                       
appMgr.setSelectedNetworks(Arrays.asList(new CyNetwork[]{ network }));
-                                       final Collection<CyNetworkView> 
netViews = netViewMgr.getNetworkViews(network);
-                                       appMgr.setSelectedNetworkViews(new 
ArrayList<CyNetworkView>(netViews));
+                               if (!selectedRootSet.contains(selectedRoot)) {
+                                       final NetworkTreeNode node = 
network2nodeMap.get(selectedRoot);
+                                       
+                                       if (node != null) {
+                                               appMgr.setCurrentNetwork(null);
+                                               
appMgr.setSelectedNetworks(null);
+                                               
appMgr.setSelectedNetworkViews(null);
+                                               
+                                               final TreePath tp = new 
TreePath(new NetworkTreeNode[]{ root, node });
+                                               
tree.getSelectionModel().setSelectionPaths(new TreePath[]{ tp });
+                                               selectedRootSet = 
getSelectionNetworks(CyRootNetwork.class);
+                                               
+                                               SwingUtilities.invokeLater(new 
Runnable() {
+                                                       public void run() {
+                                                               
treeTable.repaint();
+                                                       }
+                                               });
+                                       }
                                }
                                
-                               // enable/disable any actions based on state of 
system
-                               for (CyAction action : popupActions.values())
-                                       action.updateEnableState();
-
-                               // then popup menu
-                               popup.show(e.getComponent(), e.getX(), 
e.getY());
+                               
editRootNetworTitle.setEnabled(selectedRootSet.size() == 1);
+                               rootPopupMenu.show(e.getComponent(), e.getX(), 
e.getY());
                        }
                }
        }
+       
+       @SuppressWarnings("unchecked")
+       private <T extends CyNetwork> Set<T> getSelectionNetworks(Class<T> 
type) {
+               final Set<T> nets = new LinkedHashSet<T>();
+               final JTree tree = treeTable.getTree();
+               final TreePath[] selectionPaths = tree.getSelectionPaths();
+               
+               if (selectionPaths != null) {
+                       for (final TreePath tp : selectionPaths) {
+                               final CyNetwork n = ((NetworkTreeNode) 
tp.getLastPathComponent()).getNetwork();
+                               
+                               if (type.isAssignableFrom(n.getClass()))
+                                       nets.add((T) n);
+                       }
+               }
+               
+               return nets;
+       }
 }

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to