Author: kono
Date: 2011-11-17 18:44:26 -0800 (Thu, 17 Nov 2011)
New Revision: 27524
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/NetworkTreeNode.java
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
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/TreeCellRenderer.java
Log:
GUI deadlock problem completely fixed. Accesses to managers from cell renderer
had been removed.
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
2011-11-18 01:16:21 UTC (rev 27523)
+++
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
2011-11-18 02:44:26 UTC (rev 27524)
@@ -150,7 +150,7 @@
this.networkViewManager = networkViewManager;
this.taskManager = taskManager;
- root = new NetworkTreeNode("Network Root", 0L);
+ root = new NetworkTreeNode("Network Root", null);
treeTableModel = new NetworkTreeTableModel(this, root);
treeTable = new JTreeTable(treeTableModel);
initialize();
@@ -186,7 +186,7 @@
ToolTipManager.sharedInstance().registerComponent(treeTable);
- treeTable.getTree().setCellRenderer(new
TreeCellRenderer(treeTable, netmgr, networkViewManager));
+ treeTable.getTree().setCellRenderer(new
TreeCellRenderer(treeTable));
treeTable.setBackground(Color.white);
treeTable.setSelectionBackground(new Color(200, 200, 200, 150));
@@ -327,7 +327,6 @@
treeTable.updateUI();
treeTable.doLayout();
- treeTable.updateUI();
treeTable.repaint();
}
@@ -422,6 +421,7 @@
public void handleEvent(NetworkViewAboutToBeDestroyedEvent nde) {
logger.debug("Network view about to be destroyed " +
nde.getNetworkView().getModel().getSUID());
+
this.treeNodeMap.get(nde.getNetworkView().getModel().getSUID()).setNodeColor(Color.red);
treeTable.getTree().updateUI();
}
@@ -430,7 +430,7 @@
// Set current network view to the new one.
appManager.setCurrentNetworkView(nde.getNetworkView().getModel().getSUID());
-
+
this.treeNodeMap.get(nde.getNetworkView().getModel().getSUID()).setNodeColor(Color.black);
treeTable.getTree().updateUI();
}
@@ -454,7 +454,7 @@
// Actual tree node for this network
NetworkTreeNode dmtn = new
NetworkTreeNode(network.getCyRow().get(CyTableEntry.NAME, String.class),
- network_id);
+ network);
parentTreeNode.add(dmtn);
@@ -465,6 +465,11 @@
if (parentNetwork != null)
this.treeNodeMap.put(parentNetwork.getSUID(),
parentTreeNode);
+ if(networkViewManager.viewExists(network_id))
+ dmtn.setNodeColor(Color.black);
+
+ this.treeNodeMap.put(network.getSUID(), dmtn);
+
// apparently this doesn't fire valueChanged
treeTable.getTree().collapsePath(new TreePath(new
TreeNode[] { root }));
@@ -497,11 +502,11 @@
while (tree_node_enum.hasMoreElements()) {
final NetworkTreeNode node = (NetworkTreeNode)
tree_node_enum.nextElement();
- Long currentID = node.getNetworkID();
- if (currentID == null)
+ CyNetwork network = node.getNetwork();
+ if (network == null)
continue;
- if (node.getNetworkID().equals(network_id))
+ if (network.getSUID() == network_id)
return node;
}
@@ -528,10 +533,10 @@
}
// This is a "network set" node.
- if (node.getNetworkID() == null)
+ if (node.getNetwork() == null)
return;
- appManager.setCurrentNetwork(node.getNetworkID());
+ appManager.setCurrentNetwork(node.getNetwork().getSUID());
// creates a list of all selected networks
List<Long> networkList = new LinkedList<Long>();
@@ -539,7 +544,7 @@
for (int i = mtree.getMinSelectionRow(); i <=
mtree.getMaxSelectionRow(); i++) {
NetworkTreeNode n = (NetworkTreeNode)
mtree.getPathForRow(i).getLastPathComponent();
if (n != null && n.getUserObject() != null &&
mtree.isRowSelected(i))
- networkList.add(n.getNetworkID());
+
networkList.add(n.getNetwork().getSUID());
}
} catch (Exception ex) {
ex.printStackTrace();
@@ -587,7 +592,7 @@
if (row != -1) {
JTree tree = treeTable.getTree();
TreePath treePath =
tree.getPathForRow(row);
- Long networkID = ((NetworkTreeNode)
treePath.getLastPathComponent()).getNetworkID();
+ Long networkID = ((NetworkTreeNode)
treePath.getLastPathComponent()).getNetwork().getSUID();
CyNetwork cyNetwork =
netmgr.getNetwork(networkID);
Modified:
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
===================================================================
---
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
2011-11-18 01:16:21 UTC (rev 27523)
+++
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
2011-11-18 02:44:26 UTC (rev 27524)
@@ -1,7 +1,11 @@
package org.cytoscape.internal.view;
+import java.awt.Color;
+
import javax.swing.tree.DefaultMutableTreeNode;
+import org.cytoscape.model.CyNetwork;
+
/**
* Custom Tree node in the JTreeTable
*
@@ -10,17 +14,30 @@
private final static long serialVersionUID = 1213748836736485L;
- // Immutable network SUID. This can be null if the given tree node is
not
- // associated with a network.
- private final Long networkID;
+ private final CyNetwork network;
+
+ private Color nodeColor = Color.red;
- NetworkTreeNode(final Object userobj, final Long id) {
+ NetworkTreeNode(final Object userobj, final CyNetwork network) {
super(userobj.toString());
- networkID = id;
+ this.network = network;
}
- Long getNetworkID() {
- return networkID;
+ CyNetwork getNetwork() {
+ return network;
}
+
+ /*
+ * These are necessary to avoid deadlock in the renderer.
+ */
+
+ Color getNodeColor() {
+ return nodeColor;
+ }
+
+ void setNodeColor(final Color newColor) {
+ if(newColor != null)
+ this.nodeColor = newColor;
+ }
}
\ No newline at end of file
Modified:
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
===================================================================
---
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
2011-11-18 01:16:21 UTC (rev 27523)
+++
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
2011-11-18 02:44:26 UTC (rev 27524)
@@ -73,9 +73,9 @@
return null;
final NetworkTreeNode node = (NetworkTreeNode) value;
- final Long networkID = node.getNetworkID();
+ final CyNetwork network = node.getNetwork();
- if(networkID == null) {
+ if(network == null) {
// This is root network node
return null;
}
@@ -83,14 +83,14 @@
if (column == 0)
return node.getUserObject();
else if (column == 1) {
- final CyNetwork cyNetwork =
this.networkPanel.netmgr.getNetwork(node.getNetworkID());
+ final CyNetwork cyNetwork =
this.networkPanel.netmgr.getNetwork(node.getNetwork().getSUID());
if(cyNetwork == null)
return null;
return "" + cyNetwork.getNodeCount() + "("
+
cyNetwork.getDefaultNodeTable().getMatchingRows(CyNetwork.SELECTED,
true).size() + ")";
} else if (column == 2) {
- final CyNetwork cyNetwork =
this.networkPanel.netmgr.getNetwork(((NetworkTreeNode) node).getNetworkID());
+ final CyNetwork cyNetwork =
this.networkPanel.netmgr.getNetwork(((NetworkTreeNode)
node).getNetwork().getSUID());
if(cyNetwork == null)
return null;
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
2011-11-18 01:16:21 UTC (rev 27523)
+++
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
2011-11-18 02:44:26 UTC (rev 27524)
@@ -311,7 +311,7 @@
render(nvae.getNetworkView());
}
- protected void removeView(CyNetworkView view) {
+ protected void removeView(final CyNetworkView view) {
try {
final JInternalFrame frame =
presentationContainerMap.get(view.getModel().getSUID());
if (frame != null) {
Modified:
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
===================================================================
---
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
2011-11-18 01:16:21 UTC (rev 27523)
+++
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
2011-11-18 02:44:26 UTC (rev 27524)
@@ -6,10 +6,13 @@
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
+import java.lang.reflect.InvocationTargetException;
import javax.swing.ImageIcon;
import javax.swing.JTree;
+import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.xml.soap.Node;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNetworkManager;
@@ -29,15 +32,9 @@
private static final Dimension CELL_SIZE = new Dimension(1200, 40);
- private final CyNetworkManager networkManager;
- private final CyNetworkViewManager networkViewManager;
-
private final JTreeTable treeTable;
- TreeCellRenderer(final JTreeTable treeTable, final CyNetworkManager
networkManager,
- final CyNetworkViewManager networkViewManager) {
- this.networkManager = networkManager;
- this.networkViewManager = networkViewManager;
+ TreeCellRenderer(final JTreeTable treeTable) {
this.treeTable = treeTable;
final Image iconImage =
Toolkit.getDefaultToolkit().getImage(getClass().getResource(NETWORK_ICON));
@@ -73,36 +70,15 @@
else
this.setFont(TABLE_FONT);
- if(treeNode.getNetworkID() == null) {
+ if(treeNode.getNetwork() == null) {
setForeground(treeTable.getForeground());
return this;
}
- if (hasView(treeNode))
- setForeground(treeTable.getForeground());
- else
- setForeground(Color.red);
+ setForeground(treeNode.getNodeColor());
+ setForeground(treeNode.getNodeColor());
+
setToolTipText(treeNode.getNetwork().getCyRow().get(CyTableEntry.NAME,
String.class));
return this;
}
-
- private boolean hasView(final NetworkTreeNode node) {
- final Long networkID = node.getNetworkID();
- final CyNetwork network = networkManager.getNetwork(networkID);
-
- if (network != null)
-
setToolTipText(network.getCyRow().get(CyTableEntry.NAME, String.class));
- else {
- if (node.getRoot() == node)
- setToolTipText("Network Root");
- }
-
- boolean hasView = false;
-
- synchronized(this) {
- hasView = networkViewManager.viewExists(networkID);
- }
-
- return hasView;
- }
}
\ No newline at end of file
--
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.