Compare commits
2 Commits
a86c100e69
...
2b96da60de
| Author | SHA1 | Date | |
|---|---|---|---|
| 2b96da60de | |||
| 236f66ed2f |
+18
-15
@@ -22,13 +22,13 @@ Image::Image(const QString name, int number, ImageRingList *ringList) :
|
||||
{
|
||||
}
|
||||
|
||||
void Image::load()
|
||||
void Image::load(QThreadPool *pool)
|
||||
{
|
||||
if(!m_rawImage && !m_loading)
|
||||
{
|
||||
m_loading = true;
|
||||
m_released = false;
|
||||
QThreadPool::globalInstance()->start(new LoadRunable(m_name, this, m_ringList->analyzeLevel()));
|
||||
pool->start(new LoadRunable(m_name, this, m_ringList->analyzeLevel()));
|
||||
}
|
||||
if(!m_loading && m_rawImage)
|
||||
emit pixmapLoaded(this);
|
||||
@@ -110,7 +110,10 @@ ImageRingList::ImageRingList(Database *database, const QStringList &nameFilter,
|
||||
{
|
||||
connect(&m_fileSystemWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(dirChanged(QString)));
|
||||
m_nameFilter.replaceInStrings(QRegularExpression("^"), "*.");
|
||||
m_loadPool = new QThreadPool(this);
|
||||
m_loadPool->setThreadPriority(QThread::LowPriority);
|
||||
m_thumbPool = new QThreadPool(this);
|
||||
m_thumbPool->setThreadPriority(QThread::LowPriority);
|
||||
|
||||
m_slideShowTimer = new QTimer(this);
|
||||
connect(m_slideShowTimer, &QTimer::timeout, this, static_cast<void (ImageRingList::*)()>(&ImageRingList::increment));
|
||||
@@ -123,10 +126,10 @@ ImageRingList::ImageRingList(Database *database, const QStringList &nameFilter,
|
||||
|
||||
ImageRingList::~ImageRingList()
|
||||
{
|
||||
QThreadPool::globalInstance()->clear();
|
||||
m_loadPool->clear();
|
||||
m_thumbPool->clear();
|
||||
|
||||
QThreadPool::globalInstance()->waitForDone();
|
||||
m_loadPool->waitForDone();
|
||||
m_thumbPool->waitForDone();
|
||||
}
|
||||
|
||||
@@ -199,9 +202,9 @@ void ImageRingList::increment()
|
||||
(*m_firstImage)->release();
|
||||
m_firstImage = increment(m_firstImage);
|
||||
m_currImage = increment(m_currImage);
|
||||
(*m_currImage)->load();
|
||||
(*m_currImage)->load(m_loadPool);
|
||||
m_lastImage = increment(m_lastImage);
|
||||
(*m_lastImage)->load();
|
||||
(*m_lastImage)->load(m_loadPool);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,9 +215,9 @@ void ImageRingList::decrement()
|
||||
(*m_lastImage)->release();
|
||||
m_firstImage = decrement(m_firstImage);
|
||||
m_currImage = decrement(m_currImage);
|
||||
(*m_currImage)->load();
|
||||
(*m_currImage)->load(m_loadPool);
|
||||
m_lastImage = decrement(m_lastImage);
|
||||
(*m_firstImage)->load();
|
||||
(*m_firstImage)->load(m_loadPool);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,7 +271,7 @@ void ImageRingList::loadFile(int row)
|
||||
if(m_images.empty())
|
||||
return;
|
||||
|
||||
(*m_currImage)->load();
|
||||
(*m_currImage)->load(m_loadPool);
|
||||
|
||||
m_width = DEFAULT_WIDTH<m_images.size()/2 ? DEFAULT_WIDTH : m_images.size()/2;
|
||||
if(m_liveMode)
|
||||
@@ -277,9 +280,9 @@ void ImageRingList::loadFile(int row)
|
||||
for(int i=0; i<m_width; i++)
|
||||
{
|
||||
m_firstImage = decrement(m_firstImage);
|
||||
(*m_firstImage)->load();
|
||||
(*m_firstImage)->load(m_loadPool);
|
||||
m_lastImage = increment(m_lastImage);
|
||||
(*m_lastImage)->load();
|
||||
(*m_lastImage)->load(m_loadPool);
|
||||
}
|
||||
if(m_lastImage != m_firstImage)
|
||||
{
|
||||
@@ -403,9 +406,9 @@ void ImageRingList::setPreload(int width)
|
||||
for(int i = newWidth - m_width; i>0; i--)
|
||||
{
|
||||
m_firstImage = decrement(m_firstImage);
|
||||
(*m_firstImage)->load();
|
||||
(*m_firstImage)->load(m_loadPool);
|
||||
m_lastImage = increment(m_lastImage);
|
||||
(*m_lastImage)->load();
|
||||
(*m_lastImage)->load(m_loadPool);
|
||||
}
|
||||
}
|
||||
if(newWidth < m_width)
|
||||
@@ -460,9 +463,9 @@ void ImageRingList::toggleSlideshow(bool start)
|
||||
|
||||
void ImageRingList::setFiles(const QStringList files, const QString ¤tFile)
|
||||
{
|
||||
QThreadPool::globalInstance()->clear();
|
||||
m_loadPool->clear();
|
||||
m_thumbPool->clear();
|
||||
QThreadPool::globalInstance()->waitForDone();
|
||||
m_loadPool->waitForDone();
|
||||
m_thumbPool->waitForDone();
|
||||
beginResetModel();
|
||||
m_images.clear();
|
||||
|
||||
+2
-1
@@ -27,7 +27,7 @@ class Image : public QObject
|
||||
ImageRingList *m_ringList;
|
||||
public:
|
||||
explicit Image(const QString name, int number, ImageRingList *ringList);
|
||||
void load();
|
||||
void load(QThreadPool *pool);
|
||||
void loadThumbnail(QThreadPool *pool);
|
||||
void release();
|
||||
QString name() const;
|
||||
@@ -62,6 +62,7 @@ class ImageRingList : public QAbstractItemModel
|
||||
QDir::SortFlag m_sort = QDir::Name;
|
||||
bool m_reversed = false;
|
||||
AnalyzeLevel m_analyzeLevel;
|
||||
QThreadPool *m_loadPool;
|
||||
QThreadPool *m_thumbPool;
|
||||
Database *m_database;
|
||||
QStringList m_nameFilter;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <QFileInfo>
|
||||
#include <QDebug>
|
||||
#include <QInputDialog>
|
||||
#include <QJsonValue>
|
||||
#include "loadrunable.h"
|
||||
#include "rawimage.h"
|
||||
#include "loadrunable.h"
|
||||
@@ -28,6 +29,7 @@ ScriptEngine::ScriptEngine(BatchProcessing *parent)
|
||||
_jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject);
|
||||
_database->init(QLatin1String("scriptengine"));
|
||||
_semaphore.release(_pool->maxThreadCount());
|
||||
_pool->setThreadPriority(QThread::LowPriority);
|
||||
|
||||
#ifdef PLATESOLVER
|
||||
_solver = new Solver(this);
|
||||
@@ -162,6 +164,58 @@ bool ScriptEngine::convert(File *file, QString &outpath, const QString &format,
|
||||
}
|
||||
|
||||
#ifdef PLATESOLVER
|
||||
void ScriptEngine::setSolverProfile(int index)
|
||||
{
|
||||
if(_solver && index >= SSolver::Parameters::DEFAULT && index < SSolver::Parameters::BIG_STARS)
|
||||
{
|
||||
_solver->setParameters((SSolver::Parameters::ParametersProfile)index);
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptEngine::setSolverProfile(const QVariantMap &profile)
|
||||
{
|
||||
if(_solver)
|
||||
{
|
||||
SSolver::Parameters params = SSolver::Parameters::convertFromMap(profile);
|
||||
_solver->setParameters(params);
|
||||
}
|
||||
}
|
||||
|
||||
QJSValue ScriptEngine::getSolverProfile() const
|
||||
{
|
||||
if(_solver)
|
||||
{
|
||||
QMap<QString, QVariant> params = SSolver::Parameters::convertToMap(_solver->getProfile());
|
||||
QJSValue ret = _jsEngine->newObject();
|
||||
for(auto i = params.begin(); i != params.end(); i++)
|
||||
{
|
||||
switch(i.value().metaType().id())
|
||||
{
|
||||
case QMetaType::Int:
|
||||
ret.setProperty(i.key(), i.value().toInt());
|
||||
break;
|
||||
case QMetaType::Double:
|
||||
ret.setProperty(i.key(), i.value().toDouble());
|
||||
break;
|
||||
case QMetaType::Bool:
|
||||
ret.setProperty(i.key(), i.value().toBool());
|
||||
break;
|
||||
case QMetaType::QString:
|
||||
ret.setProperty(i.key(), i.value().toString());
|
||||
break;
|
||||
default:
|
||||
qWarning() << "unhandled metatype" << i.key() << i.value();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
return QJSValue();
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptEngine::setStartingSolution(const QJSValue &solution)
|
||||
{
|
||||
if(solution.isObject())
|
||||
|
||||
@@ -49,6 +49,9 @@ public:
|
||||
Q_INVOKABLE QJSValue getItem(const QStringList &items, const QString &label = "", int current = 0) const;
|
||||
bool convert(File *file, QString &outpath, const QString &format, const QVariantMap ¶ms, bool async);
|
||||
#ifdef PLATESOLVER
|
||||
Q_INVOKABLE void setSolverProfile(int index);
|
||||
Q_INVOKABLE void setSolverProfile(const QVariantMap &profile);
|
||||
Q_INVOKABLE QJSValue getSolverProfile() const;
|
||||
Q_INVOKABLE void setStartingSolution(const QJSValue &solution = QJSValue());
|
||||
QJSValue solveImage(File *file, bool updateHeader);
|
||||
QJSValue extractStars(File *file, bool hfr);
|
||||
|
||||
@@ -205,6 +205,11 @@ void Solver::setParameters(const Parameters ¶meters)
|
||||
_solver->setParameters(profile);
|
||||
}
|
||||
|
||||
Parameters Solver::getProfile() const
|
||||
{
|
||||
return _solver->getCurrentParameters();
|
||||
}
|
||||
|
||||
void Solver::setSearchScale(double fovLow, double fowHigh, SSolver::ScaleUnits units)
|
||||
{
|
||||
_solver->setSearchScale(fovLow, fowHigh, units);
|
||||
|
||||
@@ -34,6 +34,7 @@ public:
|
||||
bool updateHeader(QString &error);
|
||||
void setParameters(SSolver::Parameters::ParametersProfile profile);
|
||||
void setParameters(const SSolver::Parameters ¶meters);
|
||||
SSolver::Parameters getProfile() const;
|
||||
void setSearchScale(double fovLow, double fowHigh, ScaleUnits units);
|
||||
void setSearchPosition(double ra, double dec);
|
||||
void clearStartingPositionAndScale();
|
||||
|
||||
Reference in New Issue
Block a user