diff options
author | Robert Jaros <rjaros@finn.pl> | 2017-10-01 15:16:11 +0200 |
---|---|---|
committer | Robert Jaros <rjaros@finn.pl> | 2017-10-01 15:17:53 +0200 |
commit | a61948c5b79d2fb3402e14ee69a9a8f2a18c02b4 (patch) | |
tree | 4f51345d2050b141111e3f6ef4bb3d16d4c23e7f | |
parent | d732f672bfbfa565c6ec4fc037381554de251ad3 (diff) | |
download | kvision-a61948c5b79d2fb3402e14ee69a9a8f2a18c02b4.tar.gz kvision-a61948c5b79d2fb3402e14ee69a9a8f2a18c02b4.tar.bz2 kvision-a61948c5b79d2fb3402e14ee69a9a8f2a18c02b4.zip |
Widget wrapper used inside the containers
4 files changed, 32 insertions, 10 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/Showcase.kt b/src/main/kotlin/pl/treksoft/kvision/Showcase.kt index 221ac609..04ce2615 100644 --- a/src/main/kotlin/pl/treksoft/kvision/Showcase.kt +++ b/src/main/kotlin/pl/treksoft/kvision/Showcase.kt @@ -13,6 +13,7 @@ import pl.treksoft.kvision.modal.Alert import pl.treksoft.kvision.modal.Confirm import pl.treksoft.kvision.modal.Modal import pl.treksoft.kvision.panel.DIRECTION +import pl.treksoft.kvision.panel.GRIDTYPE import pl.treksoft.kvision.panel.GridPanel import pl.treksoft.kvision.panel.HPanel import pl.treksoft.kvision.panel.SplitPanel @@ -114,7 +115,7 @@ class Showcase : ApplicationBase() { val img = Image(Img("kotlin.png"), "Image", true, IMAGESHAPE.ROUNDED) root.add(img) - val grid = GridPanel(align = ALIGN.RIGHT) + val grid = GridPanel(gridtype = GRIDTYPE.DSG, align = ALIGN.RIGHT) grid.add(Tag(DIV, "0,0"), 0, 0) grid.add(Tag(DIV, "1,1"), 1, 1) grid.add(Tag(DIV, "2,2"), 2, 2) diff --git a/src/main/kotlin/pl/treksoft/kvision/core/WidgetWrapper.kt b/src/main/kotlin/pl/treksoft/kvision/core/WidgetWrapper.kt new file mode 100644 index 00000000..0aa13e64 --- /dev/null +++ b/src/main/kotlin/pl/treksoft/kvision/core/WidgetWrapper.kt @@ -0,0 +1,16 @@ +package pl.treksoft.kvision.core + +import com.github.snabbdom.VNode + +open class WidgetWrapper(private var delegate: Widget, classes: Set<String> = setOf()) : Widget(classes) { + + override fun render(): VNode { + val children = if (delegate.visible) { + arrayOf(delegate.render()) + } else { + arrayOf() + } + return kvh("div", children) + } + +} diff --git a/src/main/kotlin/pl/treksoft/kvision/panel/GridPanel.kt b/src/main/kotlin/pl/treksoft/kvision/panel/GridPanel.kt index 243d1442..f7adfe8f 100644 --- a/src/main/kotlin/pl/treksoft/kvision/panel/GridPanel.kt +++ b/src/main/kotlin/pl/treksoft/kvision/panel/GridPanel.kt @@ -3,6 +3,7 @@ package pl.treksoft.kvision.panel import com.github.snabbdom.VNode import pl.treksoft.kvision.core.Container import pl.treksoft.kvision.core.Widget +import pl.treksoft.kvision.core.WidgetWrapper import pl.treksoft.kvision.html.ALIGN import pl.treksoft.kvision.html.TAG import pl.treksoft.kvision.html.Tag @@ -27,7 +28,7 @@ internal data class WidgetParam(val widget: Widget, val size: Int, val offset: I open class GridPanel(private val gridtype: GRIDTYPE = GRIDTYPE.BOOTSTRAP, private val gridsize: GRIDSIZE = GRIDSIZE.MD, protected var rows: Int = 0, protected var cols: Int = 0, align: ALIGN = ALIGN.NONE, classes: Set<String> = setOf()) : Container(classes) { - var align = align + private var align = align set(value) { field = value refresh() @@ -97,7 +98,8 @@ open class GridPanel(private val gridtype: GRIDTYPE = GRIDTYPE.BOOTSTRAP, privat if (row != null) { for (j in 0 until cols) { val wp = row[j] - val widget = wp?.widget?.addCssClass("dsgcol") ?: Tag(TAG.DIV, classes = setOf("dsgcol")) + val widget = wp?.widget?.let { WidgetWrapper(it, setOf("dsgcol")) } ?: + Tag(TAG.DIV, classes = setOf("dsgcol")) widget.widthPercent = num if (align != ALIGN.NONE) { widget.addCssClass(align.className) @@ -121,8 +123,9 @@ open class GridPanel(private val gridtype: GRIDTYPE = GRIDTYPE.BOOTSTRAP, privat for (j in 0 until cols) { val wp = row[j] if (auto) { - val widget = wp?.widget?.addCssClass("col-" + gridsize.size + "-" + num) ?: - Tag(TAG.DIV, classes = setOf("col-" + gridsize.size + "-" + num)) + val widget = wp?.widget?.let { + WidgetWrapper(it, setOf("col-" + gridsize.size + "-" + num)) + } ?: Tag(TAG.DIV, classes = setOf("col-" + gridsize.size + "-" + num)) if (align != ALIGN.NONE) { widget.addCssClass(align.className) } @@ -130,14 +133,14 @@ open class GridPanel(private val gridtype: GRIDTYPE = GRIDTYPE.BOOTSTRAP, privat } else { if (wp != null) { val s = if (wp.size > 0) wp.size else num - wp.widget.addCssClass("col-" + gridsize.size + "-" + s) + val widget = WidgetWrapper(wp.widget, setOf("col-" + gridsize.size + "-" + s)) if (wp.offset > 0) { - wp.widget.addCssClass("col-" + gridsize.size + "-offset-" + wp.offset) + widget.addCssClass("col-" + gridsize.size + "-offset-" + wp.offset) } if (align != ALIGN.NONE) { - wp.widget.addCssClass(align.className) + widget.addCssClass(align.className) } - rowContainer.add(wp.widget) + rowContainer.add(widget) } } } diff --git a/src/main/kotlin/pl/treksoft/kvision/panel/HPanel.kt b/src/main/kotlin/pl/treksoft/kvision/panel/HPanel.kt index 685cfc87..3d1db0e7 100644 --- a/src/main/kotlin/pl/treksoft/kvision/panel/HPanel.kt +++ b/src/main/kotlin/pl/treksoft/kvision/panel/HPanel.kt @@ -3,6 +3,7 @@ package pl.treksoft.kvision.panel import com.github.snabbdom.VNode import pl.treksoft.kvision.core.Container import pl.treksoft.kvision.core.Widget +import pl.treksoft.kvision.core.WidgetWrapper import pl.treksoft.kvision.html.ALIGN import pl.treksoft.kvision.html.TAG import pl.treksoft.kvision.html.Tag @@ -21,7 +22,8 @@ open class HPanel(align: ALIGN = ALIGN.NONE, classes: Set<String> = setOf()) : G if (row != null) { for (j in 0 until cols) { val wp = row[j] - val widget = wp?.widget?.addCssClass("dsgcolf") ?: Tag(TAG.DIV, classes = setOf("dsgcolf")) + val widget = wp?.widget?.let { WidgetWrapper(it, setOf("dsgcolf")) } ?: + Tag(TAG.DIV, classes = setOf("dsgcolf")) rowContainer.add(widget) } } |