blob: 9bee28b10459d8c1868a263ef92edaa605e56a00 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2018 STMicroelectronics and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Marzia Maugeri <marzia.maugeri@st.com> - initial API and implementation
* Red Hat Inc. - ongoing maintenance
*******************************************************************************/
package org.eclipse.linuxtools.internal.dataviewers.charts.view;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.linuxtools.dataviewers.charts.actions.SaveChartAction;
import org.eclipse.linuxtools.internal.dataviewers.charts.Activator;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.swtchart.Chart;
/**
* The chart view.
*
* <br/>
* This view is multiple and all the created chart will be displayed in an instance of this view. Each one will have a
* primary id equals to ChartView.VIEW_ID and an integer (increased by 1 at each new view) for the secondary id.
*
* @author Marzia Maugeri <marzia.maugeri@st.com>
*
*/
public class ChartView extends ViewPart {
/** The primary id of this view */
public static final String VIEW_ID = "org.eclipse.linuxtools.dataviewers.charts.view"; //$NON-NLS-1$
/** The current secondary id for these views */
private static int SEC_ID = 0;
private static final Object lock = new Object();
private Composite parent;
private SaveChartAction saveChartAction;
/**
* Create and open a new chart view <br/>
* <br/>
* <u><b>Note</b></u>: this method uses the UI thread to open the view and then it sets the input chart. The UI
* thread execution is synchronized on internal Integer SEC_ID which is the secondary id of the chart view. Each new
* chart view has a secondary id equal to SEC_ID++.
*
* @param chart The chart to create view for.
*/
public static void createChartView(final Chart chart) {
PlatformUI.getWorkbench().getDisplay().syncExec(() -> {
try {
synchronized (lock) {
ChartView view = (ChartView) PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getActivePage().showView(VIEW_ID, String.valueOf(SEC_ID++), IWorkbenchPage.VIEW_ACTIVATE);
view.setChart(chart);
}
} catch (PartInitException e) {
Status s = new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, e.getMessage(), e);
Activator.getDefault().getLog().log(s);
}
});
}
@Override
public void createPartControl(Composite parent) {
this.parent = parent;
createActions();
IActionBars actionBars = getViewSite().getActionBars();
initToolBar(actionBars.getToolBarManager());
}
private void createActions() {
saveChartAction = new SaveChartAction();
}
protected void initToolBar(IToolBarManager manager) {
manager.add(saveChartAction);
manager.update(true);
}
@Override
public void setFocus() {
if (parent != null && !parent.isDisposed()) {
parent.setFocus();
}
}
/**
* Set the chart in this view
*
* @param chart
*/
private void setChart(Chart chart) {
saveChartAction.setChart(chart);
}
public Composite getParent() {
return parent;
}
public static int getSecId() {
return SEC_ID;
}
}