diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/Gui.java | 6 | ||||
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java | 50 | ||||
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java | 82 | ||||
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/elements/MenuBar.java | 123 | ||||
| -rw-r--r-- | src/main/resources/lang/en_us.json | 7 | ||||
| -rw-r--r-- | src/main/resources/lang/fr_fr.json | 13 |
6 files changed, 190 insertions, 91 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/src/main/java/cuchaz/enigma/gui/Gui.java index 3adabaee..ed32469e 100644 --- a/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/src/main/java/cuchaz/enigma/gui/Gui.java | |||
| @@ -941,18 +941,18 @@ public class Gui { | |||
| 941 | public void moveClassTree(EntryReference<Entry<?>, Entry<?>> obfReference, boolean isOldOb, boolean isNewOb) { | 941 | public void moveClassTree(EntryReference<Entry<?>, Entry<?>> obfReference, boolean isOldOb, boolean isNewOb) { |
| 942 | ClassEntry classEntry = obfReference.entry.getContainingClass(); | 942 | ClassEntry classEntry = obfReference.entry.getContainingClass(); |
| 943 | 943 | ||
| 944 | // Ob -> deob | ||
| 945 | List<ClassSelector.StateEntry> stateDeobf = this.deobfPanel.deobfClasses.getExpansionState(this.deobfPanel.deobfClasses); | 944 | List<ClassSelector.StateEntry> stateDeobf = this.deobfPanel.deobfClasses.getExpansionState(this.deobfPanel.deobfClasses); |
| 946 | List<ClassSelector.StateEntry> stateObf = this.obfPanel.obfClasses.getExpansionState(this.obfPanel.obfClasses); | 945 | List<ClassSelector.StateEntry> stateObf = this.obfPanel.obfClasses.getExpansionState(this.obfPanel.obfClasses); |
| 947 | 946 | ||
| 948 | if (isOldOb && !isNewOb) { | 947 | // Ob -> deob |
| 948 | if (!isNewOb) { | ||
| 949 | this.deobfPanel.deobfClasses.moveClassIn(classEntry); | 949 | this.deobfPanel.deobfClasses.moveClassIn(classEntry); |
| 950 | this.obfPanel.obfClasses.moveClassOut(classEntry); | 950 | this.obfPanel.obfClasses.moveClassOut(classEntry); |
| 951 | this.deobfPanel.deobfClasses.reload(); | 951 | this.deobfPanel.deobfClasses.reload(); |
| 952 | this.obfPanel.obfClasses.reload(); | 952 | this.obfPanel.obfClasses.reload(); |
| 953 | } | 953 | } |
| 954 | // Deob -> ob | 954 | // Deob -> ob |
| 955 | else if (isNewOb && !isOldOb) { | 955 | else if (!isOldOb) { |
| 956 | this.obfPanel.obfClasses.moveClassIn(classEntry); | 956 | this.obfPanel.obfClasses.moveClassIn(classEntry); |
| 957 | this.deobfPanel.deobfClasses.moveClassOut(classEntry); | 957 | this.deobfPanel.deobfClasses.moveClassOut(classEntry); |
| 958 | this.deobfPanel.deobfClasses.reload(); | 958 | this.deobfPanel.deobfClasses.reload(); |
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java b/src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java new file mode 100644 index 00000000..64219ab8 --- /dev/null +++ b/src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | package cuchaz.enigma.gui.dialog; | ||
| 2 | |||
| 3 | import java.awt.BorderLayout; | ||
| 4 | import java.awt.event.KeyAdapter; | ||
| 5 | import java.awt.event.KeyEvent; | ||
| 6 | |||
| 7 | import javax.swing.JButton; | ||
| 8 | import javax.swing.JFrame; | ||
| 9 | import javax.swing.JLabel; | ||
| 10 | import javax.swing.JPanel; | ||
| 11 | |||
| 12 | import cuchaz.enigma.gui.Gui; | ||
| 13 | import cuchaz.enigma.utils.I18n; | ||
| 14 | |||
| 15 | public class ChangeDialog { | ||
| 16 | |||
| 17 | public static void show(Gui gui) { | ||
| 18 | // init frame | ||
| 19 | JFrame frame = new JFrame(I18n.translate("menu.view.change.title")); | ||
| 20 | JPanel textPanel = new JPanel(); | ||
| 21 | JPanel buttonPanel = new JPanel(); | ||
| 22 | frame.setLayout(new BorderLayout()); | ||
| 23 | frame.add(BorderLayout.NORTH, textPanel); | ||
| 24 | frame.add(BorderLayout.SOUTH, buttonPanel); | ||
| 25 | |||
| 26 | // show text | ||
| 27 | JLabel text = new JLabel((I18n.translate("menu.view.change.summary"))); | ||
| 28 | text.setHorizontalAlignment(JLabel.CENTER); | ||
| 29 | textPanel.add(text); | ||
| 30 | |||
| 31 | // show ok button | ||
| 32 | JButton okButton = new JButton(I18n.translate("menu.view.change.ok")); | ||
| 33 | buttonPanel.add(okButton); | ||
| 34 | okButton.addActionListener(event -> frame.dispose()); | ||
| 35 | okButton.addKeyListener(new KeyAdapter() { | ||
| 36 | @Override | ||
| 37 | public void keyPressed(KeyEvent e) { | ||
| 38 | if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { | ||
| 39 | frame.dispose(); | ||
| 40 | } | ||
| 41 | } | ||
| 42 | }); | ||
| 43 | |||
| 44 | // show the frame | ||
| 45 | frame.pack(); | ||
| 46 | frame.setVisible(true); | ||
| 47 | frame.setResizable(false); | ||
| 48 | frame.setLocationRelativeTo(gui.getFrame()); | ||
| 49 | } | ||
| 50 | } | ||
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java b/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java new file mode 100644 index 00000000..868eba79 --- /dev/null +++ b/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java | |||
| @@ -0,0 +1,82 @@ | |||
| 1 | package cuchaz.enigma.gui.dialog; | ||
| 2 | |||
| 3 | import java.awt.BorderLayout; | ||
| 4 | import java.util.Arrays; | ||
| 5 | import java.util.Locale; | ||
| 6 | import java.util.Map; | ||
| 7 | import java.util.Set; | ||
| 8 | import java.util.stream.Collectors; | ||
| 9 | |||
| 10 | import javax.swing.JButton; | ||
| 11 | import javax.swing.JCheckBox; | ||
| 12 | import javax.swing.JFrame; | ||
| 13 | import javax.swing.JPanel; | ||
| 14 | |||
| 15 | import cuchaz.enigma.gui.Gui; | ||
| 16 | import cuchaz.enigma.gui.stats.StatsMember; | ||
| 17 | import cuchaz.enigma.gui.util.ScaleUtil; | ||
| 18 | import cuchaz.enigma.utils.I18n; | ||
| 19 | |||
| 20 | public class StatsDialog { | ||
| 21 | |||
| 22 | public static void show(Gui gui) { | ||
| 23 | // init frame | ||
| 24 | JFrame frame = new JFrame(I18n.translate("menu.file.stats.title")); | ||
| 25 | JPanel checkboxesPanel = new JPanel(); | ||
| 26 | JPanel buttonPanel = new JPanel(); | ||
| 27 | frame.setLayout(new BorderLayout()); | ||
| 28 | frame.add(BorderLayout.NORTH, checkboxesPanel); | ||
| 29 | frame.add(BorderLayout.SOUTH, buttonPanel); | ||
| 30 | |||
| 31 | // show checkboxes | ||
| 32 | Map<StatsMember, JCheckBox> checkboxes = Arrays | ||
| 33 | .stream(StatsMember.values()) | ||
| 34 | .collect(Collectors.toMap(m -> m, m -> { | ||
| 35 | JCheckBox checkbox = new JCheckBox(I18n.translate("type." + m.name().toLowerCase(Locale.ROOT))); | ||
| 36 | checkboxesPanel.add(checkbox); | ||
| 37 | return checkbox; | ||
| 38 | })); | ||
| 39 | |||
| 40 | // show generate button | ||
| 41 | JButton button = new JButton(I18n.translate("menu.file.stats.generate")); | ||
| 42 | buttonPanel.add(button); | ||
| 43 | button.setEnabled(false); | ||
| 44 | button.addActionListener(action -> { | ||
| 45 | frame.dispose(); | ||
| 46 | generateStats(gui, checkboxes); | ||
| 47 | }); | ||
| 48 | |||
| 49 | // add action listener to each checkbox | ||
| 50 | checkboxes.entrySet().forEach(checkbox -> { | ||
| 51 | checkbox.getValue().addActionListener(action -> { | ||
| 52 | if (!button.isEnabled()) { | ||
| 53 | button.setEnabled(true); | ||
| 54 | } else if (checkboxes.entrySet().stream().allMatch(entry -> !entry.getValue().isSelected())) { | ||
| 55 | button.setEnabled(false); | ||
| 56 | } | ||
| 57 | }); | ||
| 58 | }); | ||
| 59 | |||
| 60 | // show the frame | ||
| 61 | frame.pack(); | ||
| 62 | frame.setVisible(true); | ||
| 63 | frame.setSize(ScaleUtil.getDimension(500, 120)); | ||
| 64 | frame.setResizable(false); | ||
| 65 | frame.setLocationRelativeTo(gui.getFrame()); | ||
| 66 | } | ||
| 67 | |||
| 68 | private static void generateStats(Gui gui, Map<StatsMember, JCheckBox> checkboxes) { | ||
| 69 | // get members from selected checkboxes | ||
| 70 | Set<StatsMember> includedMembers = checkboxes | ||
| 71 | .entrySet() | ||
| 72 | .stream() | ||
| 73 | .filter(entry -> entry.getValue().isSelected()) | ||
| 74 | .map(Map.Entry::getKey) | ||
| 75 | .collect(Collectors.toSet()); | ||
| 76 | |||
| 77 | // checks if a projet is open | ||
| 78 | if (gui.getController().project != null) { | ||
| 79 | gui.getController().openStats(includedMembers); | ||
| 80 | } | ||
| 81 | } | ||
| 82 | } | ||
diff --git a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java b/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java index f8e4f7e8..dc2cf8fd 100644 --- a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java +++ b/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java | |||
| @@ -4,18 +4,16 @@ import cuchaz.enigma.config.Config; | |||
| 4 | import cuchaz.enigma.config.Themes; | 4 | import cuchaz.enigma.config.Themes; |
| 5 | import cuchaz.enigma.gui.Gui; | 5 | import cuchaz.enigma.gui.Gui; |
| 6 | import cuchaz.enigma.gui.dialog.AboutDialog; | 6 | import cuchaz.enigma.gui.dialog.AboutDialog; |
| 7 | import cuchaz.enigma.gui.dialog.ChangeDialog; | ||
| 7 | import cuchaz.enigma.gui.dialog.ConnectToServerDialog; | 8 | import cuchaz.enigma.gui.dialog.ConnectToServerDialog; |
| 8 | import cuchaz.enigma.gui.dialog.CreateServerDialog; | 9 | import cuchaz.enigma.gui.dialog.CreateServerDialog; |
| 9 | import cuchaz.enigma.gui.dialog.SearchDialog; | 10 | import cuchaz.enigma.gui.dialog.StatsDialog; |
| 10 | import cuchaz.enigma.gui.stats.StatsMember; | ||
| 11 | import cuchaz.enigma.gui.util.ScaleUtil; | 11 | import cuchaz.enigma.gui.util.ScaleUtil; |
| 12 | import cuchaz.enigma.translation.mapping.serde.MappingFormat; | 12 | import cuchaz.enigma.translation.mapping.serde.MappingFormat; |
| 13 | import cuchaz.enigma.utils.I18n; | 13 | import cuchaz.enigma.utils.I18n; |
| 14 | import cuchaz.enigma.utils.Pair; | 14 | import cuchaz.enigma.utils.Pair; |
| 15 | 15 | ||
| 16 | import java.awt.Container; | ||
| 17 | import java.awt.Desktop; | 16 | import java.awt.Desktop; |
| 18 | import java.awt.FlowLayout; | ||
| 19 | import java.awt.event.InputEvent; | 17 | import java.awt.event.InputEvent; |
| 20 | import java.awt.event.KeyEvent; | 18 | import java.awt.event.KeyEvent; |
| 21 | import java.io.File; | 19 | import java.io.File; |
| @@ -31,17 +29,6 @@ import java.util.stream.Collectors; | |||
| 31 | import java.util.stream.IntStream; | 29 | import java.util.stream.IntStream; |
| 32 | import javax.swing.*; | 30 | import javax.swing.*; |
| 33 | 31 | ||
| 34 | |||
| 35 | import javax.swing.*; | ||
| 36 | |||
| 37 | import cuchaz.enigma.config.Config; | ||
| 38 | import cuchaz.enigma.config.Themes; | ||
| 39 | import cuchaz.enigma.gui.Gui; | ||
| 40 | import cuchaz.enigma.gui.dialog.AboutDialog; | ||
| 41 | import cuchaz.enigma.gui.stats.StatsMember; | ||
| 42 | import cuchaz.enigma.translation.mapping.serde.MappingFormat; | ||
| 43 | import cuchaz.enigma.utils.I18n; | ||
| 44 | |||
| 45 | public class MenuBar extends JMenuBar { | 32 | public class MenuBar extends JMenuBar { |
| 46 | 33 | ||
| 47 | public final JMenuItem closeJarMenu; | 34 | public final JMenuItem closeJarMenu; |
| @@ -185,42 +172,8 @@ public class MenuBar extends JMenuBar { | |||
| 185 | menu.addSeparator(); | 172 | menu.addSeparator(); |
| 186 | { | 173 | { |
| 187 | JMenuItem stats = new JMenuItem(I18n.translate("menu.file.stats")); | 174 | JMenuItem stats = new JMenuItem(I18n.translate("menu.file.stats")); |
| 188 | |||
| 189 | stats.addActionListener(event -> { | ||
| 190 | JFrame frame = new JFrame(I18n.translate("menu.file.stats.title")); | ||
| 191 | Container pane = frame.getContentPane(); | ||
| 192 | pane.setLayout(new FlowLayout()); | ||
| 193 | |||
| 194 | Map<StatsMember, JCheckBox> checkboxes = Arrays | ||
| 195 | .stream(StatsMember.values()) | ||
| 196 | .collect(Collectors.toMap(m -> m, m -> { | ||
| 197 | JCheckBox checkbox = new JCheckBox(I18n.translate("type." + m.name().toLowerCase(Locale.ROOT))); | ||
| 198 | pane.add(checkbox); | ||
| 199 | return checkbox; | ||
| 200 | })); | ||
| 201 | |||
| 202 | JButton button = new JButton(I18n.translate("menu.file.stats.generate")); | ||
| 203 | |||
| 204 | button.addActionListener(e -> { | ||
| 205 | Set<StatsMember> includedMembers = checkboxes | ||
| 206 | .entrySet() | ||
| 207 | .stream() | ||
| 208 | .filter(entry -> entry.getValue().isSelected()) | ||
| 209 | .map(Map.Entry::getKey) | ||
| 210 | .collect(Collectors.toSet()); | ||
| 211 | |||
| 212 | frame.setVisible(false); | ||
| 213 | frame.dispose(); | ||
| 214 | gui.getController().openStats(includedMembers); | ||
| 215 | }); | ||
| 216 | |||
| 217 | pane.add(button); | ||
| 218 | frame.pack(); | ||
| 219 | frame.setLocationRelativeTo(this.gui.getFrame()); | ||
| 220 | frame.setVisible(true); | ||
| 221 | }); | ||
| 222 | |||
| 223 | menu.add(stats); | 175 | menu.add(stats); |
| 176 | stats.addActionListener(event -> StatsDialog.show(this.gui)); | ||
| 224 | } | 177 | } |
| 225 | menu.addSeparator(); | 178 | menu.addSeparator(); |
| 226 | { | 179 | { |
| @@ -235,12 +188,18 @@ public class MenuBar extends JMenuBar { | |||
| 235 | */ | 188 | */ |
| 236 | { | 189 | { |
| 237 | JMenu menu = new JMenu(I18n.translate("menu.decompiler")); | 190 | JMenu menu = new JMenu(I18n.translate("menu.decompiler")); |
| 238 | add(menu); | 191 | this.add(menu); |
| 192 | |||
| 193 | ButtonGroup decompilerGroup = new ButtonGroup(); | ||
| 239 | 194 | ||
| 240 | for (Config.Decompiler decompiler : Config.Decompiler.values()) { | 195 | for (Config.Decompiler decompiler : Config.Decompiler.values()) { |
| 241 | JMenuItem label = new JMenuItem(decompiler.name); | 196 | JRadioButtonMenuItem decompilerButton = new JRadioButtonMenuItem(decompiler.name); |
| 242 | menu.add(label); | 197 | decompilerGroup.add(decompilerButton); |
| 243 | label.addActionListener(event -> { | 198 | if (decompiler.equals(Config.getInstance().decompiler)) { |
| 199 | decompilerButton.setSelected(true); | ||
| 200 | } | ||
| 201 | menu.add(decompilerButton); | ||
| 202 | decompilerButton.addActionListener(event -> { | ||
| 244 | gui.getController().setDecompiler(decompiler.service); | 203 | gui.getController().setDecompiler(decompiler.service); |
| 245 | 204 | ||
| 246 | try { | 205 | try { |
| @@ -262,37 +221,35 @@ public class MenuBar extends JMenuBar { | |||
| 262 | { | 221 | { |
| 263 | JMenu themes = new JMenu(I18n.translate("menu.view.themes")); | 222 | JMenu themes = new JMenu(I18n.translate("menu.view.themes")); |
| 264 | menu.add(themes); | 223 | menu.add(themes); |
| 224 | ButtonGroup themeGroup = new ButtonGroup(); | ||
| 265 | for (Config.LookAndFeel lookAndFeel : Config.LookAndFeel.values()) { | 225 | for (Config.LookAndFeel lookAndFeel : Config.LookAndFeel.values()) { |
| 266 | JMenuItem theme = new JMenuItem(I18n.translate("menu.view.themes." + lookAndFeel.name().toLowerCase(Locale.ROOT))); | 226 | JRadioButtonMenuItem themeButton = new JRadioButtonMenuItem(I18n.translate("menu.view.themes." + lookAndFeel.name().toLowerCase(Locale.ROOT))); |
| 267 | themes.add(theme); | 227 | themeGroup.add(themeButton); |
| 268 | theme.addActionListener(event -> Themes.setLookAndFeel(gui, lookAndFeel)); | 228 | if (lookAndFeel.equals(Config.getInstance().lookAndFeel)) { |
| 229 | themeButton.setSelected(true); | ||
| 230 | } | ||
| 231 | themes.add(themeButton); | ||
| 232 | themeButton.addActionListener(event -> Themes.setLookAndFeel(gui, lookAndFeel)); | ||
| 269 | } | 233 | } |
| 270 | 234 | } | |
| 235 | { | ||
| 271 | JMenu languages = new JMenu(I18n.translate("menu.view.languages")); | 236 | JMenu languages = new JMenu(I18n.translate("menu.view.languages")); |
| 272 | menu.add(languages); | 237 | menu.add(languages); |
| 238 | ButtonGroup languageGroup = new ButtonGroup(); | ||
| 273 | for (String lang : I18n.getAvailableLanguages()) { | 239 | for (String lang : I18n.getAvailableLanguages()) { |
| 274 | JMenuItem language = new JMenuItem(I18n.getLanguageName(lang)); | 240 | JRadioButtonMenuItem languageButton = new JRadioButtonMenuItem(I18n.getLanguageName(lang)); |
| 275 | languages.add(language); | 241 | languageGroup.add(languageButton); |
| 276 | language.addActionListener(event -> I18n.setLanguage(lang)); | 242 | if (lang.equals(Config.getInstance().language)) { |
| 277 | language.addActionListener(event -> { | 243 | languageButton.setSelected(true); |
| 278 | JFrame frame = new JFrame(I18n.translate("menu.view.languages.title")); | 244 | } |
| 279 | Container pane = frame.getContentPane(); | 245 | languages.add(languageButton); |
| 280 | pane.setLayout(new FlowLayout()); | 246 | languageButton.addActionListener(event -> { |
| 281 | 247 | I18n.setLanguage(lang); | |
| 282 | JLabel text = new JLabel((I18n.translate("menu.view.languages.summary"))); | 248 | ChangeDialog.show(this.gui); |
| 283 | text.setHorizontalAlignment(JLabel.CENTER); | ||
| 284 | pane.add(text); | ||
| 285 | |||
| 286 | JButton okButton = new JButton(I18n.translate("menu.view.languages.ok")); | ||
| 287 | pane.add(okButton); | ||
| 288 | okButton.addActionListener(arg0 -> frame.dispose()); | ||
| 289 | |||
| 290 | frame.pack(); | ||
| 291 | frame.setLocationRelativeTo(this.gui.getFrame()); | ||
| 292 | frame.setVisible(true); | ||
| 293 | }); | 249 | }); |
| 294 | } | 250 | } |
| 295 | 251 | } | |
| 252 | { | ||
| 296 | JMenu scale = new JMenu(I18n.translate("menu.view.scale")); | 253 | JMenu scale = new JMenu(I18n.translate("menu.view.scale")); |
| 297 | { | 254 | { |
| 298 | ButtonGroup scaleGroup = new ButtonGroup(); | 255 | ButtonGroup scaleGroup = new ButtonGroup(); |
| @@ -301,6 +258,7 @@ public class MenuBar extends JMenuBar { | |||
| 301 | float realScaleFactor = scaleFactor / 100f; | 258 | float realScaleFactor = scaleFactor / 100f; |
| 302 | JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem(String.format("%d%%", scaleFactor)); | 259 | JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem(String.format("%d%%", scaleFactor)); |
| 303 | menuItem.addActionListener(event -> ScaleUtil.setScaleFactor(realScaleFactor)); | 260 | menuItem.addActionListener(event -> ScaleUtil.setScaleFactor(realScaleFactor)); |
| 261 | menuItem.addActionListener(event -> ChangeDialog.show(this.gui)); | ||
| 304 | scaleGroup.add(menuItem); | 262 | scaleGroup.add(menuItem); |
| 305 | scale.add(menuItem); | 263 | scale.add(menuItem); |
| 306 | return new Pair<>(realScaleFactor, menuItem); | 264 | return new Pair<>(realScaleFactor, menuItem); |
| @@ -309,7 +267,7 @@ public class MenuBar extends JMenuBar { | |||
| 309 | 267 | ||
| 310 | JMenuItem customScale = new JMenuItem(I18n.translate("menu.view.scale.custom")); | 268 | JMenuItem customScale = new JMenuItem(I18n.translate("menu.view.scale.custom")); |
| 311 | customScale.addActionListener(event -> { | 269 | customScale.addActionListener(event -> { |
| 312 | String answer = (String) JOptionPane.showInputDialog(gui.getFrame(), "Custom Scale", "Custom Scale", | 270 | String answer = (String) JOptionPane.showInputDialog(gui.getFrame(), I18n.translate("menu.view.scale.custom.title"), I18n.translate("menu.view.scale.custom.title"), |
| 313 | JOptionPane.QUESTION_MESSAGE, null, null, Float.toString(ScaleUtil.getScaleFactor() * 100)); | 271 | JOptionPane.QUESTION_MESSAGE, null, null, Float.toString(ScaleUtil.getScaleFactor() * 100)); |
| 314 | if (answer == null) return; | 272 | if (answer == null) return; |
| 315 | float newScale = 1.0f; | 273 | float newScale = 1.0f; |
| @@ -318,6 +276,7 @@ public class MenuBar extends JMenuBar { | |||
| 318 | } catch (NumberFormatException ignored) { | 276 | } catch (NumberFormatException ignored) { |
| 319 | } | 277 | } |
| 320 | ScaleUtil.setScaleFactor(newScale); | 278 | ScaleUtil.setScaleFactor(newScale); |
| 279 | ChangeDialog.show(this.gui); | ||
| 321 | }); | 280 | }); |
| 322 | scale.add(customScale); | 281 | scale.add(customScale); |
| 323 | ScaleUtil.addListener((newScale, _oldScale) -> { | 282 | ScaleUtil.addListener((newScale, _oldScale) -> { |
| @@ -334,7 +293,9 @@ public class MenuBar extends JMenuBar { | |||
| 334 | } | 293 | } |
| 335 | } | 294 | } |
| 336 | menu.add(scale); | 295 | menu.add(scale); |
| 337 | 296 | } | |
| 297 | menu.addSeparator(); | ||
| 298 | { | ||
| 338 | JMenuItem search = new JMenuItem(I18n.translate("menu.view.search")); | 299 | JMenuItem search = new JMenuItem(I18n.translate("menu.view.search")); |
| 339 | search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, InputEvent.SHIFT_MASK)); | 300 | search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, InputEvent.SHIFT_MASK)); |
| 340 | menu.add(search); | 301 | menu.add(search); |
| @@ -343,7 +304,6 @@ public class MenuBar extends JMenuBar { | |||
| 343 | this.gui.getSearchDialog().show(); | 304 | this.gui.getSearchDialog().show(); |
| 344 | } | 305 | } |
| 345 | }); | 306 | }); |
| 346 | |||
| 347 | } | 307 | } |
| 348 | } | 308 | } |
| 349 | 309 | ||
| @@ -399,6 +359,7 @@ public class MenuBar extends JMenuBar { | |||
| 399 | this.startServerMenu = item; | 359 | this.startServerMenu = item; |
| 400 | } | 360 | } |
| 401 | } | 361 | } |
| 362 | |||
| 402 | /* | 363 | /* |
| 403 | * Help menu | 364 | * Help menu |
| 404 | */ | 365 | */ |
diff --git a/src/main/resources/lang/en_us.json b/src/main/resources/lang/en_us.json index 04f689c7..dbf4b935 100644 --- a/src/main/resources/lang/en_us.json +++ b/src/main/resources/lang/en_us.json | |||
| @@ -35,11 +35,12 @@ | |||
| 35 | "menu.view.themes.system": "System", | 35 | "menu.view.themes.system": "System", |
| 36 | "menu.view.themes.none": "None (JVM Default)", | 36 | "menu.view.themes.none": "None (JVM Default)", |
| 37 | "menu.view.languages": "Languages", | 37 | "menu.view.languages": "Languages", |
| 38 | "menu.view.languages.title": "Change language", | ||
| 39 | "menu.view.languages.summary": "The new language will be applied after the next restart.", | ||
| 40 | "menu.view.languages.ok": "Ok", | ||
| 41 | "menu.view.scale": "Scale", | 38 | "menu.view.scale": "Scale", |
| 42 | "menu.view.scale.custom": "Custom...", | 39 | "menu.view.scale.custom": "Custom...", |
| 40 | "menu.view.scale.custom.title": "Custom Scale", | ||
| 41 | "menu.view.change.title": "Changes", | ||
| 42 | "menu.view.change.summary": "Changes will be applied after the next restart.", | ||
| 43 | "menu.view.change.ok": "Ok", | ||
| 43 | "menu.view.search": "Search", | 44 | "menu.view.search": "Search", |
| 44 | "menu.collab": "Collab", | 45 | "menu.collab": "Collab", |
| 45 | "menu.collab.connect": "Connect to server", | 46 | "menu.collab.connect": "Connect to server", |
diff --git a/src/main/resources/lang/fr_fr.json b/src/main/resources/lang/fr_fr.json index a1d55a28..d169b9a0 100644 --- a/src/main/resources/lang/fr_fr.json +++ b/src/main/resources/lang/fr_fr.json | |||
| @@ -35,9 +35,12 @@ | |||
| 35 | "menu.view.themes.system": "Système", | 35 | "menu.view.themes.system": "Système", |
| 36 | "menu.view.themes.none": "Aucun (JVM par défaut)", | 36 | "menu.view.themes.none": "Aucun (JVM par défaut)", |
| 37 | "menu.view.languages": "Langues", | 37 | "menu.view.languages": "Langues", |
| 38 | "menu.view.languages.title": "Modifier la langue", | 38 | "menu.view.scale": "Échelle", |
| 39 | "menu.view.languages.summary": "La nouvelle langue sera appliquée lors du prochain redémarrage.", | 39 | "menu.view.scale.custom": "Personnalisée...", |
| 40 | "menu.view.languages.ok": "Ok", | 40 | "menu.view.scale.custom.title": "Échelle personnalisée", |
| 41 | "menu.view.change.title": "Modifications", | ||
| 42 | "menu.view.change.summary": "Les modifications seront appliquées lors du prochain redémarrage.", | ||
| 43 | "menu.view.change.ok": "Ok", | ||
| 41 | "menu.view.search": "Rechercher", | 44 | "menu.view.search": "Rechercher", |
| 42 | "menu.collab": "Collab", | 45 | "menu.collab": "Collab", |
| 43 | "menu.collab.connect": "Se connecter à un serveur", | 46 | "menu.collab.connect": "Se connecter à un serveur", |
| @@ -56,7 +59,7 @@ | |||
| 56 | "popup_menu.javadoc": "Éditer le Javadoc", | 59 | "popup_menu.javadoc": "Éditer le Javadoc", |
| 57 | "popup_menu.inheritance": "Afficher l'héritage", | 60 | "popup_menu.inheritance": "Afficher l'héritage", |
| 58 | "popup_menu.implementations": "Afficher les implémentations", | 61 | "popup_menu.implementations": "Afficher les implémentations", |
| 59 | "popup_menu.calls": "Afficher les appels", | 62 | "popup_menu.calls": "Afficher les appels (tous)", |
| 60 | "popup_menu.calls.specific": "Afficher les appels (spécifiques)", | 63 | "popup_menu.calls.specific": "Afficher les appels (spécifiques)", |
| 61 | "popup_menu.declaration": "Aller à la déclaration", | 64 | "popup_menu.declaration": "Aller à la déclaration", |
| 62 | "popup_menu.back": "Annuler", | 65 | "popup_menu.back": "Annuler", |
| @@ -121,6 +124,8 @@ | |||
| 121 | "prompt.close.save": "Enregistrer et fermer", | 124 | "prompt.close.save": "Enregistrer et fermer", |
| 122 | "prompt.close.discard": "Annuler les modifications", | 125 | "prompt.close.discard": "Annuler les modifications", |
| 123 | "prompt.close.cancel": "Annuler", | 126 | "prompt.close.cancel": "Annuler", |
| 127 | "prompt.open": "Ouvrir", | ||
| 128 | "prompt.cancel": "Annuler", | ||
| 124 | "prompt.connect.title": "Se connecter à un serveur", | 129 | "prompt.connect.title": "Se connecter à un serveur", |
| 125 | "prompt.connect.username": "Nom d'utilisateur", | 130 | "prompt.connect.username": "Nom d'utilisateur", |
| 126 | "prompt.connect.ip": "IP", | 131 | "prompt.connect.ip": "IP", |