diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings index 941a0a2c0f1469623c5b258ec97002ce683449e6..060717530b29eabeeac1a14b73c38fcf99ad211c 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings @@ -1,2 +1,2 @@ DynamicTreeTableNameProvider.java 836a441e9ae6e65296c8c1426bcb76fb173254c9 YELLOW -ModelElementTreeViewer.java 9c7637313b0ce4d70566ebb4f90dfca0d9931d09 GREEN +ModelElementTreeViewer.java 52cc8d0da50af8211de741eddc4d345b76e316fa YELLOW diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/ModelElementTreeViewer.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/ModelElementTreeViewer.java index 9c7637313b0ce4d70566ebb4f90dfca0d9931d09..52cc8d0da50af8211de741eddc4d345b76e316fa 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/ModelElementTreeViewer.java +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/ModelElementTreeViewer.java @@ -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); } } diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings index 4aca8284bf281faa69d20c01af071a33eb42d44c..8150b614dd73fdd7e75de431e4443a8ddff3572b 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings @@ -1,13 +1,13 @@ 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 diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java index 941f6ce923d08638bdea08b1c80ec6eb4d1220be..0f6e0a6894752d135847608bc45efa504972bb28 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java @@ -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(); } diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java index 7b22b9a99b7d34bfffdadd99db630bb683187d7f..8c20c0941bd299afce1cf237c8e29e21821c2631 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java @@ -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; }