Author: scooter
Date: 2012-03-11 11:53:13 -0700 (Sun, 11 Mar 2012)
New Revision: 28489
Added:
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/GroupViewDoubleClickListener.java
Modified:
core3/impl/trunk/group-view-impl/pom.xml
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/CyActivator.java
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/GroupViewCollapseHandler.java
Log:
Implement double-click
Modified: core3/impl/trunk/group-view-impl/pom.xml
===================================================================
--- core3/impl/trunk/group-view-impl/pom.xml 2012-03-11 18:47:56 UTC (rev
28488)
+++ core3/impl/trunk/group-view-impl/pom.xml 2012-03-11 18:53:13 UTC (rev
28489)
@@ -116,6 +116,10 @@
<artifactId>vizmap-api</artifactId>
</dependency>
<dependency>
+ <groupId>org.cytoscape</groupId>
+ <artifactId>core-task-api</artifactId>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
Modified:
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/CyActivator.java
2012-03-11 18:47:56 UTC (rev 28488)
+++
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/CyActivator.java
2012-03-11 18:53:13 UTC (rev 28489)
@@ -2,13 +2,14 @@
package org.cytoscape.group.view.internal;
import org.cytoscape.event.CyEventHelper;
-import org.cytoscape.service.util.CyServiceRegistrar;
import org.osgi.framework.BundleContext;
import org.cytoscape.group.CyGroupManager;
import org.cytoscape.group.events.GroupAboutToCollapseListener;
import org.cytoscape.group.events.GroupCollapsedListener;
+import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.task.NodeViewTaskFactory;
import org.cytoscape.view.model.CyNetworkViewManager;
import org.cytoscape.view.vizmap.VisualMappingManager;
@@ -25,9 +26,9 @@
public void start(BundleContext bc) {
CyEventHelper cyEventHelperServiceRef =
getService(bc,CyEventHelper.class);
- CyServiceRegistrar cyServiceRegistrarServiceRef =
getService(bc,CyServiceRegistrar.class);
CyGroupManager cyGroupManager =
getService(bc,CyGroupManager.class);
CyNetworkViewManager cyNetworkViewManager =
getService(bc,CyNetworkViewManager.class);
+ CyNetworkManager cyNetworkManager =
getService(bc,CyNetworkManager.class);
VisualMappingManager styleManager =
getService(bc,VisualMappingManager.class);
GroupViewCollapseHandler gvcHandler =
@@ -35,6 +36,14 @@
registerService(bc,gvcHandler,GroupAboutToCollapseListener.class, new
Properties());
registerService(bc,gvcHandler,GroupCollapsedListener.class, new
Properties());
+
+ // Listen for double-click
+ GroupViewDoubleClickListener gvsListener =
+ new GroupViewDoubleClickListener(cyGroupManager,
cyEventHelperServiceRef, cyNetworkManager, cyNetworkViewManager);
+
+ Properties doubleClickProperties = new Properties();
+ doubleClickProperties.setProperty("preferredAction", "OPEN");
+ registerService(bc,gvsListener,NodeViewTaskFactory.class,
doubleClickProperties);
}
}
Modified:
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/GroupViewCollapseHandler.java
===================================================================
---
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/GroupViewCollapseHandler.java
2012-03-11 18:47:56 UTC (rev 28488)
+++
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/GroupViewCollapseHandler.java
2012-03-11 18:53:13 UTC (rev 28489)
@@ -92,7 +92,7 @@
CyGroup group = e.getSource();
CyRootNetwork rootNetwork = group.getRootNetwork();
CyNetworkView view =
cyNetworkViewManager.getNetworkView(network);
-
+
if (e.collapsing()) {
// Calculate the center position of all of the
// member nodes
@@ -148,8 +148,11 @@
for (CyNode node: nodeList) {
View<CyNode>nView = view.getNodeView(node);
+ double x = nView.getVisualProperty(xLoc);
+ double y = nView.getVisualProperty(yLoc);
xCenter += (nView.getVisualProperty(xLoc)) /
nodeList.size();
yCenter += (nView.getVisualProperty(yLoc)) /
nodeList.size();
+
}
return getDim(xCenter, yCenter);
}
Added:
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/GroupViewDoubleClickListener.java
===================================================================
---
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/GroupViewDoubleClickListener.java
(rev 0)
+++
core3/impl/trunk/group-view-impl/src/main/java/org/cytoscape/group/view/internal/GroupViewDoubleClickListener.java
2012-03-11 18:53:13 UTC (rev 28489)
@@ -0,0 +1,155 @@
+/*
+ File: GroupViewCollapseHandler.java
+
+ Copyright (c) 2006, 2010, The Cytoscape Consortium (www.cytoscape.org)
+
+ 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
+ any later version.
+
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. The software and
+ documentation provided hereunder is on an "as is" basis, and the
+ Institute for Systems Biology and the Whitehead Institute
+ have no obligations to provide maintenance, support,
+ updates, enhancements or modifications. In no event shall the
+ Institute for Systems Biology and the Whitehead Institute
+ be liable to any party for direct, indirect, special,
+ incidental or consequential damages, including lost profits, arising
+ out of the use of this software and its documentation, even if the
+ Institute for Systems Biology and the Whitehead Institute
+ have been advised of the possibility of such damage. See
+ the GNU Lesser General Public License for more details.
+
+ 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.
+ */
+package org.cytoscape.group.view.internal;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.cytoscape.event.CyEventHelper;
+import org.cytoscape.group.CyGroup;
+import org.cytoscape.group.CyGroupManager;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.task.AbstractNodeViewTaskFactory;
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.view.model.CyNetworkViewManager;
+
+/**
+ * Handle selection
+ */
+public class GroupViewDoubleClickListener extends AbstractNodeViewTaskFactory
+{
+ CyGroupManager cyGroupManager;
+ CyNetworkViewManager cyNetworkViewManager;
+ CyNetworkManager cyNetworkManager;
+ CyEventHelper cyEventHelper;
+ boolean collapseExpand = false;
+
+ /**
+ *
+ * @param cyEventHelper
+ */
+ public GroupViewDoubleClickListener(final CyGroupManager groupManager,
+ final CyEventHelper cyEventHelper,
+ final CyNetworkManager netManager,
+ final CyNetworkViewManager
viewManager) {
+ this.cyGroupManager = groupManager;
+ this.cyNetworkViewManager = viewManager;
+ this.cyNetworkManager = netManager;
+ this.cyEventHelper = cyEventHelper;
+ }
+
+ public TaskIterator createTaskIterator() {
+ if (collapseExpand) {
+ // Collapse/expand: if we double-click on a collapsed
node, expand it.
+ // if we double-click on a node that is a member of a
group, collapse
+ // that group.
+ return new TaskIterator(new CollapseGroupTask());
+ } else {
+ // Select/deselect: if we double-click on a node that
is a member of a group
+ // and any member of the group is not selected, select
all members of that group.
+ // If all members of the group are selected, deselect
that group
+ return new TaskIterator(new SelectGroupTask());
+
+ }
+ }
+
+ class SelectGroupTask extends AbstractTask {
+ public SelectGroupTask() {}
+
+ public void run(TaskMonitor tm) throws Exception {
+ CyNode node = nodeView.getModel();
+ CyNetwork network = netView.getModel();
+ CyTable nodeTable = network.getDefaultNodeTable();
+
+ tm.setProgress(0.0);
+
+ List<CyGroup> groups =
cyGroupManager.getGroupsForNode(node);
+ if (groups != null && groups.size() > 0) {
+ for (CyGroup group: groups) {
+ if (allSelected(group, nodeTable)) {
+ for (CyNode member:
group.getNodeList()) {
+
nodeTable.getRow(member.getSUID()).set(CyNetwork.SELECTED, Boolean.FALSE);
+ }
+ } else {
+ for (CyNode member:
group.getNodeList()) {
+
nodeTable.getRow(member.getSUID()).set(CyNetwork.SELECTED, Boolean.TRUE);
+ }
+ }
+ }
+ }
+
+ tm.setProgress(1.0d);
+ }
+
+ private boolean allSelected (CyGroup group, CyTable nodeTable) {
+ for (CyNode node: group.getNodeList()) {
+ Boolean sel =
nodeTable.getRow(node.getSUID()).get(CyNetwork.SELECTED, Boolean.class);
+ if (!sel)
+ return false;
+ }
+ return true;
+ }
+ }
+
+ class CollapseGroupTask extends AbstractTask {
+
+ public CollapseGroupTask() {
+ }
+
+ public void run(TaskMonitor tm) throws Exception {
+ CyNetwork network = netView.getModel();
+ CyNode node = nodeView.getModel();
+ tm.setProgress(0.0);
+
+ if (cyGroupManager.isGroup(node, network)) {
+ CyGroup group = cyGroupManager.getGroup(node,
network);
+ if (group.isCollapsed(network))
+ group.expand(network);
+ // Not sure how we can double click on a node
that's a group, but not
+ // collapsed, so just fall through
+ } else {
+ // Get the list of groups this node is a member
of
+ List<CyGroup> groups =
cyGroupManager.getGroupsForNode(node);
+ if (groups != null && groups.size() > 0) {
+ // Collapse the first one
+ groups.get(0).collapse(network);
+ }
+ }
+ tm.setProgress(1.0d);
+ }
+ }
+
+}
--
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.