summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/gui/elements
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/elements')
-rw-r--r--src/main/java/cuchaz/enigma/gui/elements/MenuBar.java91
1 files changed, 69 insertions, 22 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java b/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
index f3bf69a..fd521ab 100644
--- a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
+++ b/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
@@ -1,16 +1,8 @@
1package cuchaz.enigma.gui.elements; 1package cuchaz.enigma.gui.elements;
2 2
3import cuchaz.enigma.config.Config; 3import java.awt.Container;
4import cuchaz.enigma.config.Themes; 4import java.awt.Desktop;
5import cuchaz.enigma.gui.Gui; 5import java.awt.FlowLayout;
6import cuchaz.enigma.gui.dialog.AboutDialog;
7import cuchaz.enigma.gui.dialog.SearchDialog;
8import cuchaz.enigma.gui.stats.StatsMember;
9import cuchaz.enigma.translation.mapping.serde.MappingFormat;
10import cuchaz.enigma.utils.I18n;
11
12import javax.swing.*;
13import java.awt.*;
14import java.awt.event.InputEvent; 6import java.awt.event.InputEvent;
15import java.awt.event.KeyEvent; 7import java.awt.event.KeyEvent;
16import java.io.File; 8import java.io.File;
@@ -20,9 +12,22 @@ import java.net.URL;
20import java.nio.file.Files; 12import java.nio.file.Files;
21import java.nio.file.Path; 13import java.nio.file.Path;
22import java.nio.file.Paths; 14import java.nio.file.Paths;
23import java.util.List;
24import java.util.*; 15import java.util.*;
25import java.util.stream.Collectors; 16import java.util.stream.Collectors;
17import java.util.stream.IntStream;
18
19import javax.swing.*;
20
21import cuchaz.enigma.config.Config;
22import cuchaz.enigma.config.Themes;
23import cuchaz.enigma.gui.Gui;
24import cuchaz.enigma.gui.dialog.AboutDialog;
25import cuchaz.enigma.gui.dialog.SearchDialog;
26import cuchaz.enigma.gui.stats.StatsMember;
27import cuchaz.enigma.gui.util.ScaleUtil;
28import cuchaz.enigma.translation.mapping.serde.MappingFormat;
29import cuchaz.enigma.utils.I18n;
30import cuchaz.enigma.utils.Pair;
26 31
27public class MenuBar extends JMenuBar { 32public class MenuBar extends JMenuBar {
28 33
@@ -167,7 +172,7 @@ public class MenuBar extends JMenuBar {
167 JMenuItem stats = new JMenuItem(I18n.translate("menu.file.stats")); 172 JMenuItem stats = new JMenuItem(I18n.translate("menu.file.stats"));
168 173
169 stats.addActionListener(event -> { 174 stats.addActionListener(event -> {
170 JFrame frame = new JFrame(I18n.translate("menu.file.stats.title")); 175 JFrame frame = new JFrame(I18n.translate("menu.file.stats.title"));
171 Container pane = frame.getContentPane(); 176 Container pane = frame.getContentPane();
172 pane.setLayout(new FlowLayout()); 177 pane.setLayout(new FlowLayout());
173 178
@@ -195,10 +200,10 @@ public class MenuBar extends JMenuBar {
195 }); 200 });
196 201
197 pane.add(button); 202 pane.add(button);
198 frame.pack(); 203 frame.pack();
199 frame.setLocationRelativeTo(this.gui.getFrame()); 204 frame.setLocationRelativeTo(this.gui.getFrame());
200 frame.setVisible(true); 205 frame.setVisible(true);
201 }); 206 });
202 207
203 menu.add(stats); 208 menu.add(stats);
204 } 209 }
@@ -247,7 +252,7 @@ public class MenuBar extends JMenuBar {
247 themes.add(theme); 252 themes.add(theme);
248 theme.addActionListener(event -> Themes.setLookAndFeel(gui, lookAndFeel)); 253 theme.addActionListener(event -> Themes.setLookAndFeel(gui, lookAndFeel));
249 } 254 }
250 255
251 JMenu languages = new JMenu(I18n.translate("menu.view.languages")); 256 JMenu languages = new JMenu(I18n.translate("menu.view.languages"));
252 menu.add(languages); 257 menu.add(languages);
253 for (String lang : I18n.getAvailableLanguages()) { 258 for (String lang : I18n.getAvailableLanguages()) {
@@ -258,21 +263,63 @@ public class MenuBar extends JMenuBar {
258 JFrame frame = new JFrame(I18n.translate("menu.view.languages.title")); 263 JFrame frame = new JFrame(I18n.translate("menu.view.languages.title"));
259 Container pane = frame.getContentPane(); 264 Container pane = frame.getContentPane();
260 pane.setLayout(new FlowLayout()); 265 pane.setLayout(new FlowLayout());
261 266
262 JLabel text = new JLabel((I18n.translate("menu.view.languages.summary"))); 267 JLabel text = new JLabel((I18n.translate("menu.view.languages.summary")));
263 text.setHorizontalAlignment(JLabel.CENTER); 268 text.setHorizontalAlignment(JLabel.CENTER);
264 pane.add(text); 269 pane.add(text);
265 270
266 JButton okButton = new JButton(I18n.translate("menu.view.languages.ok")); 271 JButton okButton = new JButton(I18n.translate("menu.view.languages.ok"));
267 pane.add(okButton); 272 pane.add(okButton);
268 okButton.addActionListener(arg0 -> frame.dispose()); 273 okButton.addActionListener(arg0 -> frame.dispose());
269 274
270 frame.pack(); 275 frame.pack();
271 frame.setLocationRelativeTo(this.gui.getFrame()); 276 frame.setLocationRelativeTo(this.gui.getFrame());
272 frame.setVisible(true); 277 frame.setVisible(true);
273 }); 278 });
274 } 279 }
275 280
281 JMenu scale = new JMenu(I18n.translate("menu.view.scale"));
282 {
283 ButtonGroup scaleGroup = new ButtonGroup();
284 Map<Float, JRadioButtonMenuItem> map = IntStream.of(100, 125, 150, 175, 200)
285 .mapToObj(scaleFactor -> {
286 float realScaleFactor = scaleFactor / 100f;
287 JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem(String.format("%d%%", scaleFactor));
288 menuItem.addActionListener(event -> ScaleUtil.setScaleFactor(realScaleFactor));
289 scaleGroup.add(menuItem);
290 scale.add(menuItem);
291 return new Pair<>(realScaleFactor, menuItem);
292 })
293 .collect(Collectors.toMap(x -> x.a, x -> x.b));
294
295 JMenuItem customScale = new JMenuItem(I18n.translate("menu.view.scale.custom"));
296 customScale.addActionListener(event -> {
297 String answer = (String) JOptionPane.showInputDialog(gui.getFrame(), "Custom Scale", "Custom Scale",
298 JOptionPane.QUESTION_MESSAGE, null, null, Float.toString(ScaleUtil.getScaleFactor() * 100));
299 if (answer == null) return;
300 float newScale = 1.0f;
301 try {
302 newScale = Float.parseFloat(answer) / 100f;
303 } catch (NumberFormatException ignored) {
304 }
305 ScaleUtil.setScaleFactor(newScale);
306 });
307 scale.add(customScale);
308 ScaleUtil.addListener((newScale, _oldScale) -> {
309 JRadioButtonMenuItem mi = map.get(newScale);
310 if (mi != null) {
311 mi.setSelected(true);
312 } else {
313 scaleGroup.clearSelection();
314 }
315 });
316 JRadioButtonMenuItem mi = map.get(ScaleUtil.getScaleFactor());
317 if (mi != null) {
318 mi.setSelected(true);
319 }
320 }
321 menu.add(scale);
322
276 JMenuItem search = new JMenuItem(I18n.translate("menu.view.search")); 323 JMenuItem search = new JMenuItem(I18n.translate("menu.view.search"));
277 search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, InputEvent.SHIFT_MASK)); 324 search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, InputEvent.SHIFT_MASK));
278 menu.add(search); 325 menu.add(search);
@@ -284,7 +331,7 @@ public class MenuBar extends JMenuBar {
284 331
285 } 332 }
286 } 333 }
287 334
288 /* 335 /*
289 * Help menu 336 * Help menu
290 */ 337 */