From 50a5431321c042f40c59f73a0d16cf4f51d4a18d Mon Sep 17 00:00:00 2001 From: Daniel Schramm <xschramm@fi.muni.cz> Date: Wed, 15 Sep 2021 00:21:43 +0200 Subject: [PATCH] Button for repetition of computation of the weighted Hausdorff distance added --- .../analyst/core/ControlPanelBuilder.java | 29 ++++++++++----- .../analyst/distance/DistanceAction.java | 5 +++ .../analyst/distance/DistancePanel.java | 37 ++++++++++++++++++- 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java index f49e9acb..d5c3d08b 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java +++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java @@ -234,25 +234,36 @@ public class ControlPanelBuilder { GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(2, 0, 40, 0); // small external space on top and bottom c.weighty = 1.0; //request any extra vertical space - c.gridwidth = BUTTON_WIDTH; - c.gridy = row; c.anchor = GridBagConstraints.PAGE_END; - c.fill = GridBagConstraints.NONE; List<JButton> retButtons = new ArrayList<>(); for (int i = 0; i < buttons.size(); i++) { - JButton button = new JButton(); - button.setText(buttons.get(i)); - button.addActionListener(actions.get(i)); - c.gridx = col; - col += BUTTON_WIDTH; - controlPanel.add(button, c); + JButton button = addButton(buttons.get(i), actions.get(i), c); retButtons.add(button); } return retButtons; } + public JButton addButtonSimple(String caption, ActionListener action) { + return addButton(caption, action, new GridBagConstraints()); + } + + private JButton addButton(String caption, ActionListener action, GridBagConstraints constraints) { + JButton button = new JButton(); + button.setText(caption); + button.addActionListener(action); + + constraints.gridwidth = BUTTON_WIDTH; + constraints.gridy = row; + constraints.gridx = col; + col += BUTTON_WIDTH; + constraints.fill = GridBagConstraints.NONE; + controlPanel.add(button, constraints); + + return button; + } + /** * Adds a combo box * @param items Items diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java index 6a03d828..bd573f0c 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java @@ -20,6 +20,7 @@ import javax.swing.JToggleButton; * Action listener for the curvature computation. * * @author Radek Oslejsek + * @author Daniel Schramm */ public class DistanceAction extends ControlPanelAction { @@ -76,6 +77,10 @@ public class DistanceAction extends ControlPanelAction { case DistancePanel.ACTION_COMMAND_FEATURE_POINT_RESIZE: resizeFeaturePoint((LoadedActionEvent) ae); break; + case DistancePanel.ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE: + this.visitor = null; // recompute + setHeatmap(); + break; default: // to nothing } diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java index 9fdaa276..3c3c5b93 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java @@ -5,9 +5,12 @@ import cz.fidentis.analyst.core.ControlPanelBuilder; import cz.fidentis.analyst.feature.FeaturePoint; import cz.fidentis.analyst.scene.DrawableFeaturePoints; import cz.fidentis.analyst.symmetry.SymmetryPanel; +import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; import java.util.List; import javax.swing.ImageIcon; +import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JPanel; import javax.swing.JTextField; @@ -34,6 +37,7 @@ public class DistancePanel extends ControlPanel { public static final String ACTION_COMMAND_RELATIVE_ABSOLUTE_DIST = "switch abosulte-relative distance"; public static final String ACTION_COMMAND_FEATURE_POINT_HIGHLIGHT = "highlight feature point with color"; public static final String ACTION_COMMAND_FEATURE_POINT_RESIZE = "set size of feature point"; + public static final String ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE = "recompute weighted distance"; /* * Configuration of panel-specific GUI elements @@ -69,7 +73,7 @@ public class DistancePanel extends ControlPanel { builder.addGap(); builder.addLine(); - builder.addCheckBoxOptionLine( + final JCheckBox weightedDistChBx = builder.addCheckBoxOptionLine( null, "Weighted Hausdorff distance", false, @@ -79,6 +83,8 @@ public class DistancePanel extends ControlPanel { final JPanel featurePointsPanel = new JPanel(); final ControlPanelBuilder fpBuilder = new ControlPanelBuilder(featurePointsPanel); + final List<JCheckBox> fpCheckBoxes = new ArrayList<>(featurePoints.size()); + final List<JTextField> fpSliderInputs = new ArrayList<>(featurePoints.size()); for (int i = 0; i < featurePoints.size(); i++) { final FeaturePoint featurePoint = featurePoints.get(i); @@ -87,6 +93,7 @@ public class DistancePanel extends ControlPanel { createListener(action, ACTION_COMMAND_FEATURE_POINT_HIGHLIGHT, i) ); checkBox.setText(featurePoint.getFeaturePointType().getName()); + fpCheckBoxes.add(checkBox); final JTextField sliderInput = fpBuilder.addSliderOptionLine( null, @@ -96,12 +103,40 @@ public class DistancePanel extends ControlPanel { ); sliderInput.setText(ControlPanelBuilder.doubleToStringLocale(DrawableFeaturePoints.DEFAULT_SIZE)); sliderInput.postActionEvent(); + fpSliderInputs.add(sliderInput); fpBuilder.addLine(); } builder.addScrollPane(featurePointsPanel); builder.addLine(); + final JButton recomputeButton = builder.addButtonSimple( + "Recompute", + createListener(action, ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE) + ); + recomputeButton.setEnabled(false); + recomputeButton.addActionListener((ActionEvent ae) -> { + recomputeButton.setEnabled(false); + }); + weightedDistChBx.addActionListener((ActionEvent ae) -> { + if (!weightedDistChBx.isSelected()) { + recomputeButton.setEnabled(false); + } + }); + for (final JCheckBox checkBox: fpCheckBoxes) { + checkBox.addActionListener((ActionEvent ae) -> { + recomputeButton.setEnabled(weightedDistChBx.isSelected()); + }); + } + for (int i = 0; i < fpSliderInputs.size(); i++) { + final JTextField sliderInput = fpSliderInputs.get(i); + final JCheckBox sliderCheckBox = fpCheckBoxes.get(i); + sliderInput.addActionListener((ActionEvent ae) -> { + recomputeButton.setEnabled(weightedDistChBx.isSelected() && sliderCheckBox.isSelected()); + }); + } + builder.addLine(); + builder.addCaptionLine("Visualization options:"); builder.addLine(); builder.addCheckBoxOptionLine( -- GitLab