From 223f7cd0eabe29df5108c92122c17d7c169d84ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sat, 26 Nov 2022 11:02:29 +0100 Subject: [PATCH] Refractor save dialog --- loadrunable.cpp | 9 +++++---- loadrunable.h | 3 ++- mainwindow.cpp | 41 +++++++++++++++++++++++------------------ mainwindow.h | 2 +- 4 files changed, 31 insertions(+), 24 deletions(-) diff --git a/loadrunable.cpp b/loadrunable.cpp index e56f1b0..c5cde07 100644 --- a/loadrunable.cpp +++ b/loadrunable.cpp @@ -541,9 +541,10 @@ bool readXISFHeader(const QString &path, ImageInfoData &info) return true; } -ConvertRunable::ConvertRunable(const QString &in, const QString &out) : +ConvertRunable::ConvertRunable(const QString &in, const QString &out, const QString &format) : m_infile(in), - m_outfile(out) + m_outfile(out), + m_format(format) { } @@ -648,7 +649,7 @@ void ConvertRunable::run() if(rawimage) { - if(m_outfile.endsWith(".XISF", Qt::CaseInsensitive)) + if(m_format == "XISF") { pcl::XISFOptions options; pcl::FITSKeywordArray fitskeywords; @@ -675,7 +676,7 @@ void ConvertRunable::run() } - if(m_outfile.endsWith(".FITS", Qt::CaseInsensitive) || m_outfile.endsWith(".FIT", Qt::CaseInsensitive)) + if(m_format == "FITS") { int status = 0; fitsfile *fw; diff --git a/loadrunable.h b/loadrunable.h index 2be477b..e00d013 100644 --- a/loadrunable.h +++ b/loadrunable.h @@ -25,8 +25,9 @@ class ConvertRunable : public QRunnable { QString m_infile; QString m_outfile; + QString m_format; public: - ConvertRunable(const QString &in, const QString &out); + ConvertRunable(const QString &in, const QString &out, const QString &format); void run() override; }; diff --git a/mainwindow.cpp b/mainwindow.cpp index b4cfe86..7792933 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -426,39 +426,44 @@ void MainWindow::saveAs() { QString selectedFilter; QString file = QFileDialog::getSaveFileName(this, - tr("Save as"), - _lastDir, - tr("JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF)"), - &selectedFilter, - QFileDialog::DontUseNativeDialog); + tr("Save as"), + _lastDir, + tr("JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF)"), + &selectedFilter); + auto filterToFormat = [](const QString &file, const QString &filter) -> const char* + { + QString suffix = QFileInfo(file).suffix(); + if(!suffix.compare("jpg", Qt::CaseInsensitive) || !suffix.compare("jpeg", Qt::CaseInsensitive))return "JPEG"; + if(!suffix.compare("png", Qt::CaseInsensitive))return "PNG"; + if(!suffix.compare("fits", Qt::CaseInsensitive) || !suffix.compare("fit", Qt::CaseInsensitive))return "FITS"; + if(!suffix.compare("xisf", Qt::CaseInsensitive))return "XISF"; + if(filter.contains("png"))return "PNG"; + if(filter.contains("fits"))return "FITS"; + if(filter.contains("xisf"))return "XISF"; + return "JPEG"; + }; + if(!file.isEmpty()) { - QFileInfo info(file); - if(info.suffix().isEmpty()) - { - if(selectedFilter.contains("jpg"))file += ".jpg"; - if(selectedFilter.contains("png"))file += ".png"; - if(selectedFilter.contains("fits"))file += ".fits"; - if(selectedFilter.contains("xisf"))file += ".xisf"; - } + QString format = filterToFormat(file, selectedFilter); - if(file.endsWith(".fits") || file.endsWith(".xisf")) + if(format == "FITS" || format == "XISF") { - convert(file); + convert(file, format); } else { QImage img = m_imageGL->imageWidget()->renderToImage(); if(!img.isNull()) - img.save(file); + img.save(file, filterToFormat(file, selectedFilter)); } } } -void MainWindow::convert(const QString &outfile) +void MainWindow::convert(const QString &outfile, const QString &format) { QString file = m_ringList->currentImage()->name(); - QThreadPool::globalInstance()->start(new ConvertRunable(file, outfile)); + QThreadPool::globalInstance()->start(new ConvertRunable(file, outfile, format)); } void MainWindow::markImage() diff --git a/mainwindow.h b/mainwindow.h index 7d53bdc..a70acac 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -50,7 +50,7 @@ protected slots: void indexDir(const QString &dir); void reindex(); void saveAs(); - void convert(const QString &outfile); + void convert(const QString &outfile, const QString &format); void markImage(); void unmarkImage(); void markAndNext();