aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/pl/treksoft/kvision/panel/TabPanel.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/pl/treksoft/kvision/panel/TabPanel.kt')
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/panel/TabPanel.kt55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/panel/TabPanel.kt b/src/main/kotlin/pl/treksoft/kvision/panel/TabPanel.kt
new file mode 100644
index 00000000..0022023b
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/panel/TabPanel.kt
@@ -0,0 +1,55 @@
+package pl.treksoft.kvision.panel
+
+import pl.treksoft.kvision.core.Container
+import pl.treksoft.kvision.core.ResString
+import pl.treksoft.kvision.core.Widget
+import pl.treksoft.kvision.html.Link
+import pl.treksoft.kvision.html.TAG
+import pl.treksoft.kvision.html.Tag
+
+open class TabPanel : Container(setOf()) {
+ private var nav = Tag(TAG.UL, classes = setOf("nav", "nav-tabs"))
+ private var content = StackPanel(false)
+ var activeIndex
+ get() = content.activeIndex
+ set(value) {
+ content.activeIndex = value
+ nav.children.forEach { it.removeCssClass("active") }
+ if (content.activeIndex >= 0 && content.activeIndex <= nav.children.size) {
+ nav.children[content.activeIndex].addCssClass("active")
+ }
+ }
+
+ init {
+ this.add(nav)
+ this.add(content)
+ }
+
+ open fun addTab(title: String, panel: Widget, icon: String? = null,
+ image: ResString? = null): TabPanel {
+ val tag = Tag(TAG.LI)
+ tag.role = "presentation"
+ tag.add(Link(title, "#", icon, image))
+ val index = nav.children.size
+ tag.setEventListener {
+ click = { e ->
+ activeIndex = index
+ e.preventDefault()
+ }
+ }
+ nav.add(tag)
+ if (nav.children.size == 1) {
+ tag.addCssClass("active")
+ activeIndex = 0
+ }
+ content.add(panel)
+ return this
+ }
+
+ open fun removeTab(index: Int): TabPanel {
+ nav.removeAt(index)
+ content.removeAt(index)
+ activeIndex = content.activeIndex
+ return this
+ }
+}