From 9cf9f5de858a91cdc7335ba4ef001a804829e5c5 Mon Sep 17 00:00:00 2001 From: Alexander Diewald <diewald@fortiss.org> Date: Fri, 24 Jul 2020 09:59:49 +0200 Subject: [PATCH] Common.UI JFX: Commonize constructors of TreeTables Issue-Ref: 3541 Issue-Url: https://af3-developer.fortiss.org/issues/3541 Signed-off-by: Alexander Diewald <diewald@fortiss.org> --- .../ui/javafx/control/treetableview/.ratings | 9 +-- .../control/treetableview/DynamicList.java | 15 ++--- .../treetableview/DynamicTreeItem.java | 15 ++--- .../treetableview/DynamicTreeItemBase.java | 31 +++++++++ .../treetableview/DynamicTreeTableViewer.java | 66 +++++-------------- .../treetableview/DynamicTreeViewer.java | 2 +- 6 files changed, 68 insertions(+), 70 deletions(-) create mode 100644 org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItemBase.java 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 2a3119126..f19dcc6e3 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,11 +1,12 @@ -DynamicList.java 5c6179c9772f92ebf3117bae8743fd4bd3237dfb YELLOW +DynamicList.java 7b5b1ce48c93292d9ee79ed58792d1157687ca3c YELLOW DynamicListContentProvider.java 817cba44f246a361207a88ef9a4e1869215803f7 YELLOW DynamicTreeContentProviderBase.java 6760a6dc5721175b1dada8f30fd9da05f7bcc4b3 GREEN -DynamicTreeItem.java eb8b5eb58f17f2cdc55d4cb49b22518d9eaba2cf YELLOW +DynamicTreeItem.java 53bb2886186c7cda1c3e1a9340b3df622089ff16 YELLOW +DynamicTreeItemBase.java d883066ecc181120302ca32f328538de7a45b093 YELLOW DynamicTreeTableUIProviderBase.java f78c0f8b52fbc939166b3f94f7f6006cc0f4d32b GREEN -DynamicTreeTableViewer.java 3879aab51ac30498d8fb123c72e1ffca0445c477 YELLOW +DynamicTreeTableViewer.java 048e242856e2ac56969711d2698bdbb2c4235704 YELLOW DynamicTreeUIProviderBase.java e9b68607683de279d0cb8712a28dc131c5c33ece GREEN -DynamicTreeViewer.java 725f41f4fb4b6bfa813f010fb9083ab02eea164a GREEN +DynamicTreeViewer.java 7b22b9a99b7d34bfffdadd99db630bb683187d7f 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/DynamicList.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicList.java index 5c6179c97..7b5b1ce48 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicList.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicList.java @@ -24,15 +24,15 @@ import javafx.scene.control.TreeItem; * {@link TreeItem} with support for dynamic children using the * {@link DynamicList#update()} method. */ -public class DynamicList<T> extends TreeItem<T> implements IDynamicItem { +public class DynamicList<T> extends DynamicTreeItemBase<T> { /** The viewer. */ - private DynamicTreeViewerBase<T> viewer; + private DynamicTreeContentProviderBase<T> contentProvider; /** Constructor. */ @SuppressWarnings("unchecked") - public DynamicList(Collection<T> data, DynamicTreeViewerBase<T> viewer) { + public DynamicList(Collection<T> data, DynamicTreeContentProviderBase<T> contentProvider) { super((T)data); - this.viewer = viewer; + this.contentProvider = contentProvider; } /** {@inheritDoc} */ @@ -47,9 +47,8 @@ public class DynamicList<T> extends TreeItem<T> implements IDynamicItem { } // get list of children and create tree items getChildren().clear(); - DynamicTreeContentProviderBase<T> cp = viewer.getContentProvider(); - for(T element : cp.getFilteredSortedChildren(getValue())) { - DynamicTreeItem<T> dti = new DynamicTreeItem<T>(element, viewer); + for(T element : contentProvider.getFilteredSortedChildren(getValue())) { + DynamicTreeItem<T> dti = new DynamicTreeItem<T>(element, contentProvider); getChildren().add(dti); dti.update(); } @@ -58,7 +57,7 @@ public class DynamicList<T> extends TreeItem<T> implements IDynamicItem { /** {@inheritDoc} */ @Override public boolean isLeaf() { - Collection<? extends Object> children = viewer.getContentProvider().getChildren(getValue()); + Collection<? extends Object> children = contentProvider.getChildren(getValue()); return children == null || children.isEmpty(); } } diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItem.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItem.java index eb8b5eb58..53bb28861 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItem.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItem.java @@ -24,14 +24,14 @@ import javafx.scene.control.TreeItem; * {@link TreeItem} with support for dynamic children using the * {@link DynamicTreeItem#update()} method. */ -public class DynamicTreeItem<T> extends TreeItem<T> implements IDynamicItem { +public class DynamicTreeItem<T> extends DynamicTreeItemBase<T> { /** The viewer. */ - private DynamicTreeViewerBase<T> viewer; + private DynamicTreeContentProviderBase<T> contentProvider; /** Constructor. */ - public DynamicTreeItem(T data, DynamicTreeViewerBase<T> viewer) { + public DynamicTreeItem(T data, DynamicTreeContentProviderBase<T> viewer) { super(data); - this.viewer = viewer; + this.contentProvider = viewer; } /** {@inheritDoc} */ @@ -46,13 +46,12 @@ public class DynamicTreeItem<T> extends TreeItem<T> implements IDynamicItem { } // get list of children and create tree items getChildren().clear(); - DynamicTreeContentProviderBase<T> cp = viewer.getContentProvider(); - for(T element : cp.getFilteredSortedChildren(getValue())) { + for(T element : contentProvider.getFilteredSortedChildren(getValue())) { DynamicTreeItem<T> dti; if(expanded.containsKey(element)) { dti = (DynamicTreeItem<T>)expanded.get(element); } else { - dti = new DynamicTreeItem<T>(element, viewer); + dti = new DynamicTreeItem<T>(element, contentProvider); } getChildren().add(dti); dti.update(); @@ -62,7 +61,7 @@ public class DynamicTreeItem<T> extends TreeItem<T> implements IDynamicItem { /** {@inheritDoc} */ @Override public boolean isLeaf() { - Collection<? extends Object> children = viewer.getContentProvider().getChildren(getValue()); + Collection<? extends Object> children = contentProvider.getChildren(getValue()); return children == null || children.isEmpty(); } } diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItemBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItemBase.java new file mode 100644 index 000000000..d883066ec --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItemBase.java @@ -0,0 +1,31 @@ +/*-------------------------------------------------------------------------+ +| 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); + } +} diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java index 3879aab51..048e24285 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java @@ -51,58 +51,33 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { public DynamicTreeTableViewer(TreeTableView<T> view, Collection<T> list, DynamicListContentProvider<T> contentProvider, DynamicTreeTableUIProviderBase<T> uiProvider) { - super(view, contentProvider); - this.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); + this(view, new DynamicList<T>(list, contentProvider), false, 0, contentProvider, + uiProvider); } /** Constructor. */ public DynamicTreeTableViewer(TreeTableView<T> view, T root, boolean showRoot, int revealLevel, DynamicTreeContentProviderBase<T> contentProvider, 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); this.uiProvider = uiProvider; // construct view this.view = view; - DynamicTreeItem<T> rootItem = new DynamicTreeItem<T>(root, this); view.setRoot(rootItem); view.setShowRoot(showRoot); view.setEditable(true); @@ -141,13 +116,6 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { 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. */ public void update() { // wild cast works: see constructor 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 725f41f4f..7b22b9a99 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 @@ -52,7 +52,7 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> { this.uiProvider = uiProvider; // construct view this.view = view; - rootItem = new DynamicTreeItem<T>(root, this); + rootItem = new DynamicTreeItem<T>(root, contentProvider); view.setRoot(rootItem); view.setShowRoot(showRoot); configureCellFactory(); -- GitLab