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.