You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by jo...@apache.org on 2021/06/16 17:12:38 UTC

[isis] 01/03: ISIS-2505 Action menu rendered in upper left corner

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

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

commit 9fa93b374238564dc38dfc4d23a0686f05eab5c7
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Tue Jun 1 17:45:25 2021 +0200

    ISIS-2505 Action menu rendered in upper left corner
---
 .../kroviz/core/aggregator/CollectionAggregator.kt |  2 +-
 .../isis/client/kroviz/ui/builder/ColBuilder.kt    | 59 +++++++++++++++++-----
 .../isis/client/kroviz/ui/builder/LayoutBuilder.kt | 15 ++----
 .../isis/client/kroviz/ui/builder/RowBuilder.kt    | 44 ++++++----------
 .../isis/client/kroviz/ui/builder/TabBuilder.kt    | 14 +++--
 .../client/kroviz/ui/builder/TabGroupBuilder.kt    | 13 ++---
 .../isis/client/kroviz/ui/builder/UiBuilder.kt     | 14 +++++
 .../apache/isis/client/kroviz/ui/core/UiManager.kt | 16 +++---
 8 files changed, 98 insertions(+), 79 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt
index e1ac64f..c114c38 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt
@@ -58,7 +58,7 @@ class CollectionAggregator(actionTitle: String, val parent: ObjectAggregator? =
 
             if (parent == null) {
                 if (dpm.canBeDisplayed()) {
-                    UiManager.openListView(this)
+                    UiManager.openCollectionView(this)
                 }
             } else {
                 console.log("[CA.opdate] can be displayed / parent = OA")
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
index 85054c4..0a8bf9c 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
@@ -18,33 +18,64 @@
  */
 package org.apache.isis.client.kroviz.ui.builder
 
+import io.kvision.core.*
+import io.kvision.panel.FieldsetPanel
+import io.kvision.panel.FlexPanel
+import io.kvision.panel.HPanel
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.to.bs3.Col
+import org.apache.isis.client.kroviz.ui.core.MenuFactory
 import org.apache.isis.client.kroviz.ui.core.RoDisplay
-import io.kvision.core.*
-import io.kvision.core.FlexWrap
-import io.kvision.panel.*
 
-class ColBuilder {
+class ColBuilder : UiBuilder() {
 
     fun create(col: Col, tObject: TObject, dsp: RoDisplay): FlexPanel {
-        val result = FlexPanel(
-                FlexDirection.COLUMN,
-                FlexWrap.NOWRAP,
-                JustifyContent.SPACEBETWEEN,
-                AlignItems.CENTER,
-                AlignContent.STRETCH,
-                spacing = 10)
+        val panel = buildPanel()
+        console.log("[CB.create] col:")
+        console.log(col)
+
+        if (col.actionList.size > 0) {
+            val menu = createMenu(tObject, dsp)
+            panel.add(menu)
+        }
+
         for (tg in col.tabGroupList) {
             val tgCpt = TabGroupBuilder().create(tg, tObject, dsp)
-            result.add(tgCpt)
+            panel.add(tgCpt)
         }
         for (fs in col.fieldSetList) {
             val fsCpt = FieldSetBuilder().create(fs, tObject, dsp)!!
             val fsPanel = FieldsetPanel(legend = fs.name).add(fsCpt)
-            result.add(fsPanel)
+            panel.add(fsPanel)
         }
-        return result
+        return panel
+    }
+
+    private fun buildPanel(): FlexPanel {
+        return FlexPanel(
+                FlexDirection.COLUMN,
+                FlexWrap.NOWRAP,
+                JustifyContent.SPACEBETWEEN,
+                AlignItems.CENTER,
+                AlignContent.STRETCH,
+                spacing = 10)
+    }
+
+    fun createMenu(tObject: TObject, dsp: RoDisplay): HPanel {
+        val panel = HPanel()
+        style(panel)
+
+        val dd = MenuFactory.buildForObject(tObject)
+        dd.marginTop = CssSize(10, UNIT.px)
+        dd.marginBottom = CssSize(10, UNIT.px)
+        dd.width = CssSize(100, UNIT.perc)
+        MenuFactory.amendWithSaveUndo(dd, tObject)
+        MenuFactory.disableSaveUndo(dd)
+        dsp.menu = dd
+        panel.add(dd)
+
+        return panel
     }
 
+
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/LayoutBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/LayoutBuilder.kt
index bcef92f..7d28092 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/LayoutBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/LayoutBuilder.kt
@@ -18,27 +18,20 @@
  */
 package org.apache.isis.client.kroviz.ui.builder
 
+import io.kvision.panel.VPanel
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.to.bs3.Grid
 import org.apache.isis.client.kroviz.ui.core.RoDisplay
-import io.kvision.core.CssSize
-import io.kvision.core.UNIT
-import io.kvision.panel.VPanel
 
 class LayoutBuilder {
 
     fun create(grid: Grid, tObject: TObject, dsp: RoDisplay): VPanel {
-        val result = VPanel()
-
-        val oCpt = RowBuilder().createMenu(tObject, dsp)
-        oCpt.width = CssSize(100, UNIT.perc)
-        result.add(oCpt)
-
+        val panel = VPanel()
         for (rl in grid.rows) {
             val cpt = RowBuilder().create(rl, tObject, dsp)
-            result.add(cpt)
+            panel.add(cpt)
         }
-        return result
+        return panel
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/RowBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/RowBuilder.kt
index 1ca17ab..64b77d8 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/RowBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/RowBuilder.kt
@@ -18,46 +18,32 @@
  */
 package org.apache.isis.client.kroviz.ui.builder
 
+import io.kvision.core.*
+import io.kvision.panel.FlexPanel
+import io.kvision.panel.SimplePanel
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.to.bs3.Row
-import org.apache.isis.client.kroviz.ui.core.MenuFactory
 import org.apache.isis.client.kroviz.ui.core.RoDisplay
-import io.kvision.core.*
-import io.kvision.core.FlexWrap
-import io.kvision.panel.*
 
-class RowBuilder {
+class RowBuilder : UiBuilder() {
 
     fun create(row: Row, tObject: TObject, dsp: RoDisplay): SimplePanel {
-        val result = FlexPanel(
-                FlexDirection.ROW,
-                FlexWrap.NOWRAP,
-                JustifyContent.FLEXSTART,
-                AlignItems.FLEXSTART,
-                AlignContent.STRETCH,
-                spacing = 10 )
-
+        val panel = buildPanel()
         for (c in row.colList) {
             val cpt = ColBuilder().create(c, tObject, dsp)
-            result.add(cpt)
+            panel.add(cpt)
         }
-        return result
+        return panel
     }
 
-    fun createMenu(tObject: TObject, dsp: RoDisplay): HPanel {
-        val result = HPanel()
-        result.width = CssSize(100, UNIT.perc)
-        result.height = CssSize(100, UNIT.perc)
-
-        val dd = MenuFactory.buildForObject(tObject)
-        dd.marginTop = CssSize(10, UNIT.px)
-        dd.marginBottom = CssSize(10, UNIT.px)
-        MenuFactory.amendWithSaveUndo(dd, tObject)
-        MenuFactory.disableSaveUndo(dd)
-        dsp.menu = dd
-        result.add(dd)
-
-        return result
+    private fun buildPanel(): FlexPanel {
+        return FlexPanel(
+                FlexDirection.ROW,
+                FlexWrap.NOWRAP,
+                JustifyContent.FLEXSTART,
+                AlignItems.FLEXSTART,
+                AlignContent.STRETCH,
+                spacing = 10)
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/TabBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/TabBuilder.kt
index f529c31..b8a6fb2 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/TabBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/TabBuilder.kt
@@ -22,23 +22,21 @@ import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.to.bs3.Tab
 import org.apache.isis.client.kroviz.ui.core.RoDisplay
 import io.kvision.core.Component
-import io.kvision.core.CssSize
-import io.kvision.core.UNIT
 import io.kvision.panel.SimplePanel
 
-class TabBuilder {
+class TabBuilder : UiBuilder() {
 
     fun create(tabLayout: Tab, tObject: TObject, tab: RoDisplay): Component {
-        val result = SimplePanel()
-        result.width = CssSize(100, UNIT.perc)
-        result.height = CssSize(100, UNIT.perc)
+        val panel = SimplePanel()
+        style(panel)
+
         var b: SimplePanel
         for (r in tabLayout.rowList) {
             b = RowBuilder().create(r, tObject, tab)
             b.title = r.id
-            result.add(b)
+            panel.add(b)
         }
-        return result
+        return panel
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/TabGroupBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/TabGroupBuilder.kt
index 4c61b12..ac05b90 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/TabGroupBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/TabGroupBuilder.kt
@@ -22,22 +22,19 @@ import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.to.bs3.TabGroup
 import org.apache.isis.client.kroviz.ui.core.RoDisplay
 import io.kvision.core.Component
-import io.kvision.core.CssSize
-import io.kvision.core.UNIT
 import io.kvision.panel.TabPanel
 
-class TabGroupBuilder {
+class TabGroupBuilder : UiBuilder() {
 
     fun create(tabGroupLayout: TabGroup, tObject: TObject, dsp: RoDisplay): Component {
-        val result = TabPanel()
-        result.width = CssSize(100, UNIT.perc)
-        result.height = CssSize(100, UNIT.perc)
+        val panel = TabPanel()
+        style(panel)
 
         for (t in tabGroupLayout.tabList) {
             val cpt = TabBuilder().create(t, tObject, dsp)
-            result.addTab(t.name, cpt)
+            panel.addTab(t.name, cpt)
         }
-        return result
+        return panel
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/UiBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/UiBuilder.kt
new file mode 100644
index 0000000..11ef84a
--- /dev/null
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/UiBuilder.kt
@@ -0,0 +1,14 @@
+package org.apache.isis.client.kroviz.ui.builder
+
+import io.kvision.core.CssSize
+import io.kvision.core.UNIT
+import io.kvision.panel.SimplePanel
+
+abstract class UiBuilder {
+
+    protected fun style(panel: SimplePanel) {
+        panel.width = CssSize(100, UNIT.perc)
+        panel.height = CssSize(100, UNIT.perc)
+    }
+
+}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
index 8fab75e..c87c0ae 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
@@ -91,6 +91,13 @@ object UiManager {
      * is added as attribute to the tab in order to being able to recreate it on refresh.
      */
     fun addSvg(title: String, svgCode: String) {
+        fun buildSvgPanel(uuid: UUID): FormPanelFactory {
+            val formItems = mutableListOf<FormItem>()
+            val newFi = FormItem("svg", ValueType.SVG_INLINE, callBack = uuid)
+            formItems.add(newFi)
+            return FormPanelFactory(formItems)
+        }
+
         val uuid = UUID()
         DomUtil.appendTo(uuid, svgCode)
 
@@ -105,13 +112,6 @@ object UiManager {
         EventStore.addView(title, aggregator, panel)
     }
 
-    private fun buildSvgPanel(uuid: UUID): FormPanelFactory {
-        val formItems = mutableListOf<FormItem>()
-        val newFi = FormItem("svg", ValueType.SVG_INLINE, callBack = uuid)
-        formItems.add(newFi)
-        return FormPanelFactory(formItems)
-    }
-
     fun closeView(tab: SimplePanel) {
         console.log("[UM.closeView]")
         console.log(tab)
@@ -133,7 +133,7 @@ object UiManager {
         RoStatusBar.updateUser(user)
     }
 
-    fun openListView(aggregator: BaseAggregator) {
+    fun openCollectionView(aggregator: BaseAggregator) {
         val displayable = aggregator.dpm
         val title: String = Utils.extractTitle(displayable.title)
         val panel = RoTable(displayable as CollectionDM)