Author: paperwing
Date: 2012-03-13 09:00:54 -0700 (Tue, 13 Mar 2012)
New Revision: 28513

Modified:
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/CyActivator.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindRenderingEngineFactory.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/ContextMenuInputHandler.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/task/PopupMenuCreator.java
Log:
Right-click pop-up menus added for nodes, edges and network; pop-up menus now 
populated with items corresponding to task factories; need to use 
SubmenuTaskManager service to prevent adding duplicate menu items as 
implemented in Ding

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/CyActivator.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/CyActivator.java
      2012-03-13 01:30:38 UTC (rev 28512)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/CyActivator.java
      2012-03-13 16:00:54 UTC (rev 28513)
@@ -18,6 +18,7 @@
 import org.cytoscape.work.TaskFactory;
 import org.cytoscape.work.TaskManager;
 import org.cytoscape.work.swing.DialogTaskManager;
+import org.cytoscape.work.swing.SubmenuTaskManager;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -43,6 +44,9 @@
                DialogTaskManager cyDialogTaskManager = getService(bc,
                                DialogTaskManager.class);
                
+               SubmenuTaskManager cySubmenuTaskManager = getService(bc,
+                               SubmenuTaskManager.class);
+               
                // Register service to collect references to relevant task 
factories for the right-click context menu
                TaskFactoryListener taskFactoryListener = new 
TaskFactoryListener();
                registerServiceListener(bc, taskFactoryListener, 
"addNodeViewTaskFactory", "removeNodeViewTaskFactory", 
NodeViewTaskFactory.class);

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindRenderingEngineFactory.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindRenderingEngineFactory.java
       2012-03-13 01:30:38 UTC (rev 28512)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindRenderingEngineFactory.java
       2012-03-13 16:00:54 UTC (rev 28513)
@@ -67,6 +67,7 @@
 //             engine.setUpNetworkView(networkViewManager);
                engine.setUpCanvas(container);
                engine.setUpNetworkViewDestroyedListener(serviceRegistrar);
+               engine.setupTaskFactories(taskFactoryListener, taskManager);
                
                // System.out.println("returning engine: " + engine);
                renderingEngineManager.addRenderingEngine(engine);

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/ContextMenuInputHandler.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/ContextMenuInputHandler.java
    2012-03-13 01:30:38 UTC (rev 28512)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/ContextMenuInputHandler.java
    2012-03-13 16:00:54 UTC (rev 28513)
@@ -6,6 +6,7 @@
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 
+import org.cytoscape.model.CyEdge;
 import org.cytoscape.model.CyNode;
 import org.cytoscape.paperwing.internal.data.GraphicsData;
 import org.cytoscape.paperwing.internal.task.PopupMenuCreator;
@@ -35,27 +36,37 @@
                
                CyNetworkView networkView = graphicsData.getNetworkView();
                
-               int nodeIndex = 
graphicsData.getSelectionData().getHoverNodeIndex();
-               CyNode node = networkView.getModel().getNode(nodeIndex);
+               CyNode node = 
networkView.getModel().getNode(graphicsData.getSelectionData().getHoverNodeIndex());
+               CyEdge edge = 
networkView.getModel().getEdge(graphicsData.getSelectionData().getHoverEdgeIndex());
                
-               View<CyNode> nodeView = null;
-               if (node != null) {
-                       nodeView = networkView.getNodeView(node);
-               }
-               
-               if (pressed.contains(MouseEvent.BUTTON3) && nodeView != null) {
+               if (pressed.contains(MouseEvent.BUTTON3)) {
                        
+                       JPopupMenu popupMenu = null;
                        
+                       if (node != null) {
+                               View<CyNode> nodeView = 
networkView.getNodeView(node);;
+                               
+                               popupMenu = 
popupMenuCreator.createNodeMenu(nodeView, 
+                                               networkView, 
graphicsData.getVisualLexicon(), 
+                                               
graphicsData.getTaskFactoryListener().getNodeViewTaskFactories());
+                       } else if (edge != null) {
+                               View<CyEdge> edgeView = 
networkView.getEdgeView(edge);
+                               
+                               popupMenu = 
popupMenuCreator.createEdgeMenu(edgeView, 
+                                               networkView, 
graphicsData.getVisualLexicon(), 
+                                               
graphicsData.getTaskFactoryListener().getEdgeViewTaskFactories());
+                       } else {
+                               popupMenu = 
popupMenuCreator.createNetworkMenu(networkView, 
+                                               graphicsData.getVisualLexicon(),
+                                               
graphicsData.getTaskFactoryListener().getNetworkViewTaskFactories());
+                       }
                        
-                       JPopupMenu popupMenu = 
popupMenuCreator.createNodeMenu(nodeView, 
-                                       networkView, 
graphicsData.getVisualLexicon(), 
-                                       
graphicsData.getTaskFactoryListener().getNodeViewTaskFactories());
-                       
-                       
                        // menu.add(new JMenuItem("Sample Action"));
                        
-                       System.out.println("Creating context menu at : " + 
mouse.x() + ", " + mouse.y());
-                       popupMenu.show(graphicsData.getContainer(), mouse.x(), 
mouse.y());
+                       if (popupMenu != null) {
+                               popupMenu.show(graphicsData.getContainer(), 
mouse.x(), mouse.y());
+                       }
                }
+               
        }
 }

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/task/PopupMenuCreator.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/task/PopupMenuCreator.java
    2012-03-13 01:30:38 UTC (rev 28512)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/task/PopupMenuCreator.java
    2012-03-13 16:00:54 UTC (rev 28513)
@@ -14,6 +14,8 @@
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
 import org.cytoscape.paperwing.internal.data.GraphicsData;
+import org.cytoscape.task.EdgeViewTaskFactory;
+import org.cytoscape.task.NetworkViewTaskFactory;
 import org.cytoscape.task.NodeViewTaskFactory;
 import org.cytoscape.util.swing.GravityTracker;
 import org.cytoscape.util.swing.JMenuTracker;
@@ -25,6 +27,7 @@
 import org.cytoscape.work.TaskFactoryPredicate;
 import org.cytoscape.work.swing.DialogTaskManager;
 import org.cytoscape.work.swing.DynamicSubmenuListener;
+import org.cytoscape.work.swing.SubmenuTaskManager;
 
 /**
  * This class is responsible for creating and populating pop-up menus created 
when right-clicking the network.
@@ -32,14 +35,39 @@
 public class PopupMenuCreator {
        
        private DialogTaskManager taskManager;
+       private SubmenuTaskManager submenuTaskManager;
        
        // Large value to be used for the gravity value of 
org.cytoscape.util.swing.GravityTracker
        private double largeValue = Double.MAX_VALUE / 2.0;
 
-       public PopupMenuCreator(DialogTaskManager taskManager) {
+       public PopupMenuCreator(DialogTaskManager taskManager, 
SubmenuTaskManager submenuTaskManager) {
                this.taskManager = taskManager;
+               this.submenuTaskManager = submenuTaskManager;
        }
        
+       public JPopupMenu createEdgeMenu(View<CyEdge> edgeView, 
+                       CyNetworkView networkView, 
+                       VisualLexicon visualLexicon,
+                       Map<EdgeViewTaskFactory, Map<String, Object>> 
taskFactories) {
+               
+               JPopupMenu popupMenu = new JPopupMenu();
+               JMenuTracker tracker = new JMenuTracker(popupMenu);
+               
+               if (taskFactories.size() >= 1) {
+                       for (Entry<EdgeViewTaskFactory, Map<String, Object>> 
entry : taskFactories.entrySet()) {
+
+                               EdgeViewTaskFactory edgeViewTaskFactory = 
entry.getKey();
+                               Map<String, Object> properties = 
entry.getValue();
+                               
+                               edgeViewTaskFactory.setEdgeView(edgeView, 
networkView);
+                               
+                               createMenuItem(edgeView, visualLexicon, 
popupMenu, edgeViewTaskFactory, tracker, properties);
+                       }
+               }
+               
+               return popupMenu;
+       }
+       
        public JPopupMenu createNodeMenu(View<CyNode> nodeView, 
                        CyNetworkView networkView, 
                        VisualLexicon visualLexicon,
@@ -62,7 +90,27 @@
                
                return popupMenu;
        }
+       
+       public JPopupMenu createNetworkMenu(CyNetworkView networkView, 
VisualLexicon visualLexicon,
+                       Map<NetworkViewTaskFactory, Map<String, Object>> 
taskFactories) {
+               
+               JPopupMenu popupMenu = new JPopupMenu();
+               JMenuTracker tracker = new JMenuTracker(popupMenu);
+               
+               if (taskFactories.size() >= 1) {
+                       for (Entry<NetworkViewTaskFactory, Map<String, Object>> 
entry : taskFactories.entrySet()) {
 
+                               NetworkViewTaskFactory networkViewTaskFactory = 
entry.getKey();
+                               Map<String, Object> properties = 
entry.getValue();
+                               
+                               
networkViewTaskFactory.setNetworkView(networkView);
+                               
+                               createMenuItem(null, visualLexicon, popupMenu, 
networkViewTaskFactory, tracker, properties);
+                       }
+               }
+               
+               return popupMenu;
+       }
        
        private void createMenuItem(View<?> view, VisualLexicon visualLexicon, 
JPopupMenu popupMenu, TaskFactory taskFactory,
                                    JMenuTracker tracker, Map<String, Object> 
properties) {
@@ -87,6 +135,17 @@
                
                // Below based on implementation from Ding
 
+               // check if the menus are created dynamically, and if so add 
the listener
+               final Object preferredTaskManager = 
properties.get("preferredTaskManager");
+               if ( preferredTaskManager != null && 
preferredTaskManager.toString().equals("menu")) {
+                       if (title == null)
+                               title = "Dynamic";
+                       DynamicSubmenuListener submenu = 
submenuTaskManager.getConfiguration(taskFactory);
+               submenu.setMenuTitle(title);
+                       popupMenu.addPopupMenuListener(submenu);
+                       return;
+               }
+
                
                Boolean useCheckBoxMenuItem = 
Boolean.parseBoolean(String.valueOf(properties.get("useCheckBoxMenuItem")));
                Object targetVisualProperty = properties.get("targetVP");
@@ -94,7 +153,7 @@
                
                // Update value for isSelected
                if(view != null) {
-                       if (targetVisualProperty != null && 
targetVisualProperty instanceof String ) {
+                       if (targetVisualProperty != null && 
targetVisualProperty instanceof String) {
 
                                Class<?> targetClass = CyNetwork.class;
                                
@@ -108,7 +167,7 @@
                                        isSelected = false;
                                else
                                        isSelected = 
view.isValueLocked(visualProperty);
-                       } else if ( targetVisualProperty instanceof 
VisualProperty )
+                       } else if ( targetVisualProperty instanceof 
VisualProperty)
                                isSelected = 
view.isValueLocked((VisualProperty<?>) targetVisualProperty);
                }
                
@@ -140,7 +199,7 @@
                        // otherwise just use the preferred menu as the 
menuitem name
                        } else {
                                title = preferredMenu;
-                               popupMenu.add( createMenuItem(taskFactory, 
title, useCheckBoxMenuItem, tooltip) );
+                               popupMenu.add(createMenuItem(taskFactory, 
title, useCheckBoxMenuItem, tooltip));
                        }
 
                // title and preferred menu
@@ -155,7 +214,7 @@
                AbstractAction action = new AbstractAction(title){
 
                        @Override
-                       public void actionPerformed(ActionEvent arg0) {
+                       public void actionPerformed(ActionEvent event) {
                                taskManager.execute(taskFactory);
                        }
                        

-- 
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