Index: tmp/org.txm.chartsengine.jfreechart.rcp/.project
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/.project	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/.project	(revision 114)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.txm.chartsengine.jfreechart.rcp</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/.project
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCChartsSwingComponentsProvider.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCChartsSwingComponentsProvider.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCChartsSwingComponentsProvider.java	(revision 114)
@@ -0,0 +1,476 @@
+package org.txm.chartsengine.jfreechart.rcp;
+
+import java.awt.Color;
+
+import org.jfree.chart.ChartPanel;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.LegendItemSource;
+import org.jfree.chart.axis.NumberAxis;
+import org.jfree.chart.plot.CategoryPlot;
+import org.jfree.chart.plot.Marker;
+import org.jfree.chart.plot.Plot;
+import org.jfree.chart.plot.ValueMarker;
+import org.jfree.chart.plot.XYPlot;
+import org.jfree.data.category.DefaultCategoryDataset;
+import org.jfree.data.general.DatasetUtilities;
+import org.jfree.data.xy.XYIntervalSeries;
+import org.jfree.data.xy.XYIntervalSeriesCollection;
+import org.jfree.data.xy.XYSeries;
+import org.jfree.data.xy.XYSeriesCollection;
+import org.jfree.ui.RectangleAnchor;
+import org.jfree.ui.TextAnchor;
+import org.txm.chartsengine.jfreechart.core.JFCChartsEngine;
+import org.txm.chartsengine.jfreechart.core.themes.base.ExtendedNumberAxis;
+import org.txm.chartsengine.jfreechart.core.themes.base.Theme;
+import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
+import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.ItemSelectionCategoryLineAndShapeRenderer;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+import org.txm.functions.ca.CA;
+import org.txm.functions.classification.CAH;
+import org.txm.functions.specificities.SpecificitesResult;
+
+/**
+ * Swing components provider.
+ * @author sjacquot
+ *
+ */
+public class JFCChartsSwingComponentsProvider {
+
+	/**
+	 * The chart production engine.
+	 */
+	protected JFCChartsEngine chartsEngine;
+
+
+	/**
+	 * The linked SWT Charts Component Provider.
+	 */
+	protected SWTChartsComponentsProvider swtChartsComponentProvider;
+
+	
+	/**
+	 *
+	 * @param chartsEngine
+	 */
+	public JFCChartsSwingComponentsProvider(SWTChartsComponentsProvider swtChartsComponentProvider, JFCChartsEngine chartsEngine) {
+		this.swtChartsComponentProvider = swtChartsComponentProvider;
+		this.chartsEngine = chartsEngine;
+	}
+
+
+
+	/**
+	 *
+	 * @param useSplines
+	 * @return
+	 */
+	// FIXME : test method
+	public ChartPanel ___createXYLinesChartPanel(boolean useSplines)	{
+		return this.___createXYLinesChartPanel(useSplines, true, true);
+	}
+
+
+	/**
+	 *
+	 * @param useSplines
+	 * @param linesVisible
+	 * @param shapesVisible
+	 * @return
+	 */
+	// FIXME : test method
+	public ChartPanel ___createXYLinesChartPanel(boolean useSplines, boolean linesVisible, boolean shapesVisible)	{
+
+		ChartPanel chartPanel;
+
+
+    	// Jeu de données factice
+		XYSeries series1 = new XYSeries("faire"); //$NON-NLS-1$
+		series1.add(0.0, 0.2);		series1.add(1.0, 0.8);		series1.add(2.0, 1.2);		series1.add(3.0, 1.9);
+		series1.add(4.0, 1.9);		series1.add(5.0, 2.4);		series1.add(6.0, 2.9);
+
+		XYSeries series2 = new XYSeries("voir"); //$NON-NLS-1$
+		series2.add(1.0, 5.0);		series2.add(2.0, 7.0);		series2.add(3.0, 6.0);		series2.add(4.0, 8.0);		series2.add(5.0, 4.0);		series2.add(6.0, 4.0);
+
+		XYSeries series3 = new XYSeries("avoir"); //$NON-NLS-1$
+		series3.add(1.0, 2.0);		series3.add(2.0, 3.5);		series3.add(3.0, 3.2);		series3.add(4.0, 4.5);		series3.add(5.0, 1.2);		series3.add(6.0, 3);
+
+		XYSeries series4 = new XYSeries("être"); //$NON-NLS-1$
+		series4.add(1.0, 4.2);		series4.add(2.0, 5);		series4.add(3.0, 5.5);		series4.add(4.0, 2.2);		series4.add(5.0, 4.8);		series4.add(6.0, 6.2);
+
+		XYSeriesCollection dataset = new XYSeriesCollection();
+		dataset.addSeries(series1);		dataset.addSeries(series2);		dataset.addSeries(series3);		dataset.addSeries(series4);
+
+
+
+		// Creating the chart from the current charts engine
+        JFreeChart chart = this.chartsEngine.createXYLineChart(dataset, "test", "x label", "y label", true, useSplines, linesVisible, shapesVisible);
+
+
+
+
+        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+
+		return chartPanel;
+	}
+
+	/**
+	 *
+	 * @return
+	 */
+	// FIXME : test method
+	public ChartPanel ___createXYDimensionsBarChartPanel()	{
+
+		ChartPanel chartPanel;
+
+
+		// Jeu de données factice
+		XYIntervalSeriesCollection dataset = new XYIntervalSeriesCollection();
+
+		XYIntervalSeries series1 = new XYIntervalSeries("faire"); //$NON-NLS-1$
+		series1.add(0.5, 0.0, 0.2, 0.9, 0.0, 1);
+
+		dataset.addSeries(series1);
+
+
+		// Creating the chart from the current charts engine
+        JFreeChart chart = this.chartsEngine.createXYBarChart(dataset, "Dimensions of partition \"P\" in corpus \"C\"", "Part", "Number of words per part", false, false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+
+
+        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+
+        return chartPanel;
+	}
+
+
+
+	/**
+	 *
+	 * @return
+	 */
+	// FIXME : test method
+	public ChartPanel ___createCategoryLinesChartPanel()	{
+
+		ChartPanel chartPanel;
+
+
+		// Jeu de données factice
+		// row keys
+		final String series1 = "faire";       final String series2 = "voir";       final String series3 = "être"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+		// column keys
+		final String type1 = "années 20";       final String type2 = "années 30";       final String type3 = "années 40";       final String type4 = "années 50"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		final String type5 = "années 60";       final String type6 = "années 70";       final String type7 = "années 80";       final String type8 = "années 90"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+
+		// create the dataset
+		final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
+
+		dataset.addValue(0.5, series1, type1);        dataset.addValue(-0.85, series1, type2);       dataset.addValue(0.1, series1, type3);        dataset.addValue(0.4, series1, type4);
+		dataset.addValue(-0.2, series1, type5);        dataset.addValue(-0.3, series1, type6);       dataset.addValue(0.48, series1, type7);        dataset.addValue(0.56, series1, type8);
+
+		dataset.addValue(0.25, series2, type1);        dataset.addValue(0.29, series2, type2);       dataset.addValue(-0.12, series2, type3);        dataset.addValue(0.56, series2, type4);
+		dataset.addValue(-0.85, series2, type5);        dataset.addValue(-0.23, series2, type6);       dataset.addValue(0.8, series2, type7);        dataset.addValue(0.4, series2, type8);
+
+		dataset.addValue(-0.23, series3, type1);        dataset.addValue(0.64, series3, type2);       dataset.addValue(0.35, series3, type3);        dataset.addValue(0.89, series3, type4);
+		dataset.addValue(-0.56, series3, type5);        dataset.addValue(0.2, series3, type6);       dataset.addValue(-0.36, series3, type7);        dataset.addValue(-0.72, series3, type8);
+
+
+
+		// Creating the chart from the current charts engine
+        JFreeChart chart = this.chartsEngine.createCategoryLineChart(dataset, "Specificities of words \"faire\", \"voir\", \"être\" in partition \"P\" of corpus \"C\"", "Part", "Score", true, false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+
+    	// Custom renderer
+		chart.getCategoryPlot().setRenderer(new ItemSelectionCategoryLineAndShapeRenderer(true, false));
+
+        // Custom range axis for ticks drawing options
+        chart.getCategoryPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getCategoryPlot().getRangeAxis(), true, true, -1, 1));
+
+
+        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+
+
+        // TODO : test markers
+        Marker target = new ValueMarker(0.32);
+        target.setPaint(Color.red);
+        target.setLabel("Score moyen positif"); //$NON-NLS-1$
+        target.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
+        target.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
+        ((CategoryPlot) chart.getPlot()).addRangeMarker(target);
+
+        target = new ValueMarker(-0.45);
+        target.setPaint(Color.red);
+        target.setLabel("Score moyen négatif"); //$NON-NLS-1$
+        target.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
+        target.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
+        ((CategoryPlot) chart.getPlot()).addRangeMarker(target);
+
+
+		return chartPanel;
+	}
+
+
+	/**
+	 *
+	 * @return
+	 */
+	// FIXME : test method
+	public ChartPanel ___createCategoryDimensionsBarChartPanel()	{
+
+		ChartPanel chartPanel;
+
+
+		// Jeu de donn�es factice
+		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
+		String category = "T"; //$NON-NLS-1$
+    	//dataset.setValue(2, "test", "testtt");
+    	//dataset.setValue(5, category, "testtt");
+		dataset.setValue(890, category, "Introduction"); //$NON-NLS-1$
+		dataset.setValue(780, category, "Chapter 1"); //$NON-NLS-1$
+    	dataset.setValue(1430, category, "Chapter 2"); //$NON-NLS-1$
+    	dataset.setValue(700, category, "Chapter 3"); //$NON-NLS-1$
+    	dataset.setValue(590, category, "Chapter 4"); //$NON-NLS-1$
+    	dataset.setValue(380, category, "Conclusion"); //$NON-NLS-1$
+
+
+
+		// Creating the chart from the current charts engine
+        JFreeChart chart = this.chartsEngine.createCategoryBarChart(dataset, "Dimensions of partition \"P\" in corpus \"C\"", "Part", "Number of words per part", false, true); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+        // Custom range axis for ticks drawing options
+        chart.getCategoryPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getCategoryPlot().getRangeAxis(), false, true, 0, DatasetUtilities.findMaximumRangeValue(chart.getCategoryPlot().getDataset()).doubleValue()));
+
+
+        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+
+        return chartPanel;
+	}
+
+
+
+	/**
+	 * Distribution bar chart of multiple words by parts.
+	 * @return
+	 */
+	// FIXME : test method
+	public ChartPanel ___createCategoryDistributionBarsChartPanel()	{
+
+		ChartPanel chartPanel;
+
+
+		// Jeu de données factice
+		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
+
+    	dataset.setValue(3, "faire", "Introduction");    	dataset.setValue(4, "voir", "Introduction");    	dataset.setValue(1, "avoir", "Introduction"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+    	dataset.setValue(5, "être", "Introduction"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    	dataset.setValue(9, "faire", "Chapter 1");    	dataset.setValue(3, "voir", "Chapter 1");    	dataset.setValue(7, "avoir", "Chapter 1");    	dataset.setValue(2, "être", "Chapter 1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
+    	dataset.setValue(1, "faire", "Chapter 2");    	dataset.setValue(8, "voir", "Chapter 2");    	dataset.setValue(4, "avoir", "Chapter 2");    	dataset.setValue(6, "être", "Chapter 2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
+    	dataset.setValue(3, "faire", "Chapter 3");    	dataset.setValue(5, "voir", "Chapter 3");    	dataset.setValue(0, "avoir", "Chapter 3");    	dataset.setValue(11, "être", "Chapter 3"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
+    	dataset.setValue(5, "faire", "Conclusion");    	dataset.setValue(0, "voir", "Conclusion");    	dataset.setValue(6, "avoir", "Conclusion");    	dataset.setValue(1, "être", "Conclusion"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
+
+
+
+		// Creating the chart from the current charts engine
+        JFreeChart chart = this.chartsEngine.createCategoryBarChart(dataset, "Distribution of words \"faire\", \"voir\", \"avoir\", \"être\" in corpus \"C\"", "Part", "Frequency", true, true); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+
+        // Custom range axis for ticks drawing options
+        chart.getCategoryPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getCategoryPlot().getRangeAxis(), false, true, 0, DatasetUtilities.findMaximumRangeValue(chart.getCategoryPlot().getDataset()).doubleValue()));
+
+
+        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+
+        return chartPanel;
+	}
+
+
+
+	/**
+	 * Creates a chart panel containing a CA scatter plot from the specified CA result.
+	 * @param ca
+	 * @return the chart panel
+	 */
+	public ChartPanel createCAFactorialMapChartPanel(CA ca)	{
+
+		ChartPanel chartPanel;
+
+		// Creating the chart from the current charts engine
+		JFreeChart chart = this.chartsEngine.createCAFactorialMapChart(ca);
+
+		chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+
+		// Need to be called after the theme is applied to the chart else the legends of not visible series aren't created
+		chart.getXYPlot().getRenderer().setSeriesVisible(0, ca.isShowVariables()); // Rows
+		chart.getXYPlot().getRenderer().setSeriesVisible(1, ca.isShowIndividuals()); // Columns
+
+		((FCAItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartPanel(chartPanel);
+
+
+        return chartPanel;
+	}
+
+
+
+	/**
+	 * Creates a chart panel containing a bar chart with the singular values of the specified CA result.
+	 * @param ca
+	 * @return
+	 */
+	public ChartPanel createCASingularValuesBarChartChartPanel(CA ca)	{
+
+		ChartPanel chartPanel;
+
+		// Creating the chart from the current charts engine
+        JFreeChart chart = this.chartsEngine.createCASingularValuesBarChart(ca);
+
+        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+
+        return chartPanel;
+	}
+
+
+
+	/**
+	 * Creates a chart panel containing a CAH plot from the specified CAH result.
+	 * @param cah
+	 * @return the chart panel
+	 */
+	public ChartPanel createCAHChartPanel(CAH cah, boolean display2D)	{
+
+		ChartPanel chartPanel;
+
+		// Creating the chart from the current charts engine
+		JFreeChart chart = (JFreeChart) this.chartsEngine.createCAHChart(cah, display2D);
+
+		chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+
+        return chartPanel;
+	}
+
+
+//	/**
+//	 * Creates a chart panel containing a bar chart with the dimensions of the specified partition result.
+//	 * @param partition
+//	 * @param sortPartsBySize
+//	 * @return
+//	 */
+//	public ChartPanel createDimensionsPartitionBarChartChartPanel(Partition partition, boolean sortPartsBySize)	{
+//
+//		ChartPanel chartPanel;
+//
+//		// Creating the chart from the current charts engine
+//        JFreeChart chart = this.chartsEngine.createPartitionDimensionsChart(partition, sortPartsBySize);
+//
+//        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+//
+//        // FIXME : pour tests de scrolling sur les diagrammes à bâtons très large
+//        //chartPanel.setPreferredSize(new Dimension(20000, 300));
+//
+////        int panelWidth = chart.getCategoryPlot().getDataset().getColumnCount() * 120;
+////        chartPanel.setPreferredSize(new Dimension(panelWidth, 1));
+//
+//        return chartPanel;
+//	}
+
+//	/**
+//	 * Creates a chart panel containing a line chart or a bar chart from the specified Progression result.
+//	 * @param progression
+//	 * @param monochrome
+//	 * @param monostyle
+//	 * @param doCumulative
+//	 * @return
+//	 */
+//	public ChartPanel createProgressionChartPanel(Progression progression, boolean monochrome, boolean monostyle, boolean doCumulative)	{
+//
+//		 ChartPanel chartPanel;
+//
+//		 // Creating the chart from the current charts engine
+//		 JFreeChart chart = this.chartsEngine.createProgressionChart(progression, monochrome, monostyle, doCumulative);
+//
+//		 chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+//		 
+//		 ((ProgressionItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartPanel(chartPanel);
+//
+//		 return chartPanel;
+//	}
+
+
+//	/**
+//	 * Creates a chart panel containing a chart with the scores of the specified indices.
+//	 * @param specificitiesResult
+//	 * @param typeNames
+//	 * @param partNames
+//	 * @param specIndex
+//	 * @param transpose
+//	 * @param drawBars
+//	 * @param drawLines
+//	 * @param banalite
+//	 * @param monochrome
+//	 * @return
+//	 */
+//	public ChartPanel createSpecificitiesChartPanel(SpecificitesResult specificitiesResult, boolean transpose, boolean drawBars, boolean drawLines, float banalite, boolean monochrome)	{
+//
+//		 ChartPanel chartPanel;
+//
+//		// Creating the chart from the current charts engine
+//        JFreeChart chart = this.chartsEngine.createSpecificitiesChart(specificitiesResult, transpose, drawBars, drawLines, banalite, monochrome);
+//
+//        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+//
+//        return chartPanel;
+//	 }
+
+
+
+	/**
+	 * Creates an empty chart panel.
+	 * @return
+	 */
+	public ChartPanel createDefaultEmptyChartPanel()	{
+		return this.getTheme().createChartPanel(this.swtChartsComponentProvider, null);
+	}
+
+
+	/**
+	 * Gets the charts engine.
+	 * @return the chartsEngine
+	 */
+	public JFCChartsEngine getChartsEngine() {
+		return chartsEngine;
+	}
+
+
+	public Theme getTheme()	{
+		return this.chartsEngine.getTheme();
+	}
+	
+	
+	/**
+	 * Gets the items renderer of the specified plot.
+	 * @param plot
+	 * @return
+	 */
+	public static LegendItemSource getRenderer(Plot plot)	{
+		LegendItemSource renderer = null;
+
+		if(plot instanceof XYPlot) {
+			renderer = ((XYPlot) plot).getRenderer();
+		}
+		else if(plot instanceof CategoryPlot)	{
+			renderer = ((CategoryPlot) plot).getRenderer();
+		}
+		
+		return renderer;
+	}
+	
+	/**
+	 * Gets the items renderer associated to the plot linked to the specified chart panel.
+	 * @param panel
+	 * @return
+	 */
+	public static LegendItemSource getRenderer(ChartPanel panel)	{
+		return getRenderer(panel.getChart().getPlot());
+	}
+	
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCChartsSwingComponentsProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/preferences/JFCChartsEnginePreferencePage.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/preferences/JFCChartsEnginePreferencePage.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/preferences/JFCChartsEnginePreferencePage.java	(revision 114)
@@ -0,0 +1,117 @@
+package org.txm.chartsengine.jfreechart.rcp.preferences;
+
+// Copyright © 2010-2013 ENS de Lyon.
+// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
+// Lyon 2, University of Franche-Comté, University of Nice
+// Sophia Antipolis, University of Paris 3.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// The TXM platform is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied
+// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+// PURPOSE. See the GNU General Public License for more
+// details.
+// 
+// You should have received a copy of the GNU General
+// Public License along with the TXM platform. If not, see
+// http://www.gnu.org/licenses.
+// 
+// 
+// 
+// $LastChangedDate:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+
+
+import java.util.ArrayList;
+import java.util.TreeSet;
+
+import org.eclipse.jface.preference.ComboFieldEditor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.txm.chartsengine.core.ChartsEngine;
+import org.txm.chartsengine.jfreechart.core.JFCChartsEngine;
+import org.txm.chartsengine.jfreechart.core.preferences.JFCChartsEnginePreferences;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+import org.txm.chartsengine.rcp.messages.SWTComponentsProviderMessages;
+import org.txm.rcp.preferences.TXMPreferencePage;
+import org.txm.rcp.preferences.TXMPreferenceStore;
+import org.txm.rcpapplication.TxmPreferences;
+import org.txm.rcpapplication.preferences.ExportPreferencePage;
+import org.txm.rcpapplication.preferences.UserPreferencePage;
+
+/**
+ * JFreeChart charts engine preference page.
+ * @author sjacquot
+ *
+ */
+public class JFCChartsEnginePreferencePage extends TXMPreferencePage {
+
+
+
+	@Override
+	public void createFieldEditors() {
+		
+		// TODO : add JFC Themes selection?
+
+
+		ArrayList<String> supportedOutputFormats = new ArrayList<String>();
+		
+		
+		supportedOutputFormats.addAll(JFCChartsEngine.getSupportedOutputDisplayFormatsStatic());
+		supportedOutputFormats.addAll(JFCChartsEngine.getSupportedOutputFileFormatsStatic());
+		
+		// Sort the set
+		TreeSet<String> formatsSet = new TreeSet <String>(supportedOutputFormats);
+		String[] formats = formatsSet.toArray(new String[formatsSet.size()]);
+		
+		String[][] displayFormats = new String[formats.length][2];
+		for(int i = 0; i < formats.length; i++) {
+			displayFormats[i][0] = formats[i];
+			displayFormats[i][1] = formats[i];
+		}
+
+		this.addField(new ComboFieldEditor(JFCChartsEnginePreferences.OUTPUT_FORMAT, SWTComponentsProviderMessages.ChartsEnginePreferencePage_COMBO_FIELD_SELECT_DISPLAY_FORMAT_LABEL, displayFormats, this.getFieldEditorParent()));
+	}
+	
+	
+	@Override
+	public void init(IWorkbench workbench) {
+		this.setPreferenceStore(new TXMPreferenceStore(JFCChartsEnginePreferences.PREFERENCE_NODE));
+	}
+
+	@Override
+	public boolean performOk() {
+		try {
+			super.performOk();
+			
+			// Change the JFC Charts engine output format
+			ChartsEngine.getChartsEngine(JFCChartsEngine.class).setOutputFormat(this.getPreferenceStore().getString(JFCChartsEnginePreferences.OUTPUT_FORMAT));
+				
+			// Sets the new current charts SWT component provider according to the output format if the charts engine is the current one
+			if(ChartsEngine.getCurrent() instanceof JFCChartsEngine)	{
+				SWTChartsComponentsProvider.setCurrrentComponentsProvider(ChartsEngine.getCurrent());
+	
+				// Set the first charts engine supported export file format as default charts export file format
+				TxmPreferences.set(ExportPreferencePage.RDEVICE, ChartsEngine.getCurrent().getSupportedOutputFileFormats().get(0));
+					
+				// Refresh the User\Export preference page to update "Default charts export file format" combo box
+				PlatformUI.getWorkbench().getPreferenceManager().
+						find("org.txm.rcpapplication.preferences.TextometriePreferencePage/" + UserPreferencePage.ID + "/" + ExportPreferencePage.ID).createPage(); //$NON-NLS-1$ //$NON-NLS-2$
+			
+			}
+
+			
+			
+		} catch (Exception e) {
+			System.err.println(org.txm.rcpapplication.Messages.FAILED_TO_SAVE_PREFERENCES + e);
+		}
+		return true;
+	}
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/preferences/JFCChartsEnginePreferencePage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/events/DefaultChartMouseListener.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/events/DefaultChartMouseListener.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/events/DefaultChartMouseListener.java	(revision 114)
@@ -0,0 +1,288 @@
+/**
+ *
+ */
+package org.txm.chartsengine.jfreechart.rcp.events;
+
+import java.awt.event.MouseEvent;
+
+import org.jfree.chart.ChartMouseEvent;
+import org.jfree.chart.ChartMouseListener;
+import org.jfree.chart.ChartPanel;
+import org.jfree.chart.axis.SymbolAxis;
+import org.jfree.chart.entity.CategoryItemEntity;
+import org.jfree.chart.entity.ChartEntity;
+import org.jfree.chart.entity.JFreeChartEntity;
+import org.jfree.chart.entity.PlotEntity;
+import org.jfree.chart.entity.XYItemEntity;
+import org.jfree.chart.plot.CategoryPlot;
+import org.jfree.chart.plot.Plot;
+import org.jfree.chart.plot.XYPlot;
+import org.jfree.data.category.CategoryDataset;
+import org.jfree.data.xy.XYSeriesCollection;
+import org.txm.chartsengine.jfreechart.core.datasets.FCAXYDataset;
+import org.txm.chartsengine.jfreechart.core.renderers.MultipleItemsSelector;
+import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
+import org.txm.chartsengine.rcp.IChartComponent;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+import org.txm.chartsengine.rcp.events.AbstractChartMouseListener;
+import org.txm.chartsengine.rcp.events.EventCallBack;
+import org.txm.chartsengine.rcp.events.EventCallBackHandler;
+
+/**
+ * Default JFC chart engine mouse listener.
+ * @author sjacquot
+ *
+ */
+public class DefaultChartMouseListener extends EventCallBackHandler implements ChartMouseListener {
+
+
+
+	/**
+	 * @param swtChartsComponentProvider
+	 * @param chartComponent
+	 */
+	public DefaultChartMouseListener(SWTChartsComponentsProvider swtChartsComponentProvider, IChartComponent chartComponent) {
+		super(swtChartsComponentProvider, chartComponent);
+	}
+
+	@Override
+	public void chartMouseClicked(ChartMouseEvent event) {
+
+		ChartEntity entity = event.getEntity();
+
+		int eventArea = -1;
+
+
+		String menuText = "";
+
+
+
+		Plot plot = ((ChartPanel) this.chartComponent).getChart().getPlot();
+
+		IItemSelectionRenderer renderer = null;
+
+		if(plot instanceof XYPlot) {
+			renderer = (IItemSelectionRenderer) ((XYPlot) plot).getRenderer();
+		}
+		else if(plot instanceof CategoryPlot)	{
+			renderer = (IItemSelectionRenderer) ((CategoryPlot) plot).getRenderer();
+		}
+
+
+		// Select/deselect item
+		if(entity instanceof XYItemEntity || entity instanceof CategoryItemEntity) {
+
+			int series = -1;
+			int item = -1;
+
+
+
+			eventArea = EventCallBack.AREA_ITEM;
+
+			// Single click
+			if(event.getTrigger().getClickCount() == 1)	{
+
+				// Multiple item selector
+				if(renderer.getItemsSelector() instanceof MultipleItemsSelector)	{
+
+
+					MultipleItemsSelector itemsSelector = (MultipleItemsSelector) renderer.getItemsSelector();
+
+					// XY plot
+					if(entity instanceof XYItemEntity)	{
+						XYItemEntity itemEntity = (XYItemEntity) entity;
+						series = itemEntity.getSeriesIndex();
+						item = itemEntity.getItem();
+					}
+					// Category plot
+					else if(entity instanceof CategoryItemEntity)	{
+						CategoryItemEntity itemEntity = (CategoryItemEntity) entity;
+						CategoryDataset dataset = itemEntity.getDataset();
+						series = dataset.getRowIndex(itemEntity.getRowKey());
+						item = dataset.getColumnIndex(itemEntity.getColumnKey());
+
+						menuText = (String) dataset.getColumnKeys().get(series);
+					}
+
+
+					int onmask = MouseEvent.BUTTON1_MASK;
+					int mods = event.getTrigger().getModifiers();
+
+					// Simple selection mode
+					if(itemsSelector.isSimpleSelectionMode()
+							&& (mods & onmask) == onmask) {
+						itemsSelector.removeAllSelectedItems(); // clear the selection
+						itemsSelector.setSelectedItem(series, item, !itemsSelector.isSelectedItem(series, item));
+
+					}
+					// Multiple selection mode
+					else if((mods & AbstractChartMouseListener.keyboardExtendedSelectionModifierKeyMask) == 0)	{
+
+						int offmask = AbstractChartMouseListener.mouseMultipleSelectionModifierKeyMask;
+
+						if((mods & (onmask | offmask)) == onmask) {
+							itemsSelector.removeAllSelectedItems(series);
+						}
+						if((mods & onmask) == onmask) {
+							itemsSelector.setSelectedItem(series, item, !itemsSelector.isSelectedItem(series, item));
+						}
+						// right click, do not clear the current selection if the click occurred in the current selection
+						if((mods & MouseEvent.BUTTON3_MASK) == MouseEvent.BUTTON3_MASK) {
+							if(!itemsSelector.isSelectedItem(series, item))	{
+								itemsSelector.removeAllSelectedItems(series);
+							}
+							itemsSelector.setSelectedItem(series, item, true);
+						}
+
+					}
+					// Extended selection by series
+					else if(itemsSelector.getLastSelectedItem() != -1 && itemsSelector.getLastSelectedSeries() == series)	{
+						// Ascendant
+						if(itemsSelector.getLastSelectedItem() < item)	{
+							for(int i = itemsSelector.getLastSelectedItem(); i < item; i++) {
+								itemsSelector.selectNextItem(true);
+							}
+						}
+						// Descendant
+						else	{
+							for(int i = itemsSelector.getLastSelectedItem(); i >= item + 1; i--) {
+								itemsSelector.selectPreviousItem(true);
+							}
+						}
+					}
+
+
+					// update text menu according to the current selection
+					if(renderer.getItemsSelector() instanceof MultipleItemsSelector && ((MultipleItemsSelector) renderer.getItemsSelector()).getSelectedSeriesCount() > 0)	{
+						// XY plot
+						if(entity instanceof XYItemEntity)	{
+							XYItemEntity itemEntity = (XYItemEntity) entity;
+
+							MultipleItemsSelector selector = (MultipleItemsSelector) renderer.getItemsSelector();
+							int selectedSeries;
+							for(int i = 0; i < selector.getSelectedSeriesCount(); i++) {
+								selectedSeries = selector.getSelectedSeries()[i];
+								int[] selectedItems = selector.getSelectedItems(selectedSeries);
+								for(int j = 0; j < selectedItems.length; j++) {
+									// Symbol Axis
+									if(((XYPlot) plot).getDomainAxis() instanceof SymbolAxis)	{
+										menuText += (String)((SymbolAxis) ((XYPlot) plot).getDomainAxis()).getSymbols()[selectedItems[j]];
+									}
+									// CA
+									else if(itemEntity.getDataset() instanceof FCAXYDataset)	{
+										menuText += ((FCAXYDataset) ((XYPlot)plot).getDataset()).getLabel(selectedSeries, selectedItems[j]);
+									}
+									// Progression
+									else if(itemEntity.getDataset() instanceof XYSeriesCollection)	{
+										menuText +=  ((XYSeriesCollection)itemEntity.getDataset()).getSeriesKey(selectedSeries);
+										menuText += " / "; //$NON-NLS-1$
+										break;
+									}
+									else	{
+										menuText += String.valueOf(itemEntity.getDataset().getXValue(selectedSeries, selectedItems[j]));
+									}
+
+									menuText += " / "; //$NON-NLS-1$
+								}
+							}
+							// remove the last separator
+							menuText = menuText.substring(0, menuText.length() - 3);
+							// trim the entry
+							if(menuText.length() > 30)	{
+								menuText = menuText.substring(0, 30);
+								menuText += "..."; //$NON-NLS-1$
+							}
+
+						}
+					}
+				}
+			}
+		}
+		// Empty area
+		else if(entity instanceof PlotEntity || entity instanceof JFreeChartEntity)	{
+			eventArea = EventCallBack.AREA_EMPTY;
+
+			// FIXME: deselect all items, waiting the discussion about the editor focus policy
+//        	if(renderer.getItemsSelector() instanceof MultipleItemsSelector)	{
+//        		((MultipleItemsSelector)renderer.getItemsSelector()).removeAllSelectedItems();
+//        	}
+		}
+		//FIXME: force empty area event type for all non item area (later we need to pass legend item type, title item type, etc.)
+		else	{
+			eventArea = EventCallBack.AREA_EMPTY;
+		}
+
+		// Set the composite current menu
+		final int a = eventArea;
+		final String t = menuText;
+		((IChartComponent) this.chartComponent).getChartEditor().getComposite().getDisplay().syncExec(new Runnable () {
+			public void run() {
+				((IChartComponent) chartComponent).getChartEditor().getComposite().setCurrentContextMenu(a);
+				if(!t.isEmpty() && ((IChartComponent) chartComponent).getChartEditor().getComposite().getMenu() != null)	{
+					((IChartComponent) chartComponent).getChartEditor().getComposite().getMenu().getItem(0).setText(t);
+				}
+			}
+		});
+
+
+		// Process event call backs
+		for(int i = 0; i < this.eventCallBacks.size(); i++) {
+			this.eventCallBacks.get(i).processEvent(event.getTrigger(), eventArea, event);
+		}
+
+
+		// FIXME: Debug
+//    	System.out.println("DefaultChartMouseListener.chartMouseClicked(): call backs count: " + eventCallBacks.size());
+//        System.err.println("DefaultChartMouseListener.chartMouseClicked(): click count: " + event.getTrigger().getClickCount());
+//        System.err.println("DefaultChartMouseListener.chartMouseClicked(): entity type: " + entity);
+
+	}
+
+	@Override
+	public void chartMouseMoved(ChartMouseEvent event) {
+
+		// Mouse over selection
+		ChartEntity entity = event.getEntity();
+
+		Plot plot = ((ChartPanel) this.chartComponent).getChart().getPlot();
+
+		IItemSelectionRenderer renderer = null;
+
+		if(plot instanceof XYPlot) {
+			renderer = (IItemSelectionRenderer) ((XYPlot) plot).getRenderer();
+		}
+		else if(plot instanceof CategoryPlot)	{
+			renderer = (IItemSelectionRenderer) ((CategoryPlot) plot).getRenderer();
+		}
+
+		int series = -1;
+		int item = -1;
+
+		// Mouse over, storing the current selected entity on mouse over
+		if(entity instanceof XYItemEntity || entity instanceof CategoryItemEntity) {
+
+			// XY plot
+			if(entity instanceof XYItemEntity)	{
+				XYItemEntity itemEntity = (XYItemEntity) entity;
+				series = itemEntity.getSeriesIndex();
+				item = itemEntity.getItem();
+			}
+			// Category plot
+			else if(entity instanceof CategoryItemEntity)	{
+				CategoryItemEntity itemEntity = (CategoryItemEntity) entity;
+				CategoryDataset dataset = itemEntity.getDataset();
+				series = dataset.getRowIndex(itemEntity.getRowKey());
+				item = dataset.getColumnIndex(itemEntity.getColumnKey());
+			}
+
+			// Storing shape coordinates
+			renderer.getItemsSelector().setMouseOverItemCoords(entity.getArea().getBounds().x, entity.getArea().getBounds().y);
+
+
+		}
+
+		renderer.getItemsSelector().setMouseOverItem(series, item);
+
+	}
+
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/events/DefaultChartMouseListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/base/swing/ItemSelectionChartPanel.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/base/swing/ItemSelectionChartPanel.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/base/swing/ItemSelectionChartPanel.java	(revision 114)
@@ -0,0 +1,295 @@
+/**
+ *
+ */
+package org.txm.chartsengine.jfreechart.rcp.themes.base.swing;
+
+import java.awt.Component;
+import java.awt.Insets;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+import org.jfree.chart.ChartMouseEvent;
+import org.jfree.chart.ChartPanel;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.entity.ChartEntity;
+import org.jfree.chart.entity.EntityCollection;
+import org.jfree.chart.plot.CategoryPlot;
+import org.jfree.chart.plot.Pannable;
+import org.jfree.chart.plot.Plot;
+import org.jfree.chart.plot.XYPlot;
+import org.txm.chartsengine.jfreechart.core.JFCChartsEngine;
+import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
+import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
+import org.txm.chartsengine.jfreechart.rcp.events.DefaultChartMouseListener;
+import org.txm.chartsengine.jfreechart.rcp.themes.highcharts.events.FCAChartMouseListener;
+import org.txm.chartsengine.jfreechart.rcp.themes.highcharts.events.JFCItemsKeyboardSelectionCallBack;
+import org.txm.chartsengine.rcp.IChartComponent;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+import org.txm.chartsengine.rcp.editors.ChartEditorPart;
+import org.txm.chartsengine.rcp.events.AbstractChartMouseListener;
+import org.txm.chartsengine.rcp.events.ChartKeyListener;
+import org.txm.utils.OSDetector;
+
+
+
+/**
+ * @author sjacquot
+ *
+ */
+public class ItemSelectionChartPanel extends ChartPanel implements IChartComponent {
+
+	
+	/**
+	 * Default modifier key mask used for pan by JFC chart panel.
+	 */
+	public static int defaultPanMouseModifierKeyMask = MouseEvent.CTRL_DOWN_MASK; // Default mask for Windows and Linux
+
+
+	/**
+	 * Define the modifier keys for Mac Os X.
+	 */
+	static	{
+		if (OSDetector.isFamilyMac()) { 
+			defaultPanMouseModifierKeyMask = MouseEvent.ALT_DOWN_MASK;
+		}
+	}
+
+	
+	
+	/**
+	 * The parent editor.
+	 */
+	protected ChartEditorPart editor;
+
+
+	
+	/**
+	 * The linked SWT Charts Component Provider.
+	 */
+	protected SWTChartsComponentsProvider swtChartsComponentProvider;
+
+
+	
+	/**
+	 * @param chart
+	 */
+	public ItemSelectionChartPanel(SWTChartsComponentsProvider swtChartsComponentProvider, JFreeChart chart) {
+		super(chart);
+		this.swtChartsComponentProvider = swtChartsComponentProvider;
+	}
+
+	
+	/**
+	 * Resets the view.
+	 */
+	public void resetView()	{
+		this.restoreAutoBounds();
+
+		// Unit axis ratio constraint for FCA chart
+		if(this.getChart().getPlot() instanceof XYPlot && this.getChart().getXYPlot().getRenderer() instanceof FCAItemSelectionRenderer)	{
+			this.squareOffGraph();
+		}
+	}
+
+	
+	@Override
+	public void zoom(double x, double y, boolean zoomIn) {
+		if(zoomIn)	{
+			this.zoomInBoth(x, y);
+		}
+		else	{
+			this.zoomOutBoth(x, y);
+		}
+	}
+
+
+	@Override
+	public void pan(double srcX, double srcY, double dstX, double dstY, double panFactor) {
+		
+		Pannable p = (Pannable)this.getChart().getPlot();
+
+		if(dstX < 0)	 {
+		    p.panDomainAxes(-panFactor, null, new Point2D.Double(0, 0));
+		}
+		else if(dstX > 0)	{
+		    p.panDomainAxes(panFactor, null, new Point2D.Double(0, 0));
+		}
+		else if(dstY < 0)	{
+            p.panRangeAxes(-panFactor, null, new Point2D.Double(0, 0));
+		}
+		else if(dstY > 0)	 {
+            p.panRangeAxes(panFactor, null, new Point2D.Double(0, 0));
+		}
+	}
+	
+	
+	/**
+	 * Initialize event listeners.
+	 */
+	public void initEventListeners()	{
+
+		ChartKeyListener chartKeyListener = new ChartKeyListener(this.swtChartsComponentProvider, this, 0.009);
+		// register default items keyboard selection call back
+		chartKeyListener.registerEventCallBack(new JFCItemsKeyboardSelectionCallBack());
+		
+		this.addKeyListener(chartKeyListener);
+	}
+
+
+	/**
+	 * Initializes the listeners for items selection support.
+	 */
+	public void initItemSelectionListeners()	{
+		// Listeners according to the plot type
+		if(this.getChart() != null)	{
+			Plot plot = this.getChart().getPlot();
+			// XY plots
+			if(plot instanceof XYPlot)	{
+				// FCA
+				if(((XYPlot)plot).getRenderer() instanceof FCAItemSelectionRenderer)	{
+
+					this.addChartMouseListener(new FCAChartMouseListener(this.swtChartsComponentProvider, this));
+
+					// Axis unit square ratio constraint
+					this.squareOffGraph();
+
+					// Axis unit square ratio constraint on resize
+					this.addComponentListener(new ComponentListener() {
+
+						@Override
+						public void componentShown(ComponentEvent arg0) {
+							// TODO Auto-generated method stub
+						}
+
+						@Override
+						public void componentResized(ComponentEvent e) {
+							((JFCChartsEngine) swtChartsComponentProvider.getChartsEngine()).squareOffGraph(getChart(), ((Component) e.getSource()).getWidth(), ((Component) e.getSource()).getHeight());
+						}
+
+						@Override
+						public void componentMoved(ComponentEvent arg0) {
+							// TODO Auto-generated method stub
+						}
+
+						@Override
+						public void componentHidden(ComponentEvent arg0) {
+							// TODO Auto-generated method stub
+						}
+					});
+
+				}
+				// Others XY plots
+				else if(((XYPlot)plot).getRenderer() instanceof IItemSelectionRenderer)	{
+					this.addChartMouseListener(new DefaultChartMouseListener(this.swtChartsComponentProvider, this));
+				}
+			}
+			// Category plot
+			else if (plot instanceof CategoryPlot && ((CategoryPlot)plot).getRenderer() instanceof IItemSelectionRenderer)	{
+				this.addChartMouseListener(new DefaultChartMouseListener(this.swtChartsComponentProvider, this));
+			}
+		}
+	}
+
+
+	@Override
+    public void mousePressed(MouseEvent event) {
+
+		// Simulate a mouse event to enable the pan with right mouse button + drag rather than the original behavior
+		// FIXME: we need to redefine ChartPanel to do that in a better way and/or to add other functionalities later
+		int mods = event.getModifiers();
+		if((mods & AbstractChartMouseListener.mouseMultipleSelectionModifierKeyMask) != AbstractChartMouseListener.mouseMultipleSelectionModifierKeyMask 
+				&& (mods & MouseEvent.BUTTON1_MASK) == MouseEvent.BUTTON1_MASK) {
+			MouseEvent fakeEvent = new MouseEvent(event.getComponent(), event.getID(), event.getWhen(), defaultPanMouseModifierKeyMask, event.getX(), event.getY(), event.getClickCount(), event.isPopupTrigger());
+			super.mousePressed(fakeEvent);
+		}
+		// FIXME: uncomment this code restores the scaling/zooming by rectangle selection. This code is commented because JFC do not use modifier key for
+		// this but TXM specifications say to use CTRL/CMD key modifier. The best solution seems to, again, redefine the ChartPanel class.
+//		else	{
+//			super.mousePressed(event);
+//		}
+
+
+		// FIXME: this bug #993#17 has only been noticed on a VM (Mac OS X 10.9.4) and may be linked to a mouse VM compatibility, that's why this code is commented at this moment
+		// Fix #993#17, the points selection from the chart component does not work on Mac OS X + Java 1.6
+		// Manually fire a ChartMouseEvent
+//		if(System.getProperty("os.name").toLowerCase().indexOf("mac") >= 0)	{
+//			ChartRenderingInfo info = this.getChartRenderingInfo();
+//
+//			ChartEntity entity = null;
+//		    if (info != null) {
+//		        EntityCollection entities = info.getEntityCollection();
+//		        if (entities != null) {
+//		            entity = entities.getEntity(event.getX(), event.getY());
+//		        }
+//		    }
+//		    ChartMouseEvent chartEvent = new ChartMouseEvent(getChart(), event, entity);
+//
+//		    EventListener[] listeners = this.getListeners(ChartMouseListener.class);
+//		    for (int i = listeners.length - 1; i >= 0; i -= 1) {
+//		        ((ChartMouseListener) listeners[i]).chartMouseClicked(chartEvent);
+//		    }
+//		}
+
+    }
+
+	/**
+	 * Creates and returns a chart mouse event according to the specified AWT mouse event.
+	 * A chart mouse event contains the selected chart entity.
+	 * @param event
+	 * @return
+	 */
+	public ChartMouseEvent getChartMouseEvent(MouseEvent event)	{
+	       Insets insets = getInsets();
+	        int x = (int) ((event.getX() - insets.left) / this.getScaleX());
+	        int y = (int) ((event.getY() - insets.top) / this.getScaleY());
+
+	        this.setAnchor(new Point2D.Double(x, y));
+	        if (this.getChart() == null) {
+	            return null;
+	        }
+	        this.getChart().setNotify(true);  // force a redraw
+
+	        ChartEntity entity = null;
+	        if (this.getChartRenderingInfo() != null) {
+	            EntityCollection entities = this.getChartRenderingInfo().getEntityCollection();
+	            if (entities != null) {
+	                entity = entities.getEntity(x, y);
+	            }
+	        }
+	        
+	        return new ChartMouseEvent(this.getChart(), event, entity);
+	}
+	
+	/**
+	 *  Constrains axes ticks to square aspect ratio.
+	 */
+	public void squareOffGraph()	{
+		((JFCChartsEngine) this.swtChartsComponentProvider.getChartsEngine()).squareOffGraph(this.getChart(), this.getWidth(), this.getHeight());
+	}
+
+
+	@Override
+	public ChartEditorPart getChartEditor() {
+		return this.editor;
+	}
+
+	@Override
+	public void setChartEditor(ChartEditorPart editor) {
+		this.editor = editor;
+	}
+
+
+	@Override
+	public void updateMouseOverItem(MouseEvent event) {
+		DefaultChartMouseListener listener = (DefaultChartMouseListener) this.editor.getComposite().getMouseCallBackHandler();
+		if(listener != null)	{
+			// FIXME: Fire chart mouse event to mouse over select chart item before displaying the context menu
+			//listener.chartMouseMoved(((ItemSelectionChartPanel)this.editor.getComposite().getChartComponent()).getChartMouseEvent(event));
+			// Fire chart mouse event to select chart item before displaying the context menu
+			listener.chartMouseClicked(((ItemSelectionChartPanel)this.editor.getComposite().getChartComponent()).getChartMouseEvent(event));
+		}
+	}
+
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/base/swing/ItemSelectionChartPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/events/JFCItemsKeyboardSelectionCallBack.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/events/JFCItemsKeyboardSelectionCallBack.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/events/JFCItemsKeyboardSelectionCallBack.java	(revision 114)
@@ -0,0 +1,69 @@
+/**
+ * 
+ */
+package org.txm.chartsengine.jfreechart.rcp.themes.highcharts.events;
+
+import java.awt.AWTEvent;
+import java.awt.event.KeyEvent;
+
+import org.jfree.chart.ChartPanel;
+import org.txm.chartsengine.jfreechart.core.renderers.MultipleItemsSelector;
+import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
+import org.txm.chartsengine.jfreechart.rcp.JFCChartsSwingComponentsProvider;
+import org.txm.chartsengine.rcp.events.ItemsKeyboardSelectionCallBack;
+import org.txm.chartsengine.rcp.events.ZoomAndPanCallBack;
+
+/**
+ * @author sjacquot
+ *
+ */
+public class JFCItemsKeyboardSelectionCallBack extends ItemsKeyboardSelectionCallBack {
+
+	
+	/**	
+	 * 
+	 */
+	public JFCItemsKeyboardSelectionCallBack() {
+		// TODO Auto-generated constructor stub
+	}
+
+	/* (non-Javadoc)
+	 * @see org.txm.rcp.chartsengine.base.events.EventCallBack#processEvent(java.awt.AWTEvent, int, java.lang.Object)
+	 */
+	@Override
+	public void processEvent(AWTEvent event, int eventArea, Object customData) {
+		
+		// TODO Auto-generated method stub
+		// Keyboard event
+		if(event instanceof KeyEvent)	{
+			
+			
+			KeyEvent keyEvent = (KeyEvent)event;
+
+			// return if zoom and pan modifier
+			if((keyEvent.getModifiers() & ZoomAndPanCallBack.keyboardZoomModifierKeyMask) != 0) {
+				return;
+			}
+			
+			boolean extendedSelection = false;
+			
+			// Extended selection
+			if((keyEvent.getModifiers() & keyboardExtendedSelectionModifierKeyMask) != 0) {
+				extendedSelection = true;
+			}
+			
+			if(keyEvent.getKeyCode() == KeyEvent.VK_LEFT || keyEvent.getKeyCode() == KeyEvent.VK_RIGHT)	{
+				IItemSelectionRenderer renderer = (IItemSelectionRenderer) JFCChartsSwingComponentsProvider.getRenderer((ChartPanel) customData);
+				
+				// Select next item or add it to selection
+				if(keyEvent.getKeyCode() == KeyEvent.VK_RIGHT)	{
+					((MultipleItemsSelector)renderer.getItemsSelector()).selectNextItem(extendedSelection);
+				}
+				else if(keyEvent.getKeyCode() == KeyEvent.VK_LEFT)	{
+					((MultipleItemsSelector)renderer.getItemsSelector()).selectPreviousItem(extendedSelection);
+				}
+			}
+		}
+	}
+
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/events/JFCItemsKeyboardSelectionCallBack.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/events/FCAChartMouseListener.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/events/FCAChartMouseListener.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/events/FCAChartMouseListener.java	(revision 114)
@@ -0,0 +1,63 @@
+package org.txm.chartsengine.jfreechart.rcp.themes.highcharts.events;
+
+import org.jfree.chart.ChartMouseEvent;
+import org.txm.chartsengine.jfreechart.rcp.events.DefaultChartMouseListener;
+import org.txm.chartsengine.rcp.IChartComponent;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+
+/**
+ * Mouse listener for CA Factorial Map chart.
+ * @author sjacquot
+ *
+ */
+public class FCAChartMouseListener extends DefaultChartMouseListener {
+
+
+
+	/**
+	 *
+	 * @param chartPanel
+	 */
+	public FCAChartMouseListener(SWTChartsComponentsProvider swtChartsComponentProvider, IChartComponent chartComponent) {
+		super(swtChartsComponentProvider, chartComponent);
+	}
+
+
+	@Override
+	public void chartMouseClicked(ChartMouseEvent event) {
+        super.chartMouseClicked(event);
+        
+		// FIXME: pop up menu tests
+//		ChartEntity entity = event.getEntity();
+//
+//		// Only if the AWT embedded Frame has focus
+//		//if(this.chartPanelHasFocus())	{
+//
+//			if (entity instanceof XYItemEntity) {
+//
+//				// FIXME : tests popup menu sur un point
+//				System.out.println("ScatterPlotDemo1.CAChartMouseListener.chartMouseClicked()");
+//				//this.renderer.setHighlightedItem(-1, -1);
+//
+//
+//				// Récupération des infos liées à l'item via le dataset
+//				FCAXYDataset dataset = (FCAXYDataset) ((XYItemEntity) entity).getDataset();
+//				String label = dataset.getLabel(((XYItemEntity) entity).getSeriesIndex(), ((XYItemEntity) entity).getItem());
+//				String frequency = dataset.getFrequency(((XYItemEntity) entity).getSeriesIndex(), ((XYItemEntity) entity).getItem());
+//
+//				JPopupMenu menu = new JPopupMenu();
+//				menu.add(new JLabel(" - " + label + " - "));
+//				menu.add(new JMenuItem("Frequency : " + String.valueOf(Math.abs(Double.valueOf(frequency)))));
+//
+//
+//				menu.show(this.chartComponent, event.getTrigger().getX(), event.getTrigger().getY());
+//
+//			    return;
+//			  }
+//		//}
+	}
+
+
+
+
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/events/FCAChartMouseListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/swing/CustomChartPanel.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/swing/CustomChartPanel.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/swing/CustomChartPanel.java	(revision 114)
@@ -0,0 +1,101 @@
+package org.txm.chartsengine.jfreechart.rcp.themes.highcharts.swing;
+
+import java.awt.Color;
+
+import javax.swing.JToolTip;
+
+import org.jfree.chart.JFreeChart;
+import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
+import org.txm.chartsengine.jfreechart.rcp.themes.base.swing.ItemSelectionChartPanel;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+
+/**
+ * Chart panel providing custom tool tips with Highcharts graphics theme.
+ * @author sjacquot
+ *
+ */
+public class CustomChartPanel extends ItemSelectionChartPanel {
+
+
+
+	/**
+	 *
+	 * @param chart
+	 */
+	public CustomChartPanel(SWTChartsComponentsProvider swtChartsComponentProvider, JFreeChart chart) {
+		super(swtChartsComponentProvider, chart);
+
+
+		// Set the zoom factors that will be used on key pressed zoom (this value is not use by the internal JFC mouse wheel zoom)
+		this.setZoomInFactor(0.9);
+		this.setZoomOutFactor(1.1);
+
+
+		this.initItemSelectionListeners();
+
+		this.initEventListeners();
+
+
+
+		// Dimensions
+        //chartPanel.setPreferredSize(new java.awt.Dimension(750, 550));
+		// TODO : DEbug
+        //chartPanel.setPreferredSize(new java.awt.Dimension(1024, 768));
+
+		// TODO : test this to keep fonts readable despite of window size
+//		chartPanel.setMinimumDrawWidth(400);
+		this.setMaximumDrawWidth(100000);
+//		chartPanel.setMinimumDrawHeight(400);
+		this.setMaximumDrawHeight(100000);
+
+
+		//this.setHorizontalAxisTrace(true);
+
+        // Mouse wheel zoom
+        this.setMouseWheelEnabled(true);
+
+
+		// FIXME: test mouse wheel listener for improving the zoom, for sticking axes to the chart
+		//this.removeMouseWheelListener(this.getMouseWheelListeners()[0]);
+//        this.addMouseWheelListener(new MouseWheelListener() {
+//
+//			@Override
+//			public void mouseWheelMoved(MouseWheelEvent e) {
+//				// TODO Auto-generated method stub
+//				if(getChart().getPlot() instanceof XYPlot)	{
+//					//System.out.println("CustomChartPanel.CustomChartPanel(...).new MouseWheelListener() {...}.mouseWheelMoved(): " + getChart().getXYPlot().getDomainAxisEdge().getInsets());
+//
+//
+//					//getChart().getXYPlot().setAxisOffset(new RectangleInsets(0, 0, 0, 0));
+//					//((NumberAxis) getChart().getXYPlot().getDomainAxis()).setAutoRangeStickyZero(true);
+//					getChart().getXYPlot().getDomainAxis().setTickLabelInsets(new RectangleInsets(10, 0, getChart().getXYPlot().getDomainAxis().getTickLabelInsets().getBottom() + 10 * getZoomOutFactor(), 0));
+//				}
+//			}
+//		});
+
+
+
+        //this.setMouseZoomable(true); // useless ?
+        this.setZoomOutlinePaint(Color.BLUE);
+        this.setFillZoomRectangle(false); // TODO : ne fonctionne pas ? En fait ne fonctionne pas si l'appel est avant setMouseZoomable(true) ?
+
+
+        // Tooltips
+        this.setInitialDelay(500);
+
+        // Disable the Swing original pop up menu
+        this.setPopupMenu(null);
+	}
+
+
+	@Override
+	public JToolTip createToolTip() {
+		JToolTip tip = new CustomHTMLToolTip(this.getChart(), true);
+		// TODO
+		tip.setComponent(this);
+		tip.setVisible(true);
+        return tip;
+	}
+
+
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/swing/CustomChartPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/HighchartsDefaultTheme.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/HighchartsDefaultTheme.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/HighchartsDefaultTheme.java	(revision 114)
@@ -0,0 +1,34 @@
+/**
+ * 
+ */
+package org.txm.chartsengine.jfreechart.rcp.themes.highcharts;
+
+import org.jfree.chart.ChartPanel;
+import org.jfree.chart.JFreeChart;
+import org.txm.chartsengine.jfreechart.rcp.themes.highcharts.swing.CustomChartPanel;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+
+
+
+/**
+ * @author sjacquot
+ *
+ */
+public class HighchartsDefaultTheme extends org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.HighchartsDefaultTheme {
+
+	/**
+	 * 
+	 */
+	public HighchartsDefaultTheme() {
+		super();
+	}
+
+	
+   @Override
+	public ChartPanel createChartPanel(Object swtChartsComponentProvider, JFreeChart chart)	{
+    	return new CustomChartPanel((SWTChartsComponentsProvider) swtChartsComponentProvider, chart);
+	}
+
+	    
+	
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/highcharts/HighchartsDefaultTheme.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCSWTChartsComponentsProvider.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCSWTChartsComponentsProvider.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCSWTChartsComponentsProvider.java	(revision 114)
@@ -0,0 +1,287 @@
+package org.txm.chartsengine.jfreechart.rcp;
+
+import java.awt.Insets;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.io.File;
+import java.util.ArrayList;
+
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Composite;
+import org.jfree.chart.ChartPanel;
+import org.jfree.chart.ChartTransferable;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.plot.CategoryPlot;
+import org.jfree.chart.plot.Plot;
+import org.jfree.chart.plot.XYPlot;
+import org.txm.chartsengine.core.ChartCreator;
+import org.txm.chartsengine.core.ChartsEngine;
+import org.txm.chartsengine.jfreechart.core.JFCChartsEngine;
+import org.txm.chartsengine.jfreechart.core.renderers.MouseOverItemSelector;
+import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
+import org.txm.chartsengine.jfreechart.rcp.swt.JFCComposite;
+import org.txm.chartsengine.jfreechart.rcp.themes.highcharts.HighchartsDefaultTheme;
+import org.txm.chartsengine.rcp.IChartComponent;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+import org.txm.chartsengine.rcp.editors.ChartEditorInput;
+import org.txm.chartsengine.rcp.editors.ChartEditorPart;
+import org.txm.chartsengine.rcp.swt.ChartComposite;
+import org.txm.functions.TXMResult;
+
+
+/**
+ * JFreeChart charts component provider implementation.
+ * @author sjacquot
+ *
+ */
+public class JFCSWTChartsComponentsProvider extends SWTChartsComponentsProvider {
+
+
+	/**
+	 * The Swing component provider.
+	 */
+	protected JFCChartsSwingComponentsProvider swingComponentsProvider;
+
+	
+	
+	
+	public JFCSWTChartsComponentsProvider() {
+		super();
+	}
+	
+	
+	@Override
+	public void setChartsEngine(ChartsEngine chartsEngine)	{
+		super.setChartsEngine(chartsEngine);
+		// Redefine the TBX theme to manage UI
+		((JFCChartsEngine) chartsEngine).setTheme(new HighchartsDefaultTheme());
+		this.swingComponentsProvider = new JFCChartsSwingComponentsProvider(this, (JFCChartsEngine) chartsEngine);;
+	}
+	
+
+//	@Override
+//	public ChartEditorPart createChartEditor(String editorInputName, TXMResult resultData, String preferencesNode, String chartType)	{
+//		ChartCreator chartCreator = this.getChartsEngine().getChartCreator(resultData.getClass(), chartType);
+//		ChartEditorPart editor = null;
+//		if(chartCreator != null)	{
+//			JFreeChart chart = (JFreeChart) chartCreator.createChart(resultData, preferencesNode); 
+//			ChartPanel chartPanel = this.getChartsEngine().getTheme().createChartPanel(this, chart);
+//					
+//			editor = new ChartEditorPart(this, editorInputName, resultData, preferencesNode, chartType, chartPanel);
+//			
+//			// update for shared preferences, show title, show legend, colors rendering mode, etc. 
+//			chartCreator.updateChart(chart, resultData, preferencesNode);;
+//		
+//			// sets and updates the local preferences node qualifier from the result data
+//			editor.getEditorInput().syncLocalPreferencesNode();
+//		}
+//		return editor;
+//	}
+
+
+	
+	@Override
+	public boolean createChart(ChartsEngine chartsEngine, ChartEditorInput chartEditorInput, TXMResult resultData, String preferencesNode, String chartType)	{
+		ChartCreator chartCreator = chartsEngine.getChartCreator(resultData.getClass(), chartType);
+		if(chartCreator != null)	{
+			JFreeChart chart = (JFreeChart) chartCreator.createChart(resultData, preferencesNode); 
+			ChartPanel chartPanel = ((JFCChartsEngine) chartsEngine).getTheme().createChartPanel(this, chart);
+			chartEditorInput.setChartContainer(chartPanel);
+			
+			// update for shared preferences, show title, show legend, colors rendering mode, etc.
+			chartCreator.updateChart(chart, resultData, preferencesNode);
+
+			// sets and updates the local preferences node qualifier from the result data
+			chartEditorInput.syncLocalPreferencesNode();
+			
+			return true;
+		}
+		return false;
+	}
+	
+	
+	
+	
+//
+//	@Override
+//	public ChartEditorPart createCAFactorialMapChartEditorPart(CA ca) {
+//		ChartPanel chartPanel = this.swingComponentsProvider.createCAFactorialMapChartPanel(ca);
+//		// Update the limits border
+//		JFCChartsEngine.createCAFactorialMapChartLimitsBorder(chartPanel.getChart());
+//
+//		ChartEditorPart chartEditor = new CAFactorialMapChartEditor(new JFCChartEditorInput(this, chartPanel, ca)); //$NON-NLS-1$
+//
+//		return chartEditor;
+//	}
+//
+//	@Override
+//	public ChartEditorPart createCASingularValuesBarChartEditorPart(CA ca) {
+//		return new JFCChartEditorPart(this, this.swingComponentsProvider.createCASingularValuesBarChartChartPanel(ca), Messages.CorrespondanceAnalysisEditorInput_2, null);
+//	}
+//
+//	@Override
+//	public ChartEditorPart createCAHChartEditorPart(Image titleImage, CAH cah) {
+//		ChartPanel chartPanel = this.swingComponentsProvider.createCAHChartPanel(cah, true);
+//		ChartEditorPart chartEditor = new CAHChartEditor(new JFCChartEditorInput(this, chartPanel, Messages.bind(Messages.CAHEditor_PART_NAME_PREFIX, cah.getName()) , titleImage, cah));
+//		return chartEditor;
+//	}
+
+	@Override
+	public JFCChartsEngine getChartsEngine()	{
+		return (JFCChartsEngine) this.chartsEngine;
+	}
+
+
+//	@Override
+//	public ChartEditorPart createDimensionsPartitionChartEditorPart(Image titleImage, Partition partition, boolean sortPartsBySize) {
+//		return new JFCChartEditorPart(this, this.swingComponentsProvider.createDimensionsPartitionBarChartChartPanel(partition, sortPartsBySize), Messages.bind(Messages.PartsSize_18, partition.getName()), titleImage, partition);
+//	}
+
+
+//	@Override
+//	public ChartEditorPart createSpecificitiesChartEditorPart(SpecificitesResult specificitiesResult, boolean transpose, boolean drawBars, boolean drawLines, float banalite, boolean monochrome) {
+//		return new JFCChartEditorPart(this, this.swingComponentsProvider.createSpecificitiesChartPanel(specificitiesResult, transpose,
+//				drawBars, drawLines, banalite, monochrome), Messages.SpecificitiesTableEditor_16 + specificitiesResult.getName(), specificitiesResult);
+//	}
+//
+
+
+	@Override
+	public ChartComposite createComposite(ChartEditorPart chartEditor, Composite parent)	{
+		return JFCSWTChartsComponentsProvider.createCompositeStatic(chartEditor, parent);
+	}
+
+
+	/**
+	 * Creates the chart drawing area composite.
+	 * @param chartEditor
+	 * @param parent
+	 * @return
+	 */
+	public static JFCComposite createCompositeStatic(ChartEditorPart chartEditor, Composite parent)	{
+
+
+		ChartPanel chartPanel = null;
+		// Get the chart panel from the editor input if exists
+		if(chartEditor.getEditorInput() instanceof ChartEditorInput && chartEditor.getEditorInput().getChartContainer() != null)	{	
+			chartPanel = (ChartPanel) chartEditor.getEditorInput().getChartContainer();
+		}
+		// Create a default empty chart panel
+		else	{
+
+			chartPanel = ((JFCSWTChartsComponentsProvider)SWTChartsComponentsProvider.getCurrent()).swingComponentsProvider.createDefaultEmptyChartPanel();
+			chartEditor.getEditorInput().setChartContainer(chartPanel);
+			
+			// FIXME: tests for using user extended ChartEditorPart and user extend ChartEditorInput instead of base classes
+//			JFreeChart chart = (JFreeChart) this.getChartsEngine().getChartCreator(resultData.getClass(), chartType).createChart(resultData, params); 
+//			chartPanel = ((JFCChartsEngine) chartEditor.getSWTChartComponentsProvider().getChartsEngine()).getTheme().createChartPanel(chartEditor.getSWTChartComponentsProvider(), chart);
+//			chartEditor.getEditorInput().setChartContainer(chartPanel);
+			
+		}
+		
+		JFCComposite composite = new JFCComposite(chartEditor, parent, chartPanel);
+		((IChartComponent) chartPanel).setChartEditor(chartEditor);
+
+		
+		FormData formData = new FormData();
+		//formData.top = new FormAttachment(chartEditor.getToolBar());
+		formData.top = new FormAttachment(chartEditor.getParametersComposite());
+		formData.bottom = new FormAttachment(100);
+		formData.left = new FormAttachment(0);
+		formData.right = new FormAttachment(100);
+		composite.setLayoutData(formData);
+
+		// Link the composite to the chart editor (need to be done before initializing the AWT delegation events)
+		chartEditor.setComposite(composite);
+
+		// Initialize Swing/AWT events
+		SWTChartsComponentsProvider.initializeAWTDelegationListeners(chartEditor, chartPanel);
+
+		
+		return composite;
+	}
+
+	
+	@Override
+	public void copyChartToClipboard(Object chartComponent) {
+		ChartPanel panel = (ChartPanel) chartComponent;
+		Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+		Insets insets = panel.getInsets();
+		int w = panel.getWidth() - insets.left - insets.right;
+		int h = panel.getHeight() - insets.top - insets.bottom;
+		ChartTransferable selection = new ChartTransferable(panel.getChart(), w, h, panel.getMinimumDrawWidth(), panel.getMinimumDrawHeight(), panel.getMaximumDrawWidth(), panel.getMaximumDrawHeight(), true);
+		systemClipboard.setContents(selection, null);
+	}
+
+//	@Override
+//	public ChartEditorPart createProgressionChartEditorPart(Image titleImage, Progression progression, boolean monochrome, boolean monostyle, boolean doCumulative) {
+//		return new JFCChartEditorPart(this, this.swingComponentsProvider.createProgressionChartPanel(progression, monochrome, monostyle, doCumulative), progression.getCorpus().getName() + ": " + progression.getName(), titleImage, progression);
+//	}
+
+
+	@Override
+	public ArrayList<String> getEditorSupportedExportFileFormats()	{
+		return this.chartsEngine.getSupportedOutputFileFormats();
+	}
+
+
+	@Override
+	public ArrayList<String> getChartsEngineSupportedExportFileFormats() {
+		return this.chartsEngine.getSupportedOutputFileFormats();
+	}
+
+
+	@Override
+	public File exportView(ChartEditorPart chartEditor, File file, String fileFormat) {
+		return JFCSWTChartsComponentsProvider.exportViewStatic(chartEditor, file, fileFormat);
+	}
+
+	/**
+	 * Exports the current view of chart editor in the specified file.
+	 * @param chartEditor
+	 * @param file
+	 * @param fileFormat
+	 * @return
+	 */
+	public static File exportViewStatic(ChartEditorPart chartEditor, File file, String fileFormat) {
+
+		JFCComposite composite = (JFCComposite) chartEditor.getComposite();
+
+		// Disable the item selection to not export the on over item modification
+		MouseOverItemSelector mouseOverItemSelector = null;
+		Plot plot = composite.getChart().getPlot();
+		if(plot instanceof XYPlot)	 {
+	    	 XYPlot typedPlot = (XYPlot)plot;
+	    	 mouseOverItemSelector = ((IItemSelectionRenderer) typedPlot.getRenderer()).getItemsSelector();
+	   	}
+	   	else if(plot instanceof CategoryPlot)	 {
+	    	CategoryPlot typedPlot = (CategoryPlot)plot;
+	    	mouseOverItemSelector = ((IItemSelectionRenderer) typedPlot.getRenderer()).getItemsSelector();
+	   	}
+		if(mouseOverItemSelector != null)	{
+			mouseOverItemSelector.setActive(false);
+		}
+
+		// Export the chart
+		file = JFCChartsEngine.export(composite.getChart(), file, fileFormat, composite.getChartPanel().getWidth(), composite.getChartPanel().getHeight());
+
+		// Enable back the item selection
+		if(mouseOverItemSelector != null)	{
+			mouseOverItemSelector.setActive(true);
+		}
+
+		return file;
+	}
+
+
+	/**
+	 * @return the swingComponentsProvider
+	 */
+	public JFCChartsSwingComponentsProvider getSwingComponentsProvider() {
+		return swingComponentsProvider;
+	}
+
+	
+	
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCSWTChartsComponentsProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorPart.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorPart.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorPart.java	(revision 114)
@@ -0,0 +1,67 @@
+package org.txm.chartsengine.jfreechart.rcp.editors;
+
+import org.jfree.chart.JFreeChart;
+import org.txm.chartsengine.jfreechart.rcp.swt.JFCComposite;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+import org.txm.chartsengine.rcp.editors.ChartEditorInput;
+import org.txm.chartsengine.rcp.editors.ChartEditorPart;
+import org.txm.functions.TXMResult;
+
+/**
+ * Base JFreeChart <code>EditorPart</code> containing an SWT <code>JFCComposite</code> and a JFreeChart Swing <code>ChartPanel</code>.
+ * @author sjacquot
+ *
+ */
+public class ___JFCChartEditorPart extends ChartEditorPart {
+	
+	/**
+	 * The <code>EditorPart</code> ID constant. 
+	 */
+	protected static final String ID =  ___JFCChartEditorPart.class.getCanonicalName();
+	
+
+	/**
+	 * Creates an empty <code>JFCChartEditorPart</code>.
+	 */
+	public ___JFCChartEditorPart() {
+		super();
+	}
+
+	
+	
+	/**
+	 * Creates an <code>JFCChartEditorPart</code> containing the specified <code>ChartPanel</code>.
+	 * @param swtComponentsProvider
+	 * @param chartPanel
+	 * @param chartEditorInput
+	 * @param editorInputName
+	 * @param titleImage
+	 * @param resultData
+	 */
+	public ___JFCChartEditorPart(SWTChartsComponentsProvider swtComponentsProvider, ChartEditorInput chartEditorInput, String editorInputName, TXMResult resultData) {
+		this.setInput(chartEditorInput);
+		this.setPartName(editorInputName);
+	}
+	
+	
+	@Override
+	public String getID()	{
+		return ID;
+	}
+
+
+	@Override
+	public JFCComposite getComposite() {
+		return (JFCComposite) this.chartComposite;
+	}
+	
+	/**
+	 * Gets the chart.
+	 * @return the chart
+	 */
+	public JFreeChart getChart()	{
+		return ((JFCComposite) this.chartComposite).getChart();
+	}
+
+	
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorPart.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorInput.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorInput.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorInput.java	(revision 114)
@@ -0,0 +1,61 @@
+package org.txm.chartsengine.jfreechart.rcp.editors;
+
+import org.jfree.chart.ChartPanel;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+import org.txm.chartsengine.rcp.editors.ChartEditorInput;
+import org.txm.functions.TXMResult;
+
+/**
+ * JFreeChart <code>IEditorInput</code> implementation.
+ * @author sjacquot
+ *
+ */
+public class ___JFCChartEditorInput extends ChartEditorInput {
+
+	
+	/**
+	 * The Swing <code>ChartPanel</code>.
+	 */
+	//protected ChartPanel chartPanel;
+
+
+	
+	/**	
+	 * Creates an <code>IEditorInput</code> containing the specified <code>ChartPanel</code>.
+	 * @param chartPanel the Swing <code>ChartPanel</code>.
+	 */
+	public ___JFCChartEditorInput(SWTChartsComponentsProvider swtComponentsProvider, ChartPanel chartPanel, TXMResult resultData, String preferencesNodeQualifier, String chartType) {
+		this(swtComponentsProvider, chartPanel, "JFreeChart chart editor input", resultData, preferencesNodeQualifier, chartType);
+	}
+
+	
+	/**
+	 * Creates an <code>IEditorInput</code> containing the specified <code>ChartPanel</code> and with the specified name and tile image.
+	 * @param chartPanel the Swing <code>ChartPanel</code>.
+	 * @param name the name
+	 * @param titleImage the title image
+	 */
+	public ___JFCChartEditorInput(SWTChartsComponentsProvider swtComponentsProvider, ChartPanel chartPanel, String name, TXMResult resultData, String preferencesNodeQualifier, String chartType) {
+		super(swtComponentsProvider, name, resultData, preferencesNodeQualifier, chartType, chartPanel);
+//		this.chartPanel = chartPanel;
+	}
+
+//	/**
+//	 * Creates an <code>IEditorInput</code> containing the specified <code>ChartPanel</code> and with the specified name.
+//	 * @param chartPanel the Swing <code>ChartPanel</code>.
+//	 * @param name the name
+//	 */
+//	public ___JFCChartEditorInput(SWTChartsComponentsProvider swtComponentsProvider, ChartPanel chartPanel, String name, Object resultData) {
+//		this(swtComponentsProvider, chartPanel, name, null, resultData);
+//	}
+//	
+
+//	/**
+//	 * Gets the chart panel.
+//	 * @return the chartPanel
+//	 */
+//	public ChartPanel getChartPanel() {
+//		return chartPanel;
+//	}
+
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorInput.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/swt/JFCComposite.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/swt/JFCComposite.java	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/swt/JFCComposite.java	(revision 114)
@@ -0,0 +1,299 @@
+package org.txm.chartsengine.jfreechart.rcp.swt;
+
+import java.awt.BorderLayout;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.Panel;
+import java.util.EventListener;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.awt.SWT_AWT;
+import org.eclipse.swt.widgets.Composite;
+import org.jfree.chart.ChartMouseListener;
+import org.jfree.chart.ChartPanel;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.plot.XYPlot;
+import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
+import org.txm.chartsengine.jfreechart.rcp.themes.base.swing.ItemSelectionChartPanel;
+import org.txm.chartsengine.rcp.IChartComponent;
+import org.txm.chartsengine.rcp.editors.ChartEditorPart;
+import org.txm.chartsengine.rcp.events.EventCallBackHandler;
+import org.txm.chartsengine.rcp.swt.ChartComposite;
+
+/**
+ * JFreeChart SWT composite.
+ * @author sjacquot
+ *
+ */
+public class JFCComposite extends ChartComposite {
+
+
+	// For reducing resize flickering on Windows
+	static	{
+		try {
+			System.setProperty("sun.awt.noerasebackground", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		catch (NoSuchMethodError error) {
+		}
+	}
+
+
+
+
+	/**
+	 * Creates a JFreeChart composite.
+	 * @param parent
+	 * @param panel
+	 */
+	public JFCComposite(ChartEditorPart chartEditor, Composite parent, ChartPanel panel) {
+		super(chartEditor, parent, SWT.EMBEDDED | SWT.NO_BACKGROUND);
+		//super(parent, SWT.EMBEDDED | SWT.NO_MERGE_PAINTS | SWT.NO_BACKGROUND); // do not fix the transparency problem
+
+		this.chartComponent = (IChartComponent) panel;
+
+		// FIXME : transparency doesn't work with tool tips
+		// The problem here is that we normally need a JFrame but it seems to be impossible to embed a JFrame
+//		this.setBackgroundMode(SWT.INHERIT_FORCE); // do not fix
+//		panel.setOpaque(false); // do not fix
+//		ToolTipManager.sharedInstance().setLightWeightPopupEnabled(true); // do not fix
+
+		final Frame frame = SWT_AWT.new_Frame(this);
+
+
+
+		// To fix MAC OS X + Java 1.7/1.8 SWT_AWT BUG
+		// see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=418245#c12
+//		SwingUtilities.invokeLater(new Runnable() {
+//
+//
+//		   @Override
+//		   public void run() {
+
+
+
+
+			// Need to add an AWT Panel to fix mouse events and mouse cursors changes on Swing JPanel
+			Panel rootPanel = new Panel(new BorderLayout());
+			rootPanel.add(this.getChartPanel()); // commenter cette ligne pour le test de scrolling ci-dessous
+			frame.add(rootPanel);
+
+
+			// FIXME: test, smarter way to embed the frame ? Actually it doesn't fix neither the tooltip transparency nor the cursor change on pan under Mac OS X
+	//		// Need to add an AWT Panel to fix mouse events and mouse cursors changes on Swing JPanel
+	//		Panel rootPanel = new Panel(new BorderLayout());
+	////		rootPanel.add(this.chartPanel); // commenter cette ligne pour le test de scrolling ci-dessous
+	//		frame.add(rootPanel);
+	//		JRootPane rootPane = new JRootPane();
+	//		rootPanel.add(rootPane);
+	//		rootPane.getContentPane().add(this.chartPanel);
+
+
+
+			// FIXME: tests with a JApplet as Rootpane rather than Panel
+	//		JApplet rootPanel = new JApplet();
+	//		rootPanel.add(this.chartPanel); // commenter cette ligne pour le test de scrolling ci-dessous
+	//		frame.add(rootPanel);
+
+
+
+
+			// FIXME : tests scroll Swing: les width des panel sont définies dans les méthodes de JFCChartsSwingComponentsProvider
+			// FIXME : ce code fait bugger le changement de couleur des barres au mouse over et la bordure colorée des tooltips
+			// FIXME : ce code augmente à fond la RAM consommée, il y a un prob de composants en double ?
+			// En fait c'est un problème Java2D apparemment et qui semble "normal"
+			//panel.setPreferredSize(new Dimension(20000, 300));
+	//		JScrollPane scrollpane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+	//		frame.add(scrollpane);
+
+
+
+			// FIXME : version AWT
+			// FIXME : ce code aussi n'augmente pas la RAM consommée ? à moins que ce soit uniquement quand la largeur du panel est large (bug de JFC sur les larges plots ?)
+	//		ScrollPane scrollpane = new ScrollPane();
+	//		scrollpane.add(panel);
+	//		frame.add(scrollpane);
+
+			//frame.pack();
+
+
+			// FIXME : test scroll SWT : fonctionne presque
+	//		ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
+	//		scrolledComposite.setExpandHorizontal(true);
+	//		scrolledComposite.setExpandVertical(true);
+	//		//parent.setLayout(new GridLayout(1, true));
+	//		parent.setLayout(new FillLayout(SWT.VERTICAL));
+	//		//parent.setLayout(new FormLayout());
+	//		this.setParent(scrolledComposite);
+	//		//this.setLayout(new FillLayout());
+	//
+	//		scrolledComposite.setContent(this);
+	//		scrolledComposite.setAlwaysShowScrollBars(true);
+	//
+	//		scrolledComposite.setMinSize(16000, 0);
+			// ********** Fin test 1
+
+
+
+			// FIXME : test scroll SWT
+	//		ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
+	//		scrolledComposite.setExpandHorizontal(true);
+	//		scrolledComposite.setExpandVertical(true);
+	//		//parent.setLayout(new GridLayout(1, true));
+	//		parent.setLayout(new FormLayout());
+	//		this.setParent(scrolledComposite);
+	//		this.setLayout(new FillLayout());
+	//
+	//		scrolledComposite.setContent(this);
+	//		scrolledComposite.setAlwaysShowScrollBars(true);
+	//
+	//		scrolledComposite.setMinSize(16000, 500);
+	//
+	//		this.setSize(16000, 500);
+
+
+			//scrolledComposite.pack(true);
+			//scrolledComposite.setMinSize(parent.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+	//		frame.pack();
+	//		System.err.println("JFCComposite.JFCComposite() frame: " + frame.getWidth() + " - " + frame.getHeight());
+
+			//scrolledComposite.setMinSize(new Point(2000, 500));
+			//frame.setSize(2000, 500);
+
+
+
+			// Test tool tips transparency : do not fix transparency and create error
+	//		JFrame jFrame = new JFrame();
+	//		//jFrame.setContentPane(panel);
+	//		jFrame.add(panel);
+	//		frame.add(jFrame);
+
+
+			// FIXME: tests fix bug "Reset view" + Java 6 focus bugs
+	//		this.chartPanel.addFocusListener(new FocusListener() {
+	//
+	//			@Override
+	//			public void focusLost(FocusEvent e) {
+	//				// TODO Auto-generated method stub
+	//				System.err.println("JFCComposite.JFCComposite(...).new FocusListener() {...}.focusLost() chart panel");
+	//			}
+	//
+	//			@Override
+	//			public void focusGained(FocusEvent e) {
+	//				// TODO Auto-generated method stub
+	//				System.err.println("JFCComposite.JFCComposite(...).new FocusListener() {...}.focusGained() chart panel");
+	//			}
+	//		});
+
+
+			// FIXME : axis unit square ratio tests
+	//		this.addListener(SWT.Resize, new Listener() {
+	//
+	//			@Override
+	//			public void handleEvent(Event e) {
+	//				switch (e.type) {
+	//					case SWT.Resize:
+	//						System.err.println("ChartComposite.ChartComposite(...).new Listener() {...}.handleEvent()");
+	//						resetView();
+	//						break;
+	//				}
+	//
+	//			}
+	//		});
+
+
+			frame.setVisible(true);
+			//parent.pack();
+
+//		   }
+//	   });
+
+
+	}
+	
+
+	@Override
+	public void requestFocusInComposite()	{
+		EventQueue.invokeLater(new Runnable () {
+			public void run () {
+				getChartPanel().requestFocusInWindow();
+			}
+		});
+	}
+
+	/**
+	 * Gets the chart.
+	 * @return the chart
+	 */
+	public JFreeChart getChart()	{
+		return this.getChartPanel().getChart();
+	}
+
+	/**
+	 * @return the chartPanel
+	 */
+	public ChartPanel getChartPanel() {
+		return (ChartPanel) this.chartComponent;
+	}
+
+	@Override
+	public void loadChart(Object data) {
+
+		this.getChartPanel().setChart((JFreeChart) data);
+
+		// FIXME: Initialize the item selection listeners
+//		if(this.chartPanel instanceof ItemSelectionChartPanel)	{
+//			((ItemSelectionChartPanel) this.chartPanel).initItemSelectionListeners();
+//		}
+	}
+
+	@Override
+	public void reloadChart()	{
+		
+		// Get a new chart from the editor input
+		this.loadChart(((ChartPanel)this.chartEditor.getEditorInput().getChartContainer()).getChart());
+		
+		
+		// FIXME: Unit axis ratio constraint for FCA chart
+		if(this.getChartPanel().getChart().getPlot() instanceof XYPlot
+				&& this.getChartPanel().getChart().getXYPlot().getRenderer() instanceof FCAItemSelectionRenderer)	{
+			((ItemSelectionChartPanel) this.getChartPanel()).squareOffGraph();
+		}
+		
+		this.forceFocus();
+	}
+
+
+	/**
+	 * Gets the event call back handler of the specified class.
+	 * @param listenerType
+	 * @return
+	 */
+	public EventCallBackHandler getCallBackHandler(Class listenerType)	{
+		EventCallBackHandler handler = null;
+		EventListener[] listeners = this.getChartPanel().getListeners(listenerType);
+
+		for(int i = 0; i < listeners.length; i++) {
+			if(listeners[i] instanceof EventCallBackHandler)	{
+				handler = (EventCallBackHandler) listeners[i];
+				break;
+			}
+		}
+		return handler;
+	}
+
+	@Override
+	public EventCallBackHandler getMouseCallBackHandler()	{
+		return this.getCallBackHandler(ChartMouseListener.class);
+	}
+
+
+	@Override
+	public EventCallBackHandler getKeyCallBackHandler() {
+		return super.getKeyCallBackHandler(this.getChartPanel());
+	}
+
+
+
+
+}

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/swt/JFCComposite.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/build.properties
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/build.properties	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/build.properties	(revision 114)
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/build.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/plugin.xml
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/plugin.xml	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/plugin.xml	(revision 114)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.txm.rcp.swtchartscomponentsprovider">
+      <SWTChartsComponentsProvider
+            class="org.txm.chartsengine.jfreechart.rcp.JFCSWTChartsComponentsProvider"
+            inputFormat="JFreeChart/Java2D"
+            name="JFC SWT Charts Components Provider">
+      </SWTChartsComponentsProvider>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.txm.rcp.chartsengine.core.preferences.ChartsEnginePreferencePage"
+            class="org.txm.chartsengine.jfreechart.rcp.preferences.JFCChartsEnginePreferencePage"
+            id="org.txm.rcp.chartsengine.jfreechart.preferences.JFCChartsEnginePreferencePage"
+            name="Java">
+      </page>
+   </extension>
+
+</plugin>

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/plugin.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/.settings/org.eclipse.jdt.core.prefs	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/.settings/org.eclipse.jdt.core.prefs	(revision 114)
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/.settings/org.eclipse.jdt.core.prefs
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/.classpath
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/.classpath	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/.classpath	(revision 114)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/.classpath
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.jfreechart.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/META-INF/MANIFEST.MF	(revision 0)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/META-INF/MANIFEST.MF	(revision 114)
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: JFreeChart Charts Engine Editors
+Bundle-SymbolicName: org.txm.chartsengine.jfreechart.rcp;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: jfreechart,
+ org.txm.chartsengine.core,
+ org.txm.core;bundle-version="0.7.0",
+ org.txm.chartsengine.rcp;bundle-version="1.0.0";visibility:=reexport,
+ org.txm.chartsengine.jfreechart.core;bundle-version="1.0.0";visibility:=reexport,
+ org.txm.rcp;bundle-version="0.7.8",
+ org.eclipse.core.runtime;bundle-version="3.10.0"
+Export-Package: org.txm.chartsengine.jfreechart.rcp,
+ org.txm.chartsengine.jfreechart.rcp.editors,
+ org.txm.chartsengine.jfreechart.rcp.events,
+ org.txm.chartsengine.jfreechart.rcp.preferences,
+ org.txm.chartsengine.jfreechart.rcp.swt,
+ org.txm.chartsengine.jfreechart.rcp.themes.base.swing,
+ org.txm.chartsengine.jfreechart.rcp.themes.highcharts,
+ org.txm.chartsengine.jfreechart.rcp.themes.highcharts.events,
+ org.txm.chartsengine.jfreechart.rcp.themes.highcharts.swing
+Bundle-Vendor: TXM

Property changes on: tmp/org.txm.chartsengine.jfreechart.rcp/META-INF/MANIFEST.MF
___________________________________________________________________
Added: svn:mime-type
   + text/plain

