From 09b1240428e692aac2f36d8446dd7fa75e503b3e Mon Sep 17 00:00:00 2001
From: Stephane Dallongeville <stephane.dallongeville@pasteur.fr>
Date: Thu, 28 Jul 2022 15:20:19 +0200
Subject: [PATCH] Added file selection for XLS export

---
 pom.xml                                       |  2 +-
 .../processors/TrackProcessorMSD.java         | 32 +++++++++++--------
 2 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/pom.xml b/pom.xml
index 3932634..38c6fe1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
 
     <!-- Project Information -->
     <artifactId>msd-track-processor</artifactId>
-    <version>1.1.1</version>
+    <version>1.1.2</version>
 
     <packaging>jar</packaging>
 
diff --git a/src/main/java/plugins/fab/trackmanager/processors/TrackProcessorMSD.java b/src/main/java/plugins/fab/trackmanager/processors/TrackProcessorMSD.java
index 727c7f6..b243681 100644
--- a/src/main/java/plugins/fab/trackmanager/processors/TrackProcessorMSD.java
+++ b/src/main/java/plugins/fab/trackmanager/processors/TrackProcessorMSD.java
@@ -29,7 +29,9 @@ import org.jfree.data.xy.XYSeries;
 import org.jfree.data.xy.XYSeriesCollection;
 
 import icy.canvas.IcyCanvas;
+import icy.gui.dialog.SaveDialog;
 import icy.gui.util.GuiUtil;
+import icy.main.Icy;
 import icy.painter.Painter;
 import icy.preferences.GeneralPreferences;
 import icy.sequence.Sequence;
@@ -188,18 +190,23 @@ public class TrackProcessorMSD extends PluginTrackManagerProcessor implements Ac
     {
         WritableWorkbook workbook = null;
         WritableSheet page = null;
-        String outputName;
-
-        if ((trackPool.getDisplaySequence() == null)
-                || StringUtil.isEmpty(trackPool.getDisplaySequence().getFilename()))
-            outputName = GeneralPreferences.getResultFolder() + "Tracks";
-        else
-            outputName = trackPool.getDisplaySequence().getFilename();
-
-        outputName += ".msd.xls";
 
         if (xlsExport)
         {
+            String outputName;
+
+            if (Icy.getMainInterface().isHeadLess())
+            {
+                if ((trackPool.getDisplaySequence() == null) || StringUtil.isEmpty(trackPool.getDisplaySequence().getFilename()))
+                    outputName = GeneralPreferences.getResultFolder() + "Tracks";
+                else
+                    outputName = trackPool.getDisplaySequence().getFilename();
+                outputName += ".msd.xls";
+            }
+            else outputName = SaveDialog.chooseFileForResult("XLS MSD export", "tracks-msd", ".xls");
+
+            if (StringUtil.isEmpty(outputName)) return;
+
             try
             {
                 workbook = XLSUtil.createWorkbook(new File(outputName));
@@ -208,7 +215,6 @@ public class TrackProcessorMSD extends PluginTrackManagerProcessor implements Ac
             {
                 e.printStackTrace();
             }
-
         }
 
         if (workbook != null)
@@ -380,8 +386,7 @@ public class TrackProcessorMSD extends PluginTrackManagerProcessor implements Ac
 
     private static double scaledSquaredDistance(Detection d1, Detection d2, double sx, double sy, double sz)
     {
-        return Math.pow((d1.getX() - d2.getX()) * sx, 2) + Math.pow((d1.getY() - d2.getY()) * sy, 2)
-                + Math.pow((d1.getZ() - d2.getZ()) * sz, 2);
+        return Math.pow((d1.getX() - d2.getX()) * sx, 2) + Math.pow((d1.getY() - d2.getY()) * sy, 2) + Math.pow((d1.getZ() - d2.getZ()) * sz, 2);
     }
 
     // public static double getScaledDistance(double x1, double y1, double z1, double x2, double y2, double z2)
@@ -467,8 +472,7 @@ public class TrackProcessorMSD extends PluginTrackManagerProcessor implements Ac
 
         Rectangle2D transformedChartRectangleInSequence = (Rectangle2D) chartRectangleInSequence.clone();
         transformedChartRectangleInSequence.setRect((-chartRectangleInSequence.getWidth() / 2) * (1d / scale),
-                (-chartRectangleInSequence.getHeight() / 2) * (1d / scale),
-                chartRectangleInSequence.getWidth() * (1d / scale),
+                (-chartRectangleInSequence.getHeight() / 2) * (1d / scale), chartRectangleInSequence.getWidth() * (1d / scale),
                 chartRectangleInSequence.getHeight() * (1d / scale));
 
         Graphics2D g2 = (Graphics2D) g;
-- 
GitLab