Author: kono
Date: 2010-10-08 13:59:15 -0700 (Fri, 08 Oct 2010)
New Revision: 22195
Modified:
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualPropertyType.java
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsManagerDialog.java
cytoscape/trunk/application/src/main/java/cytoscape/visual/mappings/PassThroughMapping.java
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
Log:
Bug ID 0002384: "Cannot remove custom graphics from manager even if it is not
used in current session" had been fixed. When user apply visual style,
VisualMappingManager always checks custom graphics usage.
Modified:
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
===================================================================
---
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
2010-10-08 19:20:53 UTC (rev 22194)
+++
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
2010-10-08 20:59:15 UTC (rev 22195)
@@ -41,8 +41,10 @@
import giny.view.NodeView;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import cytoscape.CyEdge;
import cytoscape.CyNetwork;
@@ -50,12 +52,24 @@
import cytoscape.Cytoscape;
import cytoscape.CytoscapeInit;
import cytoscape.data.CyAttributes;
+import cytoscape.data.CyAttributesUtils;
+import cytoscape.data.attr.CountedIterator;
import cytoscape.data.attr.MultiHashMapDefinition;
import cytoscape.logger.CyLogger;
import cytoscape.view.CyNetworkView;
+import cytoscape.visual.calculators.AbstractCalculator;
+import cytoscape.visual.calculators.Calculator;
+import cytoscape.visual.calculators.GenericNodeCustomGraphicCalculator;
import cytoscape.visual.customgraphic.CustomGraphicsManager;
+import cytoscape.visual.customgraphic.CyCustomGraphics;
+import cytoscape.visual.mappings.ContinuousMapping;
+import cytoscape.visual.mappings.DiscreteMapping;
+import cytoscape.visual.mappings.ObjectMapping;
+import cytoscape.visual.mappings.PassThroughMapping;
+import cytoscape.visual.mappings.RangeValueCalculator;
import cytoscape.visual.mappings.RangeValueCalculatorFactory;
import cytoscape.visual.mappings.RangeValueCalculatorFactoryImpl;
+import cytoscape.visual.mappings.continuous.ContinuousMappingPoint;
import cytoscape.visual.mappings.rangecalculators.ColorRangeValueCalculator;
import
cytoscape.visual.mappings.rangecalculators.CustomGraphicsRangeValueCalculator;
import cytoscape.visual.mappings.rangecalculators.DoubleRangeValueCalculator;
@@ -281,8 +295,72 @@
network, bypassedVPs);
myNodeApp.applyAppearance(nodeView,
activeVS.getDependency());
}
+
+ checkCustomGraphicsInUse();
}
+
+ /**
+ * Reset status of used Custom Graphics
+ */
+ private void checkCustomGraphicsInUse() {
+ // Set everything unused.
+ final Collection<CyCustomGraphics> allCG = manager.getAll();
+ for(CyCustomGraphics cg: allCG)
+ manager.setUsedInCurrentSession(cg, false);
+
+ final NodeAppearanceCalculator nac =
activeVS.getNodeAppearanceCalculator();
+ final VisualPropertyType[] allCustomGraphicsPropType =
VisualPropertyType.getAllCustomGraphicsType();
+ for(VisualPropertyType cgType: allCustomGraphicsPropType) {
+ // First, check default mapping values.
+ final Object value =
nac.getDefaultAppearance().get(cgType);
+ if(value instanceof CyCustomGraphics) {
+
manager.setUsedInCurrentSession((CyCustomGraphics) value, true);
+ }
+
+ // Next, check mapping values.
+ final Calculator cgCalc = nac.getCalculator(cgType);
+ if(cgCalc == null)
+ continue;
+
+ final ObjectMapping cgMapping = cgCalc.getMapping(0);
+ if(cgMapping == null)
+ continue;
+
+ if(cgMapping instanceof DiscreteMapping) {
+ final Map allMapping = ((DiscreteMapping)
cgMapping).getAll();
+ Collection cgSet = allMapping.values();
+ for(Object cg: cgSet)
+
manager.setUsedInCurrentSession((CyCustomGraphics) cg, true);
+ } else if(cgMapping instanceof ContinuousMapping) {
+ final List<ContinuousMappingPoint> points =
((ContinuousMapping) cgMapping).getAllPoints();
+ for(ContinuousMappingPoint point: points) {
+
manager.setUsedInCurrentSession((CyCustomGraphics) point.getRange().equalValue,
true);
+
manager.setUsedInCurrentSession((CyCustomGraphics)
point.getRange().greaterValue, true);
+
manager.setUsedInCurrentSession((CyCustomGraphics)
point.getRange().lesserValue, true);
+ }
+ } else if(cgMapping instanceof PassThroughMapping) {
+ final RangeValueCalculator<?>
rangeValueCalculator = ((PassThroughMapping)
cgMapping).getRangeValueCalculator();
+ if(rangeValueCalculator == null)
+ return;
+
+ final CyAttributes nodeAttr =
Cytoscape.getNodeAttributes();
+ final String attrName =
cgMapping.getControllingAttributeName();
+ CountedIterator keys =
nodeAttr.getMultiHashMap().getObjectKeys(attrName);
+ while(keys.hasNext()) {
+ Object key = keys.next();
+ String attrValue =
nodeAttr.getStringAttribute(key.toString(), attrName);
+ Object cg =
rangeValueCalculator.getRange(attrValue);
+ if(cg instanceof CyCustomGraphics) {
+
manager.setUsedInCurrentSession((CyCustomGraphics) cg, true);
+ }
+ }
+ CyAttributesUtils.getAttributes(attrName,
Cytoscape.getNodeAttributes());
+ }
+
+ }
+ }
+
/**
* Recalculates and reapplies all of the edge appearances. The visual
* attributes are calculated by delegating to the
EdgeAppearanceCalculator
Modified:
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualPropertyType.java
===================================================================
---
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualPropertyType.java
2010-10-08 19:20:53 UTC (rev 22194)
+++
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualPropertyType.java
2010-10-08 20:59:15 UTC (rev 22195)
@@ -704,6 +704,10 @@
return CUSTOM_GRAPHICS_PROPS[index];
}
+ public static VisualPropertyType[] getAllCustomGraphicsType() {
+ return CUSTOM_GRAPHICS_PROPS;
+ }
+
public static VisualPropertyType getCustomGraphicsPositionType(int
index) {
return CUSTOM_GRAPHICS_POSITION_PROPS[index];
}
Modified:
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
===================================================================
---
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
2010-10-08 19:20:53 UTC (rev 22194)
+++
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
2010-10-08 20:59:15 UTC (rev 22195)
@@ -26,7 +26,6 @@
import cytoscape.Cytoscape;
import cytoscape.CytoscapeInit;
-import cytoscape.actions.ShowCustomGraphicsManagerAction;
import cytoscape.logger.CyLogger;
import cytoscape.task.ui.JTaskConfig;
import cytoscape.task.util.TaskManager;
@@ -361,7 +360,7 @@
if(graphics == null)
throw new NullPointerException("CyCustomGraphics cannot
be null.");
if(this.isUsedCustomGraphics.containsKey(graphics) ==false)
- throw new IllegalArgumentException("No such
CyCustomGraphics: " + graphics.getDisplayName());
+ return false;
return isUsedCustomGraphics.get(graphics);
}
@@ -370,9 +369,11 @@
if(isUsed == null || graphics == null)
throw new NullPointerException("Parameters cannot be
null.");
- if(this.isUsedCustomGraphics.containsKey(graphics) == false)
- throw new IllegalArgumentException("No such custom
graphics object: " + graphics.getDisplayName());
-
+ if(this.isUsedCustomGraphics.containsKey(graphics) == false){
+ // Just ignore.
+ return;
+ }
+
this.isUsedCustomGraphics.put(graphics, isUsed);
}
}
Modified:
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsManagerDialog.java
===================================================================
---
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsManagerDialog.java
2010-10-08 19:20:53 UTC (rev 22194)
+++
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsManagerDialog.java
2010-10-08 20:59:15 UTC (rev 22195)
@@ -9,6 +9,7 @@
import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
import cytoscape.Cytoscape;
import cytoscape.render.stateful.CustomGraphic;
@@ -204,8 +205,13 @@
final Object[] toBeRemoved = browser.getSelectedValues();
for(Object g: toBeRemoved) {
final CyCustomGraphics cg = (CyCustomGraphics) g;
- browser.removeCustomGraphics(cg);
- manager.removeGraphics(cg.getIdentifier());
+
if(!Cytoscape.getVisualMappingManager().getCustomGraphicsManager().isUsedInCurrentSession(cg))
{
+ browser.removeCustomGraphics(cg);
+ manager.removeGraphics(cg.getIdentifier());
+ } else {
+ JOptionPane.showMessageDialog(this,
cg.getDisplayName() + " is used in current session and cannot remove it.",
+ "Custom Graphics is in Use!",
JOptionPane.ERROR_MESSAGE);
+ }
}
}
Modified:
cytoscape/trunk/application/src/main/java/cytoscape/visual/mappings/PassThroughMapping.java
===================================================================
---
cytoscape/trunk/application/src/main/java/cytoscape/visual/mappings/PassThroughMapping.java
2010-10-08 19:20:53 UTC (rev 22194)
+++
cytoscape/trunk/application/src/main/java/cytoscape/visual/mappings/PassThroughMapping.java
2010-10-08 20:59:15 UTC (rev 22195)
@@ -172,6 +172,10 @@
return rangeValueCalculator.getRange(attrValue);
return null;
}
+
+ public RangeValueCalculator<?> getRangeValueCalculator() {
+ return this.rangeValueCalculator;
+ }
/**
* Customize this object by applying mapping defintions described by the
Modified:
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
===================================================================
---
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
2010-10-08 19:20:53 UTC (rev 22194)
+++
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
2010-10-08 20:59:15 UTC (rev 22195)
@@ -182,6 +182,7 @@
if (customGraphics == null
|| customGraphics instanceof CyCustomGraphics
== false
|| customGraphics instanceof
NullCustomGraphics) {
+
currentMap.remove(dv);
return;
}
@@ -218,7 +219,7 @@
this.currentMap.put(dv, targets);
// Flag this as used Custom Graphics
-
Cytoscape.getVisualMappingManager().getCustomGraphicsManager().setUsedInCurrentSession(graphics,
true);
+
//Cytoscape.getVisualMappingManager().getCustomGraphicsManager().setUsedInCurrentSession(graphics,
true);
}
private CustomGraphic syncSize(CyCustomGraphics graphics,
--
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.