jfjoch_viewer: Auto load moved to worker object
This commit is contained in:
@@ -18,6 +18,10 @@ JFJochImageReadingWorker::JFJochImageReadingWorker(const SpotFindingSettings& se
|
||||
indexing = std::make_unique<IndexerThreadPool>(indexing_settings);
|
||||
http_reader.Experiment(experiment);
|
||||
file_reader.Experiment(experiment);
|
||||
|
||||
autoload_timer = new QTimer(this);
|
||||
autoload_timer->setInterval(autoload_interval);
|
||||
connect(autoload_timer, &QTimer::timeout, this, &JFJochImageReadingWorker::AutoLoadTimerExpired);
|
||||
}
|
||||
|
||||
void JFJochImageReadingWorker::LoadFile(const QString &filename, qint64 image_number, qint64 summation) {
|
||||
@@ -36,15 +40,15 @@ void JFJochImageReadingWorker::LoadFile(const QString &filename, qint64 image_nu
|
||||
total_images = http_reader.GetNumberOfImages();
|
||||
dataset = http_reader.GetDataset();
|
||||
if (image_number < 0)
|
||||
emit setToolbarMode(JFJochViewerToolbarImage::ToolbarMode::Autoload);
|
||||
setAutoLoadMode_i(AutoloadMode::HTTPSync);
|
||||
else
|
||||
emit setToolbarMode(JFJochViewerToolbarImage::ToolbarMode::None);
|
||||
setAutoLoadMode_i(AutoloadMode::None);
|
||||
} else {
|
||||
http_mode = false;
|
||||
file_reader.ReadFile(filename.toStdString());
|
||||
total_images = file_reader.GetNumberOfImages();
|
||||
dataset = file_reader.GetDataset();
|
||||
emit setToolbarMode(JFJochViewerToolbarImage::ToolbarMode::None);
|
||||
setAutoLoadMode_i(AutoloadMode::None);
|
||||
}
|
||||
current_image.reset();
|
||||
current_summation = 1;
|
||||
@@ -84,6 +88,7 @@ void JFJochImageReadingWorker::CloseFile() {
|
||||
|
||||
void JFJochImageReadingWorker::LoadImage(int64_t image_number, int64_t summation) {
|
||||
QMutexLocker ul(&m);
|
||||
setAutoLoadMode_i(AutoloadMode::None);
|
||||
if ((image_number == current_image) && (current_summation == summation))
|
||||
return;
|
||||
LoadImage_i(image_number, summation);
|
||||
@@ -403,3 +408,56 @@ void JFJochImageReadingWorker::LoadCalibration(QString dataset) {
|
||||
} else
|
||||
logger.Info("HTTP mode doesn't allow to read calibration (at the moment");
|
||||
}
|
||||
|
||||
void JFJochImageReadingWorker::AutoLoadTimerExpired() {
|
||||
QMutexLocker locker(&m);
|
||||
switch (autoload_mode) {
|
||||
case AutoloadMode::HTTPSync:
|
||||
if (http_mode)
|
||||
LoadImage_i(-1 , 1);
|
||||
break;
|
||||
case AutoloadMode::Movie: {
|
||||
if (total_images == 0 || !current_image)
|
||||
return;
|
||||
int64_t new_image = (current_image.value() + jump_value) % total_images;
|
||||
LoadImage_i(new_image, current_summation);
|
||||
break;
|
||||
}
|
||||
case AutoloadMode::None:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void JFJochImageReadingWorker::setAutoLoadMode_i(AutoloadMode in_mode) {
|
||||
autoload_mode = in_mode;
|
||||
if (autoload_mode == AutoloadMode::None)
|
||||
autoload_timer->stop();
|
||||
else
|
||||
autoload_timer->start();
|
||||
emit autoloadChanged(autoload_mode);
|
||||
}
|
||||
|
||||
void JFJochImageReadingWorker::setAutoLoadMode(AutoloadMode mode) {
|
||||
QMutexLocker ul(&m);
|
||||
|
||||
switch (mode) {
|
||||
case AutoloadMode::HTTPSync:
|
||||
if (http_mode)
|
||||
setAutoLoadMode_i(mode);
|
||||
else
|
||||
setAutoLoadMode_i(AutoloadMode::None);
|
||||
break;
|
||||
case AutoloadMode::Movie:
|
||||
setAutoLoadMode_i(mode);
|
||||
break;
|
||||
case AutoloadMode::None:
|
||||
setAutoLoadMode_i(mode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void JFJochImageReadingWorker::setAutoLoadJump(int64_t val) {
|
||||
QMutexLocker ul(&m);
|
||||
if (val > 0)
|
||||
jump_value = val;
|
||||
}
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
#include <QVector>
|
||||
#include <QRect>
|
||||
#include <QMutex>
|
||||
|
||||
#include "toolbar/JFJochViewerToolbarImage.h"
|
||||
#include <QTimer>
|
||||
|
||||
#include "../reader/JFJochHDF5Reader.h"
|
||||
#include "../common/Logger.h"
|
||||
@@ -29,9 +28,15 @@ Q_DECLARE_METATYPE(std::shared_ptr<const SimpleImage>)
|
||||
class JFJochImageReadingWorker : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum class AutoloadMode {HTTPSync, Movie, None};
|
||||
Q_ENUM(AutoloadMode)
|
||||
private:
|
||||
mutable QMutex m;
|
||||
bool http_mode = false;
|
||||
|
||||
AutoloadMode autoload_mode = AutoloadMode::None;
|
||||
|
||||
JFJochHDF5Reader file_reader;
|
||||
JFJochHttpReader http_reader;
|
||||
|
||||
@@ -52,27 +57,38 @@ class JFJochImageReadingWorker : public QObject {
|
||||
std::optional<int64_t> current_image;
|
||||
int64_t current_summation = 1;
|
||||
int64_t total_images = 0;
|
||||
int64_t jump_value = 1;
|
||||
Logger logger{"jfjoch_viewer"};
|
||||
|
||||
bool auto_reanalyze = false;
|
||||
|
||||
QTimer *autoload_timer;
|
||||
int autoload_interval = 500; // milliseconds
|
||||
|
||||
void LoadImage_i(int64_t image_number, int64_t summation);
|
||||
void CalcROI_i();
|
||||
void ReanalyzeImage_i();
|
||||
void UpdateDataset_i(const DiffractionExperiment& experiment);
|
||||
void UpdateAzint_i(const JFJochReaderDataset *dataset);
|
||||
void UpdateUserMask_i(const std::vector<uint32_t> &mask);
|
||||
void setAutoLoadMode_i(AutoloadMode mode);
|
||||
|
||||
signals:
|
||||
void datasetLoaded(std::shared_ptr<const JFJochReaderDataset>);
|
||||
void imageLoaded(std::shared_ptr<const JFJochReaderImage>);
|
||||
void imageStatsUpdated(std::shared_ptr<const JFJochReaderImage>);
|
||||
void imageNumberChanged(int64_t total_images, int64_t current_image);
|
||||
void setToolbarMode(JFJochViewerToolbarImage::ToolbarMode input);
|
||||
void setRings(const QVector<float> &v);
|
||||
void simpleImageLoaded(std::shared_ptr<const SimpleImage> image);
|
||||
void autoloadChanged(AutoloadMode mode);
|
||||
|
||||
public:
|
||||
JFJochImageReadingWorker(const SpotFindingSettings &settings, const DiffractionExperiment& experiment, QObject *parent = nullptr);
|
||||
~JFJochImageReadingWorker() override = default;
|
||||
|
||||
private slots:
|
||||
void AutoLoadTimerExpired();
|
||||
|
||||
public slots:
|
||||
void LoadFile(const QString &filename, qint64 image_number, qint64 summation);
|
||||
void CloseFile();
|
||||
@@ -96,6 +112,8 @@ public slots:
|
||||
void ClearUserMask();
|
||||
|
||||
void LoadCalibration(QString dataset);
|
||||
void setAutoLoadMode(AutoloadMode mode);
|
||||
void setAutoLoadJump(int64_t val);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "JFJochViewerImageROIStatistics.h"
|
||||
|
||||
#include <QPushButton>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
|
||||
|
||||
@@ -224,8 +224,12 @@ JFJochViewerWindow::JFJochViewerWindow(QWidget *parent, bool dbus, const QString
|
||||
connect(tableWindow, &JFJochViewerImageListWindow::imageSelected,
|
||||
reading_worker, &JFJochImageReadingWorker::LoadImage);
|
||||
|
||||
connect(reading_worker, &JFJochImageReadingWorker::setToolbarMode,
|
||||
connect(reading_worker, &JFJochImageReadingWorker::autoloadChanged,
|
||||
toolBarImage, &JFJochViewerToolbarImage::setAutoloadMode);
|
||||
connect(toolBarImage, &JFJochViewerToolbarImage::autoLoadButtonPressed,
|
||||
reading_worker, &JFJochImageReadingWorker::setAutoLoadMode);
|
||||
connect(toolBarImage, &JFJochViewerToolbarImage::imageJumpChanged,
|
||||
reading_worker, &JFJochImageReadingWorker::setAutoLoadJump);
|
||||
|
||||
connect(side_panel, &JFJochViewerSidePanel::analyze,
|
||||
reading_worker, &JFJochImageReadingWorker::Analyze);
|
||||
|
||||
@@ -58,18 +58,16 @@ JFJochViewerToolbarImage::JFJochViewerToolbarImage(QWidget *parent) : QToolBar(p
|
||||
|
||||
movie_button = new QPushButton("Movie ▶");
|
||||
movie_button->setCheckable(true);
|
||||
movie_button->setChecked(false);
|
||||
addWidget(movie_button);
|
||||
|
||||
movie_timer = new QTimer(this);
|
||||
movie_timer->setInterval(movie_interval);
|
||||
|
||||
autoload_button = new QPushButton("Sync 🔄");
|
||||
autoload_button->setCheckable(true);
|
||||
autoload_button->setChecked(false);
|
||||
addWidget(autoload_button);
|
||||
|
||||
connect(movie_button, &QPushButton::clicked, this, &JFJochViewerToolbarImage::movieButtonPressed);
|
||||
connect(autoload_button, &QPushButton::clicked, this, &JFJochViewerToolbarImage::autoloadButtonPressed);
|
||||
connect(movie_timer, &QTimer::timeout, this, &JFJochViewerToolbarImage::movieTimerTimeout);
|
||||
|
||||
auto *stretch = new QWidget(this);
|
||||
stretch->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||
@@ -120,11 +118,6 @@ void JFJochViewerToolbarImage::updateButtons() {
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::setImageNumber(int64_t total_images, int64_t current_image) {
|
||||
if (image_count_in_dataset != total_images && mode == ToolbarMode::Movie) {
|
||||
mode = ToolbarMode::None;
|
||||
updateAutoload();
|
||||
}
|
||||
|
||||
image_count_in_dataset = total_images;
|
||||
curr_image = current_image;
|
||||
updateButtons();
|
||||
@@ -133,35 +126,25 @@ void JFJochViewerToolbarImage::setImageNumber(int64_t total_images, int64_t curr
|
||||
void JFJochViewerToolbarImage::leftButtonPressed() {
|
||||
if (curr_image >= jump_value) {
|
||||
emit loadImage(curr_image - jump_value, sum);
|
||||
mode = ToolbarMode::None;
|
||||
updateAutoload();
|
||||
}
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::rightButtonPressed() {
|
||||
if (curr_image < image_count_in_dataset - jump_value) {
|
||||
emit loadImage(curr_image + jump_value, sum);
|
||||
mode = ToolbarMode::None;
|
||||
updateAutoload();
|
||||
}
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::rightmostButtonPressed() {
|
||||
emit loadImage(image_count_in_dataset - 1, sum);
|
||||
mode = ToolbarMode::None;
|
||||
updateAutoload();
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::leftmostButtonPressed() {
|
||||
emit loadImage(0, sum);
|
||||
mode = ToolbarMode::None;
|
||||
updateAutoload();
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::imageNumberSliderPressed() {
|
||||
image_number_slider_manual = true;
|
||||
mode = ToolbarMode::None;
|
||||
updateAutoload();
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::imageNumberSliderReleased() {
|
||||
@@ -183,8 +166,6 @@ void JFJochViewerToolbarImage::editFinalized() {
|
||||
|
||||
if (ok && editedValue >= 0 && editedValue <= image_count_in_dataset - 1) {
|
||||
emit loadImage(editedValue, sum);
|
||||
mode = ToolbarMode::None;
|
||||
updateAutoload();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,8 +173,7 @@ void JFJochViewerToolbarImage::editFinalized() {
|
||||
void JFJochViewerToolbarImage::setImageJump(int val) {
|
||||
jump_value = val;
|
||||
updateButtons();
|
||||
mode = ToolbarMode::None;
|
||||
updateAutoload();
|
||||
emit imageJumpChanged(jump_value);
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::setSummation(int val) {
|
||||
@@ -203,72 +183,35 @@ void JFJochViewerToolbarImage::setSummation(int val) {
|
||||
|
||||
updateButtons();
|
||||
emit loadImage(curr_image, sum);
|
||||
|
||||
mode = ToolbarMode::None;
|
||||
updateAutoload();
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::autoloadButtonPressed() {
|
||||
if (mode == ToolbarMode::Autoload)
|
||||
mode = ToolbarMode::None;
|
||||
if (autoload_button->isChecked())
|
||||
emit autoLoadButtonPressed(JFJochImageReadingWorker::AutoloadMode::HTTPSync);
|
||||
else
|
||||
mode = ToolbarMode::Autoload;
|
||||
updateAutoload();
|
||||
emit autoLoadButtonPressed(JFJochImageReadingWorker::AutoloadMode::None);
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::movieButtonPressed() {
|
||||
if (mode == ToolbarMode::Movie)
|
||||
mode = ToolbarMode::None;
|
||||
if (movie_button->isChecked())
|
||||
emit autoLoadButtonPressed(JFJochImageReadingWorker::AutoloadMode::Movie);
|
||||
else
|
||||
mode = ToolbarMode::Movie;
|
||||
updateAutoload();
|
||||
emit autoLoadButtonPressed(JFJochImageReadingWorker::AutoloadMode::None);
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::movieTimerTimeout() {
|
||||
switch (mode) {
|
||||
case ToolbarMode::Autoload:
|
||||
emit loadImage(-1, 1);
|
||||
break;
|
||||
case ToolbarMode::Movie:
|
||||
if (curr_image < image_count_in_dataset - jump_value)
|
||||
emit loadImage(curr_image + jump_value, sum);
|
||||
else
|
||||
emit loadImage(0, sum);
|
||||
break;
|
||||
case ToolbarMode::None:
|
||||
// Do nothing
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::updateAutoload() {
|
||||
switch (mode) {
|
||||
case ToolbarMode::None:
|
||||
autoload_button->setChecked(false);
|
||||
movie_button->setChecked(false);
|
||||
movie_timer->stop();
|
||||
break;
|
||||
case ToolbarMode::Autoload:
|
||||
void JFJochViewerToolbarImage::setAutoloadMode(JFJochImageReadingWorker::AutoloadMode input) {
|
||||
switch (input) {
|
||||
case JFJochImageReadingWorker::AutoloadMode::HTTPSync:
|
||||
autoload_button->setChecked(true);
|
||||
movie_button->setChecked(false);
|
||||
movie_timer->start();
|
||||
break;
|
||||
case ToolbarMode::Movie:
|
||||
if (image_count_in_dataset > 0) {
|
||||
autoload_button->setChecked(false);
|
||||
movie_button->setChecked(true);
|
||||
movie_timer->start();
|
||||
} else {
|
||||
autoload_button->setChecked(false);
|
||||
movie_button->setChecked(false);
|
||||
movie_timer->stop();
|
||||
mode = ToolbarMode::None;
|
||||
}
|
||||
case JFJochImageReadingWorker::AutoloadMode::Movie:
|
||||
autoload_button->setChecked(false);
|
||||
movie_button->setChecked(true);
|
||||
break;
|
||||
case JFJochImageReadingWorker::AutoloadMode::None:
|
||||
autoload_button->setChecked(false);
|
||||
movie_button->setChecked(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarImage::setAutoloadMode(JFJochViewerToolbarImage::ToolbarMode input) {
|
||||
mode = input;
|
||||
updateAutoload();
|
||||
}
|
||||
|
||||
@@ -12,15 +12,12 @@
|
||||
|
||||
#include "../widgets/NumberLineEdit.h"
|
||||
#include "../widgets/NumericComboBox.h"
|
||||
#include "../JFJochImageReadingWorker.h"
|
||||
|
||||
class JFJochViewerToolbarImage : public QToolBar {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum class ToolbarMode {Autoload, Movie, None};
|
||||
Q_ENUM(ToolbarMode)
|
||||
private:
|
||||
ToolbarMode mode = ToolbarMode::None;
|
||||
JFJochImageReadingWorker::AutoloadMode autoload_mode = JFJochImageReadingWorker::AutoloadMode::None;
|
||||
size_t image_count_in_dataset;
|
||||
int64_t curr_image;
|
||||
|
||||
@@ -45,18 +42,16 @@ private:
|
||||
|
||||
NumericComboBox *jump;
|
||||
|
||||
QTimer *movie_timer;
|
||||
int movie_interval = 500; // milliseconds
|
||||
|
||||
void updateButtons();
|
||||
void updateAutoload();
|
||||
signals:
|
||||
void loadImage(int64_t number, int summation);
|
||||
void autoLoadButtonPressed(JFJochImageReadingWorker::AutoloadMode mode);
|
||||
void imageJumpChanged(int64_t val);
|
||||
public:
|
||||
explicit JFJochViewerToolbarImage(QWidget *parent = nullptr);
|
||||
public slots:
|
||||
void setImageNumber(int64_t total_images, int64_t current_image);
|
||||
void setAutoloadMode(ToolbarMode input);
|
||||
void setAutoloadMode(JFJochImageReadingWorker::AutoloadMode input);
|
||||
private slots:
|
||||
void leftButtonPressed();
|
||||
void rightButtonPressed();
|
||||
@@ -73,7 +68,6 @@ private slots:
|
||||
|
||||
void movieButtonPressed();
|
||||
void autoloadButtonPressed();
|
||||
void movieTimerTimeout();
|
||||
};
|
||||
|
||||
#endif //JFJOCH_JFJOCHVIEWERTOOLBARIMAGE_H
|
||||
Reference in New Issue
Block a user