Skip to content
Snippets Groups Projects
Commit 6fd19eee authored by Simon Barner's avatar Simon Barner
Browse files

Merge 'master' of https://git.fortiss.org/af3/kernel.git into 3921


All GREEN

Conflicts:
	org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/.ratings
	org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings
	org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java


Signed-off-by: default avatarSimon Barner <barner@fortiss.org>
parents 3e5a4445 fcf4a674
No related branches found
No related tags found
1 merge request!923921
ContextMenuUtil.java 405387151d45b09dffb3b6ba44f980313c8edcaf GREEN
CurvedLinkLayoutedContentAnchorangeController.java 67c20e31ddb82fe2fd499117193353b0545839a0 GREEN
EObjectDiagramController.java 2b253941592ee25ead95223470f983f23ef9776f YELLOW
EObjectEllipticResizableContentControllerBase.java 7c862a03b97d2f2cfdcc2fcee7434de2e1e257d2 YELLOW
EObjectDiagramController.java 2b253941592ee25ead95223470f983f23ef9776f GREEN
EObjectEllipticResizableContentControllerBase.java 7c862a03b97d2f2cfdcc2fcee7434de2e1e257d2 GREEN
EObjectModelChangeProvider.java f4b60cebb088a5c81ca92a41614e1a5d40030502 GREEN
EObjectRectangularResizableContentControllerBase.java 28a17bf87f6a7222d927bc1c6b80967cb14b5f03 YELLOW
EObjectRectangularResizableContentControllerBase.java 28a17bf87f6a7222d927bc1c6b80967cb14b5f03 GREEN
KernelServiceBasedModelChangeProviderBase.java 8d1f8ef79ecd383ff74e5a2bbcf24345aabe70af GREEN
LayoutModelChangeProvider.java b5449d02eaf39086909720c43e21bd061005fc9e GREEN
LayoutedContentAnchorageController.java 9fc513a7404277514c730f7702d45588f2d81878 GREEN
......@@ -13,3 +13,4 @@ LayoutedEllipticResizableContentController.java 93bdeb7ecd5f7386724a9d7df5fff317
LayoutedLineLinkBendPointController.java f5fac4fe8e4b4c0259407acb6bfc80dbe9c3a1fb GREEN
LayoutedLinkBendPointController.java 3203d946de233274934dca1bcd47bbdc1d0a3b13 GREEN
LayoutedRectangularResizableContentController.java 3232d423572924363702898cf8ba240ce7042b65 GREEN
ModelElementFXEditorUIProviderBase.java b81bf7fc945d40f1f842876f07ba70799ab65f6d GREEN
/*-------------------------------------------------------------------------+
| Copyright 2020 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.base.ui.editor.fx.controller;
import static org.fortiss.tooling.base.ui.editor.fx.controller.ContextMenuUtil.createPrototypeMenu;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.fortiss.tooling.base.model.element.IModelElement;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableUIProviderBase;
import org.fortiss.tooling.kernel.ui.extension.base.FXEditorBase;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
import javafx.scene.Node;
import javafx.scene.control.ContextMenu;
/**
* Base implementation for FX UIProvider for ModelElements.
*
* @author bayha
*/
public abstract class ModelElementFXEditorUIProviderBase<T extends IModelElement>
extends DynamicTreeTableUIProviderBase<T> {
/** The editor used to post selection changes. */
protected final FXEditorBase<?> editor;
/** Constructor. */
public ModelElementFXEditorUIProviderBase(FXEditorBase<?> editor) {
this.editor = editor;
}
/** {@inheritDoc} */
@Override
public Node getIconNode(IModelElement element, int column) {
if(element == null) {
return null;
}
return IModelElementHandlerService.getInstance().getFXIcon(element);
}
/** {@inheritDoc} */
@Override
public ContextMenu createContextMenu(IModelElement element, int column) {
if(element == null || column != 0) {
return null;
}
ContextMenu contextMenu = new ContextMenu();
contextMenu.getItems().addAll(createPrototypeMenu(element, null));
return contextMenu;
}
/** {@inheritDoc} */
@Override
public void select(IModelElement oldValue, IModelElement newValue) {
IStructuredSelection selection =
newValue == null ? StructuredSelection.EMPTY : new StructuredSelection(newValue);
editor.getSite().getSelectionProvider().setSelection(selection);
}
}
DynamicTreeContentProviderBase.java e801da995a1b6e5a1b757247c1638bafb6073e6d GREEN
DynamicTreeItem.java 75dc5534b119ffdb3c10a65810c2a0f330b7955e GREEN
DynamicTreeTableUIProviderBase.java 75ddf3e91c08fd6a5853ab261593040d1039d774 GREEN
DynamicTreeTableViewer.java 7d35586715715a2b2b29bac37913480b18ca00d2 GREEN
DynamicTreeTableViewer.java 431ac62cbd6ad7df25852fce1b5a62a05ba510e3 GREEN
DynamicTreeUIProviderBase.java e9b68607683de279d0cb8712a28dc131c5c33ece GREEN
DynamicTreeViewer.java 4f17aa4279b6403d3a90ac8547fa86de780fc0ac GREEN
DynamicTreeViewerBase.java 47124c847de322a0ae26eb7a114f85ce4bd02d7e GREEN
DynamicTreeViewer.java e9f19d16a2a7e5a1b03b8a8b543453ac7eb6a051 GREEN
DynamicTreeViewerBase.java a2013538b62d86f6a09efdf2cd78babac2072484 GREEN
IDoubleClickHandler.java 447f7769dead9a106b3ea3139ef0da51eb0b9a89 GREEN
......@@ -15,6 +15,8 @@
*******************************************************************************/
package org.fortiss.tooling.common.ui.javafx.control.treetableview;
import static java.lang.Integer.MAX_VALUE;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TreeItem;
......@@ -46,7 +48,7 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
public DynamicTreeTableViewer(TreeTableView<T> view, T root, boolean showRoot, int revealLevel,
DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeTableUIProviderBase<T> uiProvider) {
super(contentProvider);
super(view, contentProvider);
this.uiProvider = uiProvider;
// construct view
this.view = view;
......@@ -116,6 +118,16 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
}
}
/** Expands all items on all levels. */
public void expandAllItems() {
TreeItem<T> root = view.getRoot();
if(root == null) {
return;
}
expandItem(root, MAX_VALUE);
}
/**
* Adds a column to the table part of the view. The labels, context menus and icons are shown as
* defined in the {@link DynamicTreeTableUIProviderBase}.
......@@ -151,4 +163,12 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
public TreeTableView<T> getControl() {
return view;
}
/** {@inheritDoc} */
@Override
protected T getSelectedObject() {
T value = view.getSelectionModel().getSelectedItem().getValue();
return value;
}
}
......@@ -16,9 +16,6 @@
package org.fortiss.tooling.common.ui.javafx.control.treetableview;
import javafx.beans.value.ChangeListener;
import javafx.event.Event;
import javafx.event.EventDispatchChain;
import javafx.event.EventDispatcher;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
......@@ -26,7 +23,6 @@ import javafx.scene.control.TreeView;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TransferMode;
......@@ -44,14 +40,12 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
private final DynamicTreeUIProviderBase<T> uiProvider;
/** The selection change listener. */
private ChangeListener<Object> selectionChangeListener = null;
/** The double click handler. */
private IDoubleClickHandler doubleClickHandler;
/** Constructor. */
public DynamicTreeViewer(TreeView<T> view, T root, boolean showRoot, int revealLevel,
DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeUIProviderBase<T> uiProvider) {
super(contentProvider);
super(view, contentProvider);
this.uiProvider = uiProvider;
// construct view
this.view = view;
......@@ -123,11 +117,6 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
this.selectionChangeListener = listener;
}
/** Sets the double click handler. */
public void setDoubleClickHandler(IDoubleClickHandler handler) {
this.doubleClickHandler = handler;
}
/** Configures the cell factory for the viewer. */
private void configureCellFactory() {
view.setCellFactory(param -> {
......@@ -138,8 +127,6 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
ContextMenu menu = null;
if(!empty && item != null) {
menu = uiProvider.createContextMenu(item);
EventDispatcher original = this.getEventDispatcher();
this.setEventDispatcher(new DoubleClickEventDispatcher(original));
this.setText(uiProvider.getLabel(item));
this.setGraphic(uiProvider.getIconNode(item));
this.setOnDragDetected(evt -> {
......@@ -227,37 +214,15 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
return uiProvider;
}
/**
* Customized event dispatcher to fix double-click behavior. This prevents opening/closing of
* tree items with double click listeners assigned.
*/
private class DoubleClickEventDispatcher implements EventDispatcher {
/** The original event dispatcher. */
private final EventDispatcher original;
/** {@inheritDoc} */
@Override
protected Object getSelectedObject() {
DynamicTreeItem<T> item = (DynamicTreeItem<T>)view.getSelectionModel().getSelectedItem();
/** Constructor. */
public DoubleClickEventDispatcher(EventDispatcher original) {
this.original = original;
if(item != null) {
return item.getValue();
}
/** {@inheritDoc} */
@Override
public Event dispatchEvent(Event event, EventDispatchChain tail) {
if(event instanceof MouseEvent) {
MouseEvent mevt = (MouseEvent)event;
if(mevt.getButton() == MouseButton.PRIMARY && mevt.getClickCount() >= 2) {
if(mevt.getEventType().equals(MouseEvent.MOUSE_CLICKED) &&
doubleClickHandler != null) {
DynamicTreeItem<T> item =
(DynamicTreeItem<T>)view.getSelectionModel().getSelectedItem();
if(item != null) {
doubleClickHandler.doubleClicked(item.getValue());
}
}
event.consume();
}
}
return original.dispatchEvent(event, tail);
}
return null;
}
}
......@@ -15,20 +15,91 @@
*******************************************************************************/
package org.fortiss.tooling.common.ui.javafx.control.treetableview;
import javafx.event.Event;
import javafx.event.EventDispatchChain;
import javafx.event.EventDispatcher;
import javafx.scene.control.Control;
import javafx.scene.control.TreeItem;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
/**
* Base class for {@link DynamicTreeViewer} and {@link DynamicTreeTableViewer}.
*/
abstract class DynamicTreeViewerBase<T> {
/** The double click handler. */
private IDoubleClickHandler doubleClickHandler;
/** The double click event dispatcher. */
protected DoubleClickEventDispatcher doubleClickEventDispatcher;
/** The content provider implementation. */
private final DynamicTreeContentProviderBase<T> contentProvider;
/** Constructor. */
public DynamicTreeViewerBase(DynamicTreeContentProviderBase<T> contentProvider) {
public DynamicTreeViewerBase(Control control,
DynamicTreeContentProviderBase<T> contentProvider) {
this.contentProvider = contentProvider;
setupEventDispatcher(control);
}
/** Creates and installs the EventDispatcher. Might be overwritten to change behavior. */
protected void setupEventDispatcher(Control control) {
EventDispatcher original = control.getEventDispatcher();
control.setEventDispatcher(new DoubleClickEventDispatcher(original));
}
/** Returns the content provider. */
public final DynamicTreeContentProviderBase<T> getContentProvider() {
return contentProvider;
}
/**
* Customized event dispatcher to fix double-click behavior. This prevents opening/closing of
* tree items with double click listeners assigned.
*/
private class DoubleClickEventDispatcher implements EventDispatcher {
/** The original event dispatcher. */
private final EventDispatcher original;
/** Constructor. */
public DoubleClickEventDispatcher(EventDispatcher original) {
this.original = original;
}
/** {@inheritDoc} */
@Override
public Event dispatchEvent(Event event, EventDispatchChain tail) {
if(event instanceof MouseEvent) {
MouseEvent mevt = (MouseEvent)event;
if(mevt.getButton() == MouseButton.PRIMARY && mevt.getClickCount() >= 2) {
if(mevt.getEventType().equals(MouseEvent.MOUSE_CLICKED) &&
doubleClickHandler != null) {
Object item = getSelectedObject();
if(item != null) {
doubleClickHandler.doubleClicked(item);
}
}
event.consume();
}
}
return original.dispatchEvent(event, tail);
}
}
/** Sets the double click handler. */
public void setDoubleClickHandler(IDoubleClickHandler handler) {
this.doubleClickHandler = handler;
}
/**
* Retrieves the currently selected {@link Object} from this viewer.
*
* Note: This usually is not e.g. the {@link TreeItem} or similar, but the model object, that is
* represented by it. Usually this will be some EObject.
*
* @return The currently selected {@link Object}.
*/
protected abstract Object getSelectedObject();
}
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