diff options
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/elements')
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/elements/MenuBar.java | 91 |
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 @@ | |||
| 1 | package cuchaz.enigma.gui.elements; | 1 | package cuchaz.enigma.gui.elements; |
| 2 | 2 | ||
| 3 | import cuchaz.enigma.config.Config; | 3 | import java.awt.Container; |
| 4 | import cuchaz.enigma.config.Themes; | 4 | import java.awt.Desktop; |
| 5 | import cuchaz.enigma.gui.Gui; | 5 | import java.awt.FlowLayout; |
| 6 | import cuchaz.enigma.gui.dialog.AboutDialog; | ||
| 7 | import cuchaz.enigma.gui.dialog.SearchDialog; | ||
| 8 | import cuchaz.enigma.gui.stats.StatsMember; | ||
| 9 | import cuchaz.enigma.translation.mapping.serde.MappingFormat; | ||
| 10 | import cuchaz.enigma.utils.I18n; | ||
| 11 | |||
| 12 | import javax.swing.*; | ||
| 13 | import java.awt.*; | ||
| 14 | import java.awt.event.InputEvent; | 6 | import java.awt.event.InputEvent; |
| 15 | import java.awt.event.KeyEvent; | 7 | import java.awt.event.KeyEvent; |
| 16 | import java.io.File; | 8 | import java.io.File; |
| @@ -20,9 +12,22 @@ import java.net.URL; | |||
| 20 | import java.nio.file.Files; | 12 | import java.nio.file.Files; |
| 21 | import java.nio.file.Path; | 13 | import java.nio.file.Path; |
| 22 | import java.nio.file.Paths; | 14 | import java.nio.file.Paths; |
| 23 | import java.util.List; | ||
| 24 | import java.util.*; | 15 | import java.util.*; |
| 25 | import java.util.stream.Collectors; | 16 | import java.util.stream.Collectors; |
| 17 | import java.util.stream.IntStream; | ||
| 18 | |||
| 19 | import javax.swing.*; | ||
| 20 | |||
| 21 | import cuchaz.enigma.config.Config; | ||
| 22 | import cuchaz.enigma.config.Themes; | ||
| 23 | import cuchaz.enigma.gui.Gui; | ||
| 24 | import cuchaz.enigma.gui.dialog.AboutDialog; | ||
| 25 | import cuchaz.enigma.gui.dialog.SearchDialog; | ||
| 26 | import cuchaz.enigma.gui.stats.StatsMember; | ||
| 27 | import cuchaz.enigma.gui.util.ScaleUtil; | ||
| 28 | import cuchaz.enigma.translation.mapping.serde.MappingFormat; | ||
| 29 | import cuchaz.enigma.utils.I18n; | ||
| 30 | import cuchaz.enigma.utils.Pair; | ||
| 26 | 31 | ||
| 27 | public class MenuBar extends JMenuBar { | 32 | public 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 | */ |