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/05/10 07:11:48 UTC
[isis] 11/12: SVG passed (instead of UUID),
functionality moved to UiManager, diagram xTimes in RoTab
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 0ffdeb0a15cf3eff0b5558fbe53500ae6ac93005
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Mon May 10 08:47:11 2021 +0200
SVG passed (instead of UUID), functionality moved to UiManager, diagram xTimes in RoTab
---
.../isis/client/kroviz/core/event/EventStore.kt | 11 ++----
.../isis/client/kroviz/core/event/LogEntry.kt | 9 +++--
.../apache/isis/client/kroviz/ui/core/RoView.kt | 9 ++---
.../apache/isis/client/kroviz/ui/core/UiManager.kt | 41 +++++++++++++++++-----
.../isis/client/kroviz/ui/dialog/DiagramDialog.kt | 31 ++++++----------
.../isis/client/kroviz/ui/kv/override/RoTab.kt | 24 +++----------
.../client/kroviz/ui/kv/override/RoTabPanel.kt | 6 ++--
.../org/apache/isis/client/kroviz/utils/DomUtil.kt | 10 ++++--
8 files changed, 69 insertions(+), 72 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
index 128d4e3..510c7a5 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
@@ -66,10 +66,9 @@ object EventStore {
updateStatus(entry)
}
- fun addView(title: String, aggregator: BaseAggregator, panel: SimplePanel, obj: Any?) {
+ fun addView(title: String, aggregator: BaseAggregator, panel: SimplePanel) {
val entry = LogEntry(title = title, aggregator = aggregator)
- entry.obj = panel
- // entry.obj = obj
+ entry.panel = panel
log(entry)
updateStatus(entry)
}
@@ -137,12 +136,6 @@ object EventStore {
}
}
- fun findByView(uuid: UUID): LogEntry? {
- return log.firstOrNull() {
- (it.obj is ScalableVectorGraphic) && ((it.obj as ScalableVectorGraphic).uuid == uuid)
- }
- }
-
fun findMenuBars(): LogEntry? {
return log.firstOrNull() {
it.obj is Menubars
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
index 6b51b47..3db0788 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
@@ -19,15 +19,14 @@
package org.apache.isis.client.kroviz.core.event
import io.kvision.html.ButtonStyle
+import io.kvision.panel.SimplePanel
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
import org.apache.isis.client.kroviz.to.TransferObject
import org.apache.isis.client.kroviz.ui.core.Constants
import org.apache.isis.client.kroviz.ui.core.UiManager
-import org.apache.isis.client.kroviz.utils.UUID
import org.apache.isis.client.kroviz.utils.Utils.removeHexCode
-import org.apache.isis.client.kroviz.utils.XmlHelper
import kotlin.js.Date
// use color codes from css instead?
@@ -63,7 +62,8 @@ data class LogEntry(
init {
state = EventState.RUNNING
title = url // stripHostPort(url)
- requestLength = request?.length ?: 0 // if this is simplyfied to request.length, Tabulator.js goes in ERROR and EventLogTable shows no entries
+ requestLength = request?.length
+ ?: 0 // if this is simplyfied to request.length, Tabulator.js goes in ERROR and EventLogTable shows no entries
}
@Contextual
@@ -85,6 +85,9 @@ data class LogEntry(
@Contextual
var obj: Any? = null
+ @Contextual
+ var panel: SimplePanel? = null
+
// alternative constructor for UI events (eg. from user interaction)
@JsName("secondaryConstructor")
constructor(title: String, aggregator: BaseAggregator) : this("", "", "") {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt
index fc21346..a95cd4e 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt
@@ -18,13 +18,12 @@
*/
package org.apache.isis.client.kroviz.ui.core
-import org.apache.isis.client.kroviz.utils.IconManager
import io.kvision.core.BsBorder
import io.kvision.core.Component
import io.kvision.core.addBsBorder
import io.kvision.panel.SimplePanel
import org.apache.isis.client.kroviz.ui.kv.override.RoTabPanel
-import org.apache.isis.client.kroviz.utils.UUID
+import org.apache.isis.client.kroviz.utils.IconManager
/**
* Area between menu bar at the top and the status bar at the bottom.
@@ -37,8 +36,7 @@ object RoView {
fun addTab(
title: String,
- panel: Component,
- uuid: UUID?) {
+ panel: Component) {
panel.addBsBorder(BsBorder.BORDER)
val index = tabPanel.findTab(title)
if (index != null) {
@@ -55,8 +53,7 @@ object RoView {
panel,
icon,
image = null,
- closable = true,
- uuid = uuid)
+ closable = true)
tabPanel.activeIndex = tabCount
tabCount += 1
}
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 6ca4ec1..4585a77 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
@@ -34,7 +34,10 @@ import org.apache.isis.client.kroviz.core.model.ListDM
import org.apache.isis.client.kroviz.core.model.ObjectDM
import org.apache.isis.client.kroviz.to.Relation
import org.apache.isis.client.kroviz.to.TObject
+import org.apache.isis.client.kroviz.to.ValueType
import org.apache.isis.client.kroviz.to.mb.Menubars
+import org.apache.isis.client.kroviz.ui.kv.override.RoTab
+import org.apache.isis.client.kroviz.utils.DomUtil
import org.apache.isis.client.kroviz.utils.ScalableVectorGraphic
import org.apache.isis.client.kroviz.utils.UUID
import org.apache.isis.client.kroviz.utils.Utils
@@ -78,13 +81,35 @@ object UiManager {
return null
}
- fun add(title: String, panel: SimplePanel, obj: Any? = null, aggregator: BaseAggregator = UndefinedDispatcher()) {
- var uuid: UUID? = null
- if (obj is ScalableVectorGraphic) {
- uuid = obj.uuid
- }
- RoView.addTab(title, panel, uuid)
- EventStore.addView(title, aggregator, panel, obj)
+ fun add(title: String, panel: SimplePanel, aggregator: BaseAggregator = UndefinedDispatcher()) {
+ RoView.addTab(title, panel)
+ EventStore.addView(title, aggregator, panel)
+ }
+
+ /**
+ * SVG code added to Tabs disappears after a refresh, therefore an SVG object (code, uuid)
+ * is added as attribute to the tab in order to being able to recreate it on refresh.
+ */
+ fun addSvg(title: String, svgCode: String) {
+ val uuid = UUID()
+ DomUtil.appendTo(uuid, svgCode)
+
+ val panel = buildSvgPanel(uuid)
+ RoView.addTab(title, panel)
+ val tab = RoView.findActive()!! as RoTab
+
+ val svg = ScalableVectorGraphic(svgCode, uuid)
+ tab.svg = svg
+
+ val aggregator: BaseAggregator = UndefinedDispatcher()
+ 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) {
@@ -112,7 +137,7 @@ object UiManager {
val displayable = aggregator.dpm
val title: String = Utils.extractTitle(displayable.title)
val panel = RoTable(displayable as ListDM)
- add(title, panel, null, aggregator)
+ add(title, panel, aggregator)
displayable.isRendered = true
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
index 64514bd..810affd 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
@@ -18,10 +18,12 @@
*/
package org.apache.isis.client.kroviz.ui.dialog
-import io.kvision.panel.VPanel
import org.apache.isis.client.kroviz.core.event.EventStore
import org.apache.isis.client.kroviz.to.ValueType
-import org.apache.isis.client.kroviz.ui.core.*
+import org.apache.isis.client.kroviz.ui.core.FormItem
+import org.apache.isis.client.kroviz.ui.core.MenuFactory
+import org.apache.isis.client.kroviz.ui.core.RoDialog
+import org.apache.isis.client.kroviz.ui.core.UiManager
import org.apache.isis.client.kroviz.utils.*
import io.kvision.html.Link as KvisionHtmlLink
@@ -58,33 +60,20 @@ class DiagramDialog(
}
private fun pin() {
- val newUuid = UUID()
- val newSvg= getDiagram(newUuid)
- val panel = buildNewPanel(newUuid)
- console.log("[DD.pin]")
- console.log(panel)
- console.log(panel.panel!!.getChildren().first())
- UiManager.add("Diagram", panel, newSvg)
- DomUtil.replaceWith(newUuid, newSvg)
+ val svgCode = getDiagramCode()
+ UiManager.addSvg("Diagram", svgCode)
dialog.close()
}
- private fun getDiagram(newUuid:UUID?): ScalableVectorGraphic {
+ private fun getDiagramCode(): String {
val logEntry = EventStore.findByDispatcher(callBack as UUID)
- val svgStr = logEntry.getResponse()
- return ScalableVectorGraphic(svgStr, newUuid)
- }
-
- private fun buildNewPanel(newUuid: UUID): FormPanelFactory {
- val formItems = mutableListOf<FormItem>()
- val newFi = FormItem("svg", ValueType.SVG_INLINE, callBack = newUuid)
- formItems.add(newFi)
- return FormPanelFactory(formItems)
+ return logEntry.getResponse()
}
@Deprecated("use leaflet/svg")
fun scale(direction: Direction) {
- val svg = getDiagram(null)
+ val svgCode = getDiagramCode()
+ val svg = ScalableVectorGraphic(svgCode)
when (direction) {
Direction.UP -> svg.scaleUp()
Direction.DOWN -> svg.scaleDown()
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTab.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTab.kt
index d3d1fd7..4b017d2 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTab.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTab.kt
@@ -36,10 +36,8 @@ import io.kvision.routing.RoutingManager
import io.kvision.state.ObservableState
import io.kvision.state.bind
import io.kvision.utils.obj
-import org.apache.isis.client.kroviz.core.event.EventStore
import org.apache.isis.client.kroviz.utils.DomUtil
import org.apache.isis.client.kroviz.utils.ScalableVectorGraphic
-import org.apache.isis.client.kroviz.utils.UUID
/**
* The single Tab component inside the TabPanel container.
@@ -58,7 +56,6 @@ open class RoTab(
image: ResString? = null,
closable: Boolean = false,
val route: String? = null,
- val uuid: UUID? = null,
init: (RoTab.() -> Unit)? = null
) : Tag(TAG.LI, classes = setOf("nav-item")) {
@@ -69,27 +66,16 @@ open class RoTab(
image: ResString? = null,
closable: Boolean = false,
route: String? = null,
- uuid: UUID? = null,
init: (RoTab.() -> Unit)? = null
- ) : this(label, icon, image, closable, route, uuid, init) {
+ ) : this(label, icon, image, closable, route, init) {
@Suppress("LeakingThis")
add(child)
}
+ var svg: ScalableVectorGraphic? = null
+
override fun render(): VNode {
- if (uuid != null) {
- console.log("[RT.render]")
- console.log(uuid)
- val logEntry = EventStore.findByView(uuid)
- if (logEntry != null) {
- val svgStr = logEntry.getResponse()
- console.log(svgStr)
- val newImage = ScalableVectorGraphic(svgStr)
- val uuid = UUID(this.id!!)
- console.log(uuid)
- DomUtil.replaceWith(uuid, newImage)
- }
- }
+ if (svg != null) DomUtil.appendTo(svg!!)
return super.render()
}
@@ -205,7 +191,7 @@ fun RoTabPanel.tab(
image: ResString? = null, closable: Boolean = false, route: String? = null,
init: (RoTab.() -> Unit)? = null
): RoTab {
- val tab = RoTab(label, icon, image, closable, route, null, init)
+ val tab = RoTab(label, icon, image, closable, route, init)
this.add(tab)
return tab
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTabPanel.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTabPanel.kt
index 2611087..7a44259 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTabPanel.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTabPanel.kt
@@ -35,7 +35,6 @@ import io.kvision.utils.obj
import io.kvision.utils.perc
import io.kvision.utils.set
import org.apache.isis.client.kroviz.ui.core.RoView
-import org.apache.isis.client.kroviz.utils.UUID
/**
* Tab position.
@@ -321,10 +320,9 @@ open class RoTabPanel(
*/
open fun addTab(
title: String, panel: Component, icon: String? = null,
- image: ResString? = null, closable: Boolean = false, route: String? = null,
- uuid: UUID? = null
+ image: ResString? = null, closable: Boolean = false, route: String? = null
): RoTabPanel {
- addTab(RoTab(title, panel, icon, image, closable, route, uuid))
+ addTab(RoTab(title, panel, icon, image, closable, route))
refresh()
return this
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomUtil.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomUtil.kt
index 2d000c9..6506d9c 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomUtil.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomUtil.kt
@@ -29,8 +29,14 @@ external fun encodeURIComponent(encodedURI: String): String
*/
object DomUtil {
- fun appendTo(uuid: UUID, response: String) {
- val svgDoc = ScalableVectorGraphic(response).document
+ fun appendTo(svg: ScalableVectorGraphic) {
+ val uuid = svg.uuid!!
+ val svgCode = svg.data
+ appendTo(uuid, svgCode)
+ }
+
+ fun appendTo(uuid: UUID, svgCode: String) {
+ val svgDoc = ScalableVectorGraphic(svgCode).document
append(uuid, svgDoc, false)
}