Author: kono
Date: 2012-06-18 14:35:37 -0700 (Mon, 18 Jun 2012)
New Revision: 29607

Added:
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassMenuBuilder.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/EdgeBypassContextMenuFactory.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/NodeBypassContextMenuFactory.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/resources/images/icons/CrystalClearIcons_Action-lock-silver-icon.png
Removed:
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassTask.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ClearBypassTask.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/EdgeBypassMenuTaskFactory.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/NodeBypassMenuTaskFactory.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetBypassTask.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetEdgeBypassTaskFactory.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetNodeBypassTaskFactory.java
Modified:
   
core3/api/trunk/viewmodel-api/src/main/java/org/cytoscape/view/model/VisualLexiconNode.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/CyActivator.java
   
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassManager.java
Log:
fixes #1118 Bypass menu refactored.  Menu appearance is state sensitive.

Modified: 
core3/api/trunk/viewmodel-api/src/main/java/org/cytoscape/view/model/VisualLexiconNode.java
===================================================================
--- 
core3/api/trunk/viewmodel-api/src/main/java/org/cytoscape/view/model/VisualLexiconNode.java
 2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/api/trunk/viewmodel-api/src/main/java/org/cytoscape/view/model/VisualLexiconNode.java
 2012-06-18 21:35:37 UTC (rev 29607)
@@ -12,7 +12,7 @@
  * 
  * @CyAPI.Final.Class
  */
-public final class VisualLexiconNode {
+public final class VisualLexiconNode implements Comparable<VisualLexiconNode> {
        
        private final VisualProperty<?> vp;
        
@@ -69,4 +69,14 @@
                return children;
        }
 
+
+       /**
+        * {@inheritDoc}
+        * Compare by display name of this Visual Property.
+        */
+       @Override
+       public int compareTo(final VisualLexiconNode other) {
+               return 
this.getVisualProperty().getDisplayName().compareTo(other.getVisualProperty().getDisplayName());
+       }
+
 }

Modified: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/CyActivator.java
      2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/CyActivator.java
      2012-06-18 21:35:37 UTC (rev 29607)
@@ -143,7 +143,7 @@
                DefaultTableCellRenderer emptyBoxRenderer = new 
DefaultTableCellRenderer();
                DefaultTableCellRenderer filledBoxRenderer = new 
DefaultTableCellRenderer();
                VizMapEventHandlerManagerImpl vizMapEventHandlerManager = new 
VizMapEventHandlerManagerImpl(vmmServiceRef, 
editorManager,vizMapPropertySheetBuilder,propertySheetPanel,vizMapperMainPanel,cyNetworkTableManagerServiceRef,cyApplicationManagerServiceRef,attributeSetManager,vizMapperUtil);
-               BypassManager bypassManager = new 
BypassManager(cyServiceRegistrarServiceRef,editorManager, vmmServiceRef, 
cyApplicationManagerServiceRef);
+               BypassManager bypassManager = new 
BypassManager(cyServiceRegistrarServiceRef,editorManager, vmmServiceRef);
                
                // Context menu for edge bend
                BendFactory bf = getService(bc, BendFactory.class);

Modified: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassManager.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassManager.java
     2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassManager.java
     2012-06-18 21:35:37 UTC (rev 29607)
@@ -1,20 +1,11 @@
 package org.cytoscape.view.vizmap.gui.internal.bypass;
 
-import static org.cytoscape.work.ServiceProperties.MENU_GRAVITY;
-
-import java.util.Collection;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
-import java.util.Vector;
 
-import org.cytoscape.application.CyApplicationManager;
-import org.cytoscape.model.CyEdge;
-import org.cytoscape.model.CyIdentifiable;
-import org.cytoscape.model.CyNode;
+import org.cytoscape.application.swing.CyEdgeViewContextMenuFactory;
+import org.cytoscape.application.swing.CyNodeViewContextMenuFactory;
 import org.cytoscape.service.util.CyServiceRegistrar;
-import org.cytoscape.task.EdgeViewTaskFactory;
-import org.cytoscape.task.NodeViewTaskFactory;
 import org.cytoscape.view.model.VisualLexicon;
 import org.cytoscape.view.model.VisualLexiconNode;
 import org.cytoscape.view.model.VisualProperty;
@@ -22,32 +13,22 @@
 import org.cytoscape.view.presentation.property.BasicVisualLexicon;
 import org.cytoscape.view.vizmap.VisualMappingManager;
 import org.cytoscape.view.vizmap.gui.editor.EditorManager;
-import org.cytoscape.view.vizmap.gui.util.PropertySheetUtil;
-import org.cytoscape.work.ServiceProperties;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Creates Visual Style Bypass menu.
  * 
  */
 public final class BypassManager {
-
-       private static final Logger logger = 
LoggerFactory.getLogger(BypassManager.class);
-
-       private static final String PARENT_MENU_ITEM = "Visual Bypass";
-
+       
        private final CyServiceRegistrar registrar;
        private final EditorManager editorManager;
        private final VisualMappingManager vmm;
-       private final CyApplicationManager appManager;
 
        public BypassManager(final CyServiceRegistrar registrar, final 
EditorManager editorManager,
-                       final VisualMappingManager vmm, final 
CyApplicationManager appManager) {
+                       final VisualMappingManager vmm) {
                this.registrar = registrar;
                this.editorManager = editorManager;
                this.vmm = vmm;
-               this.appManager = appManager;
        }
 
        public void addBypass(RenderingEngineFactory<?> factory, Map props) {
@@ -63,113 +44,24 @@
                // Tree traversal
                final VisualLexiconNode nodeRootNode = 
lexicon.getVisualLexiconNode(nodeRoot);
                final VisualLexiconNode edgeRootNode = 
lexicon.getVisualLexiconNode(edgeRoot);
-
-               registerResetTask(CyNode.class);
-               registerResetTask(CyEdge.class);
-               depthFirst(PARENT_MENU_ITEM, nodeRootNode);
-               depthFirst(PARENT_MENU_ITEM, edgeRootNode);
-
+               buildMenu(nodeRootNode, edgeRootNode, lexicon);
        }
 
        public void removeBypass(RenderingEngineFactory<?> factory, Map props) {
                // TODO: implement this
        }
 
-       private void registerResetTask(Class<? extends CyIdentifiable> type) {
-               final Properties vpProp = new Properties();
+       private void buildMenu(final VisualLexiconNode rootNode, final 
VisualLexiconNode rootEdge,
+                       final VisualLexicon lexicon) {
+               // Create root menu
+               final Properties nodeProp = new Properties();
+               nodeProp.setProperty("preferredTaskManager", "menu");
+               final NodeBypassContextMenuFactory ntf = new 
NodeBypassContextMenuFactory(rootNode, editorManager, vmm, lexicon);
+               registrar.registerService(ntf, 
CyNodeViewContextMenuFactory.class, nodeProp);
 
-               if (type.equals(CyNode.class)) {
-                       vpProp.put(ServiceProperties.PREFERRED_MENU, 
PARENT_MENU_ITEM + ".Reset All Node Bypass");
-                       final NodeViewTaskFactory ntf = new 
ResetNodeBypassTaskFactory(appManager);
-                       registrar.registerService(ntf, 
NodeViewTaskFactory.class, vpProp);
-               } else if (type.equals(CyEdge.class)) {
-                       vpProp.put(ServiceProperties.PREFERRED_MENU, 
PARENT_MENU_ITEM + ".Reset All Edge Bypass");
-                       final EdgeViewTaskFactory etf = new 
ResetEdgeBypassTaskFactory(appManager);
-                       registrar.registerService(etf, 
EdgeViewTaskFactory.class, vpProp);
-               }
+               final Properties edgeProp = new Properties();
+               edgeProp.setProperty("preferredTaskManager", "menu");
+               final EdgeBypassContextMenuFactory etf = new 
EdgeBypassContextMenuFactory(rootEdge, editorManager, vmm, lexicon);
+               registrar.registerService(etf, 
CyEdgeViewContextMenuFactory.class, edgeProp);
        }
-
-       private void depthFirst(String menuText, final VisualLexiconNode node) {
-
-               double menu_gravity = 1.0;
-               HashMap<String, String> vpMap = new HashMap<String, String>();
-               Vector<String> vp_names = new Vector<String>();
-
-               final Collection<VisualLexiconNode> children = 
node.getChildren();
-
-               // get the list of VP
-               for (VisualLexiconNode child : children) {
-                       final VisualProperty<?> vp = child.getVisualProperty();
-
-                       // Ignore incompatible VP
-                       if (PropertySheetUtil.isCompatible(vp) == false)
-                               continue;
-
-                       if (child.getChildren().size() == 0) {
-                               // Leaf
-                               vp_names.add(vp.getDisplayName());
-                       }
-               }
-
-               // do sorting
-               Object[] names = vp_names.toArray();
-               java.util.Arrays.sort(names);
-
-               // Assign the menu_gravity for each VP
-               for (int i = 0; i < names.length; i++) {
-                       menu_gravity += 1.0;
-                       vpMap.put(names[i].toString(), 
Double.toString(menu_gravity));
-               }
-
-               //
-               for (VisualLexiconNode child : children) {
-                       final VisualProperty<?> vp = child.getVisualProperty();
-
-                       // Ignore incompatible VP
-                       if (PropertySheetUtil.isCompatible(vp) == false)
-                               continue;
-
-                       final String baseString = menuText + "." + 
vp.getDisplayName();
-                       if (child.getChildren().size() == 0) {
-                               final String newMenu = baseString + ".Set 
Value";
-                               final String clearMenu = baseString + ".Clear";
-                               // Leaf
-                               final Properties vpProp = new Properties();
-                               vpProp.put(ServiceProperties.PREFERRED_MENU, 
newMenu);
-                               vpProp.put("useCheckBoxMenuItem", "true");
-                               vpProp.put("targetVP", vp.getIdString());
-                               vpProp.put(MENU_GRAVITY, 
vpMap.get(vp.getDisplayName()));
-
-                               final Properties clearProp = new Properties();
-                               clearProp.put(ServiceProperties.PREFERRED_MENU, 
clearMenu);
-                               // clearProp.put("useCheckBoxMenuItem", "true");
-                               clearProp.put("targetVP", vp.getIdString());
-                               clearProp.put(MENU_GRAVITY, 
vpMap.get(vp.getDisplayName()));
-
-                               if 
(vp.getTargetDataType().equals(CyNode.class)) {
-                                       final NodeViewTaskFactory ntf = new 
NodeBypassMenuTaskFactory(null, vp,
-                                                       
editorManager.getValueEditor(vp.getRange().getType()), vmm, false);
-                                       registrar.registerService(ntf, 
NodeViewTaskFactory.class, vpProp);
-
-                                       final NodeViewTaskFactory clearNtf = 
new NodeBypassMenuTaskFactory(null, vp,
-                                                       
editorManager.getValueEditor(vp.getRange().getType()), vmm, true);
-                                       registrar.registerService(clearNtf, 
NodeViewTaskFactory.class, clearProp);
-
-                               } else if 
(vp.getTargetDataType().equals(CyEdge.class)) {
-                                       final EdgeViewTaskFactory etf = new 
EdgeBypassMenuTaskFactory(null, vp,
-                                                       
editorManager.getValueEditor(vp.getRange().getType()), vmm, false);
-                                       registrar.registerService(etf, 
EdgeViewTaskFactory.class, vpProp);
-
-                                       final EdgeViewTaskFactory clearEtf = 
new EdgeBypassMenuTaskFactory(null, vp,
-                                                       
editorManager.getValueEditor(vp.getRange().getType()), vmm, true);
-                                       registrar.registerService(clearEtf, 
EdgeViewTaskFactory.class, clearProp);
-                               }
-
-                               logger.debug("Bypass context menu registered: " 
+ vp.getDisplayName());
-                       } else {
-                               depthFirst(baseString, child);
-                       }
-               }
-       }
-
 }

Added: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassMenuBuilder.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassMenuBuilder.java
                         (rev 0)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassMenuBuilder.java
 2012-06-18 21:35:37 UTC (rev 29607)
@@ -0,0 +1,192 @@
+package org.cytoscape.view.vizmap.gui.internal.bypass;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.PriorityQueue;
+import java.util.Queue;
+import java.util.Set;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JSeparator;
+
+import org.cytoscape.application.swing.CyMenuItem;
+import org.cytoscape.model.CyIdentifiable;
+import org.cytoscape.model.CyRow;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.model.View;
+import org.cytoscape.view.model.VisualLexiconNode;
+import org.cytoscape.view.model.VisualProperty;
+import org.cytoscape.view.vizmap.VisualMappingManager;
+import org.cytoscape.view.vizmap.gui.editor.EditorManager;
+import org.cytoscape.view.vizmap.gui.editor.ValueEditor;
+import org.cytoscape.view.vizmap.gui.util.PropertySheetUtil;
+
+final class BypassMenuBuilder {
+       private static final String ROOT_MENU_LABEL = "Bypass Visual Style";
+       
+       // Try to set it at the bottom of context menu
+       private static final float ROOT_GRAVITY = 1000000f;
+
+       private static final Font ENABLED_FONT = new Font("Helvatica", 
Font.BOLD, 14);
+       private static final Icon ENABLED_ICON = new ImageIcon(
+                       
BypassMenuBuilder.class.getResource("/images/icons/CrystalClearIcons_Action-lock-silver-icon.png"));
+       private static final Color ENABLED_COLOR = Color.RED;
+
+       private final VisualLexiconNode root;
+       private final EditorManager editorManager;
+       private final VisualMappingManager vmm;
+       private final Collection<VisualProperty<?>> vpSet;
+
+       public BypassMenuBuilder(final VisualLexiconNode root, final 
EditorManager editorManager,
+                       final VisualMappingManager vmm, final 
Collection<VisualProperty<?>> vpSet) {
+               this.root = root;
+               this.editorManager = editorManager;
+               this.vmm = vmm;
+               this.vpSet = vpSet;
+       }
+
+       public CyMenuItem build(final CyNetworkView netView, final View<? 
extends CyIdentifiable> nodeView) {
+               final Queue<VisualLexiconNode> queue = new 
PriorityQueue<VisualLexiconNode>(50,
+                               new VisualLexiconNodeComparator());
+               final Map<VisualLexiconNode, JMenuItem> menuMap = new 
HashMap<VisualLexiconNode, JMenuItem>();
+
+               final JMenu rootJMenu = new JMenu(ROOT_MENU_LABEL);
+
+               final CyMenuItem rootMenu = new CyMenuItem(rootJMenu, 
ROOT_GRAVITY);
+               queue.addAll(root.getChildren());
+               menuMap.put(root, rootMenu.getMenuItem());
+
+               final Set<VisualLexiconNode> nextNodes = new 
HashSet<VisualLexiconNode>();
+
+               while (!queue.isEmpty()) {
+                       final VisualLexiconNode curretNode = queue.poll();
+                       final VisualProperty<?> vp = 
curretNode.getVisualProperty();
+                       
+                       final Collection<VisualLexiconNode> children = 
curretNode.getChildren();
+                       nextNodes.addAll(children);
+
+                       final JMenuItem menu;
+                       if (children.size() == 0 && 
PropertySheetUtil.isCompatible(vp)) {
+                               final boolean lock = nodeView.isValueLocked(vp);
+                               if (lock) {
+                                       menu = new JMenu(vp.getDisplayName());
+                                       final JMenuItem clear = new 
JMenuItem("Clear");
+                                       clear.addActionListener(new 
ActionListener() {
+                                               @Override
+                                               public void 
actionPerformed(ActionEvent e) {
+                                                       
nodeView.clearValueLock(vp);
+                                                       netView.updateView();
+                                               }
+                                       });
+                                       final JMenuItem edit = new 
JMenuItem("Edit Bypass");
+                                       edit.addActionListener(new 
ActionListener() {
+                                               @Override
+                                               public void 
actionPerformed(ActionEvent e) {
+                                                       editValue(netView, 
nodeView, vp);
+                                               }
+                                       });
+                                       menu.add(clear);
+                                       menu.add(edit);
+
+                                       // Update color
+                                       menu.setForeground(ENABLED_COLOR);
+                                       menu.setIcon(ENABLED_ICON);
+                                       menu.setFont(ENABLED_FONT);
+                                       VisualLexiconNode parent = 
curretNode.getParent();
+                                       while (parent != root) {
+                                               JMenuItem enabledPath = 
menuMap.get(parent);
+                                               
enabledPath.setForeground(ENABLED_COLOR);
+                                               
enabledPath.setIcon(ENABLED_ICON);
+                                               
enabledPath.setFont(ENABLED_FONT);
+                                               parent = parent.getParent();
+                                       }
+                                       rootJMenu.setIcon(ENABLED_ICON);
+                                       rootJMenu.setForeground(ENABLED_COLOR);
+                                       rootJMenu.setFont(ENABLED_FONT);
+
+                               } else {
+                                       menu = new 
JMenuItem(vp.getDisplayName());
+                                       menu.addActionListener(new 
ActionListener() {
+                                               @Override
+                                               public void 
actionPerformed(ActionEvent e) {
+                                                       editValue(netView, 
nodeView, vp);
+                                               }
+                                       });
+                               }
+
+                       } else {
+                               menu = new JMenu(vp.getDisplayName());
+                       }
+
+                       if(PropertySheetUtil.isCompatible(vp)) {
+                               menuMap.get(curretNode.getParent()).add(menu);
+                               menuMap.put(curretNode, menu);
+                       }
+
+                       if (queue.isEmpty()) {
+                               queue.addAll(nextNodes);
+                               nextNodes.clear();
+                       }
+               }
+
+               final JSeparator separator = new JSeparator();
+               final JMenuItem resetMenu = new JMenuItem("Reset All");
+               resetMenu.addActionListener(new ActionListener() {
+                       
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               clearAll(netView, nodeView);
+                               
+                       }
+               });
+               
+               rootJMenu.add(separator);
+               rootJMenu.add(resetMenu);
+               
+               return rootMenu;
+       }
+
+       private final void editValue(final CyNetworkView netView, final View<? 
extends CyIdentifiable> nodeView,
+                       VisualProperty<?> vp) {
+               final ValueEditor<Object> editor = (ValueEditor<Object>) 
editorManager.getValueEditor(vp.getRange().getType());
+               final Object newValue = editor.showEditor(null, 
nodeView.getVisualProperty(vp));
+               nodeView.setLockedValue(vp, newValue);
+               final CyRow row = 
netView.getModel().getRow(nodeView.getModel());
+               vmm.getCurrentVisualStyle().apply(row, nodeView);
+               netView.updateView();
+       }
+
+       private final void clearAll(final CyNetworkView netView, final View<? 
extends CyIdentifiable> nodeView) {
+               boolean needToUpdateView = false;
+
+               for (VisualProperty<?> vp : vpSet) {
+                       final boolean lock = nodeView.isValueLocked(vp);
+                       if (lock) {
+                               nodeView.clearValueLock(vp);
+                               needToUpdateView = true;
+                       }
+               }
+
+               if (needToUpdateView)
+                       netView.updateView();
+       }
+
+       private static final class VisualLexiconNodeComparator implements 
Comparator<VisualLexiconNode> {
+               @Override
+               public int compare(final VisualLexiconNode node1, final 
VisualLexiconNode node2) {
+                       return node1.compareTo(node2);
+               }
+
+       }
+
+}

Deleted: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassTask.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassTask.java
        2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/BypassTask.java
        2012-06-18 21:35:37 UTC (rev 29607)
@@ -1,75 +0,0 @@
-package org.cytoscape.view.vizmap.gui.internal.bypass;
-
-import static org.cytoscape.work.ServiceProperties.MENU_GRAVITY;
-
-import java.awt.Component;
-import java.util.Properties;
-
-import javax.swing.SwingUtilities;
-
-import org.cytoscape.model.CyEdge;
-import org.cytoscape.model.CyIdentifiable;
-import org.cytoscape.model.CyNode;
-import org.cytoscape.model.CyRow;
-import org.cytoscape.service.util.CyServiceRegistrar;
-import org.cytoscape.task.EdgeViewTaskFactory;
-import org.cytoscape.task.NodeViewTaskFactory;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.View;
-import org.cytoscape.view.model.VisualProperty;
-import org.cytoscape.view.vizmap.VisualMappingManager;
-import org.cytoscape.view.vizmap.gui.editor.ValueEditor;
-import org.cytoscape.work.AbstractTask;
-import org.cytoscape.work.ServiceProperties;
-import org.cytoscape.work.TaskMonitor;
-
-/**
- * Task to execute visual style bypass.
- * 
- * @param <T>
- *            Type of Graph object: CyNode or CyEdge.
- */
-public class BypassTask<T extends CyIdentifiable> extends AbstractTask {
-
-       // Target view object. Node or Edge.
-       private final View<T> view;
-       private final VisualProperty<Object> vp;
-       private final ValueEditor<Object> editor;
-
-       private final Component parent;
-       private final CyNetworkView networkView;
-       private final VisualMappingManager vmm;
-
-       @SuppressWarnings("unchecked")
-       BypassTask(Component parent, ValueEditor<?> editor, final 
VisualProperty<?> vp, final View<T> view,
-                       final CyNetworkView networkView, final 
VisualMappingManager vmm) {
-               this.view = view;
-               this.vp = (VisualProperty<Object>) vp;
-               this.editor = (ValueEditor<Object>) editor;
-               this.parent = parent;
-               this.vmm = vmm;
-
-               this.networkView = networkView;
-       }
-
-       @Override
-       public void run(TaskMonitor taskMonitor) throws Exception {
-               final boolean lock = view.isValueLocked(vp);
-
-               SwingUtilities.invokeLater(new Runnable() {
-                       @Override
-                       public void run() {
-                               update(lock);
-                       }
-               });
-
-       }
-
-       private final void update(final boolean lock) {
-               final Object newValue = editor.showEditor(parent, 
view.getVisualProperty(vp));
-               view.setLockedValue(vp, newValue);
-               final CyRow row = 
networkView.getModel().getRow(view.getModel());
-               vmm.getCurrentVisualStyle().apply(row, view);
-               networkView.updateView();
-       }
-}

Deleted: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ClearBypassTask.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ClearBypassTask.java
   2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ClearBypassTask.java
   2012-06-18 21:35:37 UTC (rev 29607)
@@ -1,34 +0,0 @@
-package org.cytoscape.view.vizmap.gui.internal.bypass;
-
-import org.cytoscape.model.CyIdentifiable;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.View;
-import org.cytoscape.view.model.VisualProperty;
-import org.cytoscape.work.AbstractTask;
-import org.cytoscape.work.TaskMonitor;
-
-public class ClearBypassTask extends AbstractTask {
-
-       private final View<? extends CyIdentifiable> view;
-       private final VisualProperty<Object> vp;
-
-       private final CyNetworkView networkView;
-
-       public ClearBypassTask(final VisualProperty<?> vp, final View<? extends 
CyIdentifiable> view,
-                       final CyNetworkView networkView) {
-               this.view = view;
-               this.vp = (VisualProperty<Object>) vp;
-               this.networkView = networkView;
-       }
-
-       @Override
-       public void run(TaskMonitor taskMonitor) throws Exception {
-
-               final boolean lock = view.isValueLocked(vp);
-               if (lock) {
-                       view.clearValueLock(vp);
-                       networkView.updateView();
-               }
-       }
-
-}
\ No newline at end of file

Added: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/EdgeBypassContextMenuFactory.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/EdgeBypassContextMenuFactory.java
                              (rev 0)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/EdgeBypassContextMenuFactory.java
      2012-06-18 21:35:37 UTC (rev 29607)
@@ -0,0 +1,37 @@
+package org.cytoscape.view.vizmap.gui.internal.bypass;
+
+import java.util.Collection;
+
+import org.cytoscape.application.swing.CyEdgeViewContextMenuFactory;
+import org.cytoscape.application.swing.CyMenuItem;
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.model.View;
+import org.cytoscape.view.model.VisualLexicon;
+import org.cytoscape.view.model.VisualLexiconNode;
+import org.cytoscape.view.model.VisualProperty;
+import org.cytoscape.view.presentation.property.BasicVisualLexicon;
+import org.cytoscape.view.vizmap.VisualMappingManager;
+import org.cytoscape.view.vizmap.gui.editor.EditorManager;
+
+public class EdgeBypassContextMenuFactory implements 
CyEdgeViewContextMenuFactory {
+
+       private final VisualLexiconNode root;
+       private final EditorManager editorManager;
+       private final VisualMappingManager vmm;
+       private Collection<VisualProperty<?>> vpSet;
+       
+       EdgeBypassContextMenuFactory(final VisualLexiconNode root, final 
EditorManager editorManager,
+                       final VisualMappingManager vmm, final VisualLexicon 
lexicon) {
+               this.root = root;
+               this.editorManager = editorManager;
+               this.vmm = vmm;
+               this.vpSet = lexicon.getAllDescendants(BasicVisualLexicon.EDGE);
+       }
+
+       @Override
+       public CyMenuItem createMenuItem(final CyNetworkView netView, final 
View<CyEdge> edgeView) {
+               final BypassMenuBuilder menuBuilder = new 
BypassMenuBuilder(root, editorManager, vmm, vpSet);
+               return menuBuilder.build(netView, edgeView);
+       }
+}

Deleted: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/EdgeBypassMenuTaskFactory.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/EdgeBypassMenuTaskFactory.java
 2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/EdgeBypassMenuTaskFactory.java
 2012-06-18 21:35:37 UTC (rev 29607)
@@ -1,39 +0,0 @@
-package org.cytoscape.view.vizmap.gui.internal.bypass;
-
-import java.awt.Component;
-
-import org.cytoscape.model.CyEdge;
-import org.cytoscape.task.AbstractEdgeViewTaskFactory;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.View;
-import org.cytoscape.view.model.VisualProperty;
-import org.cytoscape.view.vizmap.VisualMappingManager;
-import org.cytoscape.view.vizmap.gui.editor.ValueEditor;
-import org.cytoscape.work.TaskIterator;
-
-public class EdgeBypassMenuTaskFactory extends AbstractEdgeViewTaskFactory {
-
-       private final VisualProperty<?> vp;
-       private final ValueEditor<?> editor;
-
-       private final Component parent;
-       private final VisualMappingManager vmm;
-       private final boolean clearOnly;
-
-       public EdgeBypassMenuTaskFactory(final Component parent, final 
VisualProperty<?> vp, final ValueEditor<?> editor,
-                       final VisualMappingManager vmm, final boolean 
clearOnly) {
-               this.vp = vp;
-               this.editor = editor;
-               this.parent = parent;
-               this.vmm = vmm;
-               this.clearOnly = clearOnly;
-       }
-
-       @Override
-       public TaskIterator createTaskIterator(View<CyEdge> edgeView, 
CyNetworkView netView) {
-               if(clearOnly)
-                       return new TaskIterator(new ClearBypassTask(vp, 
edgeView, netView));
-               else
-                       return new TaskIterator(new BypassTask<CyEdge>(parent, 
editor, vp, edgeView, netView, vmm));
-       }
-}

Copied: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/NodeBypassContextMenuFactory.java
 (from rev 29594, 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/NodeBypassMenuTaskFactory.java)
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/NodeBypassContextMenuFactory.java
                              (rev 0)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/NodeBypassContextMenuFactory.java
      2012-06-18 21:35:37 UTC (rev 29607)
@@ -0,0 +1,37 @@
+package org.cytoscape.view.vizmap.gui.internal.bypass;
+
+import java.util.Collection;
+
+import org.cytoscape.application.swing.CyMenuItem;
+import org.cytoscape.application.swing.CyNodeViewContextMenuFactory;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.model.View;
+import org.cytoscape.view.model.VisualLexicon;
+import org.cytoscape.view.model.VisualLexiconNode;
+import org.cytoscape.view.model.VisualProperty;
+import org.cytoscape.view.presentation.property.BasicVisualLexicon;
+import org.cytoscape.view.vizmap.VisualMappingManager;
+import org.cytoscape.view.vizmap.gui.editor.EditorManager;
+
+final class NodeBypassContextMenuFactory implements 
CyNodeViewContextMenuFactory {
+
+       private final VisualLexiconNode root;
+       private final EditorManager editorManager;
+       private final VisualMappingManager vmm;
+       private Collection<VisualProperty<?>> vpSet;
+       
+       NodeBypassContextMenuFactory(final VisualLexiconNode root, final 
EditorManager editorManager,
+                       final VisualMappingManager vmm, final VisualLexicon 
lexicon) {
+               this.root = root;
+               this.editorManager = editorManager;
+               this.vmm = vmm;
+               this.vpSet = lexicon.getAllDescendants(BasicVisualLexicon.NODE);
+       }
+
+       @Override
+       public CyMenuItem createMenuItem(final CyNetworkView netView, final 
View<CyNode> nodeView) {
+               final BypassMenuBuilder menuBuilder = new 
BypassMenuBuilder(root, editorManager, vmm, vpSet);
+               return menuBuilder.build(netView, nodeView);
+       }
+}

Deleted: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/NodeBypassMenuTaskFactory.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/NodeBypassMenuTaskFactory.java
 2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/NodeBypassMenuTaskFactory.java
 2012-06-18 21:35:37 UTC (rev 29607)
@@ -1,41 +0,0 @@
-package org.cytoscape.view.vizmap.gui.internal.bypass;
-
-import java.awt.Component;
-
-import org.cytoscape.model.CyNode;
-import org.cytoscape.task.AbstractNodeViewTaskFactory;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.View;
-import org.cytoscape.view.model.VisualProperty;
-import org.cytoscape.view.vizmap.VisualMappingManager;
-import org.cytoscape.view.vizmap.gui.editor.ValueEditor;
-import org.cytoscape.work.TaskIterator;
-
-public class NodeBypassMenuTaskFactory extends AbstractNodeViewTaskFactory {
-
-       private final VisualProperty<?> vp;
-       private final ValueEditor<?> editor;
-
-       private final Component parent;
-       private final VisualMappingManager vmm;
-       
-       final boolean clearOnly;
-
-       NodeBypassMenuTaskFactory(final Component parent, final 
VisualProperty<?> vp, final ValueEditor<?> editor,
-                       final VisualMappingManager vmm, final boolean 
clearOnly) {
-               this.vp = vp;
-               this.editor = editor;
-               this.parent = parent;
-               this.vmm = vmm;
-
-               this.clearOnly = clearOnly;
-       }
-
-       @Override
-       public TaskIterator createTaskIterator(View<CyNode> nodeView, 
CyNetworkView netView) {
-               if(clearOnly) {
-                       return new TaskIterator(new ClearBypassTask(vp, 
nodeView, netView));
-               } else
-                       return new TaskIterator(new BypassTask<CyNode>(parent, 
editor, vp, nodeView, netView, vmm));
-       }
-}

Deleted: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetBypassTask.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetBypassTask.java
   2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetBypassTask.java
   2012-06-18 21:35:37 UTC (rev 29607)
@@ -1,52 +0,0 @@
-package org.cytoscape.view.vizmap.gui.internal.bypass;
-
-import java.util.Collection;
-
-import org.cytoscape.model.CyIdentifiable;
-import org.cytoscape.model.CyNode;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.View;
-import org.cytoscape.view.model.VisualLexicon;
-import org.cytoscape.view.model.VisualProperty;
-import org.cytoscape.view.presentation.property.BasicVisualLexicon;
-import org.cytoscape.work.AbstractTask;
-import org.cytoscape.work.TaskMonitor;
-
-public class ResetBypassTask extends AbstractTask {
-
-       private final View<? extends CyIdentifiable> view;
-       private final CyNetworkView networkView;
-
-       private final Collection<VisualProperty<?>> vpSet;
-
-       public ResetBypassTask(final VisualLexicon lexicon, final View<? 
extends CyIdentifiable> view,
-                       final CyNetworkView networkView) {
-               this.view = view;
-               this.networkView = networkView;
-
-               final CyIdentifiable model = view.getModel();
-               if (model instanceof CyNode) {
-                       vpSet = 
lexicon.getAllDescendants(BasicVisualLexicon.NODE);
-               } else {
-                       vpSet = 
lexicon.getAllDescendants(BasicVisualLexicon.EDGE);
-               }
-       }
-
-       @Override
-       public void run(TaskMonitor taskMonitor) throws Exception {
-
-               boolean needToUpdateView = false;
-               
-               for (VisualProperty<?> vp : vpSet) {
-                       final boolean lock = view.isValueLocked(vp);
-                       if (lock) {
-                               view.clearValueLock(vp);
-                               needToUpdateView = true;
-                       }
-               }
-               
-               if(needToUpdateView)
-                       networkView.updateView();
-       }
-
-}

Deleted: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetEdgeBypassTaskFactory.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetEdgeBypassTaskFactory.java
        2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetEdgeBypassTaskFactory.java
        2012-06-18 21:35:37 UTC (rev 29607)
@@ -1,25 +0,0 @@
-package org.cytoscape.view.vizmap.gui.internal.bypass;
-
-import org.cytoscape.application.CyApplicationManager;
-import org.cytoscape.model.CyEdge;
-import org.cytoscape.task.AbstractEdgeViewTaskFactory;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.View;
-import org.cytoscape.view.vizmap.VisualMappingManager;
-import org.cytoscape.work.TaskIterator;
-
-public class ResetEdgeBypassTaskFactory extends AbstractEdgeViewTaskFactory {
-
-       private final CyApplicationManager applicationManager;
-
-       public ResetEdgeBypassTaskFactory(final CyApplicationManager 
applicationManager) {
-               this.applicationManager = applicationManager;
-       }
-
-       @Override
-       public TaskIterator createTaskIterator(View<CyEdge> edgeView, 
CyNetworkView networkView) {
-               return new TaskIterator(new 
ResetBypassTask(applicationManager.getCurrentRenderingEngine().getVisualLexicon(),
-                               edgeView, networkView));
-       }
-
-}

Deleted: 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetNodeBypassTaskFactory.java
===================================================================
--- 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetNodeBypassTaskFactory.java
        2012-06-18 21:35:07 UTC (rev 29606)
+++ 
core3/impl/trunk/vizmap-gui-impl/src/main/java/org/cytoscape/view/vizmap/gui/internal/bypass/ResetNodeBypassTaskFactory.java
        2012-06-18 21:35:37 UTC (rev 29607)
@@ -1,24 +0,0 @@
-package org.cytoscape.view.vizmap.gui.internal.bypass;
-
-import org.cytoscape.application.CyApplicationManager;
-import org.cytoscape.model.CyNode;
-import org.cytoscape.task.AbstractNodeViewTaskFactory;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.View;
-import org.cytoscape.work.TaskIterator;
-
-public class ResetNodeBypassTaskFactory extends AbstractNodeViewTaskFactory {
-
-       private final CyApplicationManager applicationManager;
-
-       public ResetNodeBypassTaskFactory(final CyApplicationManager 
applicationManager) {
-               this.applicationManager = applicationManager;
-       }
-
-       @Override
-       public TaskIterator createTaskIterator(View<CyNode> nodeView, 
CyNetworkView networkView) {
-               return new TaskIterator(new 
ResetBypassTask(applicationManager.getCurrentRenderingEngine().getVisualLexicon(),
-                               nodeView, networkView));
-       }
-
-}
\ No newline at end of file

Added: 
core3/impl/trunk/vizmap-gui-impl/src/main/resources/images/icons/CrystalClearIcons_Action-lock-silver-icon.png
===================================================================
(Binary files differ)


Property changes on: 
core3/impl/trunk/vizmap-gui-impl/src/main/resources/images/icons/CrystalClearIcons_Action-lock-silver-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

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