Compare commits

...

3 Commits

Author SHA1 Message Date
nou e6bab45a89 Fix index of subimage for XISF 2025-04-15 20:58:03 +02:00
nou 58286d52c5 TextFile scripting 2025-04-15 11:09:23 +02:00
nou bac1963fa4 Add stretch toolbar actions to view menu 2025-04-11 17:05:31 +02:00
4 changed files with 96 additions and 3 deletions
+1 -1
View File
@@ -248,7 +248,7 @@ bool loadXISF(const QString &path, ImageInfoData &info, std::shared_ptr<RawImage
}
info.num = xisf.imagesCount();
info.index = index + 1;
info.index = index;
info.wcs = std::make_shared<WCSDataT>(xisfImage.width(), xisfImage.height(), info.fitsHeader);
info.info.append({QObject::tr("Width"), QString::number(xisfImage.width())});
info.info.append({QObject::tr("Height"), QString::number(xisfImage.height())});
+2 -1
View File
@@ -252,7 +252,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
settings.setValue("mainwindow/colormap", data);
});
QAction *thumbnailsAction = viewMenu->addAction(tr("Thumbnails"), Qt::Key_F2, [this](bool checked){
if(SettingsDialog::loadThumbsizes())m_ringList->clearThumbnails();
m_image->allocateThumbnails(m_ringList->imageNames());
@@ -263,6 +262,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
thumbnailsAction->setCheckable(true);
QAction *slideshowAction = viewMenu->addAction(tr("Slideshow"), Qt::Key_F3, m_ringList, &ImageRingList::toggleSlideshow);
slideshowAction->setCheckable(true);
viewMenu->addSeparator();
viewMenu->addActions(m_stretchPanel->actions());
menuBar()->addMenu(viewMenu);
QMenu *selectMenu = new QMenu(tr("Select"), this);
+77
View File
@@ -26,7 +26,9 @@ ScriptEngine::ScriptEngine(Database *database, BatchProcessing *parent)
QJSValue core = _jsEngine->newQObject(this);
_jsEngine->globalObject().setProperty("core", core);
QJSValue fitsRecordObject = _jsEngine->newQMetaObject(&FITSRecordModify::staticMetaObject);
QJSValue textFile = _jsEngine->newQMetaObject(&TextFile::staticMetaObject);
_jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject);
_jsEngine->globalObject().setProperty("TextFile", textFile);
_semaphore.release(_pool->maxThreadCount());
_pool->setThreadPriority(QThread::LowPriority);
@@ -149,6 +151,25 @@ void ScriptEngine::plot(const QJSValue &pointsArray)
}
}
QJSValue ScriptEngine::openFile(const QString &fileName, const QString &mode)
{
QFileInfo info(fileName);
if(!info.isAbsolute())
info = QFileInfo(outputDir() + fileName);
TextFile *textFile = new TextFile;
if(textFile->open(info.absoluteFilePath(), mode))
{
return _jsEngine->newQObject(textFile);
}
else
{
logError("Failed to open file " + fileName);
delete textFile;
return false;
}
}
bool ScriptEngine::convert(File *file, QString &outpath, const QString &format, const QVariantMap &params, bool async)
{
QString path;
@@ -835,4 +856,60 @@ void FITSRecordModify::addKeyword(const QString &key, const QVariant &value, con
_update.append({key.toLatin1(), value, comment.toLatin1()});
}
bool TextFile::open(const QString &path, const QString &mode)
{
_fr.setFileName(path);
QIODevice::OpenMode openMode;
if(mode == "r")
openMode = QIODevice::ReadOnly;
else if(mode == "w")
openMode = QIODevice::WriteOnly;
else if(mode == "a")
openMode = QIODevice::WriteOnly | QIODevice::Append;
else if(mode == "r+")
openMode = QIODevice::ReadWrite | QIODevice::ExistingOnly;
else if(mode == "w+")
openMode = QIODevice::ReadWrite;
else if(mode == "a+")
openMode = QIODevice::ReadWrite | QIODevice::Append;
else
return false;
openMode |= QIODevice::Text;//always open as text
return _fr.open(openMode);
}
void TextFile::write(const QString &data)
{
_fr.write(data.toUtf8());
}
QString TextFile::read(int maxlen)
{
QByteArray data = _fr.read(maxlen);
return data;
}
QString TextFile::readLine()
{
QByteArray data = _fr.readLine();
return QString::fromUtf8(data);
}
QString TextFile::readAll()
{
QByteArray data = _fr.readAll();
return QString::fromUtf8(data);
}
bool TextFile::seek(qint64 offset)
{
return _fr.seek(offset);
}
qint64 TextFile::pos()
{
return _fr.pos();
}
}
+16 -1
View File
@@ -8,7 +8,7 @@
#include <QThreadPool>
#include <QSemaphore>
#include "database.h"
#include "imageinfo.h"
#include "imageinfodata.h"
class BatchProcessing;
class Solver;
@@ -48,6 +48,7 @@ public:
Q_INVOKABLE QJSValue getFloat(const QString &label = QString(), double value = 0, int decimals = 3) const;
Q_INVOKABLE QJSValue getItem(const QStringList &items, const QString &label = "", int current = 0) const;
Q_INVOKABLE void plot(const QJSValue &pointsArray);
Q_INVOKABLE QJSValue openFile(const QString &fileName, const QString &mode = "r");
bool convert(File *file, QString &outpath, const QString &format, const QVariantMap &params, bool async);
#ifdef PLATESOLVER
Q_INVOKABLE void setSolverProfile(int index);
@@ -143,6 +144,20 @@ public:
Q_INVOKABLE void addKeyword(const QString &key, const QVariant &value, const QString &comment = QString());
};
class TextFile : public QObject
{
Q_OBJECT
QFile _fr;
public:
bool open(const QString &path, const QString &mode);
Q_INVOKABLE void write(const QString &data);
Q_INVOKABLE QString read(int maxlen);
Q_INVOKABLE QString readLine();
Q_INVOKABLE QString readAll();
Q_INVOKABLE bool seek(qint64 offset);
Q_INVOKABLE qint64 pos();
};
}
#endif // SCRIPTENGINE_H