/*
* Copyright (c) 2004-2011 Marco Maccaferri and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marco Maccaferri - initial API and implementation
*/
package org.eclipsetrader.ui.internal.charts.views;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IViewPart;
import org.eclipsetrader.ui.charts.BaseChartViewer;
import org.eclipsetrader.ui.charts.ChartRowViewItem;
import org.eclipsetrader.ui.charts.ChartView;
import org.eclipsetrader.ui.charts.IChartEditorListener;
import org.eclipsetrader.ui.charts.IChartObject;
import org.eclipsetrader.ui.charts.IChartObjectFactory;
import org.eclipsetrader.ui.charts.IEditableChartObject;
import org.eclipsetrader.ui.internal.UIActivator;
public class ToolAction extends Action {
private IViewPart viewPart;
private String chartObjectId;
private IChartObjectFactory factory;
private IChartObject chartObject;
private IChartEditorListener editorListener = new IChartEditorListener() {
@Override
public void applyEditorValue() {
BaseChartViewer viewer = (BaseChartViewer) viewPart.getAdapter(BaseChartViewer.class);
viewer.getEditor().removeListener(editorListener);
handleApplyEditorValue();
}
@Override
public void cancelEditor() {
BaseChartViewer viewer = (BaseChartViewer) viewPart.getAdapter(BaseChartViewer.class);
viewer.getEditor().removeListener(editorListener);
handleCancelEditor();
}
};
public ToolAction(String title, IViewPart viewPart, String chartObjectId) {
super(title, AS_CHECK_BOX);
setId(chartObjectId);
this.viewPart = viewPart;
this.chartObjectId = chartObjectId;
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.Action#run()
*/
@Override
public void run() {
factory = UIActivator.getDefault().getChartObjectFactory(chartObjectId);
if (factory != null) {
chartObject = factory.createObject(null);
if (chartObject instanceof IEditableChartObject) {
BaseChartViewer viewer = (BaseChartViewer) viewPart.getAdapter(BaseChartViewer.class);
viewer.getEditor().addListener(editorListener);
viewer.activateEditor((IEditableChartObject) chartObject);
}
}
}
protected void handleApplyEditorValue() {
BaseChartViewer viewer = (BaseChartViewer) viewPart.getAdapter(BaseChartViewer.class);
IChartObject[] currentObject = viewer.getSelectedChartCanvas().getChartObject();
int index = viewer.getSelectedChartCanvasIndex();
if (index != -1) {
IChartObject[] newObject = new IChartObject[currentObject.length + 1];
System.arraycopy(currentObject, 0, newObject, 0, currentObject.length);
newObject[currentObject.length] = chartObject;
viewer.getSelectedChartCanvas().setChartObject(newObject);
ChartView view = (ChartView) viewPart.getAdapter(ChartView.class);
((ChartRowViewItem) view.getItems()[index]).addFactory(factory);
viewer.setSelection(new StructuredSelection(chartObject));
}
factory = null;
chartObject = null;
setChecked(false);
}
protected void handleCancelEditor() {
factory = null;
chartObject = null;
setChecked(false);
}
protected IChartObjectFactory getFactory() {
return factory;
}
}