/*******************************************************************************
 * Copyright (c) 2017, 2018 Dortmund University of Applied Sciences and Arts 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:
 *   Dortmund University of Applied Sciences and Arts - initial API and implementation
 *******************************************************************************/

package org.eclipse.app4mc.multicore.execution.ui.traceeditor;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.EditorPart;

import javafx.application.Platform;
import javafx.embed.swt.FXCanvas;
import javafx.scene.Scene;

public abstract class FXEditorPart extends EditorPart {

	private FXCanvas canvas;

	@Override
	public void createPartControl(Composite parent) {
		Platform.setImplicitExit(false);
		this.canvas = new FXCanvas(parent, SWT.NONE);
		this.canvas.setScene(createFxScene());
	}

	protected abstract Scene createFxScene();

	@Override
	public void setFocus() {
		this.canvas.setFocus();
		setFxFocus();
	}

	protected abstract void setFxFocus();
}
