diff --git a/applications/rfigui.cpp b/applications/rfigui.cpp index b8f7d674f7a0a9517e29dbb5fd9aba2957687ebc..99857222d8ea5164555fadd4ccdc675398ec47de 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 9ff62e781d14a675d19e274f78686ddea4409e19..9ae2a30125d8400705523ea1b49f24d2d820b35e 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_