aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/pl/treksoft/kvision/dropdown
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/pl/treksoft/kvision/dropdown')
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt b/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt
index f376de5a..5fac0494 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<String> = 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,22 +65,32 @@ 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 = 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
+ }
this.show()
return this
}
companion object {
+
+ const val DEFAULT_FIXED_POS_X = 5
+ const val DEFAULT_FIXED_POS_Y = 5
+
/**
* DSL builder extension function.
*
* It takes the same parameters as the constructor of the built component.
*/
fun Widget.contextMenu(
+ fixedPosition: Boolean = false,
classes: Set<String> = 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
}