Skip to content
Snippets Groups Projects
Commit fd042737 authored by Florian Hölzl's avatar Florian Hölzl
Browse files

Kernel: DynamicTreeTableUIProvider filter implementation improved.

parent 306f5b52
No related branches found
No related tags found
1 merge request!863907
DynamicTreeContentProviderBase.java 767a518dc8f4ea755aeff0858d06db41c8721c0d GREEN DynamicTreeContentProviderBase.java e801da995a1b6e5a1b757247c1638bafb6073e6d YELLOW
DynamicTreeItem.java f68e85125aecdb2e588450b7652ffa57c4dc9088 GREEN DynamicTreeItem.java 15adce9e9a7fedf51f2369abf80e79ef659f066f YELLOW
DynamicTreeTableUIProviderBase.java 7bfc1395283d3dc10026aff5e2e65df88d25f3a7 GREEN DynamicTreeTableUIProviderBase.java 7bfc1395283d3dc10026aff5e2e65df88d25f3a7 GREEN
DynamicTreeTableViewer.java 3b8850f097093230401aee834fe61a16250c215c GREEN DynamicTreeTableViewer.java 80df0fbe814da719b3fa6dc1644ea3333cffee93 YELLOW
DynamicTreeUIProviderBase.java 56fe4df4577b35f1e5e6e4c4be189b706c852d52 GREEN DynamicTreeUIProviderBase.java 56fe4df4577b35f1e5e6e4c4be189b706c852d52 GREEN
DynamicTreeViewer.java da5e24ae57777a482d8e12c8262513d8143bfa93 GREEN DynamicTreeViewer.java da5e24ae57777a482d8e12c8262513d8143bfa93 GREEN
DynamicTreeViewerBase.java 47124c847de322a0ae26eb7a114f85ce4bd02d7e GREEN DynamicTreeViewerBase.java 47124c847de322a0ae26eb7a114f85ce4bd02d7e GREEN
......
...@@ -30,9 +30,20 @@ public abstract class DynamicTreeContentProviderBase<T> { ...@@ -30,9 +30,20 @@ public abstract class DynamicTreeContentProviderBase<T> {
/** Returns the children of the given parent in the tree. */ /** Returns the children of the given parent in the tree. */
protected abstract Collection<? extends T> getChildren(T parent); protected abstract Collection<? extends T> getChildren(T parent);
/** Returns whether the filter input should be enabled. */ /** The current filter expression. */
protected boolean enableFiltering() { private String filterExpression = null;
return false;
/** Sets the filter expression. */
public void setFilterExpression(String filterExpression) {
this.filterExpression = filterExpression;
}
/**
* Returns the filter expression. Sub-classes may override or simply use
* {@link #setFilterExpression(String)}
*/
protected String getFilterExpression() {
return filterExpression;
} }
/** /**
...@@ -60,12 +71,12 @@ public abstract class DynamicTreeContentProviderBase<T> { ...@@ -60,12 +71,12 @@ public abstract class DynamicTreeContentProviderBase<T> {
} }
/** Returns the filtered children of the given element. */ /** Returns the filtered children of the given element. */
public final Collection<? extends T> getFilteredSortedChildren(T parent, String filterValue) { public final Collection<? extends T> getFilteredSortedChildren(T parent) {
Collection<? extends T> l = getChildren(parent); Collection<? extends T> l = getChildren(parent);
if(l == null) { if(l == null) {
return emptyList(); return emptyList();
} }
return l.stream().filter(getFilterPredicate(filterValue)).sorted(getSortingComparator()) return l.stream().filter(getFilterPredicate(getFilterExpression()))
.collect(toList()); .sorted(getSortingComparator()).collect(toList());
} }
} }
...@@ -36,14 +36,6 @@ public class DynamicTreeItem<T> extends TreeItem<T> { ...@@ -36,14 +36,6 @@ public class DynamicTreeItem<T> extends TreeItem<T> {
/** Updates the children of this item from the underlying content model. */ /** Updates the children of this item from the underlying content model. */
public void update() { public void update() {
update(null);
}
/**
* Updates the children of this item from the underlying content model using the given filter
* value.
*/
public void update(String filterValue) {
// remember expanded state of children // remember expanded state of children
HashMap<T, TreeItem<T>> expanded = new HashMap<>(); HashMap<T, TreeItem<T>> expanded = new HashMap<>();
for(TreeItem<T> c : getChildren()) { for(TreeItem<T> c : getChildren()) {
...@@ -54,7 +46,7 @@ public class DynamicTreeItem<T> extends TreeItem<T> { ...@@ -54,7 +46,7 @@ public class DynamicTreeItem<T> extends TreeItem<T> {
// get list of children and create tree items // get list of children and create tree items
getChildren().clear(); getChildren().clear();
DynamicTreeContentProviderBase<T> cp = viewer.getContentProvider(); DynamicTreeContentProviderBase<T> cp = viewer.getContentProvider();
for(T element : cp.getFilteredSortedChildren(getValue(), filterValue)) { for(T element : cp.getFilteredSortedChildren(getValue())) {
DynamicTreeItem<T> dti; DynamicTreeItem<T> dti;
if(expanded.containsKey(element)) { if(expanded.containsKey(element)) {
dti = (DynamicTreeItem<T>)expanded.get(element); dti = (DynamicTreeItem<T>)expanded.get(element);
...@@ -62,7 +54,7 @@ public class DynamicTreeItem<T> extends TreeItem<T> { ...@@ -62,7 +54,7 @@ public class DynamicTreeItem<T> extends TreeItem<T> {
dti = new DynamicTreeItem<T>(element, viewer); dti = new DynamicTreeItem<T>(element, viewer);
} }
getChildren().add(dti); getChildren().add(dti);
dti.update(filterValue); dti.update();
} }
} }
......
...@@ -16,14 +16,11 @@ ...@@ -16,14 +16,11 @@
package org.fortiss.tooling.common.ui.javafx.control.treetableview; package org.fortiss.tooling.common.ui.javafx.control.treetableview;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.Parent;
import javafx.scene.control.SelectionMode; import javafx.scene.control.SelectionMode;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeItem; import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn; import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView; import javafx.scene.control.TreeTableView;
import javafx.scene.control.TreeTableView.TreeTableViewSelectionModel; import javafx.scene.control.TreeTableView.TreeTableViewSelectionModel;
import javafx.scene.layout.BorderPane;
/** /**
* A JavaFX {@link TreeTableView} based on an {@link DynamicTreeContentProviderBase} and * A JavaFX {@link TreeTableView} based on an {@link DynamicTreeContentProviderBase} and
...@@ -39,12 +36,6 @@ import javafx.scene.layout.BorderPane; ...@@ -39,12 +36,6 @@ import javafx.scene.layout.BorderPane;
public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
/** The {@link TreeTableView} control to be managed. */ /** The {@link TreeTableView} control to be managed. */
private final TreeTableView<T> view; private final TreeTableView<T> view;
/** The filter text field if filtering is enabled in content provider. */
private final TextField filter;
/** The pane for filter and tree widgets. */
private final BorderPane pane;
/** The content provider of this tree-table. */
private final DynamicTreeContentProviderBase<T> contentProvider;
/** The UI provider of this tree-table. */ /** The UI provider of this tree-table. */
private final DynamicTreeTableUIProviderBase<T> uiProvider; private final DynamicTreeTableUIProviderBase<T> uiProvider;
...@@ -53,22 +44,9 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { ...@@ -53,22 +44,9 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
DynamicTreeContentProviderBase<T> contentProvider, DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeTableUIProviderBase<T> uiProvider) { DynamicTreeTableUIProviderBase<T> uiProvider) {
super(contentProvider); super(contentProvider);
this.contentProvider = contentProvider;
this.uiProvider = uiProvider; this.uiProvider = uiProvider;
// construct view // construct view
this.view = view; this.view = view;
if(contentProvider.enableFiltering()) {
filter = new TextField();
filter.textProperty().addListener((obs, oVal, nVal) -> {
update();
});
pane = new BorderPane();
pane.setTop(filter);
pane.setCenter(view);
} else {
filter = null;
pane = null;
}
DynamicTreeItem<T> rootItem = new DynamicTreeItem<T>(root, this); DynamicTreeItem<T> rootItem = new DynamicTreeItem<T>(root, this);
view.setRoot(rootItem); view.setRoot(rootItem);
view.setShowRoot(showRoot); view.setShowRoot(showRoot);
...@@ -97,7 +75,7 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { ...@@ -97,7 +75,7 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
public void update() { public void update() {
// wild cast works: see constructor // wild cast works: see constructor
DynamicTreeItem<T> rootItem = (DynamicTreeItem<T>)view.getRoot(); DynamicTreeItem<T> rootItem = (DynamicTreeItem<T>)view.getRoot();
rootItem.update(filter != null ? filter.getText() : null); rootItem.update();
} }
/** Expands items up to the given level. */ /** Expands items up to the given level. */
...@@ -147,12 +125,4 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { ...@@ -147,12 +125,4 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
public TreeTableView<T> getControl() { public TreeTableView<T> getControl() {
return view; return view;
} }
/** Returns the filter pane or the tree view if filtering is disabled. */
public Parent getFilterControl() {
if(contentProvider.enableFiltering()) {
return pane;
}
return getControl();
}
} }
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