diff options
| author | 2020-05-19 08:19:07 +0200 | |
|---|---|---|
| committer | 2020-05-19 02:19:07 -0400 | |
| commit | 9e75b56aa633b696dcce4478ddb4f1d9baf8c9a1 (patch) | |
| tree | 837844c54956c57b14da001e8a06b07e5e6f0c7a /src/main/java/cuchaz/enigma/gui/dialog | |
| parent | Create zh_cn.json (#216) (diff) | |
| download | enigma-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/dialog')
| -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 |
2 files changed, 132 insertions, 0 deletions
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 0000000..64219ab --- /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 0000000..868eba7 --- /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 | } | ||