diff options
Diffstat (limited to 'src/main/kotlin/pl/treksoft/kvision/panel/TabPanel.kt')
-rw-r--r-- | src/main/kotlin/pl/treksoft/kvision/panel/TabPanel.kt | 55 |
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 + } +} |