Settings dialog

This commit is contained in:
2022-10-10 10:19:55 +02:00
parent 9746f8f653
commit be6e472081
10 changed files with 126 additions and 7 deletions
+1
View File
@@ -35,6 +35,7 @@ set(TENMON_SRC
mainwindow.cpp mainwindow.cpp
markedfiles.cpp markedfiles.cpp
rawimage.cpp rawimage.cpp
settingsdialog.cpp
starfit.cpp starfit.cpp
statusbar.cpp statusbar.cpp
stfslider.cpp stfslider.cpp
+2 -1
View File
@@ -7,7 +7,7 @@
using namespace std; using namespace std;
const int DEFAULT_WIDTH = 2; int DEFAULT_WIDTH = 2;
Image::Image(const QString name, int number, ImageRingList *ringList) : Image::Image(const QString name, int number, ImageRingList *ringList) :
m_loading(false), m_loading(false),
@@ -260,6 +260,7 @@ void ImageRingList::loadThumbnails()
void ImageRingList::stopLoading() void ImageRingList::stopLoading()
{ {
m_thumbPool->clear(); m_thumbPool->clear();
m_thumbPool->waitForDone();
} }
int ImageRingList::imageCount() const int ImageRingList::imageCount() const
+1
View File
@@ -249,6 +249,7 @@ void ImageWidget::paintGL()
} }
m_thumbnailProgram->bind(); m_thumbnailProgram->bind();
f->glUniform3i(m_thumbnailProgram->uniformLocation("viewport_row"), width(), height(), width()/THUMB_SIZE_BORDER); f->glUniform3i(m_thumbnailProgram->uniformLocation("viewport_row"), width(), height(), width()/THUMB_SIZE_BORDER);
f->glUniform3i(m_thumbnailProgram->uniformLocation("thumb_size"), THUMB_SIZE_BORDER/2, THUMB_SIZE_BORDER, THUMB_SIZE_BORDER_Y);
m_thumbnailProgram->setUniformValue("mtf_param", m_low, m_mid, m_high); m_thumbnailProgram->setUniformValue("mtf_param", m_low, m_mid, m_high);
m_thumbnailProgram->setUniformValue("invert", m_invert); m_thumbnailProgram->setUniformValue("invert", m_invert);
m_thumbnailProgram->setUniformValue("offset", 0, m_dy); m_thumbnailProgram->setUniformValue("offset", 0, m_dy);
+14 -1
View File
@@ -20,6 +20,7 @@
#include "markedfiles.h" #include "markedfiles.h"
#include "about.h" #include "about.h"
#include "statusbar.h" #include "statusbar.h"
#include "settingsdialog.h"
#ifdef __linux__ #ifdef __linux__
#include <sys/ioctl.h> #include <sys/ioctl.h>
@@ -34,6 +35,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
qRegisterMetaType<ImageInfoData>("ImageInfoData"); qRegisterMetaType<ImageInfoData>("ImageInfoData");
qRegisterMetaType<RawImage*>("RawImage"); qRegisterMetaType<RawImage*>("RawImage");
SettingsDialog::loadSettings();
m_info = new ImageInfo(this); m_info = new ImageInfo(this);
QDockWidget *infoDock = new QDockWidget(tr("Image info"), this); QDockWidget *infoDock = new QDockWidget(tr("Image info"), this);
infoDock->setWidget(m_info); infoDock->setWidget(m_info);
@@ -117,6 +120,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
exitAction->setShortcut(QKeySequence::Quit); exitAction->setShortcut(QKeySequence::Quit);
menuBar()->addMenu(fileMenu); menuBar()->addMenu(fileMenu);
QMenu *editMenu = new QMenu(tr("Edit"), this);
editMenu->addAction(tr("Settings"), this, &MainWindow::showSettingsDialog);
menuBar()->addMenu(editMenu);
QMenu *viewMenu = new QMenu(tr("View"), this); QMenu *viewMenu = new QMenu(tr("View"), this);
viewMenu->addAction(tr("Zoom In"), m_imageGL, SLOT(zoomIn()), QKeySequence::ZoomIn); viewMenu->addAction(tr("Zoom In"), m_imageGL, SLOT(zoomIn()), QKeySequence::ZoomIn);
viewMenu->addAction(tr("Zoom Out"), m_imageGL, SLOT(zoomOut()), QKeySequence::ZoomOut); viewMenu->addAction(tr("Zoom Out"), m_imageGL, SLOT(zoomOut()), QKeySequence::ZoomOut);
@@ -533,10 +540,16 @@ void MainWindow::starFinder(bool findStars)
void MainWindow::showMarkFilesDialog() void MainWindow::showMarkFilesDialog()
{ {
MarkedFiles markedFiles; MarkedFiles markedFiles(this);
markedFiles.exec(); markedFiles.exec();
} }
void MainWindow::showSettingsDialog()
{
SettingsDialog settingsDialog(this);
settingsDialog.exec();
}
void MainWindow::updateWindowTitle() void MainWindow::updateWindowTitle()
{ {
ImagePtr ptr = m_ringList->currentImage(); ImagePtr ptr = m_ringList->currentImage();
+1
View File
@@ -63,6 +63,7 @@ protected slots:
void peakFinder(bool findPeaks); void peakFinder(bool findPeaks);
void starFinder(bool findStars); void starFinder(bool findStars);
void showMarkFilesDialog(); void showMarkFilesDialog();
void showSettingsDialog();
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H
+4
View File
@@ -1,5 +1,9 @@
#include "rawimage.h" #include "rawimage.h"
int THUMB_SIZE = 128;
int THUMB_SIZE_BORDER = 138;
int THUMB_SIZE_BORDER_Y = 158;
RawImage::ImgType CV2Type(int cvtype) RawImage::ImgType CV2Type(int cvtype)
{ {
switch (cvtype) switch (cvtype)
+3 -3
View File
@@ -10,9 +10,9 @@
#include <QImage> #include <QImage>
#include <QVector3D> #include <QVector3D>
const int THUMB_SIZE = 128; extern int THUMB_SIZE;
const int THUMB_SIZE_BORDER = 138; extern int THUMB_SIZE_BORDER;
const int THUMB_SIZE_BORDER_Y = 158; extern int THUMB_SIZE_BORDER_Y;
class Peak class Peak
{ {
+77
View File
@@ -0,0 +1,77 @@
#include "settingsdialog.h"
#include <QFormLayout>
#include <QDialogButtonBox>
#include <QLabel>
#include <QSettings>
#include "rawimage.h"
extern int DEFAULT_WIDTH;
class EvenNumber : public QSpinBox
{
public:
explicit EvenNumber(QWidget *parent) : QSpinBox(parent){}
protected:
QValidator::State validate(QString &text, int &) const
{
bool ok;
int val = text.toInt(&ok);
if(ok && (val & 1) == 0)return QValidator::Acceptable;
if(ok)return QValidator::Intermediate;
return QValidator::Invalid;
}
void fixup(QString &input) const
{
bool ok;
int val = input.toInt(&ok);
val -= val & 1;
input = QString::number(val);
}
};
SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent)
{
QFormLayout *layout = new QFormLayout(this);
setWindowTitle(tr("Settings"));
QSettings settings;
m_preloadImages = new QSpinBox(this);
m_preloadImages->setRange(0, 8);
m_preloadImages->setValue(settings.value("settings/preloadimagecount", DEFAULT_WIDTH).toInt());
m_preloadImages->setToolTip(tr("How many images are preloaded before and after current image."));
m_thumSize = new EvenNumber(this);
m_thumSize->setRange(64, 512);
m_thumSize->setSingleStep(2);
m_thumSize->setValue(settings.value("settings/thumnailsize", THUMB_SIZE).toInt());
m_thumSize->setToolTip(tr("Thumbnail size in pixels"));
layout->addRow(tr("Image preload count"), m_preloadImages);
layout->addRow(tr("Thumbnails size"), m_thumSize);
layout->addRow(new QLabel(tr("Changes in settings will take effect after program restart.")));
QDialogButtonBox *buttonBox = new QDialogButtonBox(this);
buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
connect(this, &QDialog::accepted, this, &SettingsDialog::saveSettings);
layout->addRow(buttonBox);
}
void SettingsDialog::loadSettings()
{
QSettings settings;
THUMB_SIZE = settings.value("settings/thumbnailsize", THUMB_SIZE).toInt();
THUMB_SIZE_BORDER = THUMB_SIZE + 10;
THUMB_SIZE_BORDER_Y = THUMB_SIZE + 30;
DEFAULT_WIDTH = settings.value("settings/preloadimagecount", DEFAULT_WIDTH).toInt();
}
void SettingsDialog::saveSettings()
{
QSettings settings;
settings.setValue("settings/thumbnailsize", m_thumSize->value());
settings.setValue("settings/preloadimagecount", m_preloadImages->value());
}
+20
View File
@@ -0,0 +1,20 @@
#ifndef SETTINGSDIALOG_H
#define SETTINGSDIALOG_H
#include <QDialog>
#include <QSpinBox>
class SettingsDialog : public QDialog
{
Q_OBJECT
public:
explicit SettingsDialog(QWidget *parent = nullptr);
static void loadSettings();
private:
void saveSettings();
QSpinBox *m_preloadImages;
QSpinBox *m_thumSize;
};
#endif // SETTINGSDIALOG_H
+3 -2
View File
@@ -7,13 +7,14 @@ out vec3 qt_TexCoord0;
uniform ivec3 viewport_row; uniform ivec3 viewport_row;
uniform mat4 mvp; uniform mat4 mvp;
uniform vec2 offset; uniform vec2 offset;
uniform ivec3 thumb_size;
void main(void) void main(void)
{ {
vec2 pos = qt_Vertex * 0.5; vec2 pos = qt_Vertex * 0.5;
pos.y *= -1.0; pos.y *= -1.0;
pos = pos * imageSize_num.xy + 69; pos = pos * imageSize_num.xy + thumb_size.x;
ivec2 off = ivec2(imageSize_num.z % viewport_row.z, imageSize_num.z / viewport_row.z) * ivec2(138, 158); ivec2 off = ivec2(imageSize_num.z % viewport_row.z, imageSize_num.z / viewport_row.z) * thumb_size.yz;
gl_Position = mvp * vec4(pos - offset + off, 0.0, 1.0); gl_Position = mvp * vec4(pos - offset + off, 0.0, 1.0);
qt_TexCoord0 = vec3(qt_MultiTexCoord0, imageSize_num.z + 0.1); qt_TexCoord0 = vec3(qt_MultiTexCoord0, imageSize_num.z + 0.1);