This is an automated email from the ASF dual-hosted git repository.

joergrade pushed a commit to branch ISIS-3171
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/ISIS-3171 by this push:
     new 1d6ba04279 ISIS-3171 layout improvements, md display in textarea
1d6ba04279 is described below

commit 1d6ba04279de700011a6689bac600667e12fc83a
Author: Jörg Rade <[email protected]>
AuthorDate: Thu Apr 6 22:42:52 2023 +0200

    ISIS-3171 layout improvements, md display in textarea
---
 .../apache/causeway/client/kroviz/to/TypeMapper.kt |   7 +-
 .../client/kroviz/ui/builder/ColBuilder.kt         | 117 ++++++++++++++-------
 .../client/kroviz/ui/builder/FieldSetBuilder.kt    |  13 ++-
 .../client/kroviz/ui/builder/RowBuilder.kt         |   5 +-
 4 files changed, 93 insertions(+), 49 deletions(-)

diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/TypeMapper.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/TypeMapper.kt
index 12d02bd0ee..65edf262ad 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/TypeMapper.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/TypeMapper.kt
@@ -66,15 +66,10 @@ class TypeMapper {
         return when {
             isoDate.matches(contentStr) -> ValueType.DATE.type
             XmlHelper.isXml(contentStr) -> ValueType.HTML.type
+            contentStr.startsWith(":Notice:") -> ValueType.TEXT_AREA.type
             else -> ValueType.TEXT.type
         }
     }
-    fun forString(content: String): ValueType {
-        return when {
-            content.startsWith(":Notice:") -> ValueType.TEXT_AREA
-            else -> ValueType.TEXT
-        }
-    }
 
     fun forType(type: String): ValueType {
         console.log("[TM_forType] $type")
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
index f2198381b3..b498cf3d74 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
@@ -25,84 +25,124 @@ import io.kvision.panel.HPanel
 import io.kvision.panel.SimplePanel
 import org.apache.causeway.client.kroviz.to.TObject
 import org.apache.causeway.client.kroviz.to.bs.ColBs
+import org.apache.causeway.client.kroviz.to.bs.CollectionBs
+import org.apache.causeway.client.kroviz.to.bs.FieldSetBs
 import org.apache.causeway.client.kroviz.ui.core.Constants
 import org.apache.causeway.client.kroviz.ui.core.RoTable
 import org.apache.causeway.client.kroviz.ui.menu.DropDownMenuBuilder
 import org.apache.causeway.client.kroviz.utils.StringUtils
 import kotlin.math.round
 
-class ColBuilder : UiBuilder() {
+class ColBuilder(
+    val col: ColBs,
+    val tObject: TObject,
+    private val dsp: RoDisplay
+) : UiBuilder() {
 
-    fun create(col: ColBs, tObject: TObject, dsp: RoDisplay): FlexPanel {
-        val panel = buildPanel()
+    var panel: FlexPanel
 
+    init {
+        panel = buildPanel()
+        addMenu()
+        addTabgroups()
+        addFieldSets()
+        addRows()
+        addCollections()
+    }
+
+    private fun addMenu() {
         if ((col.actionList.size > 0) && (col.domainObject != null)) {
             val menu = createMenu(tObject, dsp)
             assignWidth(menu, col)
             panel.add(menu)
         }
+    }
 
-        for (tg in col.tabGroupList) {
+    private fun addTabgroups() {
+        col.tabGroupList.forEach { tg ->
             val tgCpt = TabGroupBuilder().create(tg, tObject, dsp)
             panel.add(tgCpt)
         }
-        for (fs in col.fieldSetList) {
+    }
+
+    private fun addFieldSets() {
+        col.fieldSetList.forEach { fs ->
             if (fs.propertyList.size > 0) {
-                val fsCpt = FieldSetBuilder().create(fs, tObject, dsp)!!
-                var legend = fs.name
-                if (legend.trim().isEmpty()) {
-                    legend = fs.id
-                }
-                legend = StringUtils.capitalize(legend)
-                val fsPanel = FieldsetPanel(legend = legend).add(fsCpt)
-                val tto = TooltipOptions(title = fs.id)
-                fsPanel.enableTooltip(tto)
+                val fsPanel = buildFieldSetPanel(fs)
                 assignWidth(fsPanel, col)
                 panel.add(fsPanel)
             }
         }
-        for (row in col.rowList) {
+    }
+
+    private fun addRows() {
+        col.rowList.forEach { row ->
             val rowCpt = RowBuilder().create(row, tObject, dsp)
             panel.add(rowCpt)
         }
+    }
+
+    private fun addCollections() {
         col.collectionList.forEach {
-            val id = it.id
-            val objectDM = dsp.displayModel
-            try {
-                // objectDM is sometimes null
-                val cdm = objectDM.getCollectionDisplayModelFor(id)!!
-                val fsPanel = FieldsetPanel(legend = cdm.getTitle())
-                val tablePanel = RoTable(cdm)
-                fsPanel.add(tablePanel)
-                panel.add(fsPanel)
-                cdm.isRendered = true
-            } catch (npe: NullPointerException) {
-                console.log("[CB_create] failed with NPE")
-                throw npe
-            }
+            buildTableAndWrapInFsPanel(it)
         }
-        return panel
+    }
+
+    private fun buildTableAndWrapInFsPanel(it: CollectionBs) {
+        val id = it.id
+        val objectDM = dsp.displayModel
+        try {
+            // objectDM is sometimes null
+            val cdm = objectDM.getCollectionDisplayModelFor(id)!!
+            val fsPanel = FieldsetPanel(legend = cdm.getTitle())
+            fsPanel.add(RoTable(cdm))
+            panel.add(fsPanel)
+            cdm.isRendered = true
+            console.log("[CB_buildTableAndWrapInFsPanel] succeeded")
+        } catch (npe: NullPointerException) {
+            console.log("[CB_buildTableAndWrapInFsPanel] failed with NPE")
+            throw npe
+        }
+    }
+
+    private fun buildFieldSetPanel(fs: FieldSetBs): SimplePanel {
+        console.log("[CB_buildFieldSetPanel]")
+        val fsCpt = FieldSetBuilder().create(fs, tObject, dsp)!!
+        val legend = extractLegend(fs)
+        val fsPanel = FieldsetPanel(legend = legend).add(fsCpt)
+        val tto = TooltipOptions(title = fs.id)
+        fsPanel.enableTooltip(tto)
+//        fsPanel.flexDirection = FlexDirection.ROW
+        return fsPanel
+    }
+
+    private fun extractLegend(fs: FieldSetBs): String {
+        var legend = fs.name.trim()
+        if (legend.isEmpty()) {
+            legend = fs.id
+        }
+        return StringUtils.capitalize(legend)
     }
 
     private fun buildPanel(): FlexPanel {
-        return FlexPanel(
+        val panel = FlexPanel(
             FlexDirection.COLUMN,
             FlexWrap.NOWRAP,
-            JustifyContent.SPACEBETWEEN,
-            AlignItems.CENTER,
-            AlignContent.STRETCH,
+            JustifyContent.FLEXSTART,
+            AlignItems.FLEXSTART,
+            AlignContent.FLEXSTART,
             spacing = Constants.spacing
         )
+        panel.padding = CssSize(10, UNIT.px)
+        return panel
     }
 
     private fun createMenu(tObject: TObject, dsp: RoDisplay): HPanel {
         val panel = HPanel()
         style(panel)
-
         val dd = DropDownMenuBuilder().buildForObjectWithSaveAndUndo(tObject)
         dsp.menu = dd
         panel.add(dd)
-
         return panel
     }
 
@@ -110,7 +150,10 @@ class ColBuilder : UiBuilder() {
         val proportion = col.span.toDouble().div(12)
         val percent = proportion * 100
         val rounded = round(percent)
-        val cssWidth = CssSize(rounded, UNIT.vw)
+        console.log("[CB_assignWidth]")
+        console.log(col.span)
+        console.log(rounded)
+        val cssWidth = CssSize(rounded, UNIT.perc)
         panel.flexBasis = cssWidth
         panel.flexGrow = 1
     }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
index d5ec3d245e..1c43a1934f 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
@@ -21,6 +21,7 @@ package org.apache.causeway.client.kroviz.ui.builder
 import io.kvision.form.FormPanel
 import org.apache.causeway.client.kroviz.to.TObject
 import org.apache.causeway.client.kroviz.to.TypeMapper
+import org.apache.causeway.client.kroviz.to.ValueType
 import org.apache.causeway.client.kroviz.to.bs.FieldSetBs
 import org.apache.causeway.client.kroviz.ui.core.FormItem
 import org.apache.causeway.client.kroviz.ui.core.FormPanelFactory
@@ -37,15 +38,21 @@ class FieldSetBuilder {
         val items = mutableListOf<FormItem>()
 
         for (p in fieldSetLayout.propertyList) {
-            val label = p.id
+            var label = p.id
             val member = members.firstOrNull() { it.id == label }
             if (member != null) {
                 val memberType = TypeMapper().forType(member.type!!)
+                var content = member.value?.content
+                label = p.named
+                if (memberType == ValueType.TEXT_AREA && content is String) {
+                    content = content.replace(":Notice: ", "")
+                    //          label = "Notice"
+                }
                 val size = maxOf(1, p.multiLine)
                 val fi = FormItem(
-                    label = p.named,
+                    label = label,
                     type = memberType,
-                    content = member.value?.content,
+                    content = content,
                     size = size,
                     description = p.describedAs,
                     member = member,
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
index 99287a47fb..3d204c1331 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
@@ -29,10 +29,9 @@ class RowBuilder : UiBuilder() {
 
     fun create(row: RowBs, tObject: TObject, dsp: RoDisplay): SimplePanel {
         val panel = buildPanel()
-        panel.justifyContent = JustifyContent.SPACEBETWEEN
 
         for (c in row.colList) {
-            val cpt = ColBuilder().create(c, tObject, dsp)
+            val cpt = ColBuilder(c, tObject, dsp).panel
             panel.add(cpt)
         }
         return panel
@@ -44,7 +43,7 @@ class RowBuilder : UiBuilder() {
             FlexWrap.NOWRAP,
             JustifyContent.FLEXSTART,
             AlignItems.FLEXSTART,
-            AlignContent.STRETCH,
+            AlignContent.FLEXSTART,
             spacing = Constants.spacing
         )
     }

Reply via email to