From fc3cae7a0a19a9de8b1ff0b418c79de8357d8cf7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Offringa?= <offringa@astron.nl>
Date: Thu, 4 May 2023 16:34:19 +0200
Subject: [PATCH] Work in progress

---
 applications/rfigui.cpp        | 19 ++++++++++++++-----
 util/progress/stdoutreporter.h | 14 +++++++++++++-
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/applications/rfigui.cpp b/applications/rfigui.cpp
index b8f7d674..99857222 100644
--- a/applications/rfigui.cpp
+++ b/applications/rfigui.cpp
@@ -4,6 +4,7 @@
 #include "../rfigui/controllers/rfiguicontroller.h"
 
 #include "../util/logger.h"
+#include "../util/progress/stdoutreporter.h"
 
 #include "../imagesets/msimageset.h"
 #include "../imagesets/msoptions.h"
@@ -152,16 +153,24 @@ static void run(int argc, char* argv[]) {
       if (imageSet == nullptr)
         throw std::runtime_error(
             "Option -save-baseline can only be used for measurement sets.\n");
-      MaskedHeatMap& plot = controller.TFController().Plot();
-      plot.SetShowOriginalMask(plotFlags);
-      plot.SetShowXAxisDescription(true);
-      plot.SetShowYAxisDescription(true);
-      plot.SetShowZAxisDescription(true);
       for (const SavedBaseline& b : savedBaselines) {
         auto index =
             imageSet->Index(b.a1Index, b.a2Index, b.bandIndex, b.sequenceIndex);
         if (!index) throw std::runtime_error("Baseline not found!");
         controller.SetImageSetIndex(*index);
+        StdOutReporter reporter;
+        reporter.SignalFinished().connect([&](bool success) {
+          std::cout << "FINISH\n";
+          //controller.LoadCurrentTFDataFinish(success);
+        });
+        std::thread thread(
+          [&]() { controller.LoadCurrentTFDataAsync(reporter); });
+        thread.join();
+        MaskedHeatMap& plot = controller.TFController().Plot();
+        plot.SetShowOriginalMask(plotFlags);
+        plot.SetShowXAxisDescription(true);
+        plot.SetShowYAxisDescription(true);
+        plot.SetShowZAxisDescription(true);
         plot.SaveByExtension(b.filename, 800, 480);
       }
     }
diff --git a/util/progress/stdoutreporter.h b/util/progress/stdoutreporter.h
index 9ff62e78..9ae2a301 100644
--- a/util/progress/stdoutreporter.h
+++ b/util/progress/stdoutreporter.h
@@ -7,6 +7,8 @@
 #include <string>
 #include <iostream>
 
+#include <sigc++/signal.h>
+
 class StdOutReporter final : public ProgressListener {
  public:
   void OnStartTask(const std::string& description) override {
@@ -21,10 +23,20 @@ class StdOutReporter final : public ProgressListener {
         std::cout << '.' << std::flush;
     }
   }
-  void OnFinish() override { std::cout << "100\n"; }
+  void OnFinish() override { std::cout << "100\n"; _signalFinished(true); }
   void OnException(std::exception& thrown_exception) override {
     std::cerr << "ERROR! " << thrown_exception.what() << '\n';
+    _signalError(thrown_exception.what());
+    _signalFinished(false);
+  }
+  sigc::signal<void, bool /*errors occurred? */>& SignalFinished() {
+    return _signalFinished;
   }
+  sigc::signal<void, const std::string&>& SignalError() { return _signalError; }
+
+private:
+  sigc::signal<void, bool> _signalFinished;
+  sigc::signal<void, const std::string&> _signalError;
 };
 
 #endif  // UTIL_PROGRESS_STD_OUT_REPORTER_H_
-- 
GitLab