Index: tmp/org.txm.groovy.core/src/groovy/org/txm/macro/prototypes/stats/CAStyleMacro.groovy
===================================================================
--- tmp/org.txm.groovy.core/src/groovy/org/txm/macro/prototypes/stats/CAStyleMacro.groovy	(revision 3176)
+++ tmp/org.txm.groovy.core/src/groovy/org/txm/macro/prototypes/stats/CAStyleMacro.groovy	(revision 3177)
@@ -1,5 +1,5 @@
 // STANDARD DECLARATIONS
-// @author mdecorde sjacquot sheiden
+// @author mdecorde sheiden sjacquot
 package org.txm.macro
 
 import org.kohsuke.args4j.*
@@ -25,7 +25,10 @@
 import org.txm.libs.office.ReadODS
 import org.txm.ca.core.chartsengine.jfreechart.datasets.*
 import org.jfree.chart.renderer.AbstractRenderer
+import java.awt.geom.Ellipse2D
+import org.jfree.chart.util.ShapeUtils
 
+
 println "editor: "+editor
 
 if (!(editor instanceof CAEditor)) {
@@ -53,18 +56,18 @@
 
 def data = ReadODS.toTable(patternsODSFile, "rows")
 def keys = data[0]
-		def row_styles = [:] // reformat data
-				for (int i = 1 ; i < data.size() ; i++) {
-					def h = data[i]
-							def style = [:] // create style entry
-									String s = h[0];
-					row_styles[/$s/] = style // with a regexp pattern as key
-							
-							// fill the style
-							for (int j = 1 ; j < h.size() ; j++) {
-								style[keys[j]] = h[j]
-							}
-				}
+def row_styles = [:] // reformat data
+	for (int i = 1 ; i < data.size() ; i++) {
+		def h = data[i]
+		def style = [:] // create style entry
+		String s = h[0];
+		row_styles[/$s/] = style // with a regexp pattern as key
+				
+		// fill the style
+		for (int j = 1 ; j < h.size() ; j++) {
+			style[keys[j]] = h[j]
+		}
+	}
 if (debug > 0) {
 	println "ROW STYLES=$row_styles"
 }
@@ -74,16 +77,16 @@
 def col_styles = [:] // reformat data
 
 for (int i = 1 ; i < data.size() ; i++) {
-		def h = data[i]
-							def style = [:] // create style entry
-									String s = h[0];
-					col_styles[/$s/] = style // with a regexp pattern as key
-							
-							// fill the style
-							for (int j = 1 ; j < h.size() ; j++) {
-								style[keys[j]] = h[j]
-							}
-				}
+	def h = data[i]
+	def style = [:] // create style entry
+	String s = h[0];
+	col_styles[/$s/] = style // with a regexp pattern as key
+					
+	// fill the style
+	for (int j = 1 ; j < h.size() ; j++) {
+		style[keys[j]] = h[j]
+	}
+}
 if (debug > 0) {
 	println "COL STYLES=$col_styles"
 }
@@ -103,26 +106,38 @@
 D1 = ica.getFirstDimension() -1;
 D2 = ica.getSecondDimension() -1;
 
-shapes = [:]
+// create some AWT shapes for replacement
+shapes = new HashMap<String, Shape>();
+// dimensions scaling factor (the same used in default theme for the replaced shapes have same dimension than non-replaced)
+float itemShapesScalingFactor = 1.2f
+shapes["diamond"] = ShapeUtils.createDiamond((float)(itemShapesScalingFactor * 3.4f));
 shapes["square"] = AbstractRenderer.DEFAULT_SHAPE;
-shapes["circle"] = AbstractRenderer.DEFAULT_SHAPE;
-shapes["triangle"] = AbstractRenderer.DEFAULT_SHAPE;
-shapes["star"] = AbstractRenderer.DEFAULT_SHAPE;
-shapes["disk"] = AbstractRenderer.DEFAULT_SHAPE;
 
+float circleSize = 6.4f * itemShapesScalingFactor;
+shapes["disk"] = new Ellipse2D.Float((float)(-circleSize / 2), (float)(-circleSize / 2), circleSize, circleSize);
+
+shapes["triangle"] = ShapeUtils.createUpTriangle((float)(itemShapesScalingFactor * 3.2f));
+
+//shapes["star"] = AbstractRenderer.DEFAULT_SHAPE;
+//shapes["circle"] = AbstractRenderer.DEFAULT_SHAPE;
+
+
+println "SHAPES=$shapes"
+
+
 // styles per col index in dataset
 // set col label
 colLabelStyle = new HashMap<Integer, String>();
 // set col visibility
 colHiddenStyle = new HashSet<Integer>(); // true false
 // set col font size
-colFontSizeStyle = new HashMap<Integer, Integer>(); // 0.0 to 10.0
+colFontSizeStyle = new HashMap<Integer, Float>();
 // set col font color
-colFontColorStyle = new HashMap<Integer, Color>(); // 0.0 to 10.0
+colFontColorStyle = new HashMap<Integer, Color>();
 // set col font family
-colFontFamilyStyle = new HashMap<Integer, String>(); // 0.0 to 10.0
+colFontFamilyStyle = new HashMap<Integer, String>();
 // set col points size
-colPointSizeStyle = new HashMap<Integer, Double>(); // 0.0 to 10.0
+colPointSizeStyle = new HashMap<Integer, Double>();
 // set col points RGBA color
 colPointColorStyle = new HashMap<Integer, Color>();
 // set col points shape (circle, square, triangle, ... + color ? + size ?) -> expert
@@ -136,13 +151,13 @@
 // set row visibility
 rowHiddenStyle = new HashSet<Integer>(); // true false
 // set row font size
-rowFontSizeStyle = new HashMap<Integer, Integer>(); // 0.0 to 10.0
+rowFontSizeStyle = new HashMap<Integer, Float>();
 // set row font size
-rowFontColorStyle = new HashMap<Integer, Color>(); // 0.0 to 10.0
+rowFontColorStyle = new HashMap<Integer, Color>();
 // set row font size
-rowFontFamilyStyle = new HashMap<Integer, String>(); // 0.0 to 10.0
+rowFontFamilyStyle = new HashMap<Integer, String>();
 // set row points size
-rowPointSizeStyle = new HashMap<Integer, Double>(); // 0.0 to 10.0
+rowPointSizeStyle = new HashMap<Integer, Double>();
 // set row points RGBA color
 rowPointColorStyle = new HashMap<Integer, Color>();
 // set row points shape (circle, square, triangle, ... + color ? + size ?) -> expert
@@ -155,32 +170,32 @@
 	for (def p : col_styles.keySet()) {
 		if (cols[i] ==~ p) {
 			def style = col_styles[p]
-			if (style["label"] != null && style["label"].length() > 0) {
-				colLabelStyle[i] = style["label"]
+			if (style["label-replacement"] != null && style["label-replacement"].length() > 0) {
+				colLabelStyle[i] = style["label-replacement"]
 			}
 			if (style["hidden"] != null && style["hidden"].toUpperCase() == "T") {
 				colHiddenStyle << i
 			}
-			if (style["point-size"] != null && style["point-size"].length() > 0) {
-				colPointSizeStyle[i] = Double.parseDouble(style["point-size"])
+			if (style["shape-size"] != null && style["shape-size"].length() > 0) {
+				colPointSizeStyle[i] = Double.parseDouble(style["shape-size"])
 			}
-			if (style["point-color"] != null && style["point-color"].length() > 0 ) {
-				colPointColorStyle[i] = rgbaStringToColor(style["point-color"])
+			if (style["shape-color"] != null && style["shape-color"].length() > 0 ) {
+				colPointColorStyle[i] = rgbaStringToColor(style["shape-color"])
 			}
-			if (style["point-shape"] != null && shapes.containsKey(style["point-shape"])) {
-				colPointShapeStyle[i] = shapes[style["point-shape"]]
+			if (style["shape-replacement"] != null && shapes.containsKey(style["shape-replacement"])) {
+				colPointShapeStyle[i] = shapes[style["shape-replacement"]]
 			}
-			if (style["font-size"] != null && style["font-size"].length() > 0) {
-				colFontSizeStyle[i] = Integer.parseInt(style["font-size"])
+			if (style["label-size"] != null && style["label-size"].length() > 0) {
+				colFontSizeStyle[i] = Float.parseFloat(style["label-size"])
 			}
-			if (style["font-color"] != null && style["font-color"].length() > 0) {
-				colFontColorStyle[i] = rgbaStringToColor(style["font-color"])
+			if (style["label-color"] != null && style["label-color"].length() > 0) {
+				colFontColorStyle[i] = rgbaStringToColor(style["label-color"])
 			}
-			if (style["font-family"] != null && style["font-family"].length() > 0) {
-				colFontFamilyStyle[i] = style["font-family"]
+			if (style["label-font-family"] != null && style["label-font-family"].length() > 0) {
+				colFontFamilyStyle[i] = style["label-font-family"]
 			}
-			if (style["font-style"] != null && style["font-style"].length() > 0) {
-				colFontStyleStyle[i] = Integer.parseInt(style["font-style"])
+			if (style["label-style"] != null && style["label-style"].length() > 0) {
+				colFontStyleStyle[i] = Integer.parseInt(style["label-style"])
 			}
 			
 		}
@@ -204,29 +219,29 @@
 			if (style["hidden"] != null && style["hidden"].toUpperCase() == "T") {
 				rowHiddenStyle << i
 			}
-			if (style["label"] != null && style["label"].length() > 0) {
-				rowLabelStyle[i] = style["label"]
+			if (style["label-replacement"] != null && style["label-replacement"].length() > 0) {
+				rowLabelStyle[i] = style["label-replacement"]
 			}
-			if (style["point-size"] != null && style["point-size"].length() > 0) {
-				rowPointSizeStyle[i] = Double.parseDouble(style["point-size"])
+			if (style["shape-size"] != null && style["shape-size"].length() > 0) {
+				rowPointSizeStyle[i] = Double.parseDouble(style["shape-size"])
 			}
-			if (style["point-color"] != null && style["point-color"].length() > 0 ) {
-				rowPointColorStyle[i] = rgbaStringToColor(style["point-color"])
+			if (style["shape-color"] != null && style["shape-color"].length() > 0 ) {
+				rowPointColorStyle[i] = rgbaStringToColor(style["shape-color"])
 			}
-			if (style["point-shape"] != null && shapes.containsKey(style["point-shape"])) {
-				rowPointShapeStyle[i] = shapes[style["point-shape"]]
+			if (style["shape-replacement"] != null && shapes.containsKey(style["shape-replacement"])) {
+				rowPointShapeStyle[i] = shapes[style["shape-replacement"]]
 			}
-			if (style["font-size"] != null && style["font-size"].length() > 0) {
-				rowFontSizeStyle[i] = Integer.parseInt(style["font-size"])
+			if (style["label-size"] != null && style["label-size"].length() > 0) {
+				rowFontSizeStyle[i] = Float.parseFloat(style["label-size"])
 			}
-			if (style["font-color"] != null && style["font-color"].length() > 0) {
-				rowFontColorStyle[i] = rgbaStringToColor(style["font-color"])
+			if (style["label-color"] != null && style["label-color"].length() > 0) {
+				rowFontColorStyle[i] = rgbaStringToColor(style["label-color"])
 			}
-			if (style["font-family"] != null && style["font-family"].length() > 0) {
-				rowFontFamilyStyle[i] = style["font-family"]
+			if (style["label-font-family"] != null && style["label-font-family"].length() > 0) {
+				rowFontFamilyStyle[i] = style["label-font-family"]
 			}
-			if (style["font-style"] != null && style["font-style"].length() > 0) {
-				rowFontStyleStyle[i] = Integer.parseInt(style["font-style"])
+			if (style["label-style"] != null && style["label-style"].length() > 0) {
+				rowFontStyleStyle[i] = Integer.parseInt(style["label-style"])
 			}
 		}
 	}
@@ -242,179 +257,192 @@
 }
 
 
+
 // UPDATE THE CHART RENDERER
 
 def chartEditor = editor.getEditors()[0]
-		def chartComposite = chartEditor.getComposite()
-		
-		ddebug = debug
-		monitor.syncExec( new Runnable() {
-			public void run() {
-				println chartComposite
-				def chart = chartEditor.getChart()
+	def chartComposite = chartEditor.getComposite()
+	
+	ddebug = debug
+	monitor.syncExec( new Runnable() {
+	
+		public void run() {
+			println chartComposite
+			def chart = chartEditor.getChart()
+			
+			/*
+			println "chart: "+chart
+			println "Plot: "+chart.getPlot()
+			println "Dataset: "+chart.getPlot().getDataset()
+			println "Renderer 1: "+chart.getPlot().getRenderer()
+			 */
+			
+			def renderer = new CAItemSelectionRenderer(ica, chart) {
+				Area EMPTYAREA = new Area()
+						
+						@Override
+						public void initItemLabelGenerator() {
+						XYItemLabelGenerator generator = new XYItemLabelGenerator() {
+						
+						@Override
+						public String generateLabel(XYDataset dataset, int series, int item) {
+							if (series == 0 && rowHiddenStyle.contains(item)) {
+								if (ddebug > 1) println "HIDDING ROW LABEL '$item' '${rows[item]}'"
+								return ""
+							} else if (series == 1 && colHiddenStyle.contains(item)) {
+								if (ddebug > 1) println "HIDDING COL LABEL '$item' '${cols[item]}'"
+								return ""
+							} else if (series == 0 && rowLabelStyle.containsKey(item)) {
+								if (ddebug > 1) println "RENAME ROW LABEL '$item' '${rows[item]}' -> '${rowLabelStyle[item]}'"
+								return rowLabelStyle[item]
+							} else if (series == 1 && colLabelStyle.containsKey(item)) {
+								if (ddebug > 1) println "RENAME COL LABEL '$item' '${cols[item]}' -> '${colLabelStyle[item]}'"
+								return colLabelStyle[item]
+							} else {
+								CAXYDataset caDataset = (CAXYDataset) dataset;
+								return caDataset.getLabel(series, item);
+							}
+						}
+					};
+					
+					// don't use setBaseItemLabelGenerator BUT setDefaultItemLabelGenerator
+					this.setDefaultItemLabelGenerator(generator);
+					this.setDefaultItemLabelsVisible(true);
+				}
 				
-				/*
-				println "chart: "+chart
-				println "Plot: "+chart.getPlot()
-				println "Dataset: "+chart.getPlot().getDataset()
-				println "Renderer 1: "+chart.getPlot().getRenderer()
-				 */
 				
-				def renderer = new CAItemSelectionRenderer(ica, chart) {
-					Area EMPTYAREA = new Area()
-							
-							@Override
-							public void initItemLabelGenerator() {
-							XYItemLabelGenerator generator = new XYItemLabelGenerator() {
-							
-							@Override
-							public String generateLabel(XYDataset dataset, int series, int item) {
-								if (series == 0 && rowHiddenStyle.contains(item)) {
-									if (ddebug > 1) println "HIDDING ROW LABEL '$item' '${rows[item]}'"
-									return ""
-								} else if (series == 1 && colHiddenStyle.contains(item)) {
-									if (ddebug > 1) println "HIDDING COL LABEL '$item' '${cols[item]}'"
-									return ""
-								} else if (series == 0 && rowLabelStyle.containsKey(item)) {
-									if (ddebug > 1) println "RENAME ROW LABEL '$item' '${rows[item]}' -> '${rowLabelStyle[item]}'"
-									return rowLabelStyle[item]
-								} else if (series == 1 && colLabelStyle.containsKey(item)) {
-									if (ddebug > 1) println "RENAME COL LABEL '$item' '${cols[item]}' -> '${colLabelStyle[item]}'"
-									return colLabelStyle[item]
-								} else {
-									CAXYDataset caDataset = (CAXYDataset) dataset;
-									return caDataset.getLabel(series, item);
-								}
-							}
-						};
-						
-						// don't use setBaseItemLabelGenerator BUT setDefaultItemLabelGenerator
-						this.setDefaultItemLabelGenerator(generator);
-						this.setDefaultItemLabelsVisible(true);
+				
+				@Override
+				public Font getItemLabelFont(int series, int item) {
+					Font d = super.getItemLabelFont(series, item);
+					Integer style = d.getStyle();
+					Integer size = d.getSize();
+					String family = d.getFontName();
+					
+					// size
+					if (series == 0 && rowFontSizeStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX ROW FONT-SIZE $item ${rows[item]} -> ${rowFontSizeStyle[item]}"
+						size *= rowFontSizeStyle[item];
+					} else if (series == 1 && colFontSizeStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX COL FONT-SIZE $item ${cols[item]} -> ${colFontSizeStyle[item]}"
+						size *= colFontSizeStyle[item];
 					}
 					
+					// family
+					if (series == 0 && rowFontFamilyStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX ROW FONT-Family $item ${rows[item]} -> ${rowFontFamilyStyle[item]}"
+						family = rowFontFamilyStyle[item];
+					} else if (series == 1 && colFontFamilyStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX COL FONT-Family $item ${cols[item]} -> ${colFontFamilyStyle[item]}"
+						family = colFontFamilyStyle[item];
+					}
 					
+					// style
+					if (series == 0 && rowFontStyleStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX ROW FONT-Style $item ${rows[item]} -> ${rowFontStyleStyle[item]}"
+						style = rowFontStyleStyle[item];
+					} else if (series == 1 && colFontFamilyStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX COL FONT-Style $item ${cols[item]} -> ${colFontStyleStyle[item]}"
+						style = colFontStyleStyle[item];
+					}
 					
-					@Override
-					public Font getItemLabelFont(int series, int item) {
-						Font d = super.getItemLabelFont(series, item);
-						Integer style = d.getStyle();
-						Integer size = d.getSize();
-						String family = d.getFontName();
+					
+					return new Font(family, style, size);
+				}
+				
+				
+				@Override
+				public Shape getItemShape(int series, int item) {
+					// Rows (series == 0), Cols (series == 1)
+					if (series == 0 && rowHiddenStyle.contains(item)) {
+						return EMPTYAREA;
+					} else if (series == 1 && colHiddenStyle.contains(item)) {
+						return EMPTYAREA;
+					} else {
 						
-						// size
-						if (series == 0 && rowFontSizeStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX ROW FONT-SIZE $item ${rows[item]} -> ${rowFontSizeStyle[item]}"
-							size = rowFontSizeStyle[item];
-						} else if (series == 1 && colFontSizeStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX COL FONT-SIZE $item ${cols[item]} -> ${colFontSizeStyle[item]}"
-							size = colFontSizeStyle[item];
-						}
+						Shape shape =  super.getItemShape(series, item);
 						
-						// family
-						if (series == 0 && rowFontFamilyStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX ROW FONT-Family $item ${rows[item]} -> ${rowFontFamilyStyle[item]}"
-							family = rowFontFamilyStyle[item];
-						} else if (series == 1 && colFontFamilyStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX COL FONT-Family $item ${cols[item]} -> ${colFontFamilyStyle[item]}"
-							family = colFontFamilyStyle[item];
+						// not-visible shapes mode
+						if(!((CA) this.multipleItemsSelector.getResult()).isShowPointShapes())        {
+							return shape;
 						}
 						
-						// style
-						if (series == 0 && rowFontStyleStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX ROW FONT-Style $item ${rows[item]} -> ${rowFontStyleStyle[item]}"
-							style = rowFontStyleStyle[item];
-						} else if (series == 1 && colFontFamilyStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX COL FONT-Style $item ${cols[item]} -> ${colFontStyleStyle[item]}"
-							style = colFontStyleStyle[item];
+						// shape replacement
+						if (series == 0 && rowPointShapeStyle.containsKey(item)) {
+							if (ddebug > 1) println "FIX ROW SHAPE $item ${rows[item]} -> ${rowPointShapeStyle[item]}"
+							shape = rowPointShapeStyle.get(item);
+						} else if (series == 1 && colPointShapeStyle.containsKey(item)) {
+							if (ddebug > 1) println "FIX COL SHAPE $item ${cols[item]} -> ${colPointShapeStyle[item]}"
+							shape = colPointShapeStyle.get(item);
 						}
 						
 						
-						return new Font(family, style, size);
-					}
-					
-					
-					@Override
-					public Shape getItemShape(int series, int item) {
-						// Rows (series == 0), Cols (series == 1)
-						if (series == 0 && rowHiddenStyle.contains(item)) {
-							return EMPTYAREA;
-						} else if (series == 1 && colHiddenStyle.contains(item)) {
-							return EMPTYAREA;
-						} else {
-							
-							Shape shape =  super.getItemShape(series, item);
-							
-							// not-visible shapes mode
-							if(!((CA) this.multipleItemsSelector.getResult()).isShowPointShapes())        {
-								return shape;
-							}
-							
-							AffineTransform t = new AffineTransform();
-							if (series == 0 && rowPointSizeStyle.containsKey(item)) {
-								if (ddebug > 1) println "FIX ROW POINT SIZE $item ${rows[item]} -> ${rowPointSizeStyle[item]}"
-								t.setToScale(rowPointSizeStyle.get(item), rowPointSizeStyle.get(item));
-								shape = t.createTransformedShape(shape);
-							} else if (series == 1 && colPointSizeStyle.containsKey(item)) {
-								if (ddebug > 1) println "FIX COL POINT SIZE $item ${cols[item]} -> ${colPointSizeStyle[item]}"
-								t.setToScale(colPointSizeStyle.get(item), colPointSizeStyle.get(item));
-								shape = t.createTransformedShape(shape);
-							}
-							
-							return shape;
+						// shape scaling
+						AffineTransform t = new AffineTransform();
+						if (series == 0 && rowPointSizeStyle.containsKey(item)) {
+							if (ddebug > 1) println "FIX ROW POINT SIZE $item ${rows[item]} -> ${rowPointSizeStyle[item]}"
+							t.setToScale(rowPointSizeStyle.get(item), rowPointSizeStyle.get(item));
+							shape = t.createTransformedShape(shape);
+						} else if (series == 1 && colPointSizeStyle.containsKey(item)) {
+							if (ddebug > 1) println "FIX COL POINT SIZE $item ${cols[item]} -> ${colPointSizeStyle[item]}"
+							t.setToScale(colPointSizeStyle.get(item), colPointSizeStyle.get(item));
+							shape = t.createTransformedShape(shape);
 						}
+						
+						return shape;
 					}
+				}
+				
+				
+				@Override
+				public Paint getItemPaint(int series, int item) {
 					
-					
-					@Override
-					public Paint getItemPaint(int series, int item) {
-						
-						// visible shapes mode
-						if (!((CA) this.multipleItemsSelector.getResult()).isShowPointShapes()) {
-							return super.getItemPaint(series, item);
-						}
-						
-						if (series == 0 && rowPointColorStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX ROW POINT COLOR $item ${rows[item]} -> ${rowPointColorStyle[item]}"
-							return rowPointColorStyle.get(item);
-						} else if (series == 1 && colPointColorStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX COL POINT COLOR $item ${cols[item]} -> ${colPointColorStyle[item]}"
-							return colPointColorStyle.get(item);
-						}
-						else {
-							return super.getItemPaint(series, item);
-						}
+					// visible shapes mode
+					if (!((CA) this.multipleItemsSelector.getResult()).isShowPointShapes()) {
+						return super.getItemPaint(series, item);
 					}
 					
-					
-					@Override
-					public Paint getItemLabelPaint(int series, int item) {
-						if (series == 0 && rowFontColorStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX ROW LABEL COLOR $item ${rows[item]} -> ${rowFontColorStyle[item]}"
-							return rowFontColorStyle.get(item);
-						} else if (series == 1 && colFontColorStyle.containsKey(item)) {
-							if (ddebug > 1) println "FIX COL LABEL COLOR $item ${cols[item]} -> ${colFontColorStyle[item]}"
-							return colFontColorStyle.get(item);
-						} else {
-							return super.getItemLabelPaint(series, item);
-						}
+					if (series == 0 && rowPointColorStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX ROW POINT COLOR $item ${rows[item]} -> ${rowPointColorStyle[item]}"
+						return rowPointColorStyle.get(item);
+					} else if (series == 1 && colPointColorStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX COL POINT COLOR $item ${cols[item]} -> ${colPointColorStyle[item]}"
+						return colPointColorStyle.get(item);
 					}
-					
-					
-					
-				};
+					else {
+						return super.getItemPaint(series, item);
+					}
+				}
 				
 				
-				def cp = editor.editors[0].getChart();
-				renderer.chart = cp
-						renderer.setSeriesVisible(0, ica.isShowVariables()); // Rows
-				renderer.setSeriesVisible(1, ica.isShowIndividuals()); // Columns
-				chart.getXYPlot().setRenderer(renderer)
+				@Override
+				public Paint getItemLabelPaint(int series, int item) {
+					if (series == 0 && rowFontColorStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX ROW LABEL COLOR $item ${rows[item]} -> ${rowFontColorStyle[item]}"
+						return rowFontColorStyle.get(item);
+					} else if (series == 1 && colFontColorStyle.containsKey(item)) {
+						if (ddebug > 1) println "FIX COL LABEL COLOR $item ${cols[item]} -> ${colFontColorStyle[item]}"
+						return colFontColorStyle.get(item);
+					} else {
+						return super.getItemLabelPaint(series, item);
+					}
+				}
 				
-				ica.getChartCreator().updateChart(chartEditor.getResult())
 				
-			}
-		});
+				
+			};
+			
+			
+			def cp = editor.editors[0].getChart();
+			renderer.chart = cp
+			renderer.setSeriesVisible(0, ica.isShowVariables()); // Rows
+			renderer.setSeriesVisible(1, ica.isShowIndividuals()); // Columns
+			chart.getXYPlot().setRenderer(renderer)
+			
+			ica.getChartCreator().updateChart(chartEditor.getResult())
+			
+		}
+	});
 
 
 
@@ -430,9 +458,9 @@
 		return new Color(Integer.parseInt(rgbColor[0]), Integer.parseInt(rgbColor[1]), Integer.parseInt(rgbColor[2]), Integer.parseInt(alpha))
 	}
 	else {
-		println "Error in color format for string: $color"
+		println "Error in color format for RGB or RGBA string: $color"
 	}
-	
 }
 
 
+
