Author: jm
Date: 2012-07-05 13:30:12 -0700 (Thu, 05 Jul 2012)
New Revision: 29772

Modified:
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DGraphView.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/InnerCanvas.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/PopupMenuHelper.java
Log:
Fixes #1218: Fixed TaskFactory leaks

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DGraphView.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DGraphView.java
     2012-07-05 20:28:38 UTC (rev 29771)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DGraphView.java
     2012-07-05 20:30:12 UTC (rev 29772)
@@ -2747,6 +2747,7 @@
                                
registrar.unregisterAllServices(addDeleteHandler);
                        servicesRegistered = false;
                        
+                       m_lis[0] = null;
                        cyAnnotator.dispose();
                        m_networkCanvas.dispose();
                }

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/InnerCanvas.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/InnerCanvas.java
    2012-07-05 20:28:38 UTC (rev 29771)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/InnerCanvas.java
    2012-07-05 20:30:12 UTC (rev 29772)
@@ -131,7 +131,7 @@
        private final MouseDraggedDelegator mouseDraggedDelegator;
        private final AddEdgeMousePressedDelegator addEdgeMousePressedDelegator;
 
-       private final AddEdgeStateMonitor addEdgeMode;
+       private AddEdgeStateMonitor addEdgeMode;
 
        InnerCanvas(Object lock, DGraphView view, UndoSupport undo) {
                super();
@@ -1409,5 +1409,8 @@
 
        public void dispose() {
                m_view = null;
+               m_undoable_edit = null;
+               addEdgeMode = null;
+               popup.dispose();
        }
 }

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/PopupMenuHelper.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/PopupMenuHelper.java
        2012-07-05 20:28:38 UTC (rev 29771)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/PopupMenuHelper.java
        2012-07-05 20:30:12 UTC (rev 29772)
@@ -30,7 +30,6 @@
 
 import java.awt.Component;
 import java.awt.Point;
-import java.awt.datatransfer.Transferable;
 import java.awt.event.ActionEvent;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -40,6 +39,8 @@
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
 
 import org.cytoscape.application.swing.CyEdgeViewContextMenuFactory;
 import org.cytoscape.application.swing.CyNodeViewContextMenuFactory;
@@ -54,12 +55,9 @@
 import org.cytoscape.task.NodeViewTaskFactory;
 import org.cytoscape.util.swing.GravityTracker;
 import org.cytoscape.util.swing.JMenuTracker;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.CyNetworkViewFactory;
 import org.cytoscape.view.model.View;
 import org.cytoscape.view.model.VisualProperty;
 import org.cytoscape.work.TaskFactory;
-import org.cytoscape.work.swing.DynamicSubmenuListener;
 
 import static org.cytoscape.work.ServiceProperties.*;
 
@@ -100,7 +98,7 @@
                        // build a menu of actions if more than factory exists
                        if ( usableTFs.size() > 1) {
                                String edgeLabel = 
network.getRow(ev.getModel()).get("interaction",String.class);
-                               JPopupMenu menu = new JPopupMenu(edgeLabel);
+                               JPopupMenu menu = createMenu(edgeLabel);
                                JMenuTracker tracker = new JMenuTracker(menu);
 
                                for ( EdgeViewTaskFactory evtf : usableTFs ) {
@@ -132,7 +130,7 @@
                        // build a menu of actions if more than factory exists
                        if ( usableTFs.size() > 1) {
                                String nodeLabel = 
network.getRow(nv.getModel()).get("name",String.class);
-                               JPopupMenu menu = new JPopupMenu(nodeLabel);
+                               JPopupMenu menu = createMenu(nodeLabel);
                                JMenuTracker tracker = new JMenuTracker(menu);
 
                                for ( NodeViewTaskFactory nvtf : usableTFs ) {
@@ -153,13 +151,32 @@
                }
        }
 
-       
+       private JPopupMenu createMenu(String title) {
+               final JPopupMenu menu = new JPopupMenu(title);
+               menu.addPopupMenuListener(new PopupMenuListener() {
+                       @Override
+                       public void popupMenuWillBecomeVisible(PopupMenuEvent 
arg0) {
+                       }
+                       
+                       @Override
+                       public void popupMenuWillBecomeInvisible(PopupMenuEvent 
arg0) {
+                               menu.removeAll();
+                       }
+                       
+                       @Override
+                       public void popupMenuCanceled(PopupMenuEvent arg0) {
+                               menu.removeAll();
+                       }
+               });
+               return menu;
+       }
+
        /**
         * Creates a menu based on the NetworkView.
         */
        void createEmptySpaceMenu(Point rawPt, Point xformPt, String action) {
                
-               final JPopupMenu menu = new JPopupMenu("Double Click Menu: 
empty");
+               final JPopupMenu menu = createMenu("Double Click Menu: empty");
                final JMenuTracker tracker = new JMenuTracker(menu);
 
                Collection<NetworkViewTaskFactory> usableTFs = 
getPreferredActions(m_view.emptySpaceTFs,action);
@@ -321,4 +338,8 @@
                        m_view.manager.execute(tf.createTaskIterator());
                }
        }
+
+       public void dispose() {
+               m_view = null;
+       }
 }

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