diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java
index 4fba057a..4026bb1d 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java
@@ -142,7 +142,6 @@ public class MainViewerGUI extends JFrame
public final JMenu settingsMainMenu = new TranslatedJMenu("Settings", Translation.SETTINGS);
public final JMenu visualSettings = new TranslatedJMenu("Visual Settings", Translation.VISUAL_SETTINGS);
public final JMenu apkConversion = new TranslatedJMenu("APK Conversion", Translation.APK_CONVERSION);
- public final JMenu bytecodeDecompilerSettingsSecondaryMenu = new TranslatedJMenu("Bytecode Decompiler", Translation.BYTECODE_DECOMPILER);
public final JCheckBoxMenuItem updateCheck = new TranslatedJCheckBoxMenuItem("Update Check", Translation.UPDATE_CHECK);
public final JMenuItem setPython2 = new TranslatedJMenuItem("Set Python 2.7 Executable", Translation.SET_PYTHON_27_EXECUTABLE);
public final JMenuItem setPython3 = new TranslatedJMenuItem("Set Python 3.X Executable", Translation.SET_PYTHON_30_EXECUTABLE);
@@ -159,11 +158,16 @@ public class MainViewerGUI extends JFrame
public final JCheckBoxMenuItem showClassMethods = new TranslatedJCheckBoxMenuItem("Show Class Methods", Translation.SHOW_CLASS_METHODS);
//CFIDE settings
+ public final JMenu bytecodeDecompilerSettingsSecondaryMenu = new TranslatedJMenu("Bytecode Decompiler", Translation.BYTECODE_DECOMPILER);
+ public final JMenuItem bytecodeDecompilerSettings = new TranslatedJMenuItem("Bytecode Decompiler", Translation.BYTECODE_DECOMPILER);
+ public SettingsDialogue bytecodeDecompilerSettingsDialogue;
public final JCheckBoxMenuItem appendBracketsToLabels = new TranslatedJCheckBoxMenuItem("Append Brackets To Labels", Translation.APPEND_BRACKETS_TO_LABEL);
public JCheckBoxMenuItem debugHelpers = new TranslatedJCheckBoxMenuItem("Debug Helpers", Translation.DEBUG_HELPERS);
//FernFlower settings
- public final JMenu fernFlowerSettingsSecondaryMenu = new TranslatedJMenu("FernFlower", Translation.FERNFLOWER);
+ public final JMenu fernFlowerSettingsSecondaryMenu = new TranslatedJMenu("FernFlower Settings", Translation.FERNFLOWER_SETTINGS);
+ public final JMenuItem fernFlowerSettings = new TranslatedJMenuItem("FernFlower Settings", Translation.FERNFLOWER_SETTINGS);
+ public SettingsDialogue fernFlowerSettingsDialogue;
public TranslatedJCheckBoxMenuItem rbr = new TranslatedJCheckBoxMenuItem("Hide bridge methods", Translation.HIDE_BRIDGE_METHODS);
public TranslatedJCheckBoxMenuItem rsy = new TranslatedJCheckBoxMenuItem("Hide synthetic class members", Translation.HIDE_SYNTHETIC_CLASS_MEMBERS);
public TranslatedJCheckBoxMenuItem din = new TranslatedJCheckBoxMenuItem("Decompile inner classes", Translation.DECOMPILE_INNER_CLASSES);
@@ -184,70 +188,74 @@ public class MainViewerGUI extends JFrame
public TranslatedJCheckBoxMenuItem asc = new TranslatedJCheckBoxMenuItem("Allow only ASCII characters in strings", Translation.ALLOW_ONLY_ASCII_CHARACTERS_IN_STRINGS);
public TranslatedJCheckBoxMenuItem ren = new TranslatedJCheckBoxMenuItem("Rename ambiguous classes and class elements", Translation.RENAME_AMBIGUOUS_CLASSES_AND_CLASS_ELEMENTS);
- //Proycon
- public final JMenu procyonSettingsSecondaryMenu = new TranslatedJMenu("Procyon", Translation.PROCYON);
- public final TranslatedJCheckBoxMenuItem alwaysGenerateExceptionVars = new TranslatedJCheckBoxMenuItem("Always Generate Exception Variable For Catch Blocks", Translation.ALWAYS_GENERATE_EXCEPTION_VARIABLE_FOR_CATCH_BLOCKS);
- public final TranslatedJCheckBoxMenuItem excludeNestedTypes = new TranslatedJCheckBoxMenuItem("Exclude Nested Types", Translation.EXCLUDE_NESTED_TYPES);
- public final TranslatedJCheckBoxMenuItem showDebugLineNumbers = new TranslatedJCheckBoxMenuItem("Show Debug Line Numbers", Translation.SHOW_DEBUG_LINE_NUMBERS);
- public final TranslatedJCheckBoxMenuItem includeLineNumbersInBytecode = new TranslatedJCheckBoxMenuItem("Include Line Numbers In Bytecode", Translation.INCLUDE_LINE_NUMBERS_IN_BYTECODE);
- public final TranslatedJCheckBoxMenuItem includeErrorDiagnostics = new TranslatedJCheckBoxMenuItem("Include Error Diagnostics", Translation.INCLUDE_ERROR_DIAGNOSTICS);
- public final TranslatedJCheckBoxMenuItem showSyntheticMembers = new TranslatedJCheckBoxMenuItem("Show Synthetic Members", Translation.SHOW_SYNTHETIC_MEMBERS);
- public final TranslatedJCheckBoxMenuItem simplifyMemberReferences = new TranslatedJCheckBoxMenuItem("Simplify Member References", Translation.SIMPLIFY_MEMBER_REFERENCES);
- public final TranslatedJCheckBoxMenuItem mergeVariables = new TranslatedJCheckBoxMenuItem("Merge Variables", Translation.MERGE_VARIABLES);
- public final TranslatedJCheckBoxMenuItem forceExplicitTypeArguments = new TranslatedJCheckBoxMenuItem("Force Explicit Type Arguments", Translation.FORCE_EXPLICIT_TYPE_ARGUMENTS);
- public final TranslatedJCheckBoxMenuItem forceExplicitImports = new TranslatedJCheckBoxMenuItem("Force Explicit Imports", Translation.FORCE_EXPLICIT_IMPORTS);
- public final TranslatedJCheckBoxMenuItem flattenSwitchBlocks = new TranslatedJCheckBoxMenuItem("Flatten Switch Blocks", Translation.FLATTEN_SWITCH_BLOCKS);
- public final TranslatedJCheckBoxMenuItem retainPointlessSwitches = new TranslatedJCheckBoxMenuItem("Retain Pointless Switches", Translation.RETAIN_POINTLESS_SWITCHES);
- public final TranslatedJCheckBoxMenuItem retainRedunantCasts = new TranslatedJCheckBoxMenuItem("Retain Redundant Casts", Translation.RETAIN_REDUNDANT_CASTS);
- public final TranslatedJCheckBoxMenuItem unicodeOutputEnabled = new TranslatedJCheckBoxMenuItem("Unicode Output Enabled", Translation.UNICODE_OUTPUT_ENABLED);
-
+ //Procyon
+ public final JMenu procyonSettingsSecondaryMenu = new TranslatedJMenu("Procyon Settings", Translation.PROCYON_SETTINGS);
+ public final JMenuItem procyonSettings = new TranslatedJMenuItem("Procyon Settings", Translation.PROCYON_SETTINGS);
+ public SettingsDialogue procyonSettingsDialogue;
+ public final JCheckBoxMenuItem alwaysGenerateExceptionVars = new TranslatedJCheckBoxMenuItem("Always Generate Exception Variable For Catch Blocks", Translation.ALWAYS_GENERATE_EXCEPTION_VARIABLE_FOR_CATCH_BLOCKS);
+ public final JCheckBoxMenuItem excludeNestedTypes = new TranslatedJCheckBoxMenuItem("Exclude Nested Types", Translation.EXCLUDE_NESTED_TYPES);
+ public final JCheckBoxMenuItem showDebugLineNumbers = new TranslatedJCheckBoxMenuItem("Show Debug Line Numbers", Translation.SHOW_DEBUG_LINE_NUMBERS);
+ public final JCheckBoxMenuItem includeLineNumbersInBytecode = new TranslatedJCheckBoxMenuItem("Include Line Numbers In Bytecode", Translation.INCLUDE_LINE_NUMBERS_IN_BYTECODE);
+ public final JCheckBoxMenuItem includeErrorDiagnostics = new TranslatedJCheckBoxMenuItem("Include Error Diagnostics", Translation.INCLUDE_ERROR_DIAGNOSTICS);
+ public final JCheckBoxMenuItem showSyntheticMembers = new TranslatedJCheckBoxMenuItem("Show Synthetic Members", Translation.SHOW_SYNTHETIC_MEMBERS);
+ public final JCheckBoxMenuItem simplifyMemberReferences = new TranslatedJCheckBoxMenuItem("Simplify Member References", Translation.SIMPLIFY_MEMBER_REFERENCES);
+ public final JCheckBoxMenuItem mergeVariables = new TranslatedJCheckBoxMenuItem("Merge Variables", Translation.MERGE_VARIABLES);
+ public final JCheckBoxMenuItem forceExplicitTypeArguments = new TranslatedJCheckBoxMenuItem("Force Explicit Type Arguments", Translation.FORCE_EXPLICIT_TYPE_ARGUMENTS);
+ public final JCheckBoxMenuItem forceExplicitImports = new TranslatedJCheckBoxMenuItem("Force Explicit Imports", Translation.FORCE_EXPLICIT_IMPORTS);
+ public final JCheckBoxMenuItem flattenSwitchBlocks = new TranslatedJCheckBoxMenuItem("Flatten Switch Blocks", Translation.FLATTEN_SWITCH_BLOCKS);
+ public final JCheckBoxMenuItem retainPointlessSwitches = new TranslatedJCheckBoxMenuItem("Retain Pointless Switches", Translation.RETAIN_POINTLESS_SWITCHES);
+ public final JCheckBoxMenuItem retainRedunantCasts = new TranslatedJCheckBoxMenuItem("Retain Redundant Casts", Translation.RETAIN_REDUNDANT_CASTS);
+ public final JCheckBoxMenuItem unicodeOutputEnabled = new TranslatedJCheckBoxMenuItem("Unicode Output Enabled", Translation.UNICODE_OUTPUT_ENABLED);
+
//CFR
- public final JMenu cfrSettingsSecondaryMenu = new TranslatedJMenu("CFR", Translation.CFR);
- public final TranslatedJCheckBoxMenuItem decodeEnumSwitch = new TranslatedJCheckBoxMenuItem("Decode Enum Switch", Translation.DECODE_ENUM_SWITCH);
- public final TranslatedJCheckBoxMenuItem sugarEnums = new TranslatedJCheckBoxMenuItem("SugarEnums", Translation.SUGARENUMS);
- public final TranslatedJCheckBoxMenuItem decodeStringSwitch = new TranslatedJCheckBoxMenuItem("Decode String Switch", Translation.DECODE_STRING_SWITCH);
- public final TranslatedJCheckBoxMenuItem arrayiter = new TranslatedJCheckBoxMenuItem("Arrayiter", Translation.ARRAYITER);
- public final TranslatedJCheckBoxMenuItem collectioniter = new TranslatedJCheckBoxMenuItem("Collectioniter", Translation.COLLECTIONITER);
- public final TranslatedJCheckBoxMenuItem innerClasses = new TranslatedJCheckBoxMenuItem("Inner Classes", Translation.INNER_CLASSES);
- public final TranslatedJCheckBoxMenuItem removeBoilerPlate = new TranslatedJCheckBoxMenuItem("Remove Boiler Plate", Translation.REMOVE_BOILER_PLATE);
- public final TranslatedJCheckBoxMenuItem removeInnerClassSynthetics = new TranslatedJCheckBoxMenuItem("Remove Inner Class Synthetics", Translation.REMOVE_INNER_CLASS_SYNTHETICS);
- public final TranslatedJCheckBoxMenuItem decodeLambdas = new TranslatedJCheckBoxMenuItem("Decode Lambdas", Translation.DECODE_LAMBDAS);
- public final TranslatedJCheckBoxMenuItem hideBridgeMethods = new TranslatedJCheckBoxMenuItem("Hide Bridge Methods", Translation.HIDE_BRIDGE_METHODS);
- public final TranslatedJCheckBoxMenuItem liftConstructorInit = new TranslatedJCheckBoxMenuItem("Lift Constructor Init", Translation.LIFT__CONSTRUCTOR_INIT);
- public final TranslatedJCheckBoxMenuItem removeDeadMethods = new TranslatedJCheckBoxMenuItem("Remove Dead Methods", Translation.REMOVE_DEAD_METHODS);
- public final TranslatedJCheckBoxMenuItem removeBadGenerics = new TranslatedJCheckBoxMenuItem("Remove Bad Generics", Translation.REMOVE_BAD_GENERICS);
- public final TranslatedJCheckBoxMenuItem sugarAsserts = new TranslatedJCheckBoxMenuItem("Sugar Asserts", Translation.SUGAR_ASSERTS);
- public final TranslatedJCheckBoxMenuItem sugarBoxing = new TranslatedJCheckBoxMenuItem("Sugar Boxing", Translation.SUGAR_BOXING);
- public final TranslatedJCheckBoxMenuItem showVersion = new TranslatedJCheckBoxMenuItem("Show Version", Translation.SHOW_VERSION);
- public final TranslatedJCheckBoxMenuItem decodeFinally = new TranslatedJCheckBoxMenuItem("Decode Finally", Translation.DECODE_FINALLY);
- public final TranslatedJCheckBoxMenuItem tidyMonitors = new TranslatedJCheckBoxMenuItem("Tidy Monitors", Translation.TIDY_MONITORS);
- public final TranslatedJCheckBoxMenuItem lenient = new TranslatedJCheckBoxMenuItem("Lenient", Translation.LENIENT);
- public final TranslatedJCheckBoxMenuItem dumpClassPath = new TranslatedJCheckBoxMenuItem("Dump Classpath", Translation.DUMP_CLASSPATH);
- public final TranslatedJCheckBoxMenuItem comments = new TranslatedJCheckBoxMenuItem("Comments", Translation.COMMENTS);
- public final TranslatedJCheckBoxMenuItem forceTopSort = new TranslatedJCheckBoxMenuItem("Force Top Sort", Translation.FORCE_TOP_SORT);
- public final TranslatedJCheckBoxMenuItem forceTopSortAggress = new TranslatedJCheckBoxMenuItem("Force Top Sort Aggress", Translation.FORCE_TOP_SORT_AGGRESS);
- public final TranslatedJCheckBoxMenuItem forceExceptionPrune = new TranslatedJCheckBoxMenuItem("Force Exception Prune", Translation.FORCE_EXCEPTION_PRUNE);
- public final TranslatedJCheckBoxMenuItem stringBuffer = new TranslatedJCheckBoxMenuItem("String Buffer", Translation.STRING_BUFFER);
- public final TranslatedJCheckBoxMenuItem stringBuilder = new TranslatedJCheckBoxMenuItem("String Builder", Translation.STRING_BUILDER);
- public final TranslatedJCheckBoxMenuItem silent = new TranslatedJCheckBoxMenuItem("Silent", Translation.SILENT);
- public final TranslatedJCheckBoxMenuItem recover = new TranslatedJCheckBoxMenuItem("Recover", Translation.RECOVER);
- public final TranslatedJCheckBoxMenuItem eclipse = new TranslatedJCheckBoxMenuItem("Eclipse", Translation.ECLIPSE);
- public final TranslatedJCheckBoxMenuItem override = new TranslatedJCheckBoxMenuItem("Override", Translation.OVERRIDE);
- public final TranslatedJCheckBoxMenuItem showInferrable = new TranslatedJCheckBoxMenuItem("Show Inferrable", Translation.SHOW_INFERRABLE);
- public final TranslatedJCheckBoxMenuItem aexagg = new TranslatedJCheckBoxMenuItem("Aexagg", Translation.AEXAGG);
- public final TranslatedJCheckBoxMenuItem forceCondPropagate = new TranslatedJCheckBoxMenuItem("Force Cond Propagate", Translation.FORCE_COND_PROPAGATE);
- public final TranslatedJCheckBoxMenuItem hideUTF = new TranslatedJCheckBoxMenuItem("Hide UTF", Translation.HIDE_UTF);
- public final TranslatedJCheckBoxMenuItem hideLongStrings = new TranslatedJCheckBoxMenuItem("Hide Long Strings", Translation.HIDE_LONG_STRINGS);
- public final TranslatedJCheckBoxMenuItem commentMonitor = new TranslatedJCheckBoxMenuItem("Comment Monitors", Translation.COMMENT_MONITORS);
- public final TranslatedJCheckBoxMenuItem allowCorrecting = new TranslatedJCheckBoxMenuItem("Allow Correcting", Translation.ALLOW_CORRECTING);
- public final TranslatedJCheckBoxMenuItem labelledBlocks = new TranslatedJCheckBoxMenuItem("Labelled Blocks", Translation.LABELLED_BLOCKS);
- public final TranslatedJCheckBoxMenuItem j14ClassOBJ = new TranslatedJCheckBoxMenuItem("J14ClassOBJ", Translation.J14CLASSOBJ);
- public final TranslatedJCheckBoxMenuItem hideLangImports = new TranslatedJCheckBoxMenuItem("Hide Lang Imports", Translation.HIDE_LANG_IMPORTS);
- public final TranslatedJCheckBoxMenuItem recoveryTypeClash = new TranslatedJCheckBoxMenuItem("Recover Type Clash", Translation.RECOVER_TYPE_CLASH);
- public final TranslatedJCheckBoxMenuItem recoveryTypehInts = new TranslatedJCheckBoxMenuItem("Recover Type Hints", Translation.RECOVER_TYPE__HINTS);
- public final TranslatedJCheckBoxMenuItem forceTurningIFs = new TranslatedJCheckBoxMenuItem("Force Returning IFs", Translation.FORCE_RETURNING_IFS);
- public final TranslatedJCheckBoxMenuItem forLoopAGGCapture = new TranslatedJCheckBoxMenuItem("For Loop AGG Capture", Translation.FOR_LOOP_AGG_CAPTURE);
-
+ public final JMenu cfrSettingsSecondaryMenu = new TranslatedJMenu("CFR Settings", Translation.CFR_SETTINGS);
+ public final JMenuItem cfrSettings = new TranslatedJMenuItem("CFR Settings", Translation.CFR_SETTINGS);
+ public SettingsDialogue cfrSettingsDialogue;
+ public final JCheckBoxMenuItem decodeEnumSwitch = new TranslatedJCheckBoxMenuItem("Decode Enum Switch", Translation.DECODE_ENUM_SWITCH);
+ public final JCheckBoxMenuItem sugarEnums = new TranslatedJCheckBoxMenuItem("SugarEnums", Translation.SUGARENUMS);
+ public final JCheckBoxMenuItem decodeStringSwitch = new TranslatedJCheckBoxMenuItem("Decode String Switch", Translation.DECODE_STRING_SWITCH);
+ public final JCheckBoxMenuItem arrayiter = new TranslatedJCheckBoxMenuItem("Arrayiter", Translation.ARRAYITER);
+ public final JCheckBoxMenuItem collectioniter = new TranslatedJCheckBoxMenuItem("Collectioniter", Translation.COLLECTIONITER);
+ public final JCheckBoxMenuItem innerClasses = new TranslatedJCheckBoxMenuItem("Inner Classes", Translation.INNER_CLASSES);
+ public final JCheckBoxMenuItem removeBoilerPlate = new TranslatedJCheckBoxMenuItem("Remove Boiler Plate", Translation.REMOVE_BOILER_PLATE);
+ public final JCheckBoxMenuItem removeInnerClassSynthetics = new TranslatedJCheckBoxMenuItem("Remove Inner Class Synthetics", Translation.REMOVE_INNER_CLASS_SYNTHETICS);
+ public final JCheckBoxMenuItem decodeLambdas = new TranslatedJCheckBoxMenuItem("Decode Lambdas", Translation.DECODE_LAMBDAS);
+ public final JCheckBoxMenuItem hideBridgeMethods = new TranslatedJCheckBoxMenuItem("Hide Bridge Methods", Translation.HIDE_BRIDGE_METHODS);
+ public final JCheckBoxMenuItem liftConstructorInit = new TranslatedJCheckBoxMenuItem("Lift Constructor Init", Translation.LIFT__CONSTRUCTOR_INIT);
+ public final JCheckBoxMenuItem removeDeadMethods = new TranslatedJCheckBoxMenuItem("Remove Dead Methods", Translation.REMOVE_DEAD_METHODS);
+ public final JCheckBoxMenuItem removeBadGenerics = new TranslatedJCheckBoxMenuItem("Remove Bad Generics", Translation.REMOVE_BAD_GENERICS);
+ public final JCheckBoxMenuItem sugarAsserts = new TranslatedJCheckBoxMenuItem("Sugar Asserts", Translation.SUGAR_ASSERTS);
+ public final JCheckBoxMenuItem sugarBoxing = new TranslatedJCheckBoxMenuItem("Sugar Boxing", Translation.SUGAR_BOXING);
+ public final JCheckBoxMenuItem showVersion = new TranslatedJCheckBoxMenuItem("Show Version", Translation.SHOW_VERSION);
+ public final JCheckBoxMenuItem decodeFinally = new TranslatedJCheckBoxMenuItem("Decode Finally", Translation.DECODE_FINALLY);
+ public final JCheckBoxMenuItem tidyMonitors = new TranslatedJCheckBoxMenuItem("Tidy Monitors", Translation.TIDY_MONITORS);
+ public final JCheckBoxMenuItem lenient = new TranslatedJCheckBoxMenuItem("Lenient", Translation.LENIENT);
+ public final JCheckBoxMenuItem dumpClassPath = new TranslatedJCheckBoxMenuItem("Dump Classpath", Translation.DUMP_CLASSPATH);
+ public final JCheckBoxMenuItem comments = new TranslatedJCheckBoxMenuItem("Comments", Translation.COMMENTS);
+ public final JCheckBoxMenuItem forceTopSort = new TranslatedJCheckBoxMenuItem("Force Top Sort", Translation.FORCE_TOP_SORT);
+ public final JCheckBoxMenuItem forceTopSortAggress = new TranslatedJCheckBoxMenuItem("Force Top Sort Aggress", Translation.FORCE_TOP_SORT_AGGRESS);
+ public final JCheckBoxMenuItem forceExceptionPrune = new TranslatedJCheckBoxMenuItem("Force Exception Prune", Translation.FORCE_EXCEPTION_PRUNE);
+ public final JCheckBoxMenuItem stringBuffer = new TranslatedJCheckBoxMenuItem("String Buffer", Translation.STRING_BUFFER);
+ public final JCheckBoxMenuItem stringBuilder = new TranslatedJCheckBoxMenuItem("String Builder", Translation.STRING_BUILDER);
+ public final JCheckBoxMenuItem silent = new TranslatedJCheckBoxMenuItem("Silent", Translation.SILENT);
+ public final JCheckBoxMenuItem recover = new TranslatedJCheckBoxMenuItem("Recover", Translation.RECOVER);
+ public final JCheckBoxMenuItem eclipse = new TranslatedJCheckBoxMenuItem("Eclipse", Translation.ECLIPSE);
+ public final JCheckBoxMenuItem override = new TranslatedJCheckBoxMenuItem("Override", Translation.OVERRIDE);
+ public final JCheckBoxMenuItem showInferrable = new TranslatedJCheckBoxMenuItem("Show Inferrable", Translation.SHOW_INFERRABLE);
+ public final JCheckBoxMenuItem aexagg = new TranslatedJCheckBoxMenuItem("Aexagg", Translation.AEXAGG);
+ public final JCheckBoxMenuItem forceCondPropagate = new TranslatedJCheckBoxMenuItem("Force Cond Propagate", Translation.FORCE_COND_PROPAGATE);
+ public final JCheckBoxMenuItem hideUTF = new TranslatedJCheckBoxMenuItem("Hide UTF", Translation.HIDE_UTF);
+ public final JCheckBoxMenuItem hideLongStrings = new TranslatedJCheckBoxMenuItem("Hide Long Strings", Translation.HIDE_LONG_STRINGS);
+ public final JCheckBoxMenuItem commentMonitor = new TranslatedJCheckBoxMenuItem("Comment Monitors", Translation.COMMENT_MONITORS);
+ public final JCheckBoxMenuItem allowCorrecting = new TranslatedJCheckBoxMenuItem("Allow Correcting", Translation.ALLOW_CORRECTING);
+ public final JCheckBoxMenuItem labelledBlocks = new TranslatedJCheckBoxMenuItem("Labelled Blocks", Translation.LABELLED_BLOCKS);
+ public final JCheckBoxMenuItem j14ClassOBJ = new TranslatedJCheckBoxMenuItem("J14ClassOBJ", Translation.J14CLASSOBJ);
+ public final JCheckBoxMenuItem hideLangImports = new TranslatedJCheckBoxMenuItem("Hide Lang Imports", Translation.HIDE_LANG_IMPORTS);
+ public final JCheckBoxMenuItem recoveryTypeClash = new TranslatedJCheckBoxMenuItem("Recover Type Clash", Translation.RECOVER_TYPE_CLASH);
+ public final JCheckBoxMenuItem recoveryTypehInts = new TranslatedJCheckBoxMenuItem("Recover Type Hints", Translation.RECOVER_TYPE__HINTS);
+ public final JCheckBoxMenuItem forceTurningIFs = new TranslatedJCheckBoxMenuItem("Force Returning IFs", Translation.FORCE_RETURNING_IFS);
+ public final JCheckBoxMenuItem forLoopAGGCapture = new TranslatedJCheckBoxMenuItem("For Loop AGG Capture", Translation.FOR_LOOP_AGG_CAPTURE);
+
//obfuscation
public final JMenu obfuscate = new JMenu("Obfuscate");
public final JMenuItem renameFields = new JMenuItem("Rename Fields");
@@ -476,7 +484,8 @@ public class MainViewerGUI extends JFrame
visualSettings.add(showClassMethods);
//PROCYON SETTINGS
- settingsMainMenu.add(procyonSettingsSecondaryMenu);
+ //settingsMainMenu.add(procyonSettingsSecondaryMenu);
+ settingsMainMenu.add(procyonSettings);
procyonSettingsSecondaryMenu.add(alwaysGenerateExceptionVars);
procyonSettingsSecondaryMenu.add(excludeNestedTypes);
procyonSettingsSecondaryMenu.add(showDebugLineNumbers);
@@ -491,9 +500,14 @@ public class MainViewerGUI extends JFrame
procyonSettingsSecondaryMenu.add(retainPointlessSwitches);
procyonSettingsSecondaryMenu.add(retainRedunantCasts);
procyonSettingsSecondaryMenu.add(unicodeOutputEnabled);
+ procyonSettingsDialogue = new SettingsDialogue(
+ procyonSettingsSecondaryMenu,
+ new JPanel());
+ procyonSettings.addActionListener((e)-> procyonSettingsDialogue.showDialogue());
//CFR SETTINGS
- settingsMainMenu.add(cfrSettingsSecondaryMenu);
+ //settingsMainMenu.add(cfrSettingsSecondaryMenu);
+ settingsMainMenu.add(cfrSettings);
cfrSettingsSecondaryMenu.add(decodeEnumSwitch);
cfrSettingsSecondaryMenu.add(sugarEnums);
cfrSettingsSecondaryMenu.add(decodeStringSwitch);
@@ -538,9 +552,15 @@ public class MainViewerGUI extends JFrame
cfrSettingsSecondaryMenu.add(recoveryTypehInts);
cfrSettingsSecondaryMenu.add(forceTurningIFs);
cfrSettingsSecondaryMenu.add(forLoopAGGCapture);
+ cfrSettingsDialogue = new SettingsDialogue(
+ cfrSettingsSecondaryMenu,
+ new JPanel());
+ cfrSettings.addActionListener((e)-> cfrSettingsDialogue.showDialogue());
+
//FERNFLOWER SETTINGS
- settingsMainMenu.add(fernFlowerSettingsSecondaryMenu);
+ //settingsMainMenu.add(fernFlowerSettingsSecondaryMenu);
+ settingsMainMenu.add(fernFlowerSettings);
fernFlowerSettingsSecondaryMenu.add(dc4);
fernFlowerSettingsSecondaryMenu.add(nns);
fernFlowerSettingsSecondaryMenu.add(ner);
@@ -560,11 +580,20 @@ public class MainViewerGUI extends JFrame
fernFlowerSettingsSecondaryMenu.add(fdi);
fernFlowerSettingsSecondaryMenu.add(asc);
fernFlowerSettingsSecondaryMenu.add(ren);
+ fernFlowerSettingsDialogue = new SettingsDialogue(
+ fernFlowerSettingsSecondaryMenu,
+ new JPanel());
+ fernFlowerSettings.addActionListener((e)-> fernFlowerSettingsDialogue.showDialogue());
//CFIDE SETTINGS
- settingsMainMenu.add(bytecodeDecompilerSettingsSecondaryMenu);
+ //settingsMainMenu.add(bytecodeDecompilerSettingsSecondaryMenu);
+ settingsMainMenu.add(bytecodeDecompilerSettings);
bytecodeDecompilerSettingsSecondaryMenu.add(debugHelpers);
bytecodeDecompilerSettingsSecondaryMenu.add(appendBracketsToLabels);
+ bytecodeDecompilerSettingsDialogue = new SettingsDialogue(
+ bytecodeDecompilerSettingsSecondaryMenu,
+ new JPanel());
+ bytecodeDecompilerSettings.addActionListener((e)-> bytecodeDecompilerSettingsDialogue.showDialogue());
deleteForeignOutdatedLibs.addActionListener(arg0 -> showForeignLibraryWarning());
forcePureAsciiAsText.addActionListener(arg0 -> SettingsSerializer.saveSettingsAsync());
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/BetterJOptionPane.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/BetterJOptionPane.java
index 4d9db63d..8e21d82f 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/BetterJOptionPane.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/BetterJOptionPane.java
@@ -177,6 +177,40 @@ public class BetterJOptionPane
return value;
}
+ public static void showJPanelDialogue(Component parentComponent, JScrollPane panel, int minimumHeight)
+ throws HeadlessException
+ {
+ JOptionPane pane = new JOptionPane("");
+ pane.add(panel, 0);
+
+ //reflection to cheat our way around the
+ // private createDialog(Component parentComponent, String title, int style)
+ JDialog dialog = null;
+ try
+ {
+ Method createDialog = pane.getClass().getDeclaredMethod("createDialog", Component.class, String.class, int.class);
+ createDialog.setAccessible(true);
+ dialog = (JDialog) createDialog.invoke(pane, parentComponent, panel.getName(), 0);
+
+ //dialog.setResizable(true);
+
+ int newHeight = minimumHeight < dialog.getHeight() ? minimumHeight : dialog.getHeight();
+ dialog.setMinimumSize(new Dimension(dialog.getWidth(), newHeight));
+ dialog.setSize(new Dimension(dialog.getWidth(), newHeight));
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ //check if the dialogue is in a poor location, attempt to correct
+ if(dialog.getLocation().getY() == 0 || dialog.getLocation().getY() == 1)
+ dialog.setLocationRelativeTo(null);
+
+ dialog.show();
+ dialog.dispose();
+ }
+
private static int styleFromMessageType(int messageType)
{
switch (messageType)
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SettingsDialogue.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SettingsDialogue.java
new file mode 100644
index 00000000..65c9aad3
--- /dev/null
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SettingsDialogue.java
@@ -0,0 +1,73 @@
+package the.bytecode.club.bytecodeviewer.gui.components;
+
+import the.bytecode.club.bytecodeviewer.gui.MainViewerGUI;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/***************************************************************************
+ * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
+ * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+/**
+ * @author Konloch
+ * @since 7/19/2021
+ */
+
+public class SettingsDialogue extends JScrollPane
+{
+ private final List options = new ArrayList<>();
+ private final JMenu menu;
+ private final JPanel display;
+
+ public SettingsDialogue(JMenu menu, JPanel display)
+ {
+ super(display);
+ List options = new ArrayList<>();
+ for(Component child : menu.getMenuComponents())
+ {
+ if(!(child instanceof JCheckBoxMenuItem))
+ continue;
+
+ options.add((JCheckBoxMenuItem) child);
+ }
+ this.menu = menu;
+ this.options.addAll(options);
+ this.display = display;
+ buildPanel();
+ }
+
+ private void buildPanel()
+ {
+ display.setLayout(new BoxLayout(display, BoxLayout.Y_AXIS));
+ for(JCheckBoxMenuItem menuItem : options)
+ display.add(menuItem);
+ }
+
+ public void showDialogue()
+ {
+ BetterJOptionPane.showJPanelDialogue(null, this, 460);
+ }
+
+ @Override
+ public String getName()
+ {
+ return menu.getText();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/translation/Translation.java b/src/main/java/the/bytecode/club/bytecodeviewer/translation/Translation.java
index 1c50ed32..76dc6cd1 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/translation/Translation.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/translation/Translation.java
@@ -31,6 +31,7 @@ public enum Translation
NEW_WORKSPACE,
RELOAD_RESOURCES,
RUN,
+ OPEN,
COMPILE,
SAVE,
SAVE_AS,
@@ -209,6 +210,9 @@ public enum Translation
DEX_TO_JAR,
ENJARIFY,
+ PROCYON_SETTINGS,
+ CFR_SETTINGS,
+ FERNFLOWER_SETTINGS,
PROCYON,
CFR,
FERNFLOWER,
diff --git a/src/main/resources/translations/english.json b/src/main/resources/translations/english.json
index 4b18b446..f74eb11c 100644
--- a/src/main/resources/translations/english.json
+++ b/src/main/resources/translations/english.json
@@ -4,6 +4,7 @@
"NEW_WORKSPACE": "New Workspace",
"RELOAD_RESOURCES": "Reload Resources",
"RUN": "Run",
+ "OPEN": "Open...",
"COMPILE": "Compile",
"SAVE_AS_RUNNABLE_JAR": "Save As Runnable Jar...",
"SAVE_AS_ZIP": "Save As Zip...",
@@ -74,6 +75,9 @@
"SET_JAVAC_EXECUTABLE": "Set Javac Executable",
"JAVA": "Java",
+ "PROCYON_SETTINGS": "Procyon Settings",
+ "CFR_SETTINGS": "CFR Settings",
+ "FERNFLOWER_SETTINGS": "FernFlower Settings",
"PROCYON": "Procyon",
"CFR": "CFR",
"FERNFLOWER": "FernFlower",