From f6e5a31c82a3b65df913915abddd1760f4d21b32 Mon Sep 17 00:00:00 2001 From: 2xsaiko Date: Mon, 8 Jun 2020 21:36:16 +0200 Subject: Fix editor contents being changeable through certain key combinations (#258) * Fix editor contents being changeable through certain key combinations * Clarify comment * Clarify comment even more * Please stop trying to insert tabs in a spaces formatted file, IDEA.--- .../java/cuchaz/enigma/gui/EnigmaSyntaxKit.java | 40 ++++++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'enigma-swing/src/main/java') diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java index d4a71f59..4f1b6e6e 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java @@ -1,11 +1,12 @@ package cuchaz.enigma.gui; -import cuchaz.enigma.gui.config.Config; import de.sciss.syntaxpane.DefaultSyntaxKit; import de.sciss.syntaxpane.components.LineNumbersRuler; import de.sciss.syntaxpane.syntaxkits.JavaSyntaxKit; import de.sciss.syntaxpane.util.Configuration; +import cuchaz.enigma.gui.config.Config; + public class EnigmaSyntaxKit extends JavaSyntaxKit { private static Configuration configuration = null; @@ -19,8 +20,21 @@ public class EnigmaSyntaxKit extends JavaSyntaxKit { } public void initConfig(Configuration baseConfig) { - configuration = baseConfig; - //See de.sciss.syntaxpane.TokenType + configuration = flattenConfiguration(baseConfig, EnigmaSyntaxKit.class); + + // Remove all actions except a select few because they disregard the + // editable state of the editor, or at least are useless anyway because + // they would try editing the file. + // Also includes the Action.insert-date action which is written in + // Javascript and causes the editor to freeze on first load for a short + // time. + configuration.keySet().removeIf(s -> s.startsWith("Action.") && + !(s.startsWith("Action.find") || + s.startsWith("Action.goto-line") || + s.startsWith("Action.jump-to-pair") || + s.startsWith("Action.quick-find"))); + + // See de.sciss.syntaxpane.TokenType configuration.put("Style.KEYWORD", Config.getInstance().highlightColor + ", 0"); configuration.put("Style.KEYWORD2", Config.getInstance().highlightColor + ", 3"); configuration.put("Style.STRING", Config.getInstance().stringColor + ", 0"); @@ -38,11 +52,23 @@ public class EnigmaSyntaxKit extends JavaSyntaxKit { configuration.put("RightMarginColumn", "999"); //No need to have a right margin, if someone wants it add a config configuration.put("Action.quick-find", "cuchaz.enigma.gui.QuickFindAction, menu F"); + } - // This is an action written in javascript that is useless for enigma's - // use case, and removing it causes the editor to load way faster the - // first time - configuration.remove("Action.insert-date"); + /** + * Creates a new configuration from the passed configuration so that it has + * no parents and all its values are on the same level. This is needed since + * there is no way to remove map entries from parent configurations. + * + * @param source the configuration to flatten + * @param configClass the class for the new configuration + * @return a new configuration + */ + private static Configuration flattenConfiguration(Configuration source, Class configClass) { + Configuration config = new Configuration(configClass, null); + for (String p : source.stringPropertyNames()) { + config.put(p, source.getString(p)); + } + return config; } public static void invalidate() { -- cgit v1.2.3