From d26a52f9143a5e572fd3ae9be6887615b8fb3b71 Mon Sep 17 00:00:00 2001 From: Ferdinand Date: Tue, 22 Sep 2020 23:40:15 +0200 Subject: [PATCH] Added KeyAdjuster for modyfing keybinds. --- resources/lang/default.lang | 6 ++ src/net/fexcraft/app/fmt/ui/KeyAdjuster.java | 82 +++++++++++++++++++ .../app/fmt/ui/UserInterfaceUtils.java | 2 +- 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 src/net/fexcraft/app/fmt/ui/KeyAdjuster.java diff --git a/resources/lang/default.lang b/resources/lang/default.lang index 05e0ab30..664abb38 100644 --- a/resources/lang/default.lang +++ b/resources/lang/default.lang @@ -249,8 +249,14 @@ settingsbox.confirm=Confirm settingsbox.darktheme.mayneedrestart=This may require a restart to take full effect. settingsbox.settings_needs_restart=This setting needs a restart to take full effect. +# KeyAdjuster +keyadjuster.title=FMT Keybind Adjuster +keyadjuster.occupied=Key is already in use! +keyadjuster.reset=Reset + # DialogBox dialogbox.title.default=Generic Dialog +dialogbox.button.continue=Continue dialogbox.button.confirm=Confirm dialogbox.button.cancel=Cancel dialogbox.button.select=Select diff --git a/src/net/fexcraft/app/fmt/ui/KeyAdjuster.java b/src/net/fexcraft/app/fmt/ui/KeyAdjuster.java new file mode 100644 index 00000000..945ba94d --- /dev/null +++ b/src/net/fexcraft/app/fmt/ui/KeyAdjuster.java @@ -0,0 +1,82 @@ +package net.fexcraft.app.fmt.ui; + +import static org.liquidengine.legui.event.MouseClickEvent.MouseClickAction.CLICK; + +import org.liquidengine.legui.component.Button; +import org.liquidengine.legui.component.Dialog; +import org.liquidengine.legui.component.Label; +import org.liquidengine.legui.component.ScrollablePanel; +import org.liquidengine.legui.component.SelectBox; +import org.liquidengine.legui.event.MouseClickEvent; +import org.liquidengine.legui.event.ScrollEvent; +import org.liquidengine.legui.input.KeyCode; +import org.liquidengine.legui.input.Keyboard; +import org.liquidengine.legui.listener.MouseClickEventListener; + +import net.fexcraft.app.fmt.FMTB; +import net.fexcraft.app.fmt.ui.editor.EditorBase.SPVSL; +import net.fexcraft.app.fmt.utils.KeyCompound; +import net.fexcraft.app.fmt.utils.KeyCompound.KeyFunction; +import net.fexcraft.app.fmt.utils.Translator; + +/** + * + * @author Ferdinand Calo' (FEX___96) + * + */ +public class KeyAdjuster { + + public static final void open(){ + Dialog dialog = new Dialog(Translator.translate("keyadjuster.title"), 520, 350); + dialog.setResizable(false); + ScrollablePanel panel = new ScrollablePanel(10, 10, 500, 280); + int size = 10 + (KeyCompound.keys.size() * 30); + int index = 0; + panel.getContainer().setSize(500, size < 280 ? 280 : size); + for(KeyFunction func : KeyCompound.keys){ + panel.getContainer().add(new Label(func.name(), 10, 10 + (index * 30), 180, 20)); + SelectBox box = new SelectBox<>(190, 10 + (index * 30), 230, 20); + for(KeyCode code : KeyCode.values()){ + box.addElement(code.name()); + } + box.addSelectBoxChangeSelectionEventListener(listener -> { + int id = Keyboard.getNativeCode(KeyCode.valueOf(listener.getNewValue())); + if(occupied(id)){ + DialogBox.showOK("keyadjuster.title", null, null, "keyadjuster.occupied"); + box.setSelected(Keyboard.getKeyCode(func.id()).name(), true); + } + else func.setId(id); + }); + box.setSelected(Keyboard.getKeyCode(func.id()).name(), true); + box.setVisibleCount(12); + panel.getContainer().add(box); + Button button = new Button(Translator.translate("keyadjuster.reset"), 430, 10 + (index * 30), 50, 20); + button.getListenerMap().addListener(MouseClickEvent.class, (MouseClickEventListener)e -> { + if(CLICK == e.getAction()){ + func.setId(null); + box.setSelected(Keyboard.getKeyCode(func.id()).toString(), true); + } + }); + panel.getContainer().add(button); + index++; + } + panel.setHorizontalScrollBarVisible(false); + panel.getViewport().getListenerMap().removeAllListeners(ScrollEvent.class); + panel.getViewport().getListenerMap().addListener(ScrollEvent.class, new SPVSL()); + Button button = new Button(Translator.translate("dialogbox.button.continue"), 10, 300, 100, 20); + button.getListenerMap().addListener(MouseClickEvent.class, (MouseClickEventListener)e -> { + if(CLICK == e.getAction()) dialog.close(); + }); + dialog.getContainer().add(panel); + dialog.getContainer().add(button); + dialog.show(FMTB.frame); + } + + private static boolean occupied(int id){ + for(KeyFunction func : KeyCompound.keys){ + if(func.id() == id) return true; + } + return false; + } + +} diff --git a/src/net/fexcraft/app/fmt/ui/UserInterfaceUtils.java b/src/net/fexcraft/app/fmt/ui/UserInterfaceUtils.java index 65693c09..80d8a21a 100644 --- a/src/net/fexcraft/app/fmt/ui/UserInterfaceUtils.java +++ b/src/net/fexcraft/app/fmt/ui/UserInterfaceUtils.java @@ -129,7 +129,7 @@ public static void addToolbarButtons(Frame frame){ }), new MenuButton("toolbar.utils.rescale", () -> FMTB.MODEL.rescale()), new MenuButton("toolbar.utils.font_util", () -> FontUtils.open()), - new MenuButton("toolbar.utils.controls", NOT_REIMPLEMENTED_YET) + new MenuButton("toolbar.utils.controls", () -> KeyAdjuster.open()) )); frame.getContainer().add(new MenuEntry(2, Translator.translate("toolbar.editor"), new MenuButton("toolbar.editor.hide_all", () -> Editors.hideAll()),