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 2020/06/09 11:29:50 UTC

[isis] branch master updated: ISIS-2350 RoTable, EventLogTable icons draggable

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

joergrade 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 9fb1754  ISIS-2350 RoTable, EventLogTable icons draggable
     new 051d3ac  Merge remote-tracking branch 'origin/master'
9fb1754 is described below

commit 9fb17547486ad6eb6c0eef1b9798d60bf6c6fd98
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Tue Jun 9 13:29:01 2020 +0200

    ISIS-2350 RoTable, EventLogTable icons draggable
---
 .../isis/client/kroviz/ui/kv/ColumnFactory.kt      | 17 ++++++---
 .../isis/client/kroviz/ui/kv/EventLogTable.kt      | 29 ++++++++++------
 .../isis/client/kroviz/ui/kv/RoManagerBootstrap.kt | 40 ----------------------
 .../org/apache/isis/client/kroviz/ui/kv/RoTable.kt | 10 ++++--
 .../apache/isis/client/kroviz/ui/kv/RoToolPanel.kt | 14 +++++---
 .../apache/isis/client/kroviz/ui/kv/ToolButton.kt  | 27 ---------------
 6 files changed, 47 insertions(+), 90 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ColumnFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ColumnFactory.kt
index 9e9e37f..95772be 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ColumnFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ColumnFactory.kt
@@ -72,13 +72,20 @@ class ColumnFactory {
                 align = Align.CENTER,
                 width = "40",
                 formatterComponentFunction = { _, _, data ->
-                    Button(text = "", icon = data["iconName"] as? String, style = ButtonStyle.LINK).onClick {
-                        val tObject = (data as Exposer).delegate
-                        UiManager.displayModel(tObject)
-                    }
+                    buildButton(data, data["iconName"] as? String)
                 })
     }
 
+    private fun buildButton(data: Exposer, iconName: String?): Button {
+        val b = Button(text = "", icon = iconName, style = ButtonStyle.LINK).onClick {
+            val tObject = (data as Exposer).delegate
+            UiManager.displayModel(tObject)
+        }
+        b.setDragDropData(RoToolPanel.format, "element")
+        return b
+    }
+
+
     private fun buildLink(): ColumnDefinition<Exposer> {
         return ColumnDefinition<dynamic>(
                 title = "ResultListResult",
@@ -86,7 +93,7 @@ class ColumnFactory {
                 headerFilter = Editor.INPUT,
                 formatterComponentFunction = { _, _, data ->
                     Button(text = data["object"].title as String, icon = "fas fa-star-o", style = ButtonStyle.LINK).onClick {
-                       console.log(data)
+                        console.log(data)
                     }
                 })
     }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt
index b77edb3..8047106 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt
@@ -2,6 +2,7 @@ package org.apache.isis.client.kroviz.ui.kv
 
 import org.apache.isis.client.kroviz.core.event.LogEntry
 import org.apache.isis.client.kroviz.ui.EventLogDetail
+import pl.treksoft.kvision.core.Border
 import pl.treksoft.kvision.core.CssSize
 import pl.treksoft.kvision.core.UNIT
 import pl.treksoft.kvision.html.Button
@@ -16,8 +17,11 @@ import pl.treksoft.kvision.utils.px
 
 class EventLogTable(val model: List<LogEntry>) : VPanel() {
 
+    private val calcHeight = "calc(100vh - 128px)"
+
     private val columns = listOf(
-            ColumnDefinition(title = "",
+            ColumnDefinition(
+                    title = "",
                     field = "state",
                     width = "50",
                     align = Align.CENTER,
@@ -26,13 +30,13 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
                             EventLogDetail(data).open()
                         }.apply { margin = CssSize(-10, UNIT.px) }
                     }),
-            ColumnDefinition<LogEntry>("Title", "title",
+            ColumnDefinition<LogEntry>(
+                    title ="Title",
+                    field ="title",
                     headerFilter = Editor.INPUT,
                     width = "450",
                     formatterComponentFunction = { _, _, data ->
-                        Button(data.title, icon = data.state.iconName, style = ButtonStyle.LINK).onClick {
-                            console.log(data)
-                        }
+                        buildButton(data)
                     }),
             ColumnDefinition("State", "state", width = "100", headerFilter = Editor.INPUT),
             ColumnDefinition("Method", "method", width = "100", headerFilter = Editor.INPUT),
@@ -56,25 +60,30 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
                     width = "100")
     )
 
+    private fun buildButton(data: LogEntry): Button {
+        val b = Button(data.title, icon = data.state.iconName, style = ButtonStyle.LINK).onClick {
+            console.log(data)
+        }
+        b.setDragDropData(RoToolPanel.format, "element")
+        return b
+    }
+
     init {
         hPanel(FlexWrap.NOWRAP,
                 alignItems = FlexAlignItems.CENTER,
                 spacing = 20) {
-            padding = 10.px
-            paddingTop = 0.px
+            border = Border(width = 1.px)
         }
 
         val options = TabulatorOptions(
                 movableColumns = true,
-                height = "calc(100vh - 128px)",
+                height = calcHeight,
                 layout = Layout.FITCOLUMNS,
                 columns = columns,
                 persistenceMode = false
         )
 
         tabulator(model, options = options) {
-            marginTop = 0.px
-            marginBottom = 0.px
             setEventListener<Tabulator<LogEntry>> {
                 tabulatorRowClick = {
                 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoManagerBootstrap.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoManagerBootstrap.kt
deleted file mode 100644
index f45e570..0000000
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoManagerBootstrap.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.apache.isis.client.kroviz.ui.kv
-
-import pl.treksoft.kvision.core.Component
-import pl.treksoft.kvision.utils.isIE11
-
-internal val roManagerBootstrapInit = RoManagerBootstrap.init()
-
-/**
- * Internal singleton object which initializes and configures KVision Bootstrap module.
- */
-internal object RoManagerBootstrap {
-    init {
-        pl.treksoft.kvision.require("bootstrap/dist/js/bootstrap.bundle.min.js")
-        pl.treksoft.kvision.require("awesome-bootstrap-checkbox")
-    }
-
-    private val elementResizeEvent = pl.treksoft.kvision.require("element-resize-event")
-
-    @Suppress("UnsafeCastFromDynamic")
-    internal fun setResizeEvent(component: Component, callback: () -> Unit) {
-        if (!isIE11()) {
-            component.getElement()?.let {
-                elementResizeEvent(it, callback)
-            }
-        }
-    }
-
-    @Suppress("UnsafeCastFromDynamic")
-    internal fun clearResizeEvent(component: Component) {
-        if (!isIE11()) {
-            if (component.getElement()?.asDynamic()?.__resizeTrigger__?.contentDocument != null) {
-                component.getElement()?.let {
-                    elementResizeEvent.unbind(it)
-                }
-            }
-        }
-    }
-
-    internal fun init() {}
-}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoTable.kt
index 0b14679..8c6f071 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoTable.kt
@@ -19,21 +19,25 @@ import pl.treksoft.kvision.tabulator.tabulator
  */
 class RoTable(displayList: ListDM) : SimplePanel() {
 
+    private val calcHeight = "calc(100vh - 128px)"
+
     init {
         title = displayList.extractTitle()
         width = CssSize(100, UNIT.perc)
         val model = displayList.data
-        val columns = ColumnFactory().buildColumns(displayList, true)
+        val columns = ColumnFactory().buildColumns(
+                displayList,
+                true)
         val options = TabulatorOptions(
                 movableColumns = true,
-                height = "calc(100vh - 128px)",
+                height = calcHeight,
                 layout = Layout.FITCOLUMNS,
                 columns = columns,
                 persistenceMode = false//,
                 //selectable = true
         )
 
-        val tableTypes = setOf(/*TableType.BORDERED,*/ TableType.STRIPED, TableType.HOVER)
+        val tableTypes = setOf(TableType.STRIPED, TableType.HOVER)
 
         tabulator(model, options = options, types = tableTypes) {
             setEventListener<Tabulator<Exposer>> {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoToolPanel.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoToolPanel.kt
index 42ebe8b..3059460 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoToolPanel.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoToolPanel.kt
@@ -1,5 +1,6 @@
 package org.apache.isis.client.kroviz.ui.kv
 
+import kotlinx.serialization.UnstableDefault
 import org.apache.isis.client.kroviz.core.model.Exposer
 import org.apache.isis.client.kroviz.handler.TObjectHandler
 import org.apache.isis.client.kroviz.to.TObject
@@ -11,8 +12,10 @@ import pl.treksoft.kvision.html.ButtonStyle
 import pl.treksoft.kvision.panel.SimplePanel
 import pl.treksoft.kvision.panel.VPanel
 
+@OptIn(UnstableDefault::class)
 object RoToolPanel : SimplePanel() {
 
+    const val format = "object/model"
     val panel = VPanel()
     private val buttons = mutableListOf<Button>()
 
@@ -20,10 +23,11 @@ object RoToolPanel : SimplePanel() {
         panel.marginTop = CssSize(40, UNIT.px)
         panel.width = CssSize(40, UNIT.px)
         panel.height = CssSize(100, UNIT.perc)
-        panel.background = Background(color = Color.name(Col.LIGHTBLUE))
-        panel.setDropTarget("text/plain") { data ->
+        panel.background = Background(color = Color.name(Col.GHOSTWHITE))
+        panel.setDropTarget(format) { data ->
             console.log("[RoToolPanel] panel")
             console.log(data)
+            //TODO extract Exposer/TO from data
             val jsonStr = CFG.str
             val to = TObjectHandler().parse(jsonStr) as TObject
             val exp= Exposer(to)
@@ -36,16 +40,16 @@ object RoToolPanel : SimplePanel() {
 
     private fun initButtons() {
         val drop: Button = buildButton("Toolbox", "Sample drop target")
-        drop.setDropTarget("text/plain") { data ->
+        drop.setDropTarget(format) { data ->
             console.log("[RoToolPanel]")
             console.log(data)
-            val obj = data.dataTransfer?.getData("text/plain")!!
+            val obj = data.dataTransfer?.getData(format)!!
             BrowserWindow("http://isis.apache.org").open()
         }
         buttons.add(drop)
         //
         val drag = buildButton("Object", "Sample drag object")
-        drag.setDragDropData("text/plain", "element")
+        drag.setDragDropData(format, "element")
         buttons.add(drag)
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ToolButton.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ToolButton.kt
deleted file mode 100644
index 9a3e70a..0000000
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ToolButton.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.apache.isis.client.kroviz.ui.kv
-
-import org.w3c.dom.DragEvent
-import pl.treksoft.kvision.html.Div
-
-class ToolButton(text: String) : Div(text) {
-
-    init {
-        //style = ButtonStyle.LINK
-        // onEvent { DragEvent. }
-    }
-
-    fun ondragover(ev: DragEvent) {
-        ev.preventDefault()
-    }
-
-    fun allowDrop(ev: DragEvent) {
-        ev.preventDefault()
-    }
-
-    fun drop(ev: DragEvent) {
-        ev.preventDefault()
-        //TODO
-        //var data = ev.dataTransfer.getData("text");
-        //ev.target.appendChild(document.getElementById(data));
-    }
-}