From 1fb687a051d37d6d13bfdcc8f84e6cf1165cadc7 Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Sun, 23 Jun 2019 02:18:06 +0200 Subject: Fixed positioning of the context menu for use inside a Tabulator component. --- .../kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/main/kotlin/pl/treksoft/kvision/dropdown') diff --git a/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt b/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt index f376de5a..c09737f2 100644 --- a/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt +++ b/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt @@ -33,9 +33,13 @@ import pl.treksoft.kvision.utils.px * Context menu component. * * @constructor + * @param element an element to bind + * @param fixedPosition use fixed positioning * @param classes a set of CSS class names */ open class ContextMenu( + element: Widget? = null, + protected val fixedPosition: Boolean = false, classes: Set = setOf(), init: (ContextMenu.() -> Unit)? = null ) : ListTag(ListType.UL, classes = classes + "dropdown-menu") { @@ -44,7 +48,7 @@ open class ContextMenu( hide() @Suppress("LeakingThis") display = Display.BLOCK - val root = Root.getLastRoot() + val root = element?.getRoot() ?: Root.getLastRoot() if (root != null) { @Suppress("LeakingThis") root.addContextMenu(this) @@ -61,8 +65,13 @@ open class ContextMenu( * @return current context menu */ open fun positionMenu(mouseEvent: MouseEvent): ContextMenu { - this.top = mouseEvent.pageY.toInt().px - this.left = mouseEvent.pageX.toInt().px + if (fixedPosition) { + this.top = 5.px + this.left = 5.px + } else { + this.top = mouseEvent.pageY.toInt().px + this.left = mouseEvent.pageX.toInt().px + } this.show() return this } @@ -74,9 +83,10 @@ open class ContextMenu( * It takes the same parameters as the constructor of the built component. */ fun Widget.contextMenu( + fixedPosition: Boolean = false, classes: Set = setOf(), init: (ContextMenu.() -> Unit)? = null ): ContextMenu { - val contextMenu = ContextMenu(classes).apply { init?.invoke(this) } + val contextMenu = ContextMenu(this, fixedPosition, classes).apply { init?.invoke(this) } this.setContextMenu(contextMenu) return contextMenu } -- cgit From e342615c0e9b126cce1b0e81129a8d3b5967a2ce Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Sun, 23 Jun 2019 12:53:29 +0200 Subject: Style fix. --- src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/main/kotlin/pl/treksoft/kvision/dropdown') diff --git a/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt b/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt index c09737f2..5fac0494 100644 --- a/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt +++ b/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt @@ -66,8 +66,8 @@ open class ContextMenu( */ open fun positionMenu(mouseEvent: MouseEvent): ContextMenu { if (fixedPosition) { - this.top = 5.px - this.left = 5.px + this.top = DEFAULT_FIXED_POS_Y.px + this.left = DEFAULT_FIXED_POS_X.px } else { this.top = mouseEvent.pageY.toInt().px this.left = mouseEvent.pageX.toInt().px @@ -77,6 +77,10 @@ open class ContextMenu( } companion object { + + const val DEFAULT_FIXED_POS_X = 5 + const val DEFAULT_FIXED_POS_Y = 5 + /** * DSL builder extension function. * -- cgit