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
|
package cuchaz.enigma.gui.dialog;
import java.awt.*;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import cuchaz.enigma.gui.util.GridBagConstraintsBuilder;
import cuchaz.enigma.gui.util.ScaleUtil;
import cuchaz.enigma.utils.I18n;
import cuchaz.enigma.utils.Pair;
import cuchaz.enigma.utils.validation.ValidationContext;
public abstract class AbstractDialog extends JDialog {
protected final ValidationContext vc = new ValidationContext();
private boolean actionConfirm = false;
public AbstractDialog(Frame owner, String title, String confirmAction, String cancelAction) {
super(owner, I18n.translate(title), true);
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
Container inputContainer = new JPanel(new GridBagLayout());
List<Pair<String, Component>> components = createComponents();
for (int i = 0; i < components.size(); i += 1) {
Pair<String, Component> entry = components.get(i);
JLabel label = new JLabel(I18n.translate(entry.a));
Component component = entry.b;
GridBagConstraintsBuilder cb = GridBagConstraintsBuilder.create().insets(2);
inputContainer.add(label, cb.pos(0, i).weightX(0.0).anchor(GridBagConstraints.LINE_END).fill(GridBagConstraints.NONE).build());
inputContainer.add(component, cb.pos(1, i).weightX(1.0).anchor(GridBagConstraints.LINE_END).fill(GridBagConstraints.HORIZONTAL).build());
}
contentPane.add(inputContainer, BorderLayout.CENTER);
Container buttonContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT, ScaleUtil.scale(4), ScaleUtil.scale(4)));
JButton connectButton = new JButton(I18n.translate(confirmAction));
connectButton.addActionListener(event -> confirm());
buttonContainer.add(connectButton);
JButton abortButton = new JButton(I18n.translate(cancelAction));
abortButton.addActionListener(event -> cancel());
buttonContainer.add(abortButton);
contentPane.add(buttonContainer, BorderLayout.SOUTH);
pack();
setLocationRelativeTo(owner);
}
protected abstract List<Pair<String, Component>> createComponents();
protected void confirm() {
vc.reset();
validateInputs();
if (vc.canProceed()) {
actionConfirm = true;
setVisible(false);
}
}
protected void cancel() {
actionConfirm = false;
setVisible(false);
}
public boolean isActionConfirm() {
return actionConfirm;
}
public void validateInputs() {
}
}
|