123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package holeg.ui;
- import holeg.PowerFlowSettings;
- import holeg.SlackNodePlacementStrategy;
- import javax.swing.*;
- import javax.swing.event.ChangeListener;
- import java.awt.*;
- import java.util.function.Consumer;
- public class SettingsWindow extends JDialog {
- public SettingsWindow(Frame owner, PowerFlowSettings settings) {
- super(owner);
- setTitle("HOLEG: Power flow settings");
- setSize(400, 600);
- getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
- createCheckbox("Only update grid when changed", settings.onlyUpdateGridWhenChanged, (e) -> {
- settings.onlyUpdateGridWhenChanged = e;
- });
- createCheckbox("Wait for solver job", settings.waitForSolverJob, (e) -> {
- settings.waitForSolverJob = e;
- });
- createCheckbox("Skip grids with no producers", settings.skipGridsWithNoProducers, (e) -> {
- settings.skipGridsWithNoProducers = e;
- });
- createCheckbox("Replace node with slack node", settings.replaceNodeWithSlackNode, (e) -> {
- settings.replaceNodeWithSlackNode = e;
- });
- createComboBox("Slack node placement strategy", SlackNodePlacementStrategy.values(), settings.slackNodePlacementStrategy, (e) -> {
- settings.slackNodePlacementStrategy = e;
- });
- createNumberTextBox("Solver threads per subgrid", settings.maxSolverThreads, (e) -> {
- settings.maxSolverThreads = e;
- });
- createNumberTextBox("Max iterations", settings.solverSettings.maxIterations, (e) -> {
- settings.solverSettings.maxIterations = e;
- });
- createNumberTextBox("Min error", settings.solverSettings.minError, (e) -> {
- settings.solverSettings.minError = e;
- });
- createNumberTextBox("Max error", settings.solverSettings.maxError, (e) -> {
- settings.solverSettings.maxError = e;
- });
- createNumberTextBox("Jacobian recalculation interval", settings.solverSettings.jacobianRecalculationInterval, (e) -> {
- settings.solverSettings.jacobianRecalculationInterval = e;
- });
- createNumberTextBox("Min voltage until invalid", settings.minVoltageUntilInvalid, (e) -> {
- settings.minVoltageUntilInvalid = e;
- });
- createCheckbox("Disable automatic scaling", settings.disableAutomaticScaling, (e) -> {
- settings.disableAutomaticScaling = e;
- });
- }
- private void createCheckbox(String label, boolean value, Consumer<Boolean> listener) {
- JCheckBox checkbox = new JCheckBox();
- checkbox.setText(label);
- checkbox.setSelected(value);
- checkbox.setAlignmentX(Component.LEFT_ALIGNMENT);
- checkbox.addActionListener((e) -> {
- if (listener != null)
- listener.accept(((JCheckBox) e.getSource()).isSelected());
- });
- add(checkbox);
- }
- private <T> void createComboBox(String label, T[] choices, T value, Consumer<T> listener) {
- Container container = new Container();
- container.setLayout(new BoxLayout(container, BoxLayout.LINE_AXIS));
-
- container.add(new JLabel(label));
-
- JComboBox<T> comboBox = new JComboBox<T>(choices);
- comboBox.setSelectedItem(value);
- comboBox.setMaximumSize(comboBox.getPreferredSize());
- comboBox.setAlignmentX(Component.LEFT_ALIGNMENT);
- comboBox.addActionListener((e) -> {
- if (listener != null)
- listener.accept((T) ((JComboBox<T>) e.getSource()).getSelectedItem());
- });
- container.add(comboBox);
- add(container);
- }
- private JTextField createTextField(String value) {
- JTextField textField = new JTextField();
- textField.setColumns(8);
- textField.setText(value);
- textField.setMaximumSize(textField.getPreferredSize());
- textField.setAlignmentX(Component.LEFT_ALIGNMENT);
- return textField;
- }
- private void createNumberTextBox(String label, Integer value, Consumer<Integer> listener) {
- Container container = new Container();
- container.setLayout(new BoxLayout(container, BoxLayout.LINE_AXIS));
-
- container.add(new JLabel(label));
-
- JTextField textField = createTextField(Integer.toString(value));
- textField.getDocument().addDocumentListener((SimpleDocumentListener)(e) -> {
- if (listener != null) {
- String text = textField.getText();
- try {
- listener.accept(Integer.parseInt(text));
- }
- catch(NumberFormatException ignored) {
- }
- }
- });
- container.add(textField);
- add(container);
- }
- private void createNumberTextBox(String label, Double value, Consumer<Double> listener) {
- Container container = new Container();
- container.setLayout(new BoxLayout(container, BoxLayout.LINE_AXIS));
-
- container.add(new JLabel(label));
-
- JTextField textField = createTextField(Double.toString(value));
- textField.getDocument().addDocumentListener((SimpleDocumentListener)(e) -> {
- if (listener != null) {
- String text = textField.getText();
- try {
- listener.accept(Double.parseDouble(text));
- }
- catch(NumberFormatException ignored) {
- }
- }
- });
- container.add(textField);
- add(container);
- }
- }
|