aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/firmament/gui/config/KeyBindingHandler.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/gui/config/KeyBindingHandler.kt')
-rw-r--r--src/main/kotlin/moe/nea/firmament/gui/config/KeyBindingHandler.kt115
1 files changed, 70 insertions, 45 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/gui/config/KeyBindingHandler.kt b/src/main/kotlin/moe/nea/firmament/gui/config/KeyBindingHandler.kt
index a9d5a2e..d347101 100644
--- a/src/main/kotlin/moe/nea/firmament/gui/config/KeyBindingHandler.kt
+++ b/src/main/kotlin/moe/nea/firmament/gui/config/KeyBindingHandler.kt
@@ -6,8 +6,12 @@
package moe.nea.firmament.gui.config
-import io.github.cottonmc.cotton.gui.widget.WButton
-import io.github.cottonmc.cotton.gui.widget.data.InputResult
+import io.github.notenoughupdates.moulconfig.common.IMinecraft
+import io.github.notenoughupdates.moulconfig.common.MyResourceLocation
+import io.github.notenoughupdates.moulconfig.deps.libninepatch.NinePatch
+import io.github.notenoughupdates.moulconfig.gui.GuiImmediateContext
+import io.github.notenoughupdates.moulconfig.gui.KeyboardEvent
+import io.github.notenoughupdates.moulconfig.gui.component.TextComponent
import org.lwjgl.glfw.GLFW
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
@@ -16,6 +20,7 @@ import kotlinx.serialization.json.encodeToJsonElement
import net.minecraft.client.util.InputUtil
import net.minecraft.text.Text
import net.minecraft.util.Formatting
+import moe.nea.firmament.gui.FirmButtonComponent
import moe.nea.firmament.keybindings.FirmamentKeyBindings
import moe.nea.firmament.keybindings.SavedKeyBinding
@@ -36,19 +41,66 @@ class KeyBindingHandler(name: String, val managedConfig: ManagedConfig) : Manage
var editing = false
var lastPressed = 0
var lastPressedNonModifier = 0
- var updateButton: (() -> Unit)? = null
- val button = object : WButton() {
- override fun onKeyPressed(ch: Int, key: Int, modifiers: Int): InputResult {
+ var label: String = ""
+ var button: FirmButtonComponent? = null
+ fun updateLabel() {
+ val stroke = Text.literal("")
+ if (opt.value.shift) {
+ stroke.append("SHIFT + ") // TODO: translations?
+ }
+ if (opt.value.alt) {
+ stroke.append("ALT + ")
+ }
+ if (opt.value.ctrl) {
+ stroke.append("CTRL + ")
+ }
+ stroke.append(InputUtil.Type.KEYSYM.createFromCode(opt.value.keyCode).localizedText)
+ if (editing)
+ stroke.styled { it.withColor(Formatting.YELLOW) }
+ label = (stroke).string
+ managedConfig.save()
+ }
+ button = object : FirmButtonComponent(
+ TextComponent(
+ IMinecraft.instance.defaultFontRenderer,
+ { label },
+ 130,
+ TextComponent.TextAlignment.LEFT,
+ false,
+ false
+ ), action = {
+ if (editing) {
+ button!!.blur()
+ } else {
+ editing = true
+ button!!.requestFocus()
+ updateLabel()
+ }
+ }) {
+ override fun keyboardEvent(event: KeyboardEvent, context: GuiImmediateContext): Boolean {
+ if (event is KeyboardEvent.KeyPressed) {
+ if (event.pressed) onKeyPressed(event.keycode, SavedKeyBinding.getModInt())
+ else onKeyReleased(event.keycode, SavedKeyBinding.getModInt())
+ }
+ return super.keyboardEvent(event, context)
+ }
+
+ override fun getBackground(context: GuiImmediateContext): NinePatch<MyResourceLocation> {
+ if (editing) return activeBg
+ return super.getBackground(context)
+ }
+
+ fun onKeyPressed(ch: Int, modifiers: Int): Boolean {
if (!editing) {
- return super.onKeyPressed(ch, key, modifiers)
+ return false
}
if (ch == GLFW.GLFW_KEY_ESCAPE) {
lastPressedNonModifier = 0
editing = false
lastPressed = 0
opt.value = SavedKeyBinding(GLFW.GLFW_KEY_UNKNOWN)
- updateButton!!()
- return InputResult.PROCESSED
+ updateLabel()
+ return true
}
if (ch == GLFW.GLFW_KEY_LEFT_SHIFT || ch == GLFW.GLFW_KEY_RIGHT_SHIFT
|| ch == GLFW.GLFW_KEY_LEFT_ALT || ch == GLFW.GLFW_KEY_RIGHT_ALT
@@ -63,58 +115,31 @@ class KeyBindingHandler(name: String, val managedConfig: ManagedConfig) : Manage
lastPressed = 0
lastPressedNonModifier = 0
}
- updateButton!!()
- return InputResult.PROCESSED
+ updateLabel()
+ return true
}
- override fun onFocusLost() {
- super.onFocusLost()
+ override fun onLostFocus() {
lastPressedNonModifier = 0
editing = false
lastPressed = 0
- updateButton!!()
+ updateLabel()
}
- override fun onKeyReleased(ch: Int, key: Int, modifiers: Int): InputResult {
+ fun onKeyReleased(ch: Int, modifiers: Int): Boolean {
if (!editing)
- return super.onKeyReleased(ch, key, modifiers)
+ return false
if (lastPressedNonModifier == ch || (lastPressedNonModifier == 0 && ch == lastPressed)) {
- opt.value = SavedKeyBinding(
- ch, modifiers
- )
+ opt.value = SavedKeyBinding(ch, modifiers)
editing = false
lastPressed = 0
lastPressedNonModifier = 0
}
- updateButton!!()
- return InputResult.PROCESSED
- }
- }
-
- fun updateLabel() {
- val stroke = Text.literal("")
- if (opt.value.shift) {
- stroke.append("SHIFT + ") // TODO: translations?
+ updateLabel()
+ return true
}
- if (opt.value.alt) {
- stroke.append("ALT + ")
- }
- if (opt.value.ctrl) {
- stroke.append("CTRL + ")
- }
- stroke.append(InputUtil.Type.KEYSYM.createFromCode(opt.value.keyCode).localizedText)
- if (editing)
- stroke.styled { it.withColor(Formatting.YELLOW) }
- button.setLabel(stroke)
- managedConfig.save()
- }
- updateButton = ::updateLabel
- updateButton()
- button.setOnClick {
- editing = true
- button.requestFocus()
- updateButton()
}
+ updateLabel()
guiAppender.appendLabeledRow(opt.labelText, button)
}