Révision 1727

tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RChartCreator.java (revision 1727)
28 28
	@Override
29 29
	public void updateChart(ChartResult result) {
30 30
	
31
		// creates a new chart but using the same file
32
		this.createChartFile(result, (File)result.getChart());
33
			
31
		Object chart = result.getChart();
32
		if (chart != null && chart instanceof File) { // creates a new chart but using the same file
33
			this.createChartFile(result, (File)chart);
34
		} else {
35
			this.createChartFile(result);
36
		}
37
		
34 38
		// FIXME: using new file
35 39
		//this.createChartFile(resultData, preferencesNode);
36
			
37 40
	}
38 41
	
39 42
	@Override
tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/EigenvaluesChartEditor.java (revision 1727)
34 34
	public void updateEditorFromChart(boolean update) {
35 35
		// nothing to do
36 36
	}
37

  
38
}
37
}
tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/r/REigenvaluesChartCreator.java (revision 1727)
2 2

  
3 3
import java.io.File;
4 4

  
5
import org.rosuda.REngine.REXP;
6
import org.rosuda.REngine.REXPMismatchException;
5 7
import org.txm.ca.core.functions.CA;
6 8
import org.txm.ca.core.functions.Eigenvalues;
7 9
import org.txm.ca.core.messages.CACoreMessages;
8 10
import org.txm.ca.core.statsengine.r.functions.FactoMineRCA;
9 11
import org.txm.chartsengine.core.results.ChartResult;
10 12
import org.txm.chartsengine.r.core.RChartCreator;
13
import org.txm.statsengine.r.core.RWorkspace;
14
import org.txm.statsengine.r.core.exceptions.RWorkspaceException;
11 15

  
12 16
/**
13 17
 * R CA Eigenvalues chart creator.
......
22 26
	public File createChartFile(ChartResult result, File file) {
23 27

  
24 28
		CA ca = (CA) ((Eigenvalues) result).getCA();
25
		
29

  
26 30
		// FactoMineR R package
27 31
		if(ca.useFactoMineR())	{
28 32
			return this.createSingularValuesBarPlot((FactoMineRCA) ca.getCA(), file);
......
40 44
	 * @param ca
41 45
	 * @param file
42 46
	 * @return the singular values bar plot object
47
	 * @throws RWorkspaceException 
48
	 * @throws REXPMismatchException 
43 49
	 */
44 50
	public File createSingularValuesBarPlot(FactoMineRCA ca, File file) {
45
		
51

  
46 52
		// Create the X axis labels with custom prefix
47 53
		StringBuilder xLabels = new StringBuilder(30);
48 54
		xLabels.append("c("); //$NON-NLS-1$
49
		for(int i = 0, c = ca.getColumnsCount() - 1; i < c; i++) {
50
			if(i > 0)	 {
51
				xLabels.append(", "); //$NON-NLS-1$
55
		REXP sv;
56
		try {
57
			sv = RWorkspace.getRWorkspaceInstance().eval("length("+ca.getSymbol()+"$eig$eigenvalue");  //$NON-NLS-1$ $NON-NLS-2$
58

  
59
			int ncol = sv.asInteger();
60

  
61
			for(int i = 0, c = ncol; i < c; i++) {
62
				if(i > 0)	 {
63
					xLabels.append(", "); //$NON-NLS-1$
64
				}
65
				xLabels.append("\"" + (i + 1) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
52 66
			}
53
			xLabels.append("\"" + (i + 1) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
54
		}
55
		xLabels.append(")"); //$NON-NLS-1$
67
			xLabels.append(")"); //$NON-NLS-1$
56 68

  
57
		String cmd = "tmpY <- " + ca.getSymbol() + "$eig$eigenvalue[1:length(" + ca.getSymbol() + "$eig$eigenvalue) - 1];\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
58
		cmd += "barplot(tmpY, main=\"" //$NON-NLS-1$
59
				+ CACoreMessages.eigenvalues + "\", ylab=\"" + //$NON-NLS-1$
60
				CACoreMessages.eigenvalue + "\", xlab=\"" + //$NON-NLS-1$
61
				CACoreMessages.axis + "\", names.arg=" + xLabels + ");\n"; //$NON-NLS-1$ //$NON-NLS-2$
69
			String cmd = "tmpY <- " + ca.getSymbol() + "$eig$eigenvalue[1:length(" + ca.getSymbol() + "$eig$eigenvalue) - 1];\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
70
			cmd += "barplot(tmpY, main=\"" //$NON-NLS-1$
71
					+ CACoreMessages.eigenvalues + "\", ylab=\"" + //$NON-NLS-1$
72
					CACoreMessages.eigenvalue + "\", xlab=\"" + //$NON-NLS-1$
73
					CACoreMessages.axis + "\", names.arg=" + xLabels + ");\n"; //$NON-NLS-1$ //$NON-NLS-2$
62 74

  
63
		this.getChartsEngine().plot(file, cmd);
75
			this.getChartsEngine().plot(file, cmd);
64 76

  
65
		return file;
77
			return file;
78
		} catch (Exception e) {
79
			e.printStackTrace();
80
			return null;
81
		}
66 82
	}
67 83

  
68 84

  
......
78 94
	}
79 95

  
80 96

  
81
	
97

  
82 98
	@Override
83 99
	public Class<Eigenvalues> getResultDataClass() {
84 100
		return Eigenvalues.class;
tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/themes/highcharts/renderers/ProgressionItemSelectionRenderer.java (revision 1727)
38 38
	 * Stack to store selected items to draw at last, over others items.
39 39
	 */
40 40
	protected ArrayList itemsToDrawAtLast; 
41
	
41

  
42 42
	/**
43 43
	 * additional series informations to show in tooltips
44 44
	 */
......
78 78
				String hex = "#" + Integer.toHexString(color.getRGB()).substring(2);
79 79
				XYSeriesCollection xyDataset = (XYSeriesCollection) dataset;
80 80

  
81
//
82
//				// FIXME: test affichage des concordances des occurrences directement dans le tooltip
83
//				// Progression
84
//				String concordanceStr = "";
81
				//
82
				//				// FIXME: test affichage des concordances des occurrences directement dans le tooltip
83
				//				// Progression
84
				//				String concordanceStr = "";
85 85

  
86
//				if(renderer.getChartType() == ChartsEngine.CHART_TYPE_PROGRESSION)	{
87
//					try {
88
//						Progression progression = ((Progression)renderer.getItemSelector().getResultData());
89
//							//System.out.println("ItemSelectionXYStepRenderer.initToolTipGenerator(...).new XYToolTipGenerator() {...}.generateToolTip() query: " + progression.getQueries().get(xyDataset.getSeriesIndex(xyDataset.getSeries(series).getKey())));
90
//						Property analysisProperty = progression.
91
//								getCorpus().
92
//								getProperty("word");
93
//						List<Property> viewProperties = new ArrayList<Property>();
94
//						viewProperties.add(progression.
95
//								getCorpus().
96
//								getProperty("word"));
97
//						ReferencePattern referencePattern = new ReferencePattern();
98
//						ReferencePattern refAnalysePattern = new ReferencePattern();
99
//						Concordance concordance = new Concordance(progression.getCorpus(), progression.getQueries().get(xyDataset.getSeriesIndex(xyDataset.getSeries(series).getKey())), analysisProperty, viewProperties, referencePattern, refAnalysePattern, 10, 10);
100
//
101
//						System.err.println("ItemSelectionXYStepRenderer.initToolTipGenerator(...).new XYToolTipGenerator() {...}.generateToolTip() concordance nlines: " + concordance.getNLines());
102
//						System.err.println("ItemSelectionXYStepRenderer.initToolTipGenerator(...).new XYToolTipGenerator() {...}.generateToolTip() item position: " + (xyDataset.getSeries(series).getY(item).intValue() - 1));
103
//
104
//
105
//
106
//						Line line = concordance.getLines(xyDataset.getSeries(series).getY(item).intValue() - 1, xyDataset.getSeries(series).getY(item).intValue() - 1).get(0);
107
//						concordanceStr = "<p>" + line.leftContextToString() + " <b>" + line.keywordToString() + "</b> " + line.rightContextToString() + "</p>";
108
//						//xyDataset.getSeriesIndex(xyDataset.getSeries(series).getKey())
109
//					}
110
//					catch(CqiClientException e) {
111
//						// TODO Auto-generated catch block
112
//						e.printStackTrace();
113
//					}
114
//					catch(IOException e) {
115
//						// TODO Auto-generated catch block
116
//						e.printStackTrace();
117
//					}
118
//					catch(CqiServerError e) {
119
//						// TODO Auto-generated catch block
120
//						e.printStackTrace();
121
//					}
122
//				}
86
				//				if(renderer.getChartType() == ChartsEngine.CHART_TYPE_PROGRESSION)	{
87
				//					try {
88
				//						Progression progression = ((Progression)renderer.getItemSelector().getResultData());
89
				//							//System.out.println("ItemSelectionXYStepRenderer.initToolTipGenerator(...).new XYToolTipGenerator() {...}.generateToolTip() query: " + progression.getQueries().get(xyDataset.getSeriesIndex(xyDataset.getSeries(series).getKey())));
90
				//						Property analysisProperty = progression.
91
				//								getCorpus().
92
				//								getProperty("word");
93
				//						List<Property> viewProperties = new ArrayList<Property>();
94
				//						viewProperties.add(progression.
95
				//								getCorpus().
96
				//								getProperty("word"));
97
				//						ReferencePattern referencePattern = new ReferencePattern();
98
				//						ReferencePattern refAnalysePattern = new ReferencePattern();
99
				//						Concordance concordance = new Concordance(progression.getCorpus(), progression.getQueries().get(xyDataset.getSeriesIndex(xyDataset.getSeries(series).getKey())), analysisProperty, viewProperties, referencePattern, refAnalysePattern, 10, 10);
100
				//
101
				//						System.err.println("ItemSelectionXYStepRenderer.initToolTipGenerator(...).new XYToolTipGenerator() {...}.generateToolTip() concordance nlines: " + concordance.getNLines());
102
				//						System.err.println("ItemSelectionXYStepRenderer.initToolTipGenerator(...).new XYToolTipGenerator() {...}.generateToolTip() item position: " + (xyDataset.getSeries(series).getY(item).intValue() - 1));
103
				//
104
				//
105
				//
106
				//						Line line = concordance.getLines(xyDataset.getSeries(series).getY(item).intValue() - 1, xyDataset.getSeries(series).getY(item).intValue() - 1).get(0);
107
				//						concordanceStr = "<p>" + line.leftContextToString() + " <b>" + line.keywordToString() + "</b> " + line.rightContextToString() + "</p>";
108
				//						//xyDataset.getSeriesIndex(xyDataset.getSeries(series).getKey())
109
				//					}
110
				//					catch(CqiClientException e) {
111
				//						// TODO Auto-generated catch block
112
				//						e.printStackTrace();
113
				//					}
114
				//					catch(IOException e) {
115
				//						// TODO Auto-generated catch block
116
				//						e.printStackTrace();
117
				//					}
118
				//					catch(CqiServerError e) {
119
				//						// TODO Auto-generated catch block
120
				//						e.printStackTrace();
121
				//					}
122
				//				}
123 123

  
124
				String token = xyDataset.getSeriesKey(series).toString();
125
				token = token.substring(0, token.lastIndexOf(" "));
126
				int tokenCount = xyDataset.getSeries(series).getItemCount() - 2; // -2 for the 0 point and the dummy last point
124
				if (xyDataset.getSeriesCount() > series) {
125
					String token = xyDataset.getSeriesKey(series).toString();
126
					token = token.substring(0, token.lastIndexOf(" "));
127
					int tokenCount = xyDataset.getSeries(series).getItemCount() - 2; // -2 for the 0 point and the dummy last point
127 128

  
128
				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p><span style=\"color: " + hex + ";\">" + token + "</span> <b>(" + RendererUtils.valuesNumberFormat.format(xyDataset.getSeries(series).getY(item)) + " / " + tokenCount + ")</b>"
129
						+ "</p></body><html>";
129
					return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p><span style=\"color: " + hex + ";\">" + token + "</span> <b>(" + RendererUtils.valuesNumberFormat.format(xyDataset.getSeries(series).getY(item)) + " / " + tokenCount + ")</b>"
130
					+ "</p></body><html>";
131

  
132
					// FIXME: test contexts in tool tip
133
					//				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p><span style=\"color: " + hex + ";\">" + xyDataset.getSeriesKey(series)
134
					//						+ "</span></p><p><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getY(item)) + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS
135
					//						+ " </b><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getX(item)) + "</b>"
136
					//						+ concordanceStr
137
					//						+ "</p></body><html>";
138
				}
130 139
				
131
				// FIXME: test contexts in tool tip
132
//				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p><span style=\"color: " + hex + ";\">" + xyDataset.getSeriesKey(series)
133
//						+ "</span></p><p><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getY(item)) + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS
134
//						+ " </b><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getX(item)) + "</b>"
135
//						+ concordanceStr
136
//						+ "</p></body><html>";
137
				
140
				return "";
138 141
			}
139 142
		});
140 143
	}
141
	
142
	
143
	
144

  
145

  
146

  
144 147
	@Override
145 148
	public Paint getItemPaint(int series, int item) {
146 149

  
......
154 157
				return new Color(color.getRed(), color.getGreen(), color.getBlue(), 195);
155 158
			}
156 159
			// Multiple item selection
157
//			else if(this.itemSelector.isMultipleSelectedItem(series, item))	{
158
//				// FIXME: rendering tests
159
//				return new Color(130, 130, 130, 195);
160
//				//return new Color(color.getRed(), color.getGreen(), color.getBlue(), 140);
161
//			}
160
			//			else if(this.itemSelector.isMultipleSelectedItem(series, item))	{
161
			//				// FIXME: rendering tests
162
			//				return new Color(130, 130, 130, 195);
163
			//				//return new Color(color.getRed(), color.getGreen(), color.getBlue(), 140);
164
			//			}
162 165

  
163 166
		}
164
		
167

  
165 168
		return color;
166 169
	}
167 170

  
......
171 174

  
172 175
		Shape s = super.getItemShape(series, item);
173 176
		AffineTransform t = new AffineTransform();
174
		
177

  
175 178
		// shapes are being patched and its not the first false point
176 179
		if (item != 0 && additionalShapesScale != null) {
177 180
			if (additionalShapesScale.size() > series) {
......
186 189
				}
187 190
			}
188 191
		} 
189
		
192

  
190 193
		// TODO: find better way to not draw a shape
191 194
		// If not selected item, reduce the shape therefore it will be hidden by the lines chart
192 195
		if(!this.multipleItemsSelector.isMouseOverItem(series, item) && !this.multipleItemsSelector.isSelectedItem(series, item)) {
193 196
			t.setToScale(0.1, 0.1);
194 197
		}
195 198
		// FIXME: Multiple selection
196
//		else if(this.itemSelector.isMultipleSelectedItem(series, item))	{
197
////			
198
//			// Add a background rectangle to the label selected item
199
//			XYSeriesCollection dataset = (XYSeriesCollection) this.getPlot().getDataset();
200
//					
201
//			Graphics2D graphics = ((Graphics2D) this.chartPanel.getGraphics());
202
//			 
203
//			// FIXME: get graphics by creating an image insetad of passing the chart panel to this renderer
204
////			BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
205
////			Graphics2D graphics = img.createGraphics();
206
//			// FIXME: rendering quality tests
207
////			RenderingHints rh = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
208
////			rh.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
209
////			rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
210
////			rh.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
211
////		    graphics.setRenderingHints(rh);
212
//			
213
//			Font font = this.getItemLabelFont(series, item);
214
//			String label = valuesNumberFormat.format(dataset.getSeries(series).getY(item)) + " / " + (dataset.getSeries(series).getItemCount() - 2); //$NON-NLS-1$ // -2 for the 0 point and the dummy last point;
215
//
216
//			GlyphVector v = font.createGlyphVector(graphics.getFontMetrics(font).getFontRenderContext(), label);
217
//	        Shape labelShape = v.getOutline();
218
//	        //Rectangle2D labelBounds = v.getVisualBounds();
219
//	        
220
//			Rectangle2D labelBounds = font.getStringBounds(label, graphics.getFontRenderContext());
221
//
222
//			// FIXME : not rounded rectangle version
223
////			Shape labelBackground = new Rectangle2D.Double(-bounds.getWidth() / 2, -s.getBounds2D().getHeight() / 2 + 1, bounds.getWidth() + 4, bounds.getHeight() / 2 + 8);
224
//
225
//			//Rectangle2D labelBounds = font.getStringBounds(label, graphics.getFontRenderContext());
226
//			
227
//	        //Rectangle labelBounds = labelShape.getBounds();
228
//	        
229
//			//Shape labelBackground = new RoundRectangle2D.Double(-(labelBounds.getWidth() + 4) / 2, -s.getBounds2D().getHeight() / 2 + 1, labelBounds.getWidth() + 8, labelBounds.getHeight() / 2 + 10, 5, 5);
230
//			double width = labelBounds.getWidth() + 10;
231
//			double height = labelBounds.getHeight() + 10;
232
//			Shape labelBackground = new RoundRectangle2D.Double(-width  / 2, -height / 2 - 15, width, height, 5, 5);
233
//			
234
//			AffineTransform t2 = new AffineTransform();
235
//			t2.setToScale(0.9, 0.9);
236
//			Shape labelBackground2 = t2.createTransformedShape(labelBackground);
237
//			
238
//			
239
//			Area a = new Area(s);
240
//			a.add(new Area(labelBackground));
241
//			//a.add(new Area(labelBackground2));
242
//			//a.add(new Area(labelShape));
243
//			
244
//			s = a;
245
//			//t.setToScale(1.5, 1.5);
246
//
247
//			//return a;
248
//			
249
//		}
199
		//		else if(this.itemSelector.isMultipleSelectedItem(series, item))	{
200
		////			
201
		//			// Add a background rectangle to the label selected item
202
		//			XYSeriesCollection dataset = (XYSeriesCollection) this.getPlot().getDataset();
203
		//					
204
		//			Graphics2D graphics = ((Graphics2D) this.chartPanel.getGraphics());
205
		//			 
206
		//			// FIXME: get graphics by creating an image insetad of passing the chart panel to this renderer
207
		////			BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
208
		////			Graphics2D graphics = img.createGraphics();
209
		//			// FIXME: rendering quality tests
210
		////			RenderingHints rh = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
211
		////			rh.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
212
		////			rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
213
		////			rh.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
214
		////		    graphics.setRenderingHints(rh);
215
		//			
216
		//			Font font = this.getItemLabelFont(series, item);
217
		//			String label = valuesNumberFormat.format(dataset.getSeries(series).getY(item)) + " / " + (dataset.getSeries(series).getItemCount() - 2); //$NON-NLS-1$ // -2 for the 0 point and the dummy last point;
218
		//
219
		//			GlyphVector v = font.createGlyphVector(graphics.getFontMetrics(font).getFontRenderContext(), label);
220
		//	        Shape labelShape = v.getOutline();
221
		//	        //Rectangle2D labelBounds = v.getVisualBounds();
222
		//	        
223
		//			Rectangle2D labelBounds = font.getStringBounds(label, graphics.getFontRenderContext());
224
		//
225
		//			// FIXME : not rounded rectangle version
226
		////			Shape labelBackground = new Rectangle2D.Double(-bounds.getWidth() / 2, -s.getBounds2D().getHeight() / 2 + 1, bounds.getWidth() + 4, bounds.getHeight() / 2 + 8);
227
		//
228
		//			//Rectangle2D labelBounds = font.getStringBounds(label, graphics.getFontRenderContext());
229
		//			
230
		//	        //Rectangle labelBounds = labelShape.getBounds();
231
		//	        
232
		//			//Shape labelBackground = new RoundRectangle2D.Double(-(labelBounds.getWidth() + 4) / 2, -s.getBounds2D().getHeight() / 2 + 1, labelBounds.getWidth() + 8, labelBounds.getHeight() / 2 + 10, 5, 5);
233
		//			double width = labelBounds.getWidth() + 10;
234
		//			double height = labelBounds.getHeight() + 10;
235
		//			Shape labelBackground = new RoundRectangle2D.Double(-width  / 2, -height / 2 - 15, width, height, 5, 5);
236
		//			
237
		//			AffineTransform t2 = new AffineTransform();
238
		//			t2.setToScale(0.9, 0.9);
239
		//			Shape labelBackground2 = t2.createTransformedShape(labelBackground);
240
		//			
241
		//			
242
		//			Area a = new Area(s);
243
		//			a.add(new Area(labelBackground));
244
		//			//a.add(new Area(labelBackground2));
245
		//			//a.add(new Area(labelShape));
246
		//			
247
		//			s = a;
248
		//			//t.setToScale(1.5, 1.5);
249
		//
250
		//			//return a;
251
		//			
252
		//		}
250 253
		else	{
251 254
			t.setToScale(1.5, 1.5);
252 255
		}
......
262 265
		this.chartPanel = chartPanel;
263 266
	}
264 267

  
265
	
268

  
266 269
	@Override
267 270
	public String getSelectedItemLabelFromDataset(XYDataset dataset, int series, int item)	{
268
		
271

  
269 272
		// manage the first and last dummy point
270 273
		if(item == 0)	{
271 274
			item++;
......
273 276
		else if(item == dataset.getItemCount(series) - 1)	{
274 277
			item--;
275 278
		}
276
		
279

  
277 280
		String label = "";
278 281
		int globalPosition = (int) dataset.getXValue(series, item) + 1;
279
		
282

  
280 283
		try {
281
			
284

  
282 285
			Property prop;
283
			
286

  
284 287
			// Ref
285 288
			prop = ((Progression)this.multipleItemsSelector.getResult()).getCorpus().getProperty("ref"); //$NON-NLS-1$
286 289
			// Text id
287 290
			if(prop == null)	{
288 291
				prop = ((Progression)this.multipleItemsSelector.getResult()).getCorpus().getStructuralUnit("text").getProperty("id"); //$NON-NLS-1$ //$NON-NLS-2$
289 292
			}
290
			
293

  
291 294
			Match selectedWordMatch = new Match(globalPosition, globalPosition);
292 295
			label = selectedWordMatch.getValueForProperty(prop);
293
			
296

  
294 297
		}
295 298
		catch(CqiClientException e) {
296 299
			// TODO Auto-generated catch block
297 300
			e.printStackTrace();
298 301
		}
299
		
302

  
300 303
		// manage the first 0 dummy point
301 304
		if(item == 0)	{
302 305
			item++;
303 306
		}
304
		
307

  
305 308
		int tokenCount = ((XYSeriesCollection)dataset).getSeries(series).getItemCount() - 2; // -2 for the 0 point and the dummy last point
306 309
		label += "\n" + globalPosition + " / " + RendererUtils.valuesNumberFormat.format(((XYSeriesCollection)dataset).getDomainUpperBound(false)); //$NON-NLS-1$ //$NON-NLS-2$ // -2 for the 0 point and the dummy last point
307 310

  
308 311
		label += "\n" + RendererUtils.valuesNumberFormat.format(((XYSeriesCollection) dataset).getSeries(series).getY(item)) + " / " + (((XYSeriesCollection) dataset).getSeries(series).getItemCount() - 2); //$NON-NLS-1$ //$NON-NLS-2$ // -2 for the 0 point and the dummy last point 
309
		
312

  
310 313
		return label;
311 314
	}
312
	
313 315

  
314 316

  
317

  
315 318
}
tmp/org.txm.chartsengine.svgbatik.rcp/src/org/txm/chartsengine/svgbatik/rcp/swt/SVGComposite.java (revision 1727)
7 7
import org.txm.chartsengine.rcp.swt.SwingChartComposite;
8 8
import org.txm.chartsengine.svgbatik.rcp.swing.SVGPanel;
9 9
import org.txm.core.messages.TXMCoreMessages;
10
import org.txm.importer.ValidateXml;
10 11
import org.txm.utils.logger.Log;
11 12
import org.w3c.dom.svg.SVGDocument;
12 13

  
......
51 52
		this.file = file;
52 53
		Log.fine(TXMCoreMessages.bind("Loading SVG document from file: {0}...", file.getAbsolutePath()));
53 54
		try {
54
			this.getPanel().loadSVGDocument(file.toURL().toExternalForm());
55
			if (ValidateXml.test(file)) {
56
				this.getPanel().loadSVGDocument(file.toURL().toExternalForm());
57
			} else {
58
				Log.severe("** Malformed SVG file: "+file);
59
				this.getPanel().resetView();
60
			}
55 61
		}
56 62
		catch(MalformedURLException e) {
57 63
			Log.severe("Can't load SVG document from file: " + file + e);

Formats disponibles : Unified diff