You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/06/29 17:32:01 UTC
[isis] branch master updated: ISIS-2340: fx: simple form/field
rendering
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 53a2509 ISIS-2340: fx: simple form/field rendering
53a2509 is described below
commit 53a25095d36822ddf31fbe5c48157385d26e6732
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jun 29 19:31:43 2020 +0200
ISIS-2340: fx: simple form/field rendering
---
.../incubator/viewer/javafx/model/util/_fx.java | 15 +++++----
.../javafx/ui/components/UiComponentFactoryFx.java | 11 +++----
.../javafx/ui/components/UiComponentHandlerFx.java | 5 ++-
.../viewer/javafx/ui/components/form/FormPane.java | 5 +--
.../ui/components/markup/MarkupFieldFactory.java | 27 ++++++++++++++--
.../javafx/ui/components/object/ObjectViewFx.java | 36 +++++++---------------
.../ui/components/other/FallbackFieldFactory.java | 31 ++++++++++++++++---
.../javafx/ui/components/panel/TitledPanel.java | 1 +
8 files changed, 81 insertions(+), 50 deletions(-)
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/util/_fx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/util/_fx.java
index ee950e0..ca83ca0 100644
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/util/_fx.java
+++ b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/util/_fx.java
@@ -27,7 +27,6 @@ import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
-import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.Accordion;
import javafx.scene.control.Button;
@@ -196,13 +195,13 @@ public final class _fx {
region.setPadding(new Insets(vPadding, hPadding, vPadding, hPadding));
}
- public static GridPane formLayout(GridPane component) {
- component.setAlignment(Pos.CENTER);
- component.setHgap(10);
- component.setVgap(10);
- component.setPadding(new Insets(25, 25, 25, 25));
- return component;
- }
+// public static GridPane formLayout(GridPane component) {
+// component.setAlignment(Pos.CENTER);
+// component.setHgap(10);
+// component.setVgap(10);
+// component.setPadding(new Insets(25, 25, 25, 25));
+// return component;
+// }
public static void toolbarLayout(FlowPane component) {
component.setPadding(new Insets(15, 12, 15, 12));
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
index 0c1fad2..c34dfe4 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
@@ -27,23 +27,22 @@ import org.springframework.stereotype.Service;
import org.apache.isis.core.commons.handler.ChainOfResponsibility;
import org.apache.isis.core.commons.internal.exceptions._Exceptions;
+import org.apache.isis.incubator.viewer.javafx.ui.components.form.FormField;
import org.apache.isis.viewer.common.model.binding.UiComponentFactory;
import lombok.Getter;
-import javafx.scene.Node;
-
@Service
-public class UiComponentFactoryFx implements UiComponentFactory<Node> {
+public class UiComponentFactoryFx implements UiComponentFactory<FormField> {
- private final ChainOfResponsibility<Request, Node> chainOfHandlers;
+ private final ChainOfResponsibility<Request, FormField> chainOfHandlers;
/** handlers in order of precedence (debug info)*/
@Getter
private final List<Class<?>> registeredHandlers;
@Inject
- private UiComponentFactoryFx(List<Handler<Node>> handlers) {
+ private UiComponentFactoryFx(List<UiComponentHandlerFx> handlers) {
this.chainOfHandlers = ChainOfResponsibility.of(handlers);
this.registeredHandlers = handlers.stream()
.map(Handler::getClass)
@@ -51,7 +50,7 @@ public class UiComponentFactoryFx implements UiComponentFactory<Node> {
}
@Override
- public Node componentFor(Request request) {
+ public FormField componentFor(Request request) {
return chainOfHandlers
.handle(request)
.orElseThrow(()->_Exceptions.unrecoverableFormatted(
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
index 0c82431..022a1c7 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
@@ -18,11 +18,10 @@
*/
package org.apache.isis.incubator.viewer.javafx.ui.components;
+import org.apache.isis.incubator.viewer.javafx.ui.components.form.FormField;
import org.apache.isis.viewer.common.model.binding.UiComponentFactory;
-import javafx.scene.Node;
-
public interface UiComponentHandlerFx
-extends UiComponentFactory.Handler<Node> {
+extends UiComponentFactory.Handler<FormField> {
}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/form/FormPane.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/form/FormPane.java
index ecfb80f..29131f5 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/form/FormPane.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/form/FormPane.java
@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Optional;
import org.apache.isis.applib.annotation.LabelPosition;
-import org.apache.isis.applib.annotation.PropertyLayout;
import org.apache.isis.core.commons.internal.collections._Lists;
import lombok.NonNull;
@@ -47,7 +46,6 @@ public class FormPane extends GridPane {
grid.setPadding(new Insets(25, 25, 25, 25));
}
- @PropertyLayout()
public FormPane addField(FormField formField) {
fields.add(formField);
@@ -73,6 +71,7 @@ public class FormPane extends GridPane {
}
return this;
}
+
// -- HELPER
@@ -90,6 +89,8 @@ public class FormPane extends GridPane {
grid().add(right, 1, rowCount);
++rowCount;
}
+
+
}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java
index 4103acc..7067841 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java
@@ -20,14 +20,17 @@ package org.apache.isis.incubator.viewer.javafx.ui.components.markup;
import org.springframework.core.annotation.Order;
+import org.apache.isis.applib.annotation.LabelPosition;
import org.apache.isis.applib.annotation.OrderPrecedence;
import org.apache.isis.applib.value.Markup;
import org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
+import org.apache.isis.incubator.viewer.javafx.ui.components.form.FormField;
import org.apache.isis.viewer.common.model.binding.UiComponentFactory.Request;
import lombok.val;
import javafx.scene.Node;
+import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
@org.springframework.stereotype.Component
@@ -40,7 +43,7 @@ public class MarkupFieldFactory implements UiComponentHandlerFx {
}
@Override
- public Node handle(Request request) {
+ public FormField handle(Request request) {
val markupHtml = request.getFeatureValue(Markup.class)
.map(Markup::asString)
@@ -52,7 +55,27 @@ public class MarkupFieldFactory implements UiComponentHandlerFx {
val uiComponent = new TextArea(markupHtml);
uiComponent.setPrefHeight(40);
- return uiComponent;
+
+ val uiLabel = new Label(request.getFeatureLabel());
+
+ return new FormField() {
+
+ @Override
+ public Node getUiLabel() {
+ return uiLabel;
+ }
+
+ @Override
+ public Node getUiField() {
+ return uiComponent;
+ }
+
+ @Override
+ public LabelPosition getLabelPosition() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ };
}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
index 314efc5..4d6f667 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
@@ -40,6 +40,7 @@ import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
import org.apache.isis.incubator.viewer.javafx.model.util._fx;
import org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
import org.apache.isis.incubator.viewer.javafx.ui.components.collections.TableViewFx;
+import org.apache.isis.incubator.viewer.javafx.ui.components.form.FormPane;
import org.apache.isis.incubator.viewer.javafx.ui.components.panel.TitledPanel;
import org.apache.isis.viewer.common.model.binding.UiComponentFactory;
import org.apache.isis.viewer.common.model.binding.interaction.ObjectBinding;
@@ -95,10 +96,6 @@ public class ObjectViewFx extends VBox {
@Override
protected Pane newRow(Pane container, BS3Row bs3Row) {
val uiRow = _fx.newFlowPane(container);
- //uiRow.setSpacing(4);
-
- //uiRow.setWidthFull();
- //uiRow.setWrapMode(FlexLayout.WrapMode.WRAP); // allow line breaking
return uiRow;
}
@@ -116,22 +113,8 @@ public class ObjectViewFx extends VBox {
uiCol.maxWidthProperty().bind(
container.widthProperty().multiply(realtiveWidthWithRespectToContainer));
-// container.minWidthProperty().bind(
-// container.widthProperty().multiply(realtiveWidthWithRespectToContainer));
-
uiCol.setFillWidth(true);
- uiCol.setSpacing(4);
-
- //uiCol.setOpaqueInsets(new Insets(10, 10, 10, 10));
-
-
-// final int span = bs3col.getSpan();
-// ((FlexLayout)container).setFlexGrow(span, uiCol);
-// val widthEm = String.format("%dem", span * 3); // 1em ~ 16px
-// uiCol.setWidth(null); // clear preset width style
-// uiCol.setMinWidth(widthEm);
-
return uiCol;
}
@@ -177,8 +160,8 @@ public class ObjectViewFx extends VBox {
onAction(titledPanel.getUiActionBar(), actionData);
}
- val uiFieldSet = _fx.newGrid(titledPanel);
- return _fx.formLayout(uiFieldSet);
+ val uiFieldSet = _fx.add(titledPanel, new FormPane());
+ return uiFieldSet;
}
@@ -207,16 +190,19 @@ public class ObjectViewFx extends VBox {
val owner = objectInteractor.getManagedObject();
+ val formPane = (FormPane) container;
+
PropertyInteraction.start(owner, propertyData.getId())
.checkVisibility(Where.OBJECT_FORMS)
.getManagedProperty()
.ifPresent(managedProperty -> {
- val uiProperty = _fx.add(container,
- uiComponentFactory.componentFor(
- UiComponentFactory.Request.of(
- Where.OBJECT_FORMS,
- managedProperty)));
+ val uiPropertyField = uiComponentFactory.componentFor(
+ UiComponentFactory.Request.of(
+ Where.OBJECT_FORMS,
+ managedProperty));
+
+ formPane.addField(uiPropertyField);
// handle associated actions
for(val actionData : propertyData.getActions()) {
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java
index 18f5376..9821d60 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java
@@ -25,6 +25,7 @@ import javax.inject.Provider;
import org.springframework.core.annotation.Order;
+import org.apache.isis.applib.annotation.LabelPosition;
import org.apache.isis.applib.annotation.OrderPrecedence;
import org.apache.isis.core.commons.internal.collections._Maps;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -32,12 +33,14 @@ import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
import org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
import org.apache.isis.incubator.viewer.javafx.ui.components.debug.DebugField;
+import org.apache.isis.incubator.viewer.javafx.ui.components.form.FormField;
import org.apache.isis.viewer.common.model.binding.UiComponentFactory.Request;
import org.apache.isis.viewer.common.model.debug.DebugUiModel;
import lombok.val;
import javafx.scene.Node;
+import javafx.scene.control.Label;
@org.springframework.stereotype.Component
@Order(OrderPrecedence.LAST)
@@ -51,7 +54,7 @@ public class FallbackFieldFactory implements UiComponentHandlerFx {
}
@Override
- public Node handle(Request request) {
+ public FormField handle(Request request) {
val spec = request.getObjectFeature().getSpecification();
val debugUiModel = DebugUiModel.of(spec.getCorrespondingClass().getSimpleName() + " type not handled")
@@ -74,9 +77,29 @@ public class FallbackFieldFactory implements UiComponentHandlerFx {
});
- val uiField = new DebugField(request.getObjectFeature().getName());
- uiField.setValue(debugUiModel);
- return uiField;
+ val debugField = new DebugField(request.getObjectFeature().getName());
+ debugField.setValue(debugUiModel);
+
+ val uiLabel = new Label(request.getFeatureLabel());
+
+ return new FormField() {
+
+ @Override
+ public Node getUiLabel() {
+ return uiLabel;
+ }
+
+ @Override
+ public Node getUiField() {
+ return debugField;
+ }
+
+ @Override
+ public LabelPosition getLabelPosition() {
+ return LabelPosition.TOP;
+ }
+ };
+
}
private String summarize(Facet facet) {
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/panel/TitledPanel.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/panel/TitledPanel.java
index ff53f29..37d7e23 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/panel/TitledPanel.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/panel/TitledPanel.java
@@ -38,6 +38,7 @@ public class TitledPanel extends VBox {
uiLabel = _fx.newLabel(uiActionBar, label);
_fx.h3(uiLabel);
_fx.toolbarLayout(uiActionBar);
+ super.setFillWidth(true);
}
}