diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java index 6b6fd1267..983b2f596 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java @@ -18,6 +18,7 @@ import jadx.cli.JadxCLIArgs; import jadx.gui.ui.codearea.EditorTheme; import jadx.gui.utils.LangLocale; import jadx.gui.utils.NLS; +import jadx.gui.utils.Utils; import static jadx.gui.utils.Utils.FONT_HACK; @@ -263,7 +264,14 @@ public class JadxSettings extends JadxCLIArgs { } public void setFont(Font font) { - this.fontStr = font.getFontName() + addStyleName(font.getStyle()) + "-" + font.getSize(); + StringBuilder sb = new StringBuilder(); + sb.append(font.getFontName()); + String fontStyleName = Utils.getFontStyleName(font.getStyle()).replaceAll(" ", ""); + if (!fontStyleName.isEmpty()) { + sb.append('-').append(fontStyleName.toUpperCase()); + } + sb.append('-').append(font.getSize()); + this.fontStr = sb.toString(); } public String getEditorThemePath() { @@ -274,19 +282,6 @@ public class JadxSettings extends JadxCLIArgs { this.editorThemePath = editorThemePath; } - private static String addStyleName(int style) { - switch (style) { - case Font.BOLD: - return "-BOLD"; - case Font.PLAIN: - return "-PLAIN"; - case Font.ITALIC: - return "-ITALIC"; - default: - return ""; - } - } - private void upgradeSettings(int fromVersion) { LOG.debug("upgrade settings from version: {} to {}", fromVersion, CURRENT_SETTINGS_VERSION); if (fromVersion == 0) { diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java index 5bcbf5351..7427c8aa2 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java @@ -16,6 +16,7 @@ import jadx.gui.ui.MainWindow; import jadx.gui.ui.codearea.EditorTheme; import jadx.gui.utils.LangLocale; import jadx.gui.utils.NLS; +import jadx.gui.utils.Utils; public class JadxSettingsWindow extends JDialog { private static final long serialVersionUID = -1804570470377354148L; @@ -164,21 +165,6 @@ public class JadxSettingsWindow extends JDialog { private SettingsGroup makeEditorGroup() { JButton fontBtn = new JButton(NLS.str("preferences.select_font")); - fontBtn.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - JFontChooser fontChooser = new JFontChooser(); - fontChooser.setSelectedFont(settings.getFont()); - int result = fontChooser.showDialog(JadxSettingsWindow.this); - if (result == JFontChooser.OK_OPTION) { - Font font = fontChooser.getSelectedFont(); - LOG.debug("Selected Font: {}", font); - settings.setFont(font); - mainWindow.updateFont(font); - mainWindow.loadSettings(); - } - } - }); EditorTheme[] editorThemes = EditorTheme.getAllThemes(); JComboBox themesCbx = new JComboBox<>(editorThemes); @@ -196,11 +182,34 @@ public class JadxSettingsWindow extends JDialog { }); SettingsGroup other = new SettingsGroup(NLS.str("preferences.editor")); - other.addRow(NLS.str("preferences.font"), fontBtn); + JLabel fontLabel = other.addRow(getFontLabelStr(), fontBtn); other.addRow(NLS.str("preferences.theme"), themesCbx); + + fontBtn.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + JFontChooser fontChooser = new JFontChooser(); + fontChooser.setSelectedFont(settings.getFont()); + int result = fontChooser.showDialog(JadxSettingsWindow.this); + if (result == JFontChooser.OK_OPTION) { + Font font = fontChooser.getSelectedFont(); + LOG.debug("Selected Font: {}", font); + settings.setFont(font); + mainWindow.updateFont(font); + mainWindow.loadSettings(); + fontLabel.setText(getFontLabelStr()); + } + } + }); return other; } + private String getFontLabelStr() { + Font font = settings.getFont(); + String fontStyleName = Utils.getFontStyleName(font.getStyle()); + return NLS.str("preferences.font") + ": " + font.getFontName() + " " + fontStyleName + " " + font.getSize(); + } + private SettingsGroup makeDecompilationGroup() { JCheckBox fallback = new JCheckBox(); fallback.setSelected(settings.isFallbackMode()); @@ -342,11 +351,11 @@ public class JadxSettingsWindow extends JDialog { c.weighty = 1.0; } - public void addRow(String label, JComponent comp) { - addRow(label, null, comp); + public JLabel addRow(String label, JComponent comp) { + return addRow(label, null, comp); } - public void addRow(String label, String tooltip, JComponent comp) { + public JLabel addRow(String label, String tooltip, JComponent comp) { c.gridy = row++; JLabel jLabel = new JLabel(label); jLabel.setLabelFor(comp); @@ -371,6 +380,7 @@ public class JadxSettingsWindow extends JDialog { add(comp, c); comp.addPropertyChangeListener("enabled", evt -> jLabel.setEnabled((boolean) evt.getNewValue())); + return jLabel; } public void end() { diff --git a/jadx-gui/src/main/java/jadx/gui/utils/Utils.java b/jadx-gui/src/main/java/jadx/gui/utils/Utils.java index 120aafb0f..f6f724273 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/Utils.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/Utils.java @@ -8,6 +8,7 @@ import java.awt.datatransfer.Transferable; import java.io.InputStream; import java.net.URL; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -175,4 +176,19 @@ public class Utils { LOG.error("Failed copy string '{}' to clipboard", text, e); } } + + @NotNull + public static String getFontStyleName(int style) { + if (style == 0) { + return "plain"; + } + StringBuilder sb = new StringBuilder(); + if ((style & Font.BOLD) != 0) { + sb.append("bold"); + } + if ((style & Font.ITALIC) != 0) { + sb.append(" italic"); + } + return sb.toString().trim(); + } } diff --git a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties index fe5504adf..c8b6a055a 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties @@ -99,7 +99,7 @@ preferences.raw_cfg=Generate RAW CFG graphs preferences.font=Editor font preferences.theme=Editor theme preferences.start_jobs=Auto start background decompilation -preferences.select_font=Select +preferences.select_font=Change preferences.deobfuscation_on=Enable deobfuscation preferences.deobfuscation_force=Force rewrite deobfuscation map file preferences.deobfuscation_min_len=Minimum name length