blob: 0247a7f8d918ffec072f8703af7ce56836205bdc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 École Polytechnique de Montréal
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.tmf.chart.ui.swtbot.stubs;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.tracecompass.common.core.NonNullUtils;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.chart.ChartData;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.chart.ChartModel;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.ui.chart.IChartViewer;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.ui.dialog.ChartMakerDialog;
import org.eclipse.tracecompass.tmf.chart.core.model.IDataChartProvider;
import org.eclipse.tracecompass.tmf.chart.core.tests.stubs.StubObject;
import org.eclipse.tracecompass.tmf.ui.views.TmfView;
/**
* A stub view to test custom charts
*
* @author Geneviève Bastien
*/
@NonNullByDefault
public class CustomChartStubView extends TmfView {
/**
* ID of the stub view
*/
public static final String ID = "org.eclipse.tracecompass.tmf.chart.ui.swtbot.view.stub";
/**
* Text for the menu item to create a custom chart
*/
public static final String MENU_TITLE = "Create custom chart";
private static final String VIEW_NAME = "Stub View for Chart Tests";
private static @Nullable IDataChartProvider<StubObject> sfChartProvider = null;
private @Nullable Composite fContainer;
/**
* Set the data chart provider that should be used for the chart maker
* dialog
*
* @param provider The data chart provider
*/
public static void setChartProvider(IDataChartProvider<StubObject> provider) {
sfChartProvider = provider;
}
/**
* Constructor
*/
public CustomChartStubView() {
super(VIEW_NAME);
}
@Override
public void setFocus() {
}
@Override
public void createPartControl(@Nullable Composite parent) {
super.createPartControl(parent);
SashForm sf = new SashForm(parent, SWT.NONE);
fContainer = sf;
/* Add a menu for adding charts */
Action addChart = new NewChartAction();
addChart.setText(MENU_TITLE);
IMenuManager menuMgr = getViewSite().getActionBars().getMenuManager();
menuMgr.add(addChart);
}
/**
* Method that returns the composite to put a chart in
*
* @return The composite to put more widget
*/
private @Nullable Composite getContainer() {
return fContainer;
}
// ------------------------------------------------------------------------
// Anonymous classes
// ------------------------------------------------------------------------
private class NewChartAction extends Action {
@Override
public void run() {
/* Get the composite for putting the chart */
Composite composite = CustomChartStubView.this.getContainer();
if (composite == null) {
return;
}
/* Open the chart maker dialog */
IDataChartProvider<StubObject> chartProvider = sfChartProvider;
if (chartProvider == null) {
throw new NullPointerException("no chart provider set. Need to call CustomChartStubView.setChartProvider() before clicking the menu item");
}
ChartMakerDialog dialog = new ChartMakerDialog(NonNullUtils.checkNotNull(composite.getShell()), chartProvider);
if (dialog.open() != Window.OK) {
return;
}
/* Make sure the data for making a chart was generated */
ChartData data = dialog.getDataSeries();
ChartModel model = dialog.getChartModel();
if (data == null || model == null) {
return;
}
/* Make a chart with the factory constructor */
IChartViewer.createChart(composite, data, model);
}
}
}