From 1e6786cdf8d8c4182d1f8696276c7f8212f15e8e Mon Sep 17 00:00:00 2001
From: Daniel Schramm <xschramm@fi.muni.cz>
Date: Tue, 14 Sep 2021 13:59:04 +0200
Subject: [PATCH] Display list of feature points

---
 .../analyst/core/ControlPanelBuilder.java     | 18 +++++++++++-
 .../analyst/distance/DistanceAction.java      |  3 +-
 .../analyst/distance/DistancePanel.java       | 28 ++++++++++++++++---
 3 files changed, 43 insertions(+), 6 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 cb424ebb..f49e9acb 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java
@@ -22,6 +22,7 @@ import javax.swing.JComboBox;
 import javax.swing.JFormattedTextField;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JScrollPane;
 import javax.swing.JSlider;
 import javax.swing.JTextField;
 import javax.swing.event.ChangeEvent;
@@ -428,5 +429,20 @@ public class ControlPanelBuilder {
         
         return slider;
     }
-
+    
+    public JScrollPane addScrollPane(JPanel content) {
+        JScrollPane scrollPane = new JScrollPane(content);
+        
+        GridBagConstraints c = new GridBagConstraints();
+        c.weighty = 1.0;
+        c.gridwidth = GridBagConstraints.REMAINDER;
+        c.gridy = row;
+        c.gridx = col;
+        c.anchor = GridBagConstraints.CENTER;
+        c.fill = GridBagConstraints.BOTH;
+        controlPanel.add(scrollPane, c);
+        
+        return scrollPane;
+    }
+    
 }
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 93db8065..c05b2f58 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java
@@ -34,7 +34,7 @@ public class DistanceAction extends ControlPanelAction {
      */
     public DistanceAction(Canvas canvas, JTabbedPane topControlPanel) {
         super(canvas, topControlPanel);
-        this.controlPanel = new DistancePanel(this);
+        this.controlPanel = new DistancePanel(this, getSecondaryFeaturePoints().getFeaturePoints());
     }
 
     @Override
@@ -93,4 +93,5 @@ public class DistanceAction extends ControlPanelAction {
         
         getSecondaryDrawableFace().setHeatMap(visitor.getDistances());
     }
+    
 }
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 fe8f5da8..517d5adc 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java
@@ -2,15 +2,19 @@ package cz.fidentis.analyst.distance;
 
 import cz.fidentis.analyst.core.ControlPanel;
 import cz.fidentis.analyst.core.ControlPanelBuilder;
+import cz.fidentis.analyst.feature.FeaturePoint;
 import cz.fidentis.analyst.symmetry.SymmetryPanel;
 import java.awt.event.ActionListener;
 import java.util.List;
 import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
 
 /**
  * Control panel for Hausdorff distance.
  * 
  * @author Radek Oslejsek
+ * @author Daniel Schramm
  */
 public class DistancePanel extends ControlPanel {
     
@@ -30,17 +34,17 @@ public class DistancePanel extends ControlPanel {
     /*
      * Configuration of panel-specific GUI elements
      */
-    public static final String  STRATEGY_POINT_TO_POINT= "Point to point";
-    public static final String  STRATEGY_POINT_TO_TRIANGLE= "Point to triangle";
+    public static final String STRATEGY_POINT_TO_POINT = "Point to point";
+    public static final String STRATEGY_POINT_TO_TRIANGLE = "Point to triangle";
     
     /**
      * Constructor.
      * @param action Action listener
      */
-    public DistancePanel(ActionListener action) {
+    public DistancePanel(ActionListener action, List<FeaturePoint> featurePoints) {
         this.setName(NAME);
         
-        ControlPanelBuilder builder = new ControlPanelBuilder(this);
+        final ControlPanelBuilder builder = new ControlPanelBuilder(this);
         
         builder.addCaptionLine("Computation options:");
         builder.addLine();
@@ -61,6 +65,22 @@ public class DistancePanel extends ControlPanel {
         builder.addGap();
         builder.addLine();
         
+        final JPanel featurePointsPanel = new JPanel();
+        final ControlPanelBuilder fpBuilder = new ControlPanelBuilder(featurePointsPanel);
+        for (int i = 0; i < featurePoints.size(); i++) {
+            final FeaturePoint featurePoint = featurePoints.get(i);
+            
+            final JCheckBox checkBox = fpBuilder.addCheckBox(
+                    false,
+                    null // TODO implement action
+            );
+            checkBox.setText(featurePoint.getFeaturePointType().getName());
+            
+            fpBuilder.addLine();
+        }
+        builder.addScrollPane(featurePointsPanel);
+        builder.addLine();
+
         builder.addCaptionLine("Visualization options:");
         builder.addLine();
         builder.addCheckBoxOptionLine(
-- 
GitLab