Add marking and unmark from thumbnails view

This commit is contained in:
2022-05-20 22:27:53 +02:00
parent 41b29f0701
commit 9ceb7556f9
5 changed files with 47 additions and 21 deletions
+1 -2
View File
@@ -163,8 +163,7 @@ void FITSFileModel::prepareQuery()
if(lastError().type() != QSqlError::NoError) if(lastError().type() != QSqlError::NoError)
qDebug() << lastError(); qDebug() << lastError();
QStringList list = m_database->getMarkedFiles(); m_markedFiles = m_database->getMarkedFiles().toSet();
m_markedFiles = QSet<QString>(list.begin(), list.end());
} }
DatabaseTableView::DatabaseTableView(QWidget *parent) : QTableView(parent) DatabaseTableView::DatabaseTableView(QWidget *parent) : QTableView(parent)
+1 -1
View File
@@ -261,7 +261,7 @@ QStringList ImageRingList::imageNames() const
{ {
QStringList ret; QStringList ret;
for(auto &img : m_images) for(auto &img : m_images)
ret.push_back(QFileInfo(img->name()).fileName()); ret.push_back(img->name());
return ret; return ret;
} }
+33 -9
View File
@@ -10,6 +10,7 @@
#include <QMessageBox> #include <QMessageBox>
#include <QCoreApplication> #include <QCoreApplication>
#include <QPainter> #include <QPainter>
#include <QFileInfo>
struct RawImageType struct RawImageType
{ {
@@ -45,7 +46,8 @@ void setScrollRange(QScrollBar *scrollBar, int newRange)
scrollBar->setValue(relPos*newRange - page/2); scrollBar->setValue(relPos*newRange - page/2);
} }
ImageWidget::ImageWidget(QWidget *parent) : QOpenGLWidget(parent) ImageWidget::ImageWidget(Database *database, QWidget *parent) : QOpenGLWidget(parent)
, m_database(database)
{ {
setFocusPolicy(Qt::ClickFocus); setFocusPolicy(Qt::ClickFocus);
m_range = UINT16_MAX; m_range = UINT16_MAX;
@@ -117,19 +119,23 @@ void ImageWidget::blockRepaint(bool block)
if(!block)update(); if(!block)update();
} }
void ImageWidget::allocateThumbnails(const QStringList &names) void ImageWidget::allocateThumbnails(const QStringList &paths)
{ {
int count = names.size(); int count = paths.size();
m_thumbnailCount = count; m_thumbnailCount = count;
m_thumnails.clear(); m_thumnails.clear();
for(auto &name : names) QStringList marked = m_database->getMarkedFiles();
m_thumnails.push_back({name, QSize(0, 0), false}); for(auto &path : paths)
{
QString name = QFileInfo(path).fileName();
m_thumnails.push_back({name, path, QSize(0, 0), marked.contains(path), false});
}
m_thumbnailTexture->destroy(); m_thumbnailTexture->destroy();
m_thumbnailTexture->create(); m_thumbnailTexture->create();
m_thumbnailTexture->setFormat(QOpenGLTexture::RGB16_UNorm); m_thumbnailTexture->setFormat(QOpenGLTexture::RGB16_UNorm);
m_thumbnailTexture->setSize(THUMB_SIZE, THUMB_SIZE); m_thumbnailTexture->setSize(THUMB_SIZE, THUMB_SIZE);
m_thumbnailTexture->setLayers(names.size()); m_thumbnailTexture->setLayers(paths.size());
m_thumbnailTexture->allocateStorage(); m_thumbnailTexture->allocateStorage();
m_bufferSizes->bind(); m_bufferSizes->bind();
float *tmp = new float[count*3]; float *tmp = new float[count*3];
@@ -440,6 +446,24 @@ void ImageWidget::mouseReleaseEvent(QMouseEvent *event)
{ {
m_selecting = false; m_selecting = false;
event->accept(); event->accept();
QStringList mark;
QStringList unmark;
for(auto &thumb : m_thumnails)
{
if(thumb.dirty)
{
if(thumb.selected)
mark.append(thumb.path);
else
unmark.append(thumb.path);
thumb.dirty = false;
}
}
if(!mark.isEmpty())
m_database->mark(mark);
if(!unmark.isEmpty())
m_database->unmark(unmark);
} }
else else
event->ignore(); event->ignore();
@@ -467,19 +491,19 @@ void ImageWidget::thumbSelect(QMouseEvent *event)
if(newVal != oldVal) if(newVal != oldVal)
{ {
emit thumbSelected(i);
m_thumnails[i].selected = newVal; m_thumnails[i].selected = newVal;
m_thumnails[i].dirty = true;
update(); update();
} }
} }
} }
ImageScrollAreaGL::ImageScrollAreaGL(QWidget *parent) : QWidget(parent) ImageScrollAreaGL::ImageScrollAreaGL(Database *database, QWidget *parent) : QWidget(parent)
{ {
QGridLayout *layout = new QGridLayout(this); QGridLayout *layout = new QGridLayout(this);
setLayout(layout); setLayout(layout);
m_imageWidget = new ImageWidget(this); m_imageWidget = new ImageWidget(database, this);
m_verticalScrollBar = new QScrollBar(Qt::Vertical, this); m_verticalScrollBar = new QScrollBar(Qt::Vertical, this);
m_horizontalScrollBar = new QScrollBar(Qt::Horizontal, this); m_horizontalScrollBar = new QScrollBar(Qt::Horizontal, this);
+7 -4
View File
@@ -13,12 +13,15 @@
#include <QTimer> #include <QTimer>
#include "rawimage.h" #include "rawimage.h"
#include "imageringlist.h" #include "imageringlist.h"
#include "database.h"
struct ImageThumb struct ImageThumb
{ {
QString name; QString name;
QString path;
QSize size; QSize size;
bool selected; bool selected;
bool dirty;
}; };
class ImageWidget : public QOpenGLWidget class ImageWidget : public QOpenGLWidget
@@ -53,14 +56,15 @@ class ImageWidget : public QOpenGLWidget
bool m_selecting; bool m_selecting;
int m_thumbnailCount; int m_thumbnailCount;
QVector<ImageThumb> m_thumnails; QVector<ImageThumb> m_thumnails;
Database *m_database;
public: public:
explicit ImageWidget(QWidget *parent = nullptr); explicit ImageWidget(Database *database, QWidget *parent = nullptr);
~ImageWidget() override; ~ImageWidget() override;
void setImage(const RawImage *image, int index); void setImage(const RawImage *image, int index);
void setImage(const QPixmap &pixmap); void setImage(const QPixmap &pixmap);
void setScale(float scale); void setScale(float scale);
void blockRepaint(bool block); void blockRepaint(bool block);
void allocateThumbnails(const QStringList &names); void allocateThumbnails(const QStringList &paths);
public slots: public slots:
void setMTFParams(float low, float mid, float high); void setMTFParams(float low, float mid, float high);
void setOffset(int dx, int dy); void setOffset(int dx, int dy);
@@ -81,7 +85,6 @@ protected:
void thumbSelect(QMouseEvent *event); void thumbSelect(QMouseEvent *event);
signals: signals:
void fileDropped(const QString &path); void fileDropped(const QString &path);
void thumbSelected(int index);
}; };
class ImageScrollAreaGL : public QWidget class ImageScrollAreaGL : public QWidget
@@ -96,7 +99,7 @@ class ImageScrollAreaGL : public QWidget
bool m_bestFit; bool m_bestFit;
int m_thumbCount; int m_thumbCount;
public: public:
explicit ImageScrollAreaGL(QWidget *parent = nullptr); explicit ImageScrollAreaGL(Database *database, QWidget *parent = nullptr);
~ImageScrollAreaGL() override; ~ImageScrollAreaGL() override;
void setImage(RawImage *image, int index); void setImage(RawImage *image, int index);
ImageWidget* imageWidget(); ImageWidget* imageWidget();
+5 -5
View File
@@ -42,7 +42,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
//setCentralWidget(m_image); //setCentralWidget(m_image);
resize(800, 600); resize(800, 600);
m_imageGL = new ImageScrollAreaGL(this); m_database = new Database(this);
if(!m_database->init())
QMessageBox::critical(this, tr("Can't open DB"), tr("Can't open SQLITE database"));
m_imageGL = new ImageScrollAreaGL(m_database, this);
setCentralWidget(m_imageGL); setCentralWidget(m_imageGL);
m_stretchPanel = new StretchToolbar(this); m_stretchPanel = new StretchToolbar(this);
@@ -61,10 +65,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
connect(m_filetree, &Filetree::moveFiles, [this](const QString &path){ copyOrMove(false, path); }); connect(m_filetree, &Filetree::moveFiles, [this](const QString &path){ copyOrMove(false, path); });
connect(m_filetree, &Filetree::indexDirectory, this, static_cast<void (MainWindow::*)(const QString &)>(&MainWindow::indexDir)); connect(m_filetree, &Filetree::indexDirectory, this, static_cast<void (MainWindow::*)(const QString &)>(&MainWindow::indexDir));
m_database = new Database(this);
if(!m_database->init())
QMessageBox::critical(this, tr("Can't open DB"), tr("Can't open SQLITE database"));
m_databaseView = new DataBaseView(m_database, this); m_databaseView = new DataBaseView(m_database, this);
connect(m_databaseView, SIGNAL(loadFile(QString)), this, SLOT(loadFile(QString))); connect(m_databaseView, SIGNAL(loadFile(QString)), this, SLOT(loadFile(QString)));