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);
     }
     
 }