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.

Reply via email to