Author: ruschein
Date: 2011-01-21 14:31:02 -0800 (Fri, 21 Jan 2011)
New Revision: 23557
Modified:
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DGraphView.java
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/FlagAndSelectionHandler.java
Log:
Added support for bulk table update events for node/edge selections.
Modified:
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DGraphView.java
===================================================================
---
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DGraphView.java
2011-01-21 22:29:27 UTC (rev 23556)
+++
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DGraphView.java
2011-01-21 22:31:02 UTC (rev 23557)
@@ -466,7 +466,7 @@
// networkVisualPropertySet(cyNetworkView, vp,
// cyNetworkView.getVisualProperty(vp));
- new FlagAndSelectionHandler(this);
+ new FlagAndSelectionHandler(this, eventHelper);
// Register this presentation as listeners
eventHelper.addMicroListener(this,
NetworkViewChangeMicroListener.class, cyNetworkView);
Modified:
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/FlagAndSelectionHandler.java
===================================================================
---
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/FlagAndSelectionHandler.java
2011-01-21 22:29:27 UTC (rev 23556)
+++
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/FlagAndSelectionHandler.java
2011-01-21 22:31:02 UTC (rev 23557)
@@ -1,15 +1,8 @@
/*
File: FlagAndSelectionHandler.java
- Copyright (c) 2006, The Cytoscape Consortium (www.cytoscape.org)
+ Copyright (c) 2006, 2011, The Cytoscape Consortium (www.cytoscape.org)
- The Cytoscape Consortium is:
- - Institute for Systems Biology
- - University of California San Diego
- - Memorial Sloan-Kettering Cancer Center
- - Institut Pasteur
- - Agilent Technologies
-
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 2.1 of the License, or
@@ -33,15 +26,12 @@
You should have received a copy of the GNU Lesser General Public License
along with this library; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-//---------------------------------------------------------------------------
-// $Revision: 13022 $
-// $Date: 2008-02-11 13:59:26 -0800 (Mon, 11 Feb 2008) $
-// $Author: mes $
-//---------------------------------------------------------------------------
+*/
package org.cytoscape.ding.impl;
+
+import java.util.Arrays;
+import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -50,12 +40,20 @@
import org.cytoscape.ding.GraphView;
import org.cytoscape.ding.GraphViewChangeEvent;
import org.cytoscape.ding.GraphViewChangeListener;
+import org.cytoscape.event.CyEventHelper;
import org.cytoscape.ding.NodeView;
import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyTableEntry;
+import org.cytoscape.model.events.RowsAboutToChangeEvent;
+import org.cytoscape.model.events.RowsFinishedChangingEvent;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
/**
* This class synchronizes the flagged status of nodes and edges as held by a
* SelectFilter object of a network with the selection status of the
@@ -65,12 +63,9 @@
*
*/
public class FlagAndSelectionHandler implements GraphViewChangeListener {
-
private static final Logger logger =
LoggerFactory.getLogger(FlagAndSelectionHandler.class);
-
- private static final String SELECT_ATTR = "selected";
-
private final GraphView view;
+ private final CyEventHelper eventHelper;
/**
* Standard constructor takes the flag filter and the view that should
be
@@ -78,8 +73,10 @@
* and view by turning on flags or selections that are currently on in
one
* of the two objects.
*/
- public FlagAndSelectionHandler(final GraphView view) {
+ public FlagAndSelectionHandler(final GraphView view, final
CyEventHelper eventHelper) {
this.view = view;
+ this.eventHelper = eventHelper;
+
syncFilterAndView();
view.addGraphViewChangeListener(this);
}
@@ -88,7 +85,7 @@
final Set<CyNode> selectedNodes = new HashSet<CyNode>();
for (final CyNode n : view.getNetwork().getNodeList())
- if (n.getCyRow().get(SELECT_ATTR, Boolean.class))
+ if (n.getCyRow().get(CyNetwork.SELECTED, Boolean.class))
selectedNodes.add(n);
return selectedNodes;
@@ -98,7 +95,7 @@
final Set<CyEdge> selectedEdges = new HashSet<CyEdge>();
for (final CyEdge n : view.getNetwork().getEdgeList())
- if (n.getCyRow().get(SELECT_ATTR, Boolean.class))
+ if (n.getCyRow().get(CyNetwork.SELECTED, Boolean.class))
selectedEdges.add(n);
return selectedEdges;
@@ -136,14 +133,27 @@
}
// flag all nodes that are selected but not currently flagged
- for (final CyNode node : selectedNodes)
- node.getCyRow().set(SELECT_ATTR, true);
+ select(selectedNodes, true);
// flag all edges that are selected but not currently flagged
- for (final CyEdge edge : selectedEdges)
- edge.getCyRow().set(SELECT_ATTR, true);
+ select(selectedEdges, true);
}
+ private void select(final Collection<? extends CyTableEntry>
nodesOrEdges, final boolean selected) {
+ if (nodesOrEdges.isEmpty())
+ return;
+
+ final CyTable table =
nodesOrEdges.iterator().next().getCyRow().getDataTable();
+ try {
+ eventHelper.fireSynchronousEvent(new
RowsAboutToChangeEvent(this, table));
+
+ for (final CyTableEntry nodeOrEdge : nodesOrEdges)
+ nodeOrEdge.getCyRow().set(CyNetwork.SELECTED,
selected);
+ } finally {
+ eventHelper.fireSynchronousEvent(new
RowsFinishedChangingEvent(this, table));
+ }
+ }
+
/**
* Responds to selection events from the view by setting the matching
* flagged state in the SelectFilter object.
@@ -163,9 +173,7 @@
// Nodes are selected.
final CyNode[] selectedNodes = event.getSelectedNodes();
- for (final CyNode node : selectedNodes)
- node.getCyRow().set(SELECT_ATTR, true);
-
+ select(Arrays.asList(selectedNodes), true);
} else if (event.isNodesUnselectedType() ||
event.isNodesHiddenType()) {
final CyNode[] objIndecies;
if (event.isNodesUnselectedType())
@@ -173,13 +181,10 @@
else
objIndecies = event.getHiddenNodes();
- for (final CyNode n : objIndecies)
- n.getCyRow().set(SELECT_ATTR, false);
+ select(Arrays.asList(objIndecies), false);
} else if (event.isEdgesSelectedType()) {
final CyEdge[] objIndecies = event.getSelectedEdges();
-
- for (final CyEdge n : objIndecies)
- n.getCyRow().set(SELECT_ATTR, true);
+ select(Arrays.asList(objIndecies), true);
} else if (event.isEdgesUnselectedType() ||
event.isEdgesHiddenType()) {
final CyEdge[] objIndecies;
if (event.isEdgesUnselectedType())
@@ -187,9 +192,7 @@
else
objIndecies = event.getHiddenEdges();
- for (final CyEdge n : objIndecies) {
- n.getCyRow().set(SELECT_ATTR, false);
- }
+ select(Arrays.asList(objIndecies), false);
}
logger.debug("Finished select operation: Time = "
--
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.