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)