From 9e75b56aa633b696dcce4478ddb4f1d9baf8c9a1 Mon Sep 17 00:00:00 2001 From: Yanis48 Date: Tue, 19 May 2020 08:19:07 +0200 Subject: QOL fixes - Volume 2 (#239) --- .../cuchaz/enigma/gui/dialog/ChangeDialog.java | 50 +++++++++++++ .../java/cuchaz/enigma/gui/dialog/StatsDialog.java | 82 ++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java create mode 100644 src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java (limited to 'src/main/java/cuchaz/enigma/gui/dialog') 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 @@ +package cuchaz.enigma.gui.dialog; + +import java.awt.BorderLayout; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import cuchaz.enigma.gui.Gui; +import cuchaz.enigma.utils.I18n; + +public class ChangeDialog { + + public static void show(Gui gui) { + // init frame + JFrame frame = new JFrame(I18n.translate("menu.view.change.title")); + JPanel textPanel = new JPanel(); + JPanel buttonPanel = new JPanel(); + frame.setLayout(new BorderLayout()); + frame.add(BorderLayout.NORTH, textPanel); + frame.add(BorderLayout.SOUTH, buttonPanel); + + // show text + JLabel text = new JLabel((I18n.translate("menu.view.change.summary"))); + text.setHorizontalAlignment(JLabel.CENTER); + textPanel.add(text); + + // show ok button + JButton okButton = new JButton(I18n.translate("menu.view.change.ok")); + buttonPanel.add(okButton); + okButton.addActionListener(event -> frame.dispose()); + okButton.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + frame.dispose(); + } + } + }); + + // show the frame + frame.pack(); + frame.setVisible(true); + frame.setResizable(false); + frame.setLocationRelativeTo(gui.getFrame()); + } +} 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 @@ +package cuchaz.enigma.gui.dialog; + +import java.awt.BorderLayout; +import java.util.Arrays; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JFrame; +import javax.swing.JPanel; + +import cuchaz.enigma.gui.Gui; +import cuchaz.enigma.gui.stats.StatsMember; +import cuchaz.enigma.gui.util.ScaleUtil; +import cuchaz.enigma.utils.I18n; + +public class StatsDialog { + + public static void show(Gui gui) { + // init frame + JFrame frame = new JFrame(I18n.translate("menu.file.stats.title")); + JPanel checkboxesPanel = new JPanel(); + JPanel buttonPanel = new JPanel(); + frame.setLayout(new BorderLayout()); + frame.add(BorderLayout.NORTH, checkboxesPanel); + frame.add(BorderLayout.SOUTH, buttonPanel); + + // show checkboxes + Map checkboxes = Arrays + .stream(StatsMember.values()) + .collect(Collectors.toMap(m -> m, m -> { + JCheckBox checkbox = new JCheckBox(I18n.translate("type." + m.name().toLowerCase(Locale.ROOT))); + checkboxesPanel.add(checkbox); + return checkbox; + })); + + // show generate button + JButton button = new JButton(I18n.translate("menu.file.stats.generate")); + buttonPanel.add(button); + button.setEnabled(false); + button.addActionListener(action -> { + frame.dispose(); + generateStats(gui, checkboxes); + }); + + // add action listener to each checkbox + checkboxes.entrySet().forEach(checkbox -> { + checkbox.getValue().addActionListener(action -> { + if (!button.isEnabled()) { + button.setEnabled(true); + } else if (checkboxes.entrySet().stream().allMatch(entry -> !entry.getValue().isSelected())) { + button.setEnabled(false); + } + }); + }); + + // show the frame + frame.pack(); + frame.setVisible(true); + frame.setSize(ScaleUtil.getDimension(500, 120)); + frame.setResizable(false); + frame.setLocationRelativeTo(gui.getFrame()); + } + + private static void generateStats(Gui gui, Map checkboxes) { + // get members from selected checkboxes + Set includedMembers = checkboxes + .entrySet() + .stream() + .filter(entry -> entry.getValue().isSelected()) + .map(Map.Entry::getKey) + .collect(Collectors.toSet()); + + // checks if a projet is open + if (gui.getController().project != null) { + gui.getController().openStats(includedMembers); + } + } +} -- cgit v1.2.3