Skip to content
Snippets Groups Projects
Commit b87b5ff5 authored by Alexander Diewald's avatar Alexander Diewald
Browse files

JFX Trees: Add List & Stream Support to TreeViews

parent 0e817484
No related branches found
No related tags found
1 merge request!1263541
DynamicTreeTableNameProvider.java 836a441e9ae6e65296c8c1426bcb76fb173254c9 YELLOW
ModelElementTreeViewer.java 9c7637313b0ce4d70566ebb4f90dfca0d9931d09 GREEN
ModelElementTreeViewer.java 52cc8d0da50af8211de741eddc4d345b76e316fa YELLOW
......@@ -25,7 +25,7 @@ import org.fortiss.tooling.base.model.element.IHierarchicElement;
import org.fortiss.tooling.base.model.element.IModelElement;
import org.fortiss.tooling.common.ui.javafx.AF3FXViewPart;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeItem;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeItemBase;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeUIProviderBase;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeViewer;
import org.fortiss.tooling.kernel.model.INamedElement;
......@@ -131,7 +131,7 @@ public class ModelElementTreeViewer<T extends INamedElement> {
/** Expands the tree down to the given value. */
public void expandItem(T value) {
DynamicTreeItem<T> item = dynTreeViewer.findItem(value);
DynamicTreeItemBase<T> item = dynTreeViewer.findItem(value);
dynTreeViewer.expandItem(item);
}
}
DynamicList.java 786300e2e914826da239329d190abea1710478ea YELLOW
DynamicListContentProvider.java 817cba44f246a361207a88ef9a4e1869215803f7 YELLOW
DynamicStreamContentProvider.java f46e91400609cba54793dd240be0fe2aa0d5cced YELLOW
DynamicTreeContentProviderBase.java 941f6ce923d08638bdea08b1c80ec6eb4d1220be YELLOW
DynamicTreeContentProviderBase.java 0f6e0a6894752d135847608bc45efa504972bb28 YELLOW
DynamicTreeItem.java 7486071d20e896d6ca9a9101bf105caccf3656d0 YELLOW
DynamicTreeItemBase.java d883066ecc181120302ca32f328538de7a45b093 YELLOW
DynamicTreeTableUIProviderBase.java f78c0f8b52fbc939166b3f94f7f6006cc0f4d32b GREEN
DynamicTreeTableViewer.java 129fdcd259e5b7f2528dfeb407676528dcc694be YELLOW
DynamicTreeUIProviderBase.java e9b68607683de279d0cb8712a28dc131c5c33ece GREEN
DynamicTreeViewer.java 7b22b9a99b7d34bfffdadd99db630bb683187d7f YELLOW
DynamicTreeViewer.java 8c20c0941bd299afce1cf237c8e29e21821c2631 YELLOW
DynamicTreeViewerBase.java a2013538b62d86f6a09efdf2cd78babac2072484 GREEN
IDoubleClickHandler.java 447f7769dead9a106b3ea3139ef0da51eb0b9a89 GREEN
IDynamicItem.java 083d02459e7ec33542d9910c04abe2581e0b5422 YELLOW
......@@ -77,8 +77,15 @@ public abstract class DynamicTreeContentProviderBase<T> {
}
/** Returns the filtered children of the given element. */
@SuppressWarnings("unchecked")
public final Collection<? extends T> getFilteredSortedChildren(T parent) {
Collection<? extends T> l = getChildren(parent);
Collection<? extends T> l = null;
if(parent instanceof Collection) {
l = (Collection<T>)parent;
} else {
l = getChildren(parent);
}
if(l == null) {
return emptyList();
}
......
......@@ -17,10 +17,13 @@ package org.fortiss.tooling.common.ui.javafx.control.treetableview;
import static org.apache.commons.lang3.SystemUtils.IS_OS_LINUX;
import java.util.Collection;
import javafx.beans.value.ChangeListener;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableView;
import javafx.scene.control.TreeView;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.DragEvent;
......@@ -38,21 +41,47 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
/** The {@link TreeView} control to be managed. */
private final TreeView<T> view;
/** {@link TreeItem} constructed for the root object. */
private final DynamicTreeItem<T> rootItem;
private final DynamicTreeItemBase<T> rootItem;
/** The UI provider implementation. */
private final DynamicTreeUIProviderBase<T> uiProvider;
/** The selection change listener. */
private ChangeListener<Object> selectionChangeListener = null;
/**
* Constructor. The given input collection must be updated by the caller such that changes are
* reflected in the corresponding {@link TreeTableView}.
*/
public DynamicTreeViewer(TreeView<T> view, Collection<T> list,
DynamicListContentProvider<T> contentProvider,
DynamicTreeUIProviderBase<T> uiProvider) {
this(view, new DynamicList<T>(list, contentProvider), false, 0, contentProvider,
uiProvider);
}
/** Constructor. */
public DynamicTreeViewer(TreeView<T> view, T root, boolean showRoot, int revealLevel,
DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeUIProviderBase<T> uiProvider) {
this(view, new DynamicTreeItem<T>(root, contentProvider), showRoot, revealLevel,
contentProvider, uiProvider);
}
/** Constructor. */
public DynamicTreeViewer(T root, boolean showRoot, int revealLevel,
DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeUIProviderBase<T> uiProvider) {
this(new TreeView<T>(), root, showRoot, revealLevel, contentProvider, uiProvider);
}
/** Constructor. */
public DynamicTreeViewer(TreeView<T> view, DynamicTreeItemBase<T> rootItem, boolean showRoot,
int revealLevel, DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeUIProviderBase<T> uiProvider) {
super(view, contentProvider);
this.uiProvider = uiProvider;
// construct view
this.view = view;
rootItem = new DynamicTreeItem<T>(root, contentProvider);
this.rootItem = rootItem;
view.setRoot(rootItem);
view.setShowRoot(showRoot);
configureCellFactory();
......@@ -68,36 +97,29 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
expandItem(rootItem, showRoot ? revealLevel : revealLevel + 1);
}
/** Constructor. */
public DynamicTreeViewer(T root, boolean showRoot, int revealLevel,
DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeUIProviderBase<T> uiProvider) {
this(new TreeView<T>(), root, showRoot, revealLevel, contentProvider, uiProvider);
}
/** Updates the tree view. */
public void update() {
// wild cast works: see constructor
DynamicTreeItem<T> rootItem = (DynamicTreeItem<T>)view.getRoot();
DynamicTreeItemBase<T> rootItem = (DynamicTreeItemBase<T>)view.getRoot();
rootItem.update();
}
/** Sets the selection of this tree view. */
public void setSelection(Object value) {
// wild cast works: see constructor
DynamicTreeItem<T> rootItem = (DynamicTreeItem<T>)view.getRoot();
DynamicTreeItem<T> item = findItem(rootItem, value);
DynamicTreeItemBase<T> rootItem = (DynamicTreeItemBase<T>)view.getRoot();
DynamicTreeItemBase<T> item = findItem(rootItem, value);
int row = view.getRow(item);
view.getSelectionModel().select(row);
}
/** Searches the {@link DynamicTreeItem} for the given value from the root. */
public DynamicTreeItem<T> findItem(T value) {
public DynamicTreeItemBase<T> findItem(T value) {
return findItem(rootItem, value);
}
/** Searches the {@link DynamicTreeItem} for the given value. */
public DynamicTreeItem<T> findItem(DynamicTreeItem<T> item, Object value) {
public DynamicTreeItemBase<T> findItem(DynamicTreeItemBase<T> item, Object value) {
if(item == null || value == null || item.getValue() == null) {
return null;
}
......@@ -105,8 +127,8 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
return item;
}
for(TreeItem<T> subItem : item.getChildren()) {
if(subItem instanceof DynamicTreeItem) {
DynamicTreeItem<T> i = findItem((DynamicTreeItem<T>)subItem, value);
if(subItem instanceof DynamicTreeItemBase) {
DynamicTreeItemBase<T> i = findItem((DynamicTreeItemBase<T>)subItem, value);
if(i != null) {
return i;
}
......
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