Révision 1841

tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/handlers/ResetChartView.java (revision 1841)
8 8

  
9 9
/**
10 10
 * Resets the chart view of the active chart editor part.
11
 * 
11 12
 * @author sjacquot
12 13
 *
13 14
 */
......
20 21
		
21 22
		try {
22 23
			chartEditor.resetView();
23
//			chartEditor.forceFocus();
24 24
		}
25 25
		catch (Exception e) {
26 26
			// nothing to do
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/handlers/ExportChart.java (revision 1841)
45 45
import org.txm.chartsengine.core.results.ChartResult;
46 46
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
47 47
import org.txm.core.preferences.TBXPreferences;
48
import org.txm.core.preferences.TXMPreferences;
49
import org.txm.core.results.TXMResult;
50 48
import org.txm.rcp.JobsTimer;
51 49
import org.txm.rcp.StatusLine;
52 50
import org.txm.rcp.commands.OpenGraph;
......
64 62
 * @author sjacquot
65 63
 *
66 64
 */
65
// FIXME: SJ: this class should not used the SWTChartsComponentsProvider but directly the current charts engine
67 66
public class ExportChart extends BaseAbstractHandler {
68 67

  
69 68
	private static final String ID = "ExportChart"; //$NON-NLS-1$
......
91 90
			extensions[i] = "*." + SWTChartsComponentsProvider.getCurrent().getChartsEngineSupportedExportFileFormats().get(i); //$NON-NLS-1$
92 91

  
93 92
			// Store the default chart export file format index
94
			if(ChartsEnginePreferences.getInstance().getString(ChartsEnginePreferences.DEFAULT_EXPORT_FORMAT).equals(SWTChartsComponentsProvider.getCurrent().getEditorSupportedExportFileFormats().get(i)))	{
93
			if(ChartsEnginePreferences.getInstance().getString(ChartsEnginePreferences.DEFAULT_EXPORT_FORMAT).equals(SWTChartsComponentsProvider.getCurrent().getChartsEngineSupportedExportFileFormats().get(i)))	{
95 94
				defaultChartFormatIndex = i;
96 95
			}
97 96
		}
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/handlers/ExportChartEditorView.java (revision 1841)
46 46
import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
47 47
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
48 48
import org.txm.chartsengine.rcp.editors.ChartEditor;
49
import org.txm.core.messages.TXMCoreMessages;
49 50
import org.txm.core.preferences.TBXPreferences;
50
import org.txm.core.preferences.TXMPreferences;
51 51
import org.txm.rcp.JobsTimer;
52 52
import org.txm.rcp.StatusLine;
53 53
import org.txm.rcp.commands.OpenGraph;
......
57 57
import org.txm.utils.logger.Log;
58 58

  
59 59
/**
60
 * Exports chart editor view using chart editor export.
61
 * Exports the chart view as it drawn in the editor (cropped, panned, etc.).
60
 * Exports chart editor view using chart composite export.
61
 * Exports the chart view as it is drawn in the editor (cropped, panned, etc.).
62 62
 *
63 63
 * @author mdecorde
64 64
 * @author sjacquot
......
68 68

  
69 69
	public static final String ID = "org.txm.chartsengine.rcp.handlers.ExportChartEditorView"; //$NON-NLS-1$
70 70

  
71
	
71 72
	@Override
72 73
	public Object execute(ExecutionEvent event) throws ExecutionException {
73 74

  
......
77 78
		final FileDialog dialog = new FileDialog(shell, SWT.SAVE);
78 79

  
79 80
		// Create the file extensions from the current chart editor supported file formats
80
		String extensions[] = new String[chartEditor.getSWTChartsComponentsProvider().getEditorSupportedExportFileFormats().size()];
81
		String extensions[] = new String[chartEditor.getEditorSupportedExportFileFormats().size()];
81 82
		int defaultChartFormatIndex = 0;
82
		for(int i = 0; i < chartEditor.getSWTChartsComponentsProvider().getEditorSupportedExportFileFormats().size(); i++) {
83
			extensions[i] = "*." + chartEditor.getSWTChartsComponentsProvider().getEditorSupportedExportFileFormats().get(i); //$NON-NLS-1$
83
		for(int i = 0; i < chartEditor.getEditorSupportedExportFileFormats().size(); i++) {
84
			extensions[i] = "*." + chartEditor.getEditorSupportedExportFileFormats().get(i); //$NON-NLS-1$
84 85

  
85 86
			// Store the default chart export file format index
86
			if(ChartsEnginePreferences.getInstance().getString(ChartsEnginePreferences.DEFAULT_EXPORT_FORMAT).equals(chartEditor.getSWTChartsComponentsProvider().getEditorSupportedExportFileFormats().get(i)))	{
87
			if(ChartsEnginePreferences.getInstance().getString(ChartsEnginePreferences.DEFAULT_EXPORT_FORMAT).equals(chartEditor.getEditorSupportedExportFileFormats().get(i)))	{
87 88
				defaultChartFormatIndex = i;
88 89
			}
89 90
		}
90 91

  
91 92
		dialog.setFilterExtensions(extensions);
92
		// Select default chart export file format
93
		
94
		// Select default chart export file format according to the user preferences
93 95
		dialog.setFilterIndex(defaultChartFormatIndex);
94 96
		
95 97
		dialog.setFileName(chartEditor.getResult().getValidFileName());
......
108 110
				filepath += suffix;
109 111
			}
110 112
			final File file = new File(filepath);
111
			StatusLine.setMessage("Exporting view: " + file);
112

  
113
			
113 114
			LastOpened.set(ID, file.getParent(), file.getName());
114 115

  
115 116
			try {
116 117
				file.createNewFile();
117 118
			}
118 119
			catch(IOException e1) {
119
				System.err.println(NLS.bind(TXMUIMessages.exportColonCantCreateFileP0ColonP1, file, e1));
120
				Log.severe(TXMCoreMessages.bind(TXMUIMessages.exportColonCantCreateFileP0ColonP1, file, e1));
120 121
			}
121 122
			if(!file.canWrite()) {
122
				System.err.println(NLS.bind(TXMUIMessages.impossibleToReadP0, file));
123
				Log.severe(TXMCoreMessages.bind(TXMUIMessages.impossibleToReadP0, file));
123 124
			}
124 125
			if(!file.isFile()) {
125
				System.err.println("Error: " + file + " is not a file"); //$NON-NLS-1$ //$NON-NLS-2$
126
				Log.severe(TXMCoreMessages.bind("Error: {0} is not a file.", file));
126 127
			}
127 128

  
128
			JobHandler jobhandler = new JobHandler(TXMUIMessages.exportingResults) {
129
			JobHandler jobhandler = new JobHandler(TXMCoreMessages.bind("Exporting current chart view to file {0}...", file.getAbsolutePath())) {
129 130
				@Override
130 131
				protected IStatus run(IProgressMonitor monitor) {
131 132
					try {
132 133
						this.runInit(monitor);
133 134
						monitor.beginTask(TXMUIMessages.exporting, 100);
134 135

  
135
						String outputFormat = chartEditor.getSWTChartsComponentsProvider().getEditorSupportedExportFileFormats().get(dialog.getFilterIndex());
136
						String outputFormat = (String) chartEditor.getEditorSupportedExportFileFormats().get(dialog.getFilterIndex());
136 137
						chartEditor.exportView(file, outputFormat);
137 138

  
138 139
						if(file.exists()) {
139 140

  
140
							System.out.println(NLS.bind(TXMUIMessages.p1ExportSavedInFileColonP0, file.getAbsolutePath(), outputFormat.toUpperCase()));
141
							Log.info(NLS.bind(TXMUIMessages.p1ExportSavedInFileColonP0, file.getAbsolutePath(), outputFormat.toUpperCase()));
141 142

  
142 143
							// Open internal editor in the UI thread
143 144
							if(TBXPreferences.getInstance().getBoolean(TBXPreferences.EXPORT_SHOW))	{
......
150 151
							}
151 152
						}
152 153
						else {
153
							System.out.println(NLS.bind(TXMUIMessages.failedToExportInFileP0WithFormatP1, file.getAbsolutePath(), outputFormat));
154
							Log.severe(NLS.bind(TXMUIMessages.failedToExportInFileP0WithFormatP1, file.getAbsolutePath(), outputFormat));
154 155
						}
155 156
					}
156 157
					catch(ThreadDeath td) {
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/SWTChartsComponentsProvider.java (revision 1841)
1 1
package org.txm.chartsengine.rcp;
2 2

  
3 3

  
4
import java.awt.AWTEvent;
5
import java.awt.Frame;
6
import java.awt.event.MouseEvent;
7
import java.awt.event.MouseListener;
8
import java.awt.event.MouseMotionListener;
9 4
import java.io.File;
10 5
import java.util.ArrayList;
11 6
import java.util.Arrays;
12 7
import java.util.List;
13 8
import java.util.Properties;
14 9

  
15
import javax.swing.JComponent;
16

  
17 10
import org.eclipse.core.commands.ExecutionEvent;
18 11
import org.eclipse.core.runtime.CoreException;
19 12
import org.eclipse.core.runtime.IConfigurationElement;
......
21 14
import org.eclipse.jface.preference.BooleanFieldEditor;
22 15
import org.eclipse.jface.preference.ComboFieldEditor;
23 16
import org.eclipse.swt.SWT;
24
import org.eclipse.swt.graphics.Point;
25 17
import org.eclipse.swt.layout.GridData;
26 18
import org.eclipse.swt.widgets.Composite;
27 19
import org.eclipse.swt.widgets.Event;
28 20
import org.eclipse.swt.widgets.Group;
29 21
import org.eclipse.swt.widgets.Label;
30
import org.eclipse.swt.widgets.Listener;
31 22
import org.eclipse.swt.widgets.TabFolder;
32 23
import org.eclipse.swt.widgets.TabItem;
33 24
import org.eclipse.swt.widgets.ToolBar;
34 25
import org.eclipse.swt.widgets.ToolItem;
35 26
import org.eclipse.swt.widgets.Widget;
36
import org.eclipse.ui.IPartListener;
37
import org.eclipse.ui.IPartService;
38
import org.eclipse.ui.IWorkbenchPage;
39
import org.eclipse.ui.IWorkbenchPart;
40
import org.eclipse.ui.IWorkbenchWindow;
41
import org.eclipse.ui.PartInitException;
42 27
import org.eclipse.ui.PlatformUI;
43 28
import org.txm.chartsengine.core.ChartsEngine;
44 29
import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
45
import org.txm.chartsengine.core.results.ChartResult;
46 30
import org.txm.chartsengine.rcp.editors.ChartEditor;
47
import org.txm.chartsengine.rcp.editors.ChartEditorInput;
48
import org.txm.chartsengine.rcp.events.EventCallBack;
49 31
import org.txm.chartsengine.rcp.messages.ChartsUIMessages;
50 32
import org.txm.chartsengine.rcp.preferences.___KeyboardBindingProperties;
51 33
import org.txm.chartsengine.rcp.preferences.___MouseBindingProperties;
52 34
import org.txm.chartsengine.rcp.swt.AdvancedChartEditorToolBar;
53 35
import org.txm.chartsengine.rcp.swt.ChartComposite;
54 36
import org.txm.chartsengine.rcp.swt.ChartEditorToolBar;
37
import org.txm.core.messages.TXMCoreMessages;
55 38
import org.txm.core.preferences.TXMPreferences;
56 39
import org.txm.rcp.editors.TXMMultiPageEditor;
57 40
import org.txm.rcp.preferences.TXMPreferencePage;
......
68 51

  
69 52
	
70 53
	
71
	
72
	
73 54
	// FIXME: should be done in an activator?
74 55
	static	{
75 56
		// Initializes the SWT Charts Components provider according to the current charts engine and its output format
......
77 58
		SWTChartsComponentsProvider.setCurrrentComponentsProvider(ChartsEngine.getCurrent());
78 59
	}
79 60
	
80
	
81
	static	{
82
		
83
		// FIXME: SJ: test to fix the Swing focus problems on the 3 OS
84
		IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();
85
		service.addPartListener(new IPartListener() {
86
			
87
			@Override
88
			public void partOpened(IWorkbenchPart part) {
89
				// TODO Auto-generated method stub
90
				
91
			}
92
			
93
			@Override
94
			public void partDeactivated(IWorkbenchPart part) {
95
				if(part instanceof ChartEditor)	{
96
					((ChartEditor) part).onPartDeactivated();
97
				}
98
			}
99
			
100
			@Override
101
			public void partClosed(IWorkbenchPart part) {
102
				// TODO Auto-generated method stub
103
				
104
			}
105
			
106
			@Override
107
			public void partBroughtToTop(IWorkbenchPart part) {
108
				// TODO Auto-generated method stub
109
				
110
			}
111
			
112
			@Override
113
			public void partActivated(IWorkbenchPart part) {
114
				if(part instanceof ChartEditor)	{
115
					((ChartEditor) part).onPartActivated();
116
				}
117
			}
118
		});
119
		
120
	}
121
	
122
	
61

  
123 62
	/**
124 63
	 * The charts engine.
125 64
	 */
......
167 106
		this.mouseBindingProperties = mouseBindingProperties;
168 107
		this.keyboardBindingProperties = keyboardBindingProperties;
169 108

  
170
		// FIXME : see if we need to define the L&F as system for AWT/Swing components
109
		// FIXME : SJ: see if we need to define the L&F as system for AWT/Swing components
171 110
		// If yes, we need to find a way to manage the GTK L&F/Linux bug, see ticket #761
172 111
        // System Look and feel
173 112
//        try {
......
199 138
	public SWTChartsComponentsProvider(ChartsEngine chartsEngine) {
200 139
		this(chartsEngine, new ___MouseBindingProperties(), new ___KeyboardBindingProperties());
201 140
	}
202

  
203 141
	
204 142
	/**
205 143
	 * 
......
208 146
		this(null);
209 147
	}
210 148

  
149

  
211 150
	
212 151
	/**
213
	 * Creates a <code>ChartEditorInput</code> for the specified chart result.
214
	 * @param result
215
	 * @return a <code>ChartEditorInput</code>
152
	 * Creates and stores SWT charts components providers from installed extension contributions and defines the current one according to the specified charts engine output format and provider supported input format.
216 153
	 */
217
	public ChartEditorInput createChartEditorInput(ChartResult result) {
218
		return new ChartEditorInput(this, result);
219
	}
220
	
221
	/**
222
	 * Creates a new chart component for the specified <code>ChartResult</code> save it in the specified <code>ChartEditorInput</code>.
223
	 * 
224
	 * @param chartsEngine
225
	 * @param chartEditorInput
226
	 * @param result
227
	 * @param preferencesNode
228
	 * @param chartType
229
	 * @return
230
	 */
231
	protected abstract boolean createChartComponent(ChartsEngine chartsEngine, ChartEditorInput chartEditorInput);
232
	
233
	/**
234
	 * Creates a new chart component for the specified <code>ChartResult</code> save it in the specified <code>ChartEditorInput</code>.
235
	 * 
236
	 * @param chartEditorInput
237
	 * @param result
238
	 * @param preferencesNode
239
	 * @param chartType
240
	 * @return
241
	 */
242
	public boolean createChartComponent(ChartEditorInput chartEditorInput)	{
243
		Log.finest(this.getClass().getSimpleName() + ": creating a chart component...");
244
		return this.createChartComponent(this.getChartsEngine(), chartEditorInput);
245
	}
246
	
247
	
248
	/**
249
	 * Creates and stores SWT charts components providers from installed extension contributions and define the current one according to the specified charts engine output format and provider supported input format.
250
	 */
251 154
	public static void createSWTChartsComponentsProviders()	{
252 155
		
253 156
		
......
278 181
				swtChartsComponentsProvider.setChartsEngine(chartsEngine);					
279 182
				
280 183
				SWTChartsComponentsProvider.chartsComponentsProviders.add(swtChartsComponentsProvider);
281
				Log.fine("Starting SWT charts components provider: " + swtChartsComponentsProvider + ".");
282 184
				
185
				Log.fine(TXMCoreMessages.bind("Starting SWT charts components provider: {0}...", swtChartsComponentsProvider));
283 186
				
187
				
284 188
			}
285 189
			catch(CoreException e) {
286 190
				// TODO Auto-generated catch block
......
317 221
	
318 222
	
319 223
	/**
320
	 * Gets an SWT charts component provider according to the specified charts engine output format and provider supported input format. 
224
	 * Gets an SWT charts components provider according to the specified charts engine output format and provider supported input format.
225
	 * 
321 226
	 * @param chartsEngine
322
	 * @return
227
	 * @return the first components provider that manages the format of the specified charts engine
323 228
	 */
324 229
	public static SWTChartsComponentsProvider getComponentsProvider(ChartsEngine chartsEngine)	{
325 230
		
......
339 244
	
340 245
	/**
341 246
	 * Gets an installed charts components provider according to its class type.
247
	 * 
342 248
	 * @param type
343
	 * @return the installed charts components provider according to its class type if it exists otherwise null;
249
	 * @return the installed charts components provider according to its class type if it exists otherwise null
344 250
	 */
345 251
	public static SWTChartsComponentsProvider getComponentsProvider(Class type)	{
346 252
		SWTChartsComponentsProvider provider = null;
......
381 287

  
382 288

  
383 289
	/**
384
	 * Returns the export formats supported by the implementation of the <code>EditorPart</code> for the view.
385
	 * @return
386
	 */
387
	public abstract ArrayList<String> getEditorSupportedExportFileFormats();
388
	
389
	/**
390 290
	 * Returns the input formats supported by the implementation of the <code>EditorPart</code> for viewing.
391 291
	 * @return
392 292
	 */
......
510 410
		
511 411
	}
512 412
	
513

  
514
	
515 413
	/**
516
	 * Export the current view of chart editor in the specified file.
517
	 * @param chartEditor
518
	 * @param file
519
	 * @param fileFormat
520
	 * @return
521
	 */
522
	public abstract File exportView(ChartEditor chartEditor, File file, String fileFormat);
523

  
524
	
525
	/**
526
	 * Opens the specified <code>ChartEditor</code> in the active page and registers the event listeners and context menus according to the type of the chart editor part.
527
	 * The ID of the editor and the chart type are the editor input result data class name.
528
	 * @param chartEditorInput
529
	 * @return
530
	 */
531
	public ChartEditor openEditor(ChartEditorInput chartEditorInput)	{
532
		return this.openEditor(chartEditorInput, chartEditorInput.getResult().getClass().getName());
533
	}
534

  
535
	
536
	/**
537
	 * Opens the <code>ChartEditor</code> specified by its id and ChartEditorInput in the active page and registers the event listeners and context menus according to the <code>EventCallBack</code> installed extensions. 
538
	 * @param chartEditorInput
539
	 * @param editorPartId
540
	 * @param chartType
541
	 * @return
542
	 */
543
	// FIXME: this method have some trouble when calling through a progress dialog
544
	// FIXME: this method is not in use anymore since the editor opening is now down in TXMEditor so the code for ChartEngine downgrading is not 
545
	// active anymore. Try to use again this code
546
	public ChartEditor openEditor(ChartEditorInput chartEditorInput, String editorPartId)	{
547

  
548
		ChartEditor openedChartEditorPart = null;
549

  
550
		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
551
		IWorkbenchPage page = window.getActivePage();
552

  
553
		boolean isAlreadyOpened = page.findEditors(chartEditorInput, editorPartId, IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID).length > 0;
554
		
555
		Log.finest("SWTChartsComponentsProvider.openEditor(): opening editor with id " + editorPartId);
556
		
557
		// if the editor is already open or the charts engine can create the specified chart type
558
		if(isAlreadyOpened || this.chartsEngine.canCreateChart(chartEditorInput.getResult()))	{
559
			
560
			//Log.finest(this.name + " - Opening editor for result data type " + chartEditorInput.getResultData().getClass() + " and editor id " + editorPartId);
561
			
562
			try {
563
				
564
				openedChartEditorPart = (ChartEditor) page.openEditor(chartEditorInput, editorPartId, true, IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID);
565
				openedChartEditorPart.setWasAlreadyOpened(isAlreadyOpened);
566
				
567
				
568
				// directly returns if the editor was already opened
569
				if(isAlreadyOpened)	{
570
					return openedChartEditorPart;
571
				}
572
			}
573
			catch(PartInitException e) {
574
				e.printStackTrace();
575
			}
576
			
577
		}
578
		// get the first installed charts engine that can create chart and use the SWT provider matching it
579
		else	{
580
			Log.warning("Rendering failed with current charts engine, trying to rendering chart with other installed SWT components provider and other charts engine:");
581
	
582
			boolean canCreate = false;
583
			for(int i = 0; i < ChartsEngine.getChartsEngines().size() && !canCreate; i++) {
584
				if(ChartsEngine.getChartsEngines().get(i) != this.chartsEngine)	{
585
					ChartsEngine chartsEngine = ChartsEngine.getChartsEngines().get(i);
586
					canCreate = chartsEngine.canCreateChart(chartEditorInput.getResult());
587
					// get a provider that can manage the charts engine
588
					if(canCreate)	{
589
						SWTChartsComponentsProvider provider = SWTChartsComponentsProvider.getComponentsProvider(chartsEngine);
590
						if(provider != null)	{
591
							provider.setChartsEngine(chartsEngine);
592
							chartEditorInput.setSWTChartsComponentsProvider(provider);
593
							Log.fine(provider.toString());
594
							return provider.openEditor(chartEditorInput, editorPartId);
595
						}
596
					}
597
				}
598
			}
599
		}
600
		
601
		return openedChartEditorPart;
602
	}
603
	
604
	/**
605
	 * 
606
	 * @param titleImage
607
	 * @param editorInputName
608
	 * @param result
609
	 * @param chartType
610
	 * @param params
611
	 * @return
612
	 */
613
	public ChartEditor openEditor(ChartResult result)	{
614
		return this.openEditor(this.createChartEditorInput(result), result.getClass().getName());
615
	}
616
	
617
	
618
//	/**
619
//	 * Initializes the default context menus.
620
//	 * @param composite
621
//	 */
622
//	public static void initDefaultContextMenus(ChartComposite composite)	{
623
//		if(composite != null)	{
624
//			composite.initItemAreaContextMenu();
625
//			composite.initEmptyAreaContextMenu();
626
//			composite.setCurrentContextMenu(EventCallBack.AREA_EMPTY);
627
//		}
628
//	}
629

  
630
	
631
	/**
632 414
	 * Gets the current active chart editor managing the multi pages editor.
633 415
	 * @param event
634 416
	 * @return
......
656 438
					&& ((ChartEditor)((TXMMultiPageEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart()).getMainEditorPart()).hasFocus())	{
657 439
				chartEditor = (ChartEditor)((TXMMultiPageEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart()).getMainEditorPart();
658 440
			}
659
			// FIXME: became useless?
441
			// FIXME: SJ: became useless?
660 442
//			else if(((MultiPageEditorPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).getSelectedPage() instanceof ChartEditor
661 443
//					&& ((ChartEditor)((MultiPageEditorPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).getSelectedPage()).hasFocus() )	{
662 444
//				chartEditor = (ChartEditor)((MultiPageEditorPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).getSelectedPage();
......
674 456

  
675 457
	@Override
676 458
	public String toString() {
677
		String str = this.name + " ("; //$NON-NLS-1$
678
		str += "supported input formats: " + this.supportedInputFormats.toString().replaceAll("\\[|\\]", ""); //$NON-NLS-1$ //$NON-NLS-2$
679
		str += ", Charts Engine: " + this.chartsEngine + ")"; //$NON-NLS-1$ //$NON-NLS-2$
680
		return str;
459
		return String.format("%s (supported input formats: %s, Charts Engine: %s)", this.name, this.supportedInputFormats.toString().replaceAll("\\[|\\]", ""), this.chartsEngine); //$NON-NLS-1$
681 460
	}
682 461

  
683 462

  
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/EventCallBackHandler.java (revision 1841)
6 6
import java.util.ArrayList;
7 7

  
8 8
import org.txm.chartsengine.rcp.IChartComponent;
9
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
10 9
import org.txm.utils.logger.Log;
11 10

  
12 11
/**
13 12
 * Abstract chart event handler.
14 13
 * This is the superclass of custom listeners dedicated to various chart types.
14
 * 
15 15
 * @author sjacquot
16 16
 *
17 17
 */
......
19 19

  
20 20
	
21 21
	/**
22
	 * The linked SWT Charts Component Provider.
23
	 */
24
	protected SWTChartsComponentsProvider swtChartsComponentProvider;
25

  
26
	/**
27 22
	 * The chart UI component.
28 23
	 */
29 24
	protected IChartComponent chartComponent;
......
38 33
	 * 
39 34
	 * @param swtChartsComponentProvider
40 35
	 */
41
	public EventCallBackHandler(SWTChartsComponentsProvider swtChartsComponentProvider, IChartComponent chartComponent) {
42
		this.swtChartsComponentProvider = swtChartsComponentProvider;
36
	public EventCallBackHandler(IChartComponent chartComponent) {
43 37
		this.chartComponent = chartComponent;
44 38
		this.eventCallBacks = new ArrayList<EventCallBack>();
45 39
	}
......
53 47
		// Do not add to event call backs of same type
54 48
		for(int i = 0; i < this.eventCallBacks.size(); i++) {
55 49
			if(this.eventCallBacks.get(i).getClass().equals(eventCallBack.getClass()))	{
56
				Log.fine("Event call back handler warning: the event call back of type \"" + eventCallBack.getClass() + "\" has not been registered because one of same type is already registered."); //$NON-NLS-1$ //$NON-NLS-2$
50
				Log.fine(String.format("Event call back handler warning: the event call back of type \"%s\" has not been registered because one of same type is already registered.", eventCallBack.getClass())); //$NON-NLS-1$
57 51
				return;
58 52
			}
59 53
		}
60 54
		this.eventCallBacks.add(eventCallBack);
61
		eventCallBack.setSwtChartsComponentProvider(this.swtChartsComponentProvider);
62 55
	}
63 56

  
64 57
	
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/EventCallBack.java (revision 1841)
27 27
	 */
28 28
	protected ChartEditor chartEditor;
29 29

  
30

  
31
	
32 30
	/**
33
	 * The linked SWT Charts Component Provider.
34
	 */
35
	protected SWTChartsComponentsProvider swtChartsComponentProvider;
36
	
37
	
38
	/**
39 31
	 * 
40 32
	 */
41 33
	public EventCallBack() {
......
50 42
	 * @param customData
51 43
	 */
52 44
	public abstract void processEvent(AWTEvent event, int eventArea, Object customData);
53

  
54

  
55

  
56
	/**
57
	 * @param swtChartsComponentProvider the swtChartsComponentProvider to set
58
	 */
59
	public void setSwtChartsComponentProvider(SWTChartsComponentsProvider swtChartsComponentProvider) {
60
		this.swtChartsComponentProvider = swtChartsComponentProvider;
61
	}
62 45
	
63
	
64 46
	/**
65 47
	 * @param chartEditor the chartEditor to set
66 48
	 */
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/ChartKeyListener.java (revision 1841)
4 4
import java.awt.event.KeyListener;
5 5

  
6 6
import org.txm.chartsengine.rcp.IChartComponent;
7
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
8 7

  
9 8
/**
10 9
 * Chart key listener.
11 10
 * This is the superclass of custom key listeners dedicated to various chart types.
11
 * 
12 12
 * @author sjacquot
13 13
 *
14 14
 */
......
20 20
	 * Creates a chart key listener and registers the default zoom and pan call backs handler.
21 21
	 * @param chartComponent
22 22
	 */
23
	public ChartKeyListener(SWTChartsComponentsProvider swtChartsComponentProvider, IChartComponent chartComponent, double keyPressedPanFactor) {
24
		super(swtChartsComponentProvider, chartComponent);
23
	public ChartKeyListener(IChartComponent chartComponent, double keyPressedPanFactor) {
24
		super(chartComponent);
25 25
		
26 26
		// register default zoom and pan call back
27 27
		this.registerEventCallBack(new ZoomAndPanCallBack(keyPressedPanFactor));
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/AbstractChartMouseListener.java (revision 1841)
10 10
/**
11 11
 * Abstract chart mouse listener.
12 12
 * This is the superclass of custom mouse listeners dedicated to various chart types.
13
 * 
13 14
 * @author sjacquot
14 15
 *
15 16
 */
......
41 42
	 *
42 43
	 * @param chartPanel
43 44
	 */
44
	public AbstractChartMouseListener(SWTChartsComponentsProvider swtChartsComponentProvider, IChartComponent chartPanel) {
45
		super(swtChartsComponentProvider, chartPanel);
45
	public AbstractChartMouseListener(IChartComponent chartPanel) {
46
		super(chartPanel);
46 47
		
47 48
		// FIXME: Add default mouse handler for zoom and pan here rather than in subclasses ?
48 49
		
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditor.java (revision 1841)
2 2

  
3 3

  
4 4
import java.io.File;
5
import java.util.ArrayList;
5 6

  
6
import javax.swing.JComponent;
7

  
8
import org.eclipse.core.runtime.CoreException;
9
import org.eclipse.core.runtime.IConfigurationElement;
10
import org.eclipse.core.runtime.Platform;
11 7
import org.eclipse.swt.SWT;
12 8
import org.eclipse.swt.layout.GridData;
13 9
import org.eclipse.swt.widgets.Composite;
14 10
import org.eclipse.swt.widgets.Group;
15 11
import org.eclipse.swt.widgets.ToolItem;
12
import org.eclipse.ui.IPartListener;
13
import org.eclipse.ui.IPartService;
14
import org.eclipse.ui.IWorkbenchPart;
16 15
import org.eclipse.ui.PlatformUI;
17 16
import org.eclipse.ui.contexts.IContextActivation;
18 17
import org.eclipse.ui.contexts.IContextService;
19 18
import org.eclipse.ui.part.MultiPageEditorPart;
20 19
import org.txm.chartsengine.core.ChartsEngine;
21
import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
22 20
import org.txm.chartsengine.core.results.ChartResult;
23 21
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
24
import org.txm.chartsengine.rcp.events.EventCallBack;
25
import org.txm.chartsengine.rcp.events.EventCallBackHandler;
26 22
import org.txm.chartsengine.rcp.messages.ChartsUIMessages;
27 23
import org.txm.chartsengine.rcp.swt.AdvancedChartEditorToolBar;
28 24
import org.txm.chartsengine.rcp.swt.ChartComposite;
29 25
import org.txm.chartsengine.rcp.swt.ChartEditorToolBar;
30
import org.txm.chartsengine.rcp.swt.SwingChartComposite;
31 26
import org.txm.core.messages.TXMCoreMessages;
32 27
import org.txm.rcp.editors.TXMEditor;
33 28
import org.txm.rcp.editors.TXMMultiPageEditor;
......
43 38
	
44 39
	public final static String CONTEXT_ID_CHART_EDITOR = ChartEditor.class.getName();
45 40
	
41
	
42
	// ChartEditor context activation/deactivation
43
	static	{
44
		
45
		IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();
46
		service.addPartListener(new IPartListener() {
47
			
48
			@Override
49
			public void partOpened(IWorkbenchPart part) {
50
				// TODO Auto-generated method stub
51
				
52
			}
53
			
54
			@Override
55
			public void partDeactivated(IWorkbenchPart part) {
56
				if(part instanceof ChartEditor)	{
57
					((ChartEditor) part).onPartDeactivated();
58
				}
59
			}
60
			
61
			@Override
62
			public void partClosed(IWorkbenchPart part) {
63
				// TODO Auto-generated method stub
64
				
65
			}
66
			
67
			@Override
68
			public void partBroughtToTop(IWorkbenchPart part) {
69
				// TODO Auto-generated method stub
70
				
71
			}
72
			
73
			@Override
74
			public void partActivated(IWorkbenchPart part) {
75
				if(part instanceof ChartEditor)	{
76
					((ChartEditor) part).onPartActivated();
77
				}
78
			}
79
		});
80
		
81
	}
82
	
83
	
46 84
	/**
85
	 * SWT chart components provider used to create the chart composite.
86
	 * Store it allows the switch of component provider in the RCP in keeping the chart editors in a coherent state, by testing that the SWT Components providers charts engine match the result charts engine.
87
	 */
88
	protected SWTChartsComponentsProvider swtChartsComponentsProvider;
89

  
90
	/**
47 91
	 * The tool bar.
48 92
	 */
49 93
	protected ChartEditorToolBar chartToolBar;
......
90 134

  
91 135
	/**
92 136
	 * Token used to deactivate the context after it has been activated.
137
	 * The context is used by the RCP to bind keys or contextual menu to an editor. 
93 138
	 */
94 139
	protected IContextActivation contextActivationToken;
95 140
	
......
103 148

  
104 149

  
105 150
	/**
106
	 * 
151
	 * Creates a new editor.
107 152
	 * @param swtComponentsProvider
108 153
	 * @param chartEditorInput
109 154
	 */
......
140 185
				false);
141 186
		this.advancedChartToolBar = new AdvancedChartEditorToolBar(this, group, this.getParametersGroupsComposite(), SWT.FLAT);
142 187

  
188
		this.swtChartsComponentsProvider = SWTChartsComponentsProvider.getComponentsProvider(this.getResult().getChartsEngine());
189
		
143 190
		// Chart composite
144
		this.chartComposite = SWTChartsComponentsProvider.getComponentsProvider(this.getResult().getChartsEngine()).createComposite(this, this.getResultArea());
191
		this.chartComposite = this.swtChartsComponentsProvider.createComposite(this, this.getResultArea());
145 192
		
146 193
		GridData gd = new GridData(GridData.FILL_BOTH);
147 194
		this.chartComposite.setLayoutData(gd);
148 195

  
149
		// FIXME: open dialog box message if the composite doesn't contain any chart (typically when the charts engine doesn't contain chart creator for the specified result data type)
150
//		if(composite.getChart() == null)	{
151
//			MessageDialog.openWarning(parent.getShell(), "Warning", "Current charts engine can not create chart for " + this.getResultData().getClass().getSimpleName() + " result type. You can set another charts engine in the preferences.");
152
//		}
153
		
154
		// FIXME: background color tests
155
		//this.composite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
156
		//parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
157

  
158
		
159 196
		 // subclasses manual creation
160 197
		this.__createPartControl();
161 198
		
......
172 209
		
173 210
	}
174 211
	
175
//	/**
176
//	 * Initializes the default context menus.
177
//	 */
178
//	public void initDefaultContextMenus()	{
179
//		SWTChartsComponentsProvider.initDefaultContextMenus(this.chartComposite);
180
//	}
181
	
182

  
183 212
	/**
184 213
	 * Opens an editor where id is the specified result class name, computes the result then refreshes the editor components.
185 214
	 * @param result
......
188 217
		return openEditor(result, false);
189 218
	}
190 219

  
220
	/**
221
	 * 
222
	 * @param result
223
	 * @param alwaysRecreateEditor
224
	 * @return
225
	 */
191 226
	public static ChartEditor openEditor(ChartResult result, boolean alwaysRecreateEditor)	{
192 227
		return openEditor(result, result.getClass().getName(), alwaysRecreateEditor);
193 228
	}
194 229
	
230
	/**
231
	 * 
232
	 * @param result
233
	 * @param editorPartId
234
	 * @return
235
	 */
195 236
	public static ChartEditor openEditor(ChartResult result, String editorPartId)	{
196 237
		return openEditor(result, editorPartId, false);
197 238
	}
198 239
	
199
	
200 240
	/**
201 241
	 * Opens an editor specified by its id, computes the specified result then refreshes the editor components.
202 242
	 * @param result
......
212 252
	}
213 253

  
214 254

  
215

  
216 255
	@Override
217 256
	public void updateResultFromEditor() {
218 257
		// does nothing by default
......
229 268
	public final void updateEditorFromResult(boolean update) {
230 269
		
231 270
		// check that the charts engine used for the result matches the SWT components provider otherwise find a suitable components provider
232
		if(this.getResult().getChartsEngine() != this.getSWTChartsComponentsProvider().getChartsEngine())	{
271
		// and recreate new ChartCoomposite and ChartComponent
272
		if(this.getResult().getChartsEngine() != this.swtChartsComponentsProvider.getChartsEngine())	{
233 273
			
234
			Log.finest("ChartEditor.__updateEditorFromResult(): result charts engine  = " + this.getResult().getChartsEngine().getName() + " / Editor charts engine = " + this.getSWTChartsComponentsProvider().getChartsEngine().getName() + "."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
274
			Log.finest("ChartEditor.__updateEditorFromResult(): result charts engine  = " + this.getResult().getChartsEngine().getName() + " / Editor charts engine = " + this.swtChartsComponentsProvider.getChartsEngine().getName() + "."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
235 275
			
236
			this.getEditorInput().setSWTChartsComponentsProvider(SWTChartsComponentsProvider.getComponentsProvider(this.getResult().getChartsEngine()));
237
			this.getSWTChartsComponentsProvider().setChartsEngine(this.getResult().getChartsEngine());
276
			//this.getEditorInput().setSWTChartsComponentsProvider(SWTChartsComponentsProvider.getComponentsProvider(this.getResult().getChartsEngine()));
277
			this.swtChartsComponentsProvider = SWTChartsComponentsProvider.getComponentsProvider(this.getResult().getChartsEngine());
278
			this.swtChartsComponentsProvider.setChartsEngine(this.getResult().getChartsEngine());
238 279
			
239 280
			Log.finest("ChartEditor.__updateEditorFromResult(): charts engine used to create the chart does not match the editor one. The SWT components provider has been changed to match it: " + this.getSWTChartsComponentsProvider() + "."); //$NON-NLS-1$ //$NON-NLS-2$
240 281
			
......
258 299
		
259 300
		
260 301
		// FIXME: this code should be moved in ChartComposite.loadChart()?
261
		// if editor wasn't exist:
262
		// hiding command parameters, updating tool bar buttons states, registering context menus and event user callbacks 
263
		if(needInit
264
				
265
				//!update
266
//				&& !this.getResult().isChartDirty()
267
				)	{
268
//			getSite().getShell().getDisplay().syncExec(new Runnable() {
269
//				@Override
270
//				public void run() {
271
					// FIXME: decide if we automatically hide or not the parameter area
272
					//editor2.getTopToolbar().setComputingParametersVisible(false);
273
					
274
					// FIXME: tests to disable command if the chart is null and reenable it when the chart is computed 
275
					//editor2.getChartToolBar().synchronize();
276
					
277
					// initialize the default shared context menus as Export, etc.
278
					//this.initDefaultContextMenus();
279
			
280
					// registers user entries event call back extensions
281
//					this.registerEventCallBackExtensions();
282
					
283
					//FIXME: test to contribute to menu only in some context and also for key binding
284
					// create chart editor part context
285
//					this.activateContext();
286
//					IContextService contextService = (IContextService)getSite().getService(IContextService.class);
287
//					this.contextActivationToken = contextService.activateContext(CONTEXT_ID_CHART_EDITOR);
288
	//				// create chart composite context
289
	//				contextService.activateContext(this.chartComposite.getClass().getName());
290
					
291
					//FIXME: description test
292
					//editor2..setContentDescription("details");
293
					//editor2..setContentDescription(this.getResultData().getDetails());
294
	
295
					//this.initializeAWTDelegationListeners();
296
					
297
//				}
298
//			});
299
					
302
		if(needInit)	{
300 303
			this.onInit();
301 304
		}
302 305
		
303 306
		// sublcass updating
304 307
		this.updateEditorFromChart(update);
305 308

  
306
		
307
//		if(this.parentMultiPagesEditor == null)	{
308
//			//this.forceFocus();
309
//			this.activate();
310
//		}
311 309
	}
312 310

  
313 311
	
......
352 350
	}
353 351
	
354 352

  
355
	
356
	/**
357
	 * Activate the editor in the UI.
358
	 */
359
	//FIXME: this method doesn't work for Multi pages editor, eg. can not activating CAFactorialMapEditor stored in the CAEditor
360
	public void activate()	{
361
		
362
		// Activate the parent multi pages editor instead of this editor if it exists
363
		if(this.parentMultiPagesEditor != null)	{
364
			PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().activate(this.parentMultiPagesEditor);
365
		}
366
		else {
367
			// TODO: for focus and activation debug
368
//			System.out.println("ChartEditor.activate(): activating: " + this);
369
			//PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().bringToTop(this);
370
			
371
			//this.parent.setFocus();
372

  
373
//			if(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart() != this) {			
374
				//this.chartComposite.setFocus();
375
	//		}
376

  
377
			PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().activate(this);
378
			
379
			
380
			//getEditorSite().getPage().activate(this);
381
//			if(!this.chartComposite.hasFocus())	{
382
//				this.chartComposite.setFocus();
383
//			}
384

  
385
//			System.out.println("ChartEditor.activate(): new active editor = " + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart());
386
		}
387
//		else	{
388
//			PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().bringToTop(this);
389
//		}
390
	}
391

  
392
//	/**
393
//	 * Forces the Composite to get the focus.
394
//	 */
395
//	public void forceFocus() {
396
//		// FIXME: debug
397
//		//System.err.println("ChartEditor.forceFocus()");
398
//
399
//		//this.chartComposite.setFocus();
400
//		//this.chartComposite.notifyListeners(SWT.FocusIn, null); // Needed to force the composite listener to handle the focus event
401
//	}
402

  
403

  
404 353
	@Override
405 354
	public void setFocus() {
355

  
356
		// Debug
357
		Log.finest("ChartEditor.setFocus(): giving focus to chart composite..."); //$NON-NLS-1$
406 358
		
407
		//this.getEditorSite().getShell().setActive();
408 359
		this.parent.setFocus();
409 360
		super.setFocus();
410
		// Debug
411
		Log.finest("ChartEditor.setFocus(): giving focus to chart composite..."); //$NON-NLS-1$
412 361

  
413 362
		this.chartComposite.setFocus();
414 363
		
......
427 376
	}
428 377

  
429 378
	
430
//	/**
431
//	 * Initialize Swing/AWT events delegation.
432
//	 * @param swingComponent
433
//	 */
434
//	protected void initializeAWTDelegationListeners()	{
435
//		try {
436
//			this.getChartComposite().getChartComponent().setChartEditor(this);
437
//			// FIXME: SJ: temporary fix. The composite may not be a SwingChartComposite
438
//			((SwingChartComposite) this.chartComposite).initializeAWTDelegationListeners();
439
//		}
440
//		catch (Exception e) {
441
//			Log.severe("ChartEditor.initializeAWTDelegationListeners(): can not initialize events delegation.");
442
//		}
443
//	}
444

  
445 379
	/**
446 380
	 * Convenience method the get the casted linked editor input.
447 381
	 * @return the editorInput
......
451 385
	}
452 386

  
453 387

  
454

  
455 388
	/**
456 389
	 * Gets the chart drawing area composite.
457 390
	 * @return the composite
......
575 508
	}
576 509
	
577 510
	/**
578
	 * Returns the chart components provider associated with the editor (through its <code>ChartEditorInput</code>).
511
	 * Returns the chart components provider associated with the editor.
579 512
	 * @return
580 513
	 */
581 514
	public SWTChartsComponentsProvider getSWTChartsComponentsProvider()	{
582
		return this.getEditorInput().getSWTChartsComponentsProvider();
515
		return this.swtChartsComponentsProvider;
583 516
	}
584 517

  
585 518
	/**
586
	 * Gets the charts engine associated with the editor (through its <code>ChartEditorInput</code>).
519
	 * Gets the charts engine used by the result.
587 520
	 * @return
588 521
	 */
589 522
	public ChartsEngine getChartsEngine()	{
......
592 525

  
593 526
	/**
594 527
	 * Exports the current view of the chart editor in the specified file.
528
	 * 
595 529
	 * @param file
596 530
	 * @param fileFormat
597 531
	 * @return
598 532
	 */
599 533
	public File exportView(File file, String fileFormat)	{
600
		return this.getSWTChartsComponentsProvider().exportView(this, file, fileFormat);
534
		return this.chartComposite.exportView(file, fileFormat);
601 535
	}
602 536

  
537
	
603 538
	/**
539
	 * Returns the export formats supported by the implementation of the <code>ChartComposite</code> for exporting the current the view.
540
	 * 
541
	 * @return
542
	 */
543
	public ArrayList<String> getEditorSupportedExportFileFormats()	{
544
		return this.chartComposite.getEditorSupportedExportFileFormats();
545
	}
546
	
547
	/**
604 548
	 * Gets the parent multipages editor part if exists.
605 549
	 * @return the parentMultiPagesEditor
606 550
	 */
......
617 561
	}
618 562

  
619 563
	/**
620
	 * To check whether this editor was already opened when calling SWTChartsComponentsProvider.openEditor().
564
	 * To check whether this editor was already opened when calling openEditor().
621 565
	 * @return the wasAlreadyOpened
622 566
	 */
623 567
	public boolean wasAlreadyOpened() {
......
625 569
	}
626 570

  
627 571
	/**
628
	 * To check whether this editor was already opened when calling SWTChartsComponentsProvider.openEditor().
572
	 * To check whether this editor was already opened when calling openEditor().
629 573
	 * @param wasAlreadyOpened the wasAlreadyOpened to set
630 574
	 */
631 575
	public void setWasAlreadyOpened(boolean wasAlreadyOpened) {
......
656 600
		return chartToolBar;
657 601
	}
658 602

  
659
//	@Override
660
//	public boolean isDirty() {
661
//		boolean d1 = super.isDirty();
662
//		boolean d2 = this.getResult().isChartDirty();
663
//		return super.isDirty() && this.getResult().isChartDirty();
664
//	}
665
	
666
	
667 603
	@Override
668 604
	public T getResult()	{
669 605
		return (T) this.getEditorInput().getResult();
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditorInput.java (revision 1841)
1 1
package org.txm.chartsengine.rcp.editors;
2 2

  
3
import org.eclipse.jface.resource.ImageDescriptor;
4
import org.eclipse.ui.IPersistableElement;
5
import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
6 3
import org.txm.chartsengine.core.results.ChartResult;
7
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
8
import org.txm.core.preferences.TXMPreferences;
9 4
import org.txm.rcp.editors.TXMResultEditorInput;
10 5

  
11 6
/**
12 7
 * Base class of all charts SWT <code>IEditorInput</code> implementations.
8
 * 
13 9
 * @author sjacquot
14 10
 *
15 11
 */
12
// FIXME: SJ: this class may be useless, we may use TXMEditorInput instead
16 13
public class ChartEditorInput<T extends ChartResult> extends TXMResultEditorInput<ChartResult> {
17 14

  
18 15

  
19 16
	/**
20
	 * SWT chart components provider used to create the chart editor.
21
	 * Store it allows the switch of component provider in the RCP in keeping the chart editors in a coherent state.
22
	 */
23
	protected SWTChartsComponentsProvider swtChartsComponentsProvider = null;
24

  
25

  
26
	/**
27
	 * The chart component (for example : can be an AWT/Swing component as ChartPanel for JFC, etc.).
28
	 */
29
	protected Object chartComponent;
30

  
31
	/**
32 17
	 * Creates a chart editor input linked to the current SWT charts components provider.
33 18
	 * @param result
34 19
	 * @param preferencesNodeQualifier
35 20
	 */
36 21
	public ChartEditorInput(ChartResult result) {
37
		this(SWTChartsComponentsProvider.getCurrent(), result);
38
	}
39
	
40
	/**
41
	 * Creates a chart editor input linked to the specified SWT charts components provider.
42
	 * @param swtComponentsProvider
43
	 * @param result
44
	 * @param preferencesNodeQualifier
45
	 */
46
	public ChartEditorInput(SWTChartsComponentsProvider swtComponentsProvider, ChartResult result) {
47
		this(swtComponentsProvider, result, null);
48
	}
49

  
50
	/**
51
	 * Creates a chart editor input linked to the specified SWT charts components provider.
52
	 * @param swtComponentsProvider
53
	 * @param name
54
	 * @param result
55
	 * @param preferencesNodeQualifier
56
	 * @param chartType
57
	 * @param chartContainer
58
	 */
59
	public ChartEditorInput(SWTChartsComponentsProvider swtComponentsProvider, ChartResult result, Object chartContainer) {
60 22
		super(result);
61
		this.swtChartsComponentsProvider = swtComponentsProvider;
62
		this.chartComponent = chartContainer;
63 23
	}
64
	
65
	
66
	@Override
67
	public boolean exists() {
68
		// TODO Auto-generated method stub
69
		return false;
70
	}
71 24

  
72
	@Override
73
	public ImageDescriptor getImageDescriptor() {
74
		// TODO Auto-generated method stub
75
		return null;
76
	}
77

  
78
	@Override
79
	public IPersistableElement getPersistable() {
80
		// TODO Auto-generated method stub
81
		return null;
82
	}
83

  
84
	@Override
85
	public Object getAdapter(Class type) {
86
		// FIXME
87
//		System.err.println("************** ChartEditorInput.getAdapter() type = " + type + " / adaptable object = " + this);
88
//		 // if the object implements or extends the desired interface, use it
89
//		
90
//			  if (type.isInstance(IResource.class))
91
////		
92
//		    return this;
93
////		
94
////			 
95
////		
96
////			  // if the object is able to adapt itself, let it do it
97
////		
98
////			  if (this instanceof IAdaptable) {
99
////		
100
////			    IAdaptable adaptable = (IAdaptable) this;
101
////		
102
////			    Object adapter = adaptable.getAdapter(type);
103
////		
104
////			    if (adapter != null)
105
////		
106
////			      return adapter;
107
////		
108
////			  }
109
//		
110
//			 
111
//		
112
//			  // delegate to the global adapter manager
113
//		
114
//			  return Platform.getAdapterManager().getAdapter(this, type);
115
		
116
		
117
		return null;
118
	}
119

  
120

  
121

  
122 25
	/**
123
	 * Gets the <code>SWTChartsComponentsProvider</code> linked to this editor input.
124
	 * @return the swtComponentProvider
125
	 */
126
	public SWTChartsComponentsProvider getSWTChartsComponentsProvider() {
127
		return this.swtChartsComponentsProvider;
128
	}
129

  
130
	/**
131
	 * Gets the chart container (for example : can be an AWT/Swing component as ChartPanel for JFC, etc.).
132
	 * @return the chartContainer
133
	 */
134
	public Object getChartComponent() {
135
		return chartComponent;
136
	}
137

  
138

  
139
	/**
140
	 * Sets the chart component (for example: can be an AWT/Swing component as ChartPanel for JFC, etc.).
141
	 * @param chartComponent the chartContainer to set
142
	 */
143
	public void setChartComponent(Object chartComponent) {
144
		this.chartComponent = chartComponent;
145
	}
146

  
147
	/**
148
	 * Set the <code>SWTChartsComponentsProvider</code> to link to this editor input and to use for reading the chart object.
149
	 * @param swtChartsComponentsProvider the swtChartsComponentsProvider to set
150
	 */
151
	public void setSWTChartsComponentsProvider(SWTChartsComponentsProvider swtChartsComponentsProvider) {
152
		this.swtChartsComponentsProvider = swtChartsComponentsProvider;
153
	}
154

  
155

  
156
	/**
157 26
	 * Gets a string representing the type of the chart as defined in the chart creator extension.
158 27
	 * @return the chartType or <code>null</code> if there only one chart type needed for the linked <code>TXMResult</code>. 
159 28
	 */
......
166 35
		return (ChartResult) this.result;
167 36
	}
168 37

  
169
	/**
170
	 * Sets and updates the local preferences node qualifier from the result data.
171
	 * Synchronizes the local preferences node with the result data type, chart type, etc.
172
	 */
173
	// FIXME; should be move to TXMResultEditorInput class
174
	public void syncLocalPreferencesNode()	{
175
		//FIXME: to call when implemented in parent class
176
		//super.syncLocalPreferencesNode();
177
		// FIXME: persistence test
178
		if(this.getResult().getChartType() != null)	{
179
			TXMPreferences.putLocal(this.result, ChartsEnginePreferences.CHART_TYPE, this.getResult().getChartType());
180
		}
181
	}
182
	
183 38

  
184 39
	@Override
185 40
	public boolean equals(Object obj)	{
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/IChartComponent.java (revision 1841)
6 6

  
7 7
/**
8 8
 * Chart component interface.
9
 * A component dedicated to render chart, from a file, from an AWT object, etc. and to be embedded in a SWT ChartComposite.
9
 * A component dedicated to render chart, from a file, from an AWT object, etc. and to be embedded in an SWT ChartComposite.
10
 * 
10 11
 * @author sjacquot
11 12
 *
12 13
 */
......
67 68
	 */
68 69
	public void squareOff();
69 70
	
70
//	/**
71
//	 * Sets the square off unit axis constraints state.
72
//	 * @param enabled
73
//	 */
74
//	public void setSquareOffEnabled(boolean enabled);
75 71
	
76 72
}
tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/swt/ChartComposite.java (revision 1841)
1 1
package org.txm.chartsengine.rcp.swt;
2 2

  
3 3
import java.awt.Component;
4
import java.io.File;
4 5
import java.util.ArrayList;
5 6
import java.util.EventListener;
6 7

  
7 8
import org.eclipse.swt.widgets.Composite;
8 9
import org.eclipse.swt.widgets.Menu;
10
import org.txm.chartsengine.core.ChartsEngine;
9 11
import org.txm.chartsengine.core.results.ChartResult;
10 12
import org.txm.chartsengine.rcp.IChartComponent;
11 13
import org.txm.chartsengine.rcp.editors.ChartEditor;
14
import org.txm.chartsengine.rcp.editors.ChartEditorInput;
12 15
import org.txm.chartsengine.rcp.events.EventCallBack;
13 16
import org.txm.chartsengine.rcp.events.EventCallBackHandler;
14 17
import org.txm.rcp.editors.TXMEditor;
......
63 66
	}
64 67

  
65 68
	
69
	
66 70
	/**
71
	 * Loads the chart from specified data.
72
	 * @param data
73
	 */
74
	public abstract void loadChart(Object data);
75

  
76
	
77
	/**
78
	 * Loads or reloads the chart from the chart object stored in the linked editor input.
79
	 * This method is especially used for file based implementations of charts engine for reloading a file that has been externally modified.
80
	 */
81
	public abstract void loadChart();
82
	
83
	
84
	/**
85
	 * Loads or reloads the chart from the chart object stored in the linked editor input.
86
	 * @param resetView
87
	 * @param clearChartItemsSelection
88
	 * @param squareOff
89
	 */
90
	public void loadChart(boolean resetView, boolean clearChartItemsSelection, boolean squareOff)	{
91
		this.loadChart();
92

  
93
		if(squareOff)	{
94
			this.squareOff();
95
		}
96
		
97
		if(clearChartItemsSelection)	{
98
			this.clearChartItemsSelection();
99
		}
100

  
101
		if(resetView)	{
102
			this.resetView();
103
		}
104
	}
105

  
106
	/**
107
	 * Loads or reloads the chart from the chart object stored in the linked editor input.
108
	 * @param resetView
109
	 * @param clearChartItemsSelection
110
	 */
111
	public void loadChart(boolean resetView, boolean clearChartItemsSelection)	{
112
		this.loadChart(resetView, clearChartItemsSelection, false);
113
	}
114
	
115
	/**
116
	 * Creates a new chart component.
117
	 *  
118
	 * @param chartsEngine
119
	 * @param chartEditorInput
120
	 * @return
121
	 */
122
	protected abstract IChartComponent _createChartComponent();
123
	
124
	
125
	/**
126
	 * Creates a new chart component by calling the implementation method and store it.
127
	 * 
128
	 * @param chartEditorInput
129
	 * @return
130
	 */
131
	public boolean createChartComponent()	{
132
		
133
		if (!this.chartEditor.getResult().isChartDirty()) {
134
			
135
			Log.finest(this.getClass().getSimpleName() + ": creating a chart component...");
136
			
137
			this.chartComponent = this._createChartComponent();
138
			this.chartComponent.setChartEditor(this.chartEditor);
139
			
140
			return true;
141
		}
142
		else	{
143
			return false;
144
		}
145
	}
146
	
147
	
148
	
149
	
150
	/**
67 151
	 * Creates the pop up menu dedicated to empty area location click event that is populated from plugin.xml.
68 152
	 */
69 153
	public void initEmptyAreaContextMenu()	{
......
112 196
		this.setMenu(this.contextMenus.get(index));
113 197
	}
114 198
	
199

  
115 200
	/**
116 201
	 * Gets the menu specified by its index.
117 202
	 * @param index
......
121 206
		return this.contextMenus.get(index);
122 207
	}
123 208
	
124
	/**
125
	 * Loads the chart from specified data.
126
	 * @param data
127
	 */
128
	public abstract void loadChart(Object data);
129 209

  
130
	
131 210
	/**
132
	 * Loads or reloads the chart from the chart object stored in the linked editor input.
133
	 * This method is especially used for file based implementations of charts engine for reloading a file that has been externally modified.
134
	 */
135
	public abstract void loadChart();
136
	
137
	
138
	/**
139
	 * Loads or reloads the chart from the chart object stored in the linked editor input.
140
	 * @param resetView
141
	 * @param clearChartItemsSelection
142
	 * @param squareOff
143
	 */
144
	public void loadChart(boolean resetView, boolean clearChartItemsSelection, boolean squareOff)	{
145
		this.loadChart();
146

  
147
		if(squareOff)	{
148
			this.squareOff();
149
		}
150
		
151
		if(clearChartItemsSelection)	{
152
			this.clearChartItemsSelection();
153
		}
... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.

Formats disponibles : Unified diff