Skip to content
Snippets Groups Projects
Commit 54874a29 authored by Tiziano Munaro's avatar Tiziano Munaro
Browse files

Merge remote-tracking branch 'origin/master' into 3437

parents 4a97452c 54ab765a
No related branches found
No related tags found
1 merge request!823437
/*-------------------------------------------------------------------------+
| Copyright 2011 fortiss GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.extension.base;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import javafx.embed.swt.FXCanvas;
import javafx.scene.Parent;
import javafx.scene.Scene;
/**
* Base implementation of model element editors which are using JavaFX.
*
* @author hoelzlf
*/
public abstract class FXEditorBase<T extends EObject> extends EditorBase<T> {
/** {@inheritDoc} */
@Override
public final void createPartControl(Composite parent) {
FXCanvas canvas = new FXCanvas(parent, SWT.NONE);
Scene scene = new Scene(createSceneRoot());
canvas.setScene(scene);
}
/** Creates the root node of the scene. */
protected abstract Parent createSceneRoot();
}
/*-------------------------------------------------------------------------+
| Copyright 2019 fortiss GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.extension.base;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.DiagramViewer;
import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.DiagramViewerSelection;
import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.change.Change;
import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.controller.IControllerFactory;
import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.model.IModelFactory;
import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.mvc.IMVCBundle;
import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.visual.IVisualFactory;
import org.fortiss.tooling.kernel.service.ICommandStackService;
import javafx.scene.Parent;
/**
* Base implementation of model element editors which are using LWFXEF DiaViewer.
*
* @author hoelzlf
*/
public abstract class LWFXEFEditorBase<T extends EObject> extends FXEditorBase<T>
implements ISelectionProvider {
/** The diagram viewer. */
protected DiagramViewer viewer;
/** The list of {@link ISelectionChangedListener}s. */
private final List<ISelectionChangedListener> selectionListeners = new ArrayList<>();
/** {@inheritDoc} */
@Override
protected final Parent createSceneRoot() {
viewer = new DiagramViewer(createModelFactory(), createVisualFactory(),
createControllerFactory(), cb -> modelSelected(), chg -> applyModelChange(chg));
customizeViewer();
getSite().setSelectionProvider(this);
return viewer.getVisualNode();
}
/** Customize the viewer after it is created. The default implementation changes nothing. */
protected void customizeViewer() {
// the default does nothing
}
/** Create the {@link IModelFactory}. */
protected abstract IModelFactory createModelFactory();
/** Create the {@link IVisualFactory}. */
protected abstract IVisualFactory createVisualFactory();
/** Create the {@link IControllerFactory}. */
protected abstract IControllerFactory createControllerFactory();
/** Called when a model element is selected in the diagram viewer. */
protected void modelSelected() {
getSite().getSelectionProvider().setSelection(createSelection());
}
/** Called when some change to the model happens. */
protected void applyModelChange(Change chg) {
ICommandStackService.getInstance().runAsCommand(editedObject, () -> chg.applyChange());
}
/** {@inheritDoc} */
@Override
public void addSelectionChangedListener(ISelectionChangedListener listener) {
if(!selectionListeners.contains(listener)) {
selectionListeners.add(listener);
}
}
/** {@inheritDoc} */
@Override
public void removeSelectionChangedListener(ISelectionChangedListener listener) {
selectionListeners.remove(listener);
}
/** {@inheritDoc} */
@Override
public void setSelection(ISelection selection) {
SelectionChangedEvent evt = new SelectionChangedEvent(this, selection);
for(ISelectionChangedListener scl : selectionListeners) {
scl.selectionChanged(evt);
}
}
/** {@inheritDoc} */
@Override
public ISelection getSelection() {
return createSelection();
}
/** Creates an {@link IStructuredSelection} from {@link DiagramViewerSelection}. */
private IStructuredSelection createSelection() {
DiagramViewerSelection vsel = viewer.getSelection();
if(vsel.isEmpty()) {
return StructuredSelection.EMPTY;
}
List<Object> selList = new ArrayList<>(vsel.getSecondarySelections().size() + 1);
selList.add(vsel.getPrimarySelection().getModel());
for(IMVCBundle sec : vsel.getSecondarySelections()) {
selList.add(sec.getModel());
}
return new StructuredSelection(selList);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment