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

Common.UI JFX: Commonize constructors of TreeTables

parent 38a12ae5
No related branches found
No related tags found
1 merge request!1263541
DynamicList.java 5c6179c9772f92ebf3117bae8743fd4bd3237dfb YELLOW DynamicList.java 7b5b1ce48c93292d9ee79ed58792d1157687ca3c YELLOW
DynamicListContentProvider.java 817cba44f246a361207a88ef9a4e1869215803f7 YELLOW DynamicListContentProvider.java 817cba44f246a361207a88ef9a4e1869215803f7 YELLOW
DynamicTreeContentProviderBase.java 6760a6dc5721175b1dada8f30fd9da05f7bcc4b3 GREEN DynamicTreeContentProviderBase.java 6760a6dc5721175b1dada8f30fd9da05f7bcc4b3 GREEN
DynamicTreeItem.java eb8b5eb58f17f2cdc55d4cb49b22518d9eaba2cf YELLOW DynamicTreeItem.java 53bb2886186c7cda1c3e1a9340b3df622089ff16 YELLOW
DynamicTreeItemBase.java d883066ecc181120302ca32f328538de7a45b093 YELLOW
DynamicTreeTableUIProviderBase.java f78c0f8b52fbc939166b3f94f7f6006cc0f4d32b GREEN DynamicTreeTableUIProviderBase.java f78c0f8b52fbc939166b3f94f7f6006cc0f4d32b GREEN
DynamicTreeTableViewer.java 3879aab51ac30498d8fb123c72e1ffca0445c477 YELLOW DynamicTreeTableViewer.java 048e242856e2ac56969711d2698bdbb2c4235704 YELLOW
DynamicTreeUIProviderBase.java e9b68607683de279d0cb8712a28dc131c5c33ece GREEN DynamicTreeUIProviderBase.java e9b68607683de279d0cb8712a28dc131c5c33ece GREEN
DynamicTreeViewer.java 725f41f4fb4b6bfa813f010fb9083ab02eea164a GREEN DynamicTreeViewer.java 7b22b9a99b7d34bfffdadd99db630bb683187d7f YELLOW
DynamicTreeViewerBase.java a2013538b62d86f6a09efdf2cd78babac2072484 GREEN DynamicTreeViewerBase.java a2013538b62d86f6a09efdf2cd78babac2072484 GREEN
IDoubleClickHandler.java 447f7769dead9a106b3ea3139ef0da51eb0b9a89 GREEN IDoubleClickHandler.java 447f7769dead9a106b3ea3139ef0da51eb0b9a89 GREEN
IDynamicItem.java 083d02459e7ec33542d9910c04abe2581e0b5422 YELLOW IDynamicItem.java 083d02459e7ec33542d9910c04abe2581e0b5422 YELLOW
...@@ -24,15 +24,15 @@ import javafx.scene.control.TreeItem; ...@@ -24,15 +24,15 @@ import javafx.scene.control.TreeItem;
* {@link TreeItem} with support for dynamic children using the * {@link TreeItem} with support for dynamic children using the
* {@link DynamicList#update()} method. * {@link DynamicList#update()} method.
*/ */
public class DynamicList<T> extends TreeItem<T> implements IDynamicItem { public class DynamicList<T> extends DynamicTreeItemBase<T> {
/** The viewer. */ /** The viewer. */
private DynamicTreeViewerBase<T> viewer; private DynamicTreeContentProviderBase<T> contentProvider;
/** Constructor. */ /** Constructor. */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public DynamicList(Collection<T> data, DynamicTreeViewerBase<T> viewer) { public DynamicList(Collection<T> data, DynamicTreeContentProviderBase<T> contentProvider) {
super((T)data); super((T)data);
this.viewer = viewer; this.contentProvider = contentProvider;
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
...@@ -47,9 +47,8 @@ public class DynamicList<T> extends TreeItem<T> implements IDynamicItem { ...@@ -47,9 +47,8 @@ public class DynamicList<T> extends TreeItem<T> implements IDynamicItem {
} }
// 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(); for(T element : contentProvider.getFilteredSortedChildren(getValue())) {
for(T element : cp.getFilteredSortedChildren(getValue())) { DynamicTreeItem<T> dti = new DynamicTreeItem<T>(element, contentProvider);
DynamicTreeItem<T> dti = new DynamicTreeItem<T>(element, viewer);
getChildren().add(dti); getChildren().add(dti);
dti.update(); dti.update();
} }
...@@ -58,7 +57,7 @@ public class DynamicList<T> extends TreeItem<T> implements IDynamicItem { ...@@ -58,7 +57,7 @@ public class DynamicList<T> extends TreeItem<T> implements IDynamicItem {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public boolean isLeaf() { public boolean isLeaf() {
Collection<? extends Object> children = viewer.getContentProvider().getChildren(getValue()); Collection<? extends Object> children = contentProvider.getChildren(getValue());
return children == null || children.isEmpty(); return children == null || children.isEmpty();
} }
} }
...@@ -24,14 +24,14 @@ import javafx.scene.control.TreeItem; ...@@ -24,14 +24,14 @@ import javafx.scene.control.TreeItem;
* {@link TreeItem} with support for dynamic children using the * {@link TreeItem} with support for dynamic children using the
* {@link DynamicTreeItem#update()} method. * {@link DynamicTreeItem#update()} method.
*/ */
public class DynamicTreeItem<T> extends TreeItem<T> implements IDynamicItem { public class DynamicTreeItem<T> extends DynamicTreeItemBase<T> {
/** The viewer. */ /** The viewer. */
private DynamicTreeViewerBase<T> viewer; private DynamicTreeContentProviderBase<T> contentProvider;
/** Constructor. */ /** Constructor. */
public DynamicTreeItem(T data, DynamicTreeViewerBase<T> viewer) { public DynamicTreeItem(T data, DynamicTreeContentProviderBase<T> viewer) {
super(data); super(data);
this.viewer = viewer; this.contentProvider = viewer;
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
...@@ -46,13 +46,12 @@ public class DynamicTreeItem<T> extends TreeItem<T> implements IDynamicItem { ...@@ -46,13 +46,12 @@ public class DynamicTreeItem<T> extends TreeItem<T> implements IDynamicItem {
} }
// 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(); for(T element : contentProvider.getFilteredSortedChildren(getValue())) {
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);
} else { } else {
dti = new DynamicTreeItem<T>(element, viewer); dti = new DynamicTreeItem<T>(element, contentProvider);
} }
getChildren().add(dti); getChildren().add(dti);
dti.update(); dti.update();
...@@ -62,7 +61,7 @@ public class DynamicTreeItem<T> extends TreeItem<T> implements IDynamicItem { ...@@ -62,7 +61,7 @@ public class DynamicTreeItem<T> extends TreeItem<T> implements IDynamicItem {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public boolean isLeaf() { public boolean isLeaf() {
Collection<? extends Object> children = viewer.getContentProvider().getChildren(getValue()); Collection<? extends Object> children = contentProvider.getChildren(getValue());
return children == null || children.isEmpty(); return children == null || children.isEmpty();
} }
} }
/*-------------------------------------------------------------------------+
| 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.common.ui.javafx.control.treetableview;
import javafx.scene.control.TreeItem;
/**
* Base class for dynamic {@link TreeItem}s.
*
* @author diewald
*/
public abstract class DynamicTreeItemBase<T> extends TreeItem<T> implements IDynamicItem {
/** Constructor. */
public DynamicTreeItemBase(T data) {
super(data);
}
}
...@@ -51,58 +51,33 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { ...@@ -51,58 +51,33 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
public DynamicTreeTableViewer(TreeTableView<T> view, Collection<T> list, public DynamicTreeTableViewer(TreeTableView<T> view, Collection<T> list,
DynamicListContentProvider<T> contentProvider, DynamicListContentProvider<T> contentProvider,
DynamicTreeTableUIProviderBase<T> uiProvider) { DynamicTreeTableUIProviderBase<T> uiProvider) {
super(view, contentProvider); this(view, new DynamicList<T>(list, contentProvider), false, 0, contentProvider,
this.uiProvider = uiProvider; uiProvider);
// construct view
this.view = view;
DynamicList<T> rootItem = new DynamicList<T>(list, this);
view.setRoot(rootItem);
view.setShowRoot(false);
view.setEditable(true);
view.setRowFactory(new Callback<TreeTableView<T>, TreeTableRow<T>>() {
@Override
public TreeTableRow<T> call(TreeTableView<T> param) {
final TreeTableRow<T> row = new TreeTableRow<T>();
row.setOnDragOver(evt -> {
T item = row.getItem();
if(uiProvider.dragOver(item, evt.getDragboard())) {
evt.acceptTransferModes(TransferMode.ANY);
evt.consume();
}
});
row.setOnDragDropped(evt -> {
T item = row.getItem();
if(uiProvider.dropClipboardContent(item, evt.getDragboard())) {
evt.setDropCompleted(true);
evt.consume();
}
});
return row;
}
});
TreeTableViewSelectionModel<T> selectionModel = view.getSelectionModel();
selectionModel.setSelectionMode(SelectionMode.MULTIPLE);
selectionModel.selectedItemProperty().addListener((obs, oVal, nVal) -> {
T ov = (oVal != null) ? oVal.getValue() : null;
T nv = (nVal != null) ? nVal.getValue() : null;
uiProvider.select(ov, nv);
});
rootItem.update();
// expand to reveal (+1 if root node is not shown
expandItem(rootItem, 1);
} }
/** Constructor. */ /** Constructor. */
public DynamicTreeTableViewer(TreeTableView<T> view, T root, boolean showRoot, int revealLevel, public DynamicTreeTableViewer(TreeTableView<T> view, T root, boolean showRoot, int revealLevel,
DynamicTreeContentProviderBase<T> contentProvider, DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeTableUIProviderBase<T> uiProvider) { DynamicTreeTableUIProviderBase<T> uiProvider) {
this(view, new DynamicTreeItem<T>(root, contentProvider), showRoot, revealLevel,
contentProvider, uiProvider);
}
/** Constructor. */
public DynamicTreeTableViewer(T root, boolean showRoot, int revealLevel,
DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeTableUIProviderBase<T> uiProvider) {
this(new TreeTableView<T>(), root, showRoot, revealLevel, contentProvider, uiProvider);
}
/** Constructor. */
public DynamicTreeTableViewer(TreeTableView<T> view, DynamicTreeItemBase<T> rootItem,
boolean showRoot, int revealLevel, DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeTableUIProviderBase<T> uiProvider) {
super(view, contentProvider); super(view, contentProvider);
this.uiProvider = uiProvider; this.uiProvider = uiProvider;
// construct view // construct view
this.view = view; this.view = view;
DynamicTreeItem<T> rootItem = new DynamicTreeItem<T>(root, this);
view.setRoot(rootItem); view.setRoot(rootItem);
view.setShowRoot(showRoot); view.setShowRoot(showRoot);
view.setEditable(true); view.setEditable(true);
...@@ -141,13 +116,6 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { ...@@ -141,13 +116,6 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
expandItem(rootItem, showRoot ? revealLevel : revealLevel + 1); expandItem(rootItem, showRoot ? revealLevel : revealLevel + 1);
} }
/** Constructor. */
public DynamicTreeTableViewer(T root, boolean showRoot, int revealLevel,
DynamicTreeContentProviderBase<T> contentProvider,
DynamicTreeTableUIProviderBase<T> uiProvider) {
this(new TreeTableView<T>(), root, showRoot, revealLevel, contentProvider, uiProvider);
}
/** Updates the viewer content. */ /** Updates the viewer content. */
public void update() { public void update() {
// wild cast works: see constructor // wild cast works: see constructor
......
...@@ -52,7 +52,7 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> { ...@@ -52,7 +52,7 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
this.uiProvider = uiProvider; this.uiProvider = uiProvider;
// construct view // construct view
this.view = view; this.view = view;
rootItem = new DynamicTreeItem<T>(root, this); rootItem = new DynamicTreeItem<T>(root, contentProvider);
view.setRoot(rootItem); view.setRoot(rootItem);
view.setShowRoot(showRoot); view.setShowRoot(showRoot);
configureCellFactory(); configureCellFactory();
......
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