Author: ruschein
Date: 2011-07-13 14:46:14 -0700 (Wed, 13 Jul 2011)
New Revision: 26171

Modified:
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/ui/VizMapBypass.java
Log:
Fixes a bug where custom graphics visual bypasses were not being saved in 
session files.

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
        2011-07-13 21:08:48 UTC (rev 26170)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
        2011-07-13 21:46:14 UTC (rev 26171)
@@ -42,9 +42,11 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import cytoscape.CyEdge;
 import cytoscape.CyNetwork;
@@ -57,6 +59,7 @@
 import cytoscape.data.attr.MultiHashMapDefinition;
 import cytoscape.logger.CyLogger;
 import cytoscape.view.CyNetworkView;
+import cytoscape.visual.NodeAppearance;
 import cytoscape.visual.calculators.AbstractCalculator;
 import cytoscape.visual.calculators.Calculator;
 import cytoscape.visual.calculators.GenericNodeCustomGraphicCalculator;
@@ -279,30 +282,53 @@
         * attributes are calculated by delegating to the 
NodeAppearanceCalculator
         * member of the current visual style.
         */
-       public void applyNodeAppearances(final CyNetwork network,
-                       final CyNetworkView network_view) {
+       public void applyNodeAppearances(final CyNetwork network, final 
CyNetworkView network_view) {
                final NodeAppearanceCalculator nodeAppearanceCalculator = 
activeVS
                                .getNodeAppearanceCalculator();
 
                List<VisualPropertyType> bypassedVPs = getBypassedVPs("NODE", 
Cytoscape
                                .getNodeAttributes());
 
+               final Set<CyCustomGraphics> byPassedCustomGraphics = new 
HashSet<CyCustomGraphics>();
                final Iterator<NodeView> itr = 
network_view.getNodeViewsIterator();
                while (itr.hasNext()) {
                        final NodeView nodeView = itr.next();
-                       final Node node = nodeView.getNode();                   
+                       final Node node = nodeView.getNode();
+
+                       // Identify and collect the bypassed custom graphics:
+                       final List<Object> bypassedProps =
+                               getByPassedVisProps(nodeView, bypassedVPs);
+                       for (final Object bypassedProp : bypassedProps) {
+                               if (bypassedProp instanceof CyCustomGraphics)
+                                       
byPassedCustomGraphics.add((CyCustomGraphics)bypassedProp);
+                       }
+
                        
nodeAppearanceCalculator.calculateNodeAppearance(myNodeApp, node,
                                        network, bypassedVPs);
                        myNodeApp.applyAppearance(nodeView, 
activeVS.getDependency());
                }
                
-               checkCustomGraphicsInUse();
+               checkCustomGraphicsInUse(byPassedCustomGraphics);
        }
+
+       private static final List<Object> getByPassedVisProps(final NodeView nv,
+                                                             final 
List<VisualPropertyType> bypassedVPs)
+       {
+               final List<Object> bypassedProps = new ArrayList<Object>();
+               final CyAttributes nodeAttrs = Cytoscape.getNodeAttributes();
+               final String id = nv.getNode().getIdentifier();
+               for (final VisualPropertyType propType : bypassedVPs) {
+                       final Object bypass = Appearance.getBypass(nodeAttrs, 
id, propType);
+                       if (bypass != null)
+                               bypassedProps.add(bypass);
+               }
+               return bypassedProps;
+       }
        
        /**
         * Reset status of used Custom Graphics
         */
-       private void checkCustomGraphicsInUse() {
+       private void checkCustomGraphicsInUse(final Set<CyCustomGraphics> 
byPassedCustomGraphics) {
 
                // Set everything unused.
                final Collection<CyCustomGraphics> allCG = manager.getAll();
@@ -361,6 +387,9 @@
                        }
                        
                }
+
+               for (final CyCustomGraphics cg : byPassedCustomGraphics)
+                       manager.setUsedInCurrentSession(cg, true);
        }
 
        /**

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/ui/VizMapBypass.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/ui/VizMapBypass.java 
    2011-07-13 21:08:48 UTC (rev 26170)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/ui/VizMapBypass.java 
    2011-07-13 21:46:14 UTC (rev 26171)
@@ -55,6 +55,7 @@
 import cytoscape.visual.VisualPropertyDependency;
 import cytoscape.visual.VisualPropertyType;
 import cytoscape.visual.converter.ValueToStringConverterManager;
+import cytoscape.visual.customgraphic.CyCustomGraphics;
 
 
 /**
@@ -124,6 +125,11 @@
                                
                                try {
                                        obj = 
type.showDiscreteEditor(currentValue);
+                                       if (obj instanceof CyCustomGraphics) {
+                                               final CyCustomGraphics cg = 
(CyCustomGraphics)obj;
+                                               
Cytoscape.getVisualMappingManager().getCustomGraphicsManager()
+                                                       
.setUsedInCurrentSession(cg, true);
+                                       }
                                } catch (Exception ex) {
                                        logger.warn("Unable to show descrete 
editor", ex);
                                        obj = null;

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