From b5d63a6185a34a0cd2cc0fde0eef646b82819bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sat, 28 Sep 2019 10:57:48 +0200 Subject: [PATCH] Add actions for peak and star find --- imageinfo.h | 8 ++++++++ imageringlist.cpp | 20 +++++++++++++++----- imageringlist.h | 6 ++++-- loadrunable.cpp | 8 ++++---- loadrunable.h | 5 +++-- mainwindow.cpp | 36 ++++++++++++++++++++++++++++++++---- mainwindow.h | 2 ++ 7 files changed, 68 insertions(+), 17 deletions(-) diff --git a/imageinfo.h b/imageinfo.h index 1c31271..65c83d7 100644 --- a/imageinfo.h +++ b/imageinfo.h @@ -8,6 +8,14 @@ typedef QVector ImageInfoData; Q_DECLARE_METATYPE(ImageInfoData); +typedef enum +{ + None, + Statistics, + Peaks, + Stars, +}AnalyzeLevel; + class ImageInfo : public QTreeWidget { Q_OBJECT diff --git a/imageringlist.cpp b/imageringlist.cpp index a8cd5d9..d814a37 100644 --- a/imageringlist.cpp +++ b/imageringlist.cpp @@ -22,7 +22,7 @@ void Image::load() { m_loading = true; m_released = false; - QThreadPool::globalInstance()->start(new LoadRunable(m_name, this, m_ringList->calculateStats())); + QThreadPool::globalInstance()->start(new LoadRunable(m_name, this, m_ringList->analyzeLevel())); } if(!m_loading && !m_pixmap.isNull()) emit pixmapLoaded(this); @@ -68,7 +68,7 @@ void Image::imageLoaded(QImage img, ImageInfoData info) ImageRingList::ImageRingList(QObject *parent) : QObject(parent) , m_liveMode(false) - , m_calculateStats(false) + , m_analyzeLevel(None) { connect(&m_fileSystemWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(dirChanged(QString))); } @@ -150,12 +150,22 @@ void ImageRingList::setLiveMode(bool live) void ImageRingList::setCalculateStats(bool stats) { - m_calculateStats = stats; + m_analyzeLevel = stats ? Statistics : None; } -bool ImageRingList::calculateStats() const +void ImageRingList::setFindPeaks(bool findPeaks) { - return m_calculateStats; + m_analyzeLevel = findPeaks ? Peaks : None; +} + +void ImageRingList::setFindStars(bool findStars) +{ + m_analyzeLevel = findStars ? Stars : None; +} + +AnalyzeLevel ImageRingList::analyzeLevel() const +{ + return m_analyzeLevel; } void ImageRingList::setFiles(const QStringList files, const QString ¤tFile) diff --git a/imageringlist.h b/imageringlist.h index 4d2d8aa..edff926 100644 --- a/imageringlist.h +++ b/imageringlist.h @@ -46,7 +46,7 @@ class ImageRingList : public QObject QList::iterator m_lastImage; QFileSystemWatcher m_fileSystemWatcher; bool m_liveMode; - bool m_calculateStats; + AnalyzeLevel m_analyzeLevel; public: explicit ImageRingList(QObject *parent = 0); ~ImageRingList(); @@ -57,7 +57,9 @@ public: void decrement(); void setLiveMode(bool live); void setCalculateStats(bool stats); - bool calculateStats() const; + void setFindPeaks(bool findPeaks); + void setFindStars(bool findStars); + AnalyzeLevel analyzeLevel() const; protected: void setFiles(const QStringList files, const QString ¤tFile = QString()); QList::iterator increment(QList::iterator iter); diff --git a/loadrunable.cpp b/loadrunable.cpp index 0c66efb..76f9ffa 100644 --- a/loadrunable.cpp +++ b/loadrunable.cpp @@ -7,10 +7,10 @@ #include #include "rawimage.h" -LoadRunable::LoadRunable(const QString &file, Image *receiver, bool stats) : +LoadRunable::LoadRunable(const QString &file, Image *receiver, AnalyzeLevel level) : m_file(file), m_receiver(receiver), - m_calculateStats(stats) + m_analyzeLevel(level) { } @@ -211,11 +211,11 @@ void LoadRunable::run() RawImageAbs *rawImage = nullptr; if(m_file.endsWith(".CR2", Qt::CaseInsensitive)) { - loadRAW(m_file, info, m_calculateStats ? &rawImage : nullptr, &img); + loadRAW(m_file, info, m_analyzeLevel != None ? &rawImage : nullptr, &img); } else if(m_file.endsWith(".FIT", Qt::CaseInsensitive)) { - loadFITS(m_file, info, m_calculateStats ? &rawImage : nullptr, &img); + loadFITS(m_file, info, m_analyzeLevel != None ? &rawImage : nullptr, &img); } else { diff --git a/loadrunable.h b/loadrunable.h index 60724b0..1443f16 100644 --- a/loadrunable.h +++ b/loadrunable.h @@ -3,6 +3,7 @@ #include #include +#include "imageinfo.h" class Image; @@ -10,9 +11,9 @@ class LoadRunable : public QRunnable { QString m_file; Image *m_receiver; - bool m_calculateStats; + AnalyzeLevel m_analyzeLevel; public: - LoadRunable(const QString &file, Image *receiver, bool stats); + LoadRunable(const QString &file, Image *receiver, AnalyzeLevel level); void run(); }; diff --git a/mainwindow.cpp b/mainwindow.cpp index dc1b16a..f6b150b 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -62,12 +62,30 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), selectMenu->addAction(tr("Unmark and next"), this, SLOT(unmarkAndNext()), Qt::Key_X); menuBar()->addMenu(selectMenu); - QMenu *statsMenu = new QMenu(tr("Statistic"), this); - QAction *statsAction = new QAction(tr("Image statistics"), this); + QMenu *analyzeMenu = new QMenu(tr("Analyze"), this); + QActionGroup *analyzeGroup = new QActionGroup(this); + connect(analyzeGroup, &QActionGroup::triggered, [](QAction* action) { + static QAction* lastAction = nullptr; + if(action == lastAction) + { + action->setChecked(false); + lastAction = nullptr; + } + else + lastAction = action; + }); + + QAction *statsAction = analyzeGroup->addAction(tr("Image statistics")); + QAction *peakAction = analyzeGroup->addAction(tr("Peak finder")); + QAction *starAction = analyzeGroup->addAction("Star finder"); statsAction->setCheckable(true); + peakAction->setCheckable(true); + starAction->setCheckable(true); connect(statsAction, SIGNAL(toggled(bool)), this, SLOT(imageStats(bool))); - statsMenu->addAction(statsAction); - menuBar()->addMenu(statsMenu); + connect(peakAction, SIGNAL(toggled(bool)), this, SLOT(peakFinder(bool))); + connect(starAction, SIGNAL(toggled(bool)), this, SLOT(starFinder(bool))); + analyzeMenu->addActions({statsAction, peakAction, starAction}); + menuBar()->addMenu(analyzeMenu); m_database = new Database(this); if(!m_database->init()) @@ -252,6 +270,16 @@ void MainWindow::imageStats(bool imageStats) m_ringList->setCalculateStats(imageStats); } +void MainWindow::peakFinder(bool findPeaks) +{ + m_ringList->setFindPeaks(findPeaks); +} + +void MainWindow::starFinder(bool findStars) +{ + m_ringList->setFindStars(findStars); +} + void MainWindow::updateWindowTitle() { ImagePtr ptr = m_ringList->currentImage(); diff --git a/mainwindow.h b/mainwindow.h index bfe57c5..8c43b2b 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -39,6 +39,8 @@ protected slots: void copyMarked(); void liveMode(bool active); void imageStats(bool imageStats); + void peakFinder(bool findPeaks); + void starFinder(bool findStars); }; #endif // MAINWINDOW_H