chore: clean up SwingMenu.shortcut using buildArray utility function

This commit is contained in:
Johannes Frohnmeyer 2024-08-07 16:24:42 +02:00
parent d1f7152b27
commit 672612588a
Signed by: Johannes
GPG Key ID: E76429612C2929F4
3 changed files with 34 additions and 17 deletions

View File

@ -34,6 +34,7 @@ dependencies {
instrumentationTools()
}
extraResources(project(mapOf("path" to ":native", "configuration" to "results")))
implementation("io.gitlab.jfronny:commons:2.0.0-SNAPSHOT")
implementation("io.gitlab.jfronny:commons-unsafe:2.0.0-SNAPSHOT")
// implementation("com.github.hypfvieh:dbus-java-core:5.0.0")
// implementation("com.github.hypfvieh:dbus-java-transport-native-unixsocket:5.0.0")

View File

@ -0,0 +1,20 @@
package io.gitlab.jfronny.globalmenu
import io.gitlab.jfronny.commons.MultiConsumer
@PublishedApi internal class Node<T>(val value: T, var next: Node<T>? = null)
inline fun <reified T> buildArray(generate: MultiConsumer<T>.() -> Unit): Array<T> {
var length = 0
var head: Node<T>? = null
MultiConsumer<T> { value ->
head = Node(value, head)
length++
}.generate()
val array = arrayOfNulls<T>(length)
while (head != null) {
array[--length] = head!!.value
head = head!!.next
}
@Suppress("UNCHECKED_CAST")
return array as Array<T>
}

View File

@ -5,6 +5,7 @@ import com.intellij.openapi.actionSystem.impl.ActionMenuItem
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.EDT
import io.gitlab.jfronny.globalmenu.GlobalMenu
import io.gitlab.jfronny.globalmenu.buildArray
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
@ -49,23 +50,18 @@ class SwingMenu(private val menuItem: JMenuItem?, override val id: Int, private
} }
override val shortcut: Array<String>? get() = menuItem?.accelerator?.let { ks ->
val s = getModifiers(ks.modifiers)
val vk = keyEvents[ks.keyCode] ?: "UNKNOWN"
val l = mutableListOf<String>()
l.addAll(s)
l.add(vk)
l.toTypedArray()
}
private fun getModifiers(modifiers: Int): List<String> = buildList {
if (modifiers and InputEvent.SHIFT_DOWN_MASK != 0) add("Shift")
if (modifiers and InputEvent.CTRL_DOWN_MASK != 0) add("Ctrl")
if (modifiers and InputEvent.META_DOWN_MASK != 0) add("Meta")
if (modifiers and InputEvent.ALT_DOWN_MASK != 0) add("Alt")
if (modifiers and InputEvent.ALT_GRAPH_DOWN_MASK != 0) add("AltGraph")
if (modifiers and InputEvent.BUTTON1_DOWN_MASK != 0) add("Button1")
if (modifiers and InputEvent.BUTTON2_DOWN_MASK != 0) add("Button2")
if (modifiers and InputEvent.BUTTON3_DOWN_MASK != 0) add("Button3")
buildArray {
val modifiers = ks.modifiers
if (modifiers and InputEvent.SHIFT_DOWN_MASK != 0) accept("Shift")
if (modifiers and InputEvent.CTRL_DOWN_MASK != 0) accept("Ctrl")
if (modifiers and InputEvent.META_DOWN_MASK != 0) accept("Meta")
if (modifiers and InputEvent.ALT_DOWN_MASK != 0) accept("Alt")
if (modifiers and InputEvent.ALT_GRAPH_DOWN_MASK != 0) accept("AltGraph")
if (modifiers and InputEvent.BUTTON1_DOWN_MASK != 0) accept("Button1")
if (modifiers and InputEvent.BUTTON2_DOWN_MASK != 0) accept("Button2")
if (modifiers and InputEvent.BUTTON3_DOWN_MASK != 0) accept("Button3")
accept(keyEvents[ks.keyCode] ?: "UNKNOWN")
}
}
override val toggleType: String? get() = when (menuItem) {