blob: 868eba79d8c8221c3f8e355a69624920d39a8d79 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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<StatsMember, JCheckBox> 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<StatsMember, JCheckBox> checkboxes) {
// get members from selected checkboxes
Set<StatsMember> 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);
}
}
}
|