Author: clopes
Date: 2012-02-02 12:15:01 -0800 (Thu, 02 Feb 2012)
New Revision: 28182

Modified:
   
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
   
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/NetworkViewManager.java
Log:
Fixes #626 : Network Browser is not Bringing Networks to the Front of the 
Display

Modified: 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
===================================================================
--- 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
    2012-02-02 00:35:22 UTC (rev 28181)
+++ 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
    2012-02-02 20:15:01 UTC (rev 28182)
@@ -178,11 +178,15 @@
 
        public void setCurrentNetwork(final CyNetwork network) {
                final long networkId = network.getSUID();
+               boolean changed = false;
+               
                synchronized (this) {
                        if (!networkManager.networkExists(networkId))
                                throw new IllegalArgumentException("Network is 
not registered in this ApplicationManager: ID = "
                                                                   + networkId);
 
+                       changed = !network.equals(currentNetwork);
+                       
                        logger.info("Set current network called.  Current 
network ID = " + networkId);
                        currentNetwork = network; 
                        currentNetworkView = 
networkViewManager.getNetworkView(network);
@@ -194,7 +198,10 @@
 
                logger.debug("Current network is set.  Firing 
SetCurrentNetworkEvent: Network ID = "
                             + networkId);
-               cyEventHelper.fireEvent(new SetCurrentNetworkEvent(this, 
currentNetwork));
+               
+               if (changed) {
+                       cyEventHelper.fireEvent(new 
SetCurrentNetworkEvent(this, currentNetwork));
+               }
        }
 
        public synchronized CyNetworkView getCurrentNetworkView() {
@@ -207,12 +214,17 @@
                        return;
                }
 
+               boolean changed = false;
+               
                synchronized (this) {
                        if 
(!networkManager.networkExists(view.getModel().getSUID()))
                                throw new IllegalArgumentException("network is 
not recognized by this ApplicationManager");
 
                        logger.debug("Set current network view called: View ID 
= " + view.getSUID());
 
+                       changed = !view.equals(currentNetworkView);
+                       
+                       currentNetworkView = view;
                        setCurrentNetwork(view.getModel());
 
                        // reset selected network views
@@ -222,7 +234,10 @@
 
                logger.debug("Current network view is set.  Firing 
SetCurrentNetworkViewEvent: View ID = "
                             + view.getSUID());
-               cyEventHelper.fireEvent(new SetCurrentNetworkViewEvent(this, 
currentNetworkView));
+               
+               if (changed) {
+                       cyEventHelper.fireEvent(new 
SetCurrentNetworkViewEvent(this, currentNetworkView));
+               }
        }
 
        public synchronized List<CyNetworkView> getSelectedNetworkViews() {

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-02-02 00:35:22 UTC (rev 28181)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
 2012-02-02 20:15:01 UTC (rev 28182)
@@ -55,7 +55,6 @@
 import javax.swing.ToolTipManager;
 import javax.swing.event.TreeSelectionEvent;
 import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
 
@@ -409,36 +408,50 @@
 
        @Override
        public void handleEvent(final SetCurrentNetworkViewEvent e) {
-               SwingUtilities.invokeLater( new Runnable() {
-                       public void run() {
-                               final CyNetworkView view = e.getNetworkView();
-
-                               if (view == null) {
-                                       logger.warn("Current network view is 
set to null.");
-                                       return;
+               final CyNetworkView view = e.getNetworkView();
+               
+               if (view == null) {
+                       logger.debug("Current network view is set to null.");
+                       return;
+               }
+               
+               final NetworkTreeNode node = (NetworkTreeNode) 
treeTable.getTree().getLastSelectedPathComponent();
+               final CyNetwork selectedNet = node != null ? node.getNetwork() 
: null;
+               
+               if (!view.getModel().equals(selectedNet)) {
+                       SwingUtilities.invokeLater( new Runnable() {
+                               public void run() {
+                                       logger.debug("Got 
SetCurrentNetworkViewEvent.  View ID = " + e.getNetworkView().getSUID());
+                                       final long curr = 
e.getNetworkView().getModel().getSUID();
+                                       focusNetworkNode(curr);
                                }
-                               logger.debug("Got SetCurrentNetworkViewEvent.  
View ID = " + e.getNetworkView().getSUID());
-                               final long curr = 
e.getNetworkView().getModel().getSUID();
-                               focusNetworkNode(curr);
-                       }
-               });
+                       });
+               }
        }
 
        @Override
        public void handleEvent(final SetCurrentNetworkEvent e) {
-               SwingUtilities.invokeLater( new Runnable() {
-                       public void run() {
-                               final CyNetwork cnet = e.getNetwork();
-                               if (cnet == null) {
-                                       logger.warn("Got null for current 
network.");
-                                       return;
+               final CyNetwork cnet = e.getNetwork();
+               
+               if (cnet == null) {
+                       logger.debug("Got null for current network.");
+                       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() {
+                                       logger.debug("Set current network " + 
cnet.getSUID());
+                                       focusNetworkNode(cnet.getSUID());
                                }
-                               logger.debug("Set current network " + 
cnet.getSUID());
-                               focusNetworkNode(cnet.getSUID());
-                       }
-               });
+                       });
+               }
        }
 
+       @Override
        public void handleEvent(final NetworkViewAboutToBeDestroyedEvent nde) {
                SwingUtilities.invokeLater( new Runnable() {
                        public void run() {
@@ -449,6 +462,7 @@
                });
        }
 
+       @Override
        public void handleEvent(final NetworkViewAddedEvent nde) {
                SwingUtilities.invokeLater( new Runnable() {
                        public void run() {
@@ -515,12 +529,17 @@
        }
 
        public void focusNetworkNode(final Long networkID) {
-               final DefaultMutableTreeNode node = getNetworkNode(networkID);
-
+               final NetworkTreeNode node = getNetworkNode(networkID);
+               
                if (node != null) {
-                       // fires valueChanged if the network isn't already 
selected
-                       
treeTable.getTree().getSelectionModel().setSelectionPath(new 
TreePath(node.getPath()));
-                       treeTable.getTree().scrollPathToVisible(new 
TreePath(node.getPath()));
+                       final CyNetwork net = node.getNetwork();
+                       final NetworkTreeNode selectedNode = (NetworkTreeNode) 
treeTable.getTree().getLastSelectedPathComponent();
+                       
+                       if (selectedNode == null || 
!net.equals(selectedNode.getNetwork())) {
+                               // fires valueChanged only if the network isn't 
already selected
+                               
treeTable.getTree().getSelectionModel().setSelectionPath(new 
TreePath(node.getPath()));
+                               treeTable.getTree().scrollPathToVisible(new 
TreePath(node.getPath()));
+                       }
                }
        }
 
@@ -543,9 +562,6 @@
 
        /**
         * This method highlights a network in the NetworkPanel.
-        * 
-        * @param e
-        *            DOCUMENT ME!
         */
        @Override
        public void valueChanged(TreeSelectionEvent e) {
@@ -560,11 +576,17 @@
                        return;
                }
 
+               final CyNetwork net = node.getNetwork();
+               
                // This is a "network set" node.
-               if (node.getNetwork() == null)
+               if (net == null)
                        return;
 
-               appManager.setCurrentNetwork(node.getNetwork());
+               // No need to set the same network again. It should prevent 
infinite loops.
+               // Also check if the network still exists (it could have been 
removed by another thread).
+               if (netmgr.networkExists(net.getSUID()) && 
!net.equals(appManager.getCurrentNetwork())) {
+                       appManager.setCurrentNetwork(net);
+               }
 
                // creates a list of all selected networks
                List<CyNetwork> networkList = new LinkedList<CyNetwork>();

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
   2012-02-02 00:35:22 UTC (rev 28181)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
   2012-02-02 20:15:01 UTC (rev 28182)
@@ -245,6 +245,12 @@
                        logger.info("Attempting to set current network : null 
network ");
                        return;
                }
+               
+               CyNetworkView view = 
networkViewManager.getNetworkView(e.getNetwork());
+
+               if (view != null) {
+                       setFocus(view);
+               }
        }
 
        @Override
@@ -461,7 +467,7 @@
 
        private void setFocus(CyNetworkView targetViewModel) {
                if (targetViewModel == null) {
-                       logger.warn("Set Focus method got a null vew.");
+                       logger.warn("Set Focus method got a null view.");
                        return;
                }
 

-- 
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