summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/gui/elements
diff options
context:
space:
mode:
authorGravatar Yanis482020-05-19 08:19:07 +0200
committerGravatar GitHub2020-05-19 02:19:07 -0400
commit9e75b56aa633b696dcce4478ddb4f1d9baf8c9a1 (patch)
tree837844c54956c57b14da001e8a06b07e5e6f0c7a /src/main/java/cuchaz/enigma/gui/elements
parentCreate zh_cn.json (#216) (diff)
downloadenigma-fork-9e75b56aa633b696dcce4478ddb4f1d9baf8c9a1.tar.gz
enigma-fork-9e75b56aa633b696dcce4478ddb4f1d9baf8c9a1.tar.xz
enigma-fork-9e75b56aa633b696dcce4478ddb4f1d9baf8c9a1.zip
QOL fixes - Volume 2 (#239)
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/elements')
-rw-r--r--src/main/java/cuchaz/enigma/gui/elements/MenuBar.java123
1 files changed, 42 insertions, 81 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java b/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
index f8e4f7e..dc2cf8f 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;
4import cuchaz.enigma.config.Themes; 4import cuchaz.enigma.config.Themes;
5import cuchaz.enigma.gui.Gui; 5import cuchaz.enigma.gui.Gui;
6import cuchaz.enigma.gui.dialog.AboutDialog; 6import cuchaz.enigma.gui.dialog.AboutDialog;
7import cuchaz.enigma.gui.dialog.ChangeDialog;
7import cuchaz.enigma.gui.dialog.ConnectToServerDialog; 8import cuchaz.enigma.gui.dialog.ConnectToServerDialog;
8import cuchaz.enigma.gui.dialog.CreateServerDialog; 9import cuchaz.enigma.gui.dialog.CreateServerDialog;
9import cuchaz.enigma.gui.dialog.SearchDialog; 10import cuchaz.enigma.gui.dialog.StatsDialog;
10import cuchaz.enigma.gui.stats.StatsMember;
11import cuchaz.enigma.gui.util.ScaleUtil; 11import cuchaz.enigma.gui.util.ScaleUtil;
12import cuchaz.enigma.translation.mapping.serde.MappingFormat; 12import cuchaz.enigma.translation.mapping.serde.MappingFormat;
13import cuchaz.enigma.utils.I18n; 13import cuchaz.enigma.utils.I18n;
14import cuchaz.enigma.utils.Pair; 14import cuchaz.enigma.utils.Pair;
15 15
16import java.awt.Container;
17import java.awt.Desktop; 16import java.awt.Desktop;
18import java.awt.FlowLayout;
19import java.awt.event.InputEvent; 17import java.awt.event.InputEvent;
20import java.awt.event.KeyEvent; 18import java.awt.event.KeyEvent;
21import java.io.File; 19import java.io.File;
@@ -31,17 +29,6 @@ import java.util.stream.Collectors;
31import java.util.stream.IntStream; 29import java.util.stream.IntStream;
32import javax.swing.*; 30import javax.swing.*;
33 31
34
35import javax.swing.*;
36
37import cuchaz.enigma.config.Config;
38import cuchaz.enigma.config.Themes;
39import cuchaz.enigma.gui.Gui;
40import cuchaz.enigma.gui.dialog.AboutDialog;
41import cuchaz.enigma.gui.stats.StatsMember;
42import cuchaz.enigma.translation.mapping.serde.MappingFormat;
43import cuchaz.enigma.utils.I18n;
44
45public class MenuBar extends JMenuBar { 32public 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 */