Start of marking of images for selection
This commit is contained in:
@@ -0,0 +1,68 @@
|
|||||||
|
#include "database.h"
|
||||||
|
#include <QStandardPaths>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QSqlError>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
Database::Database(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Database::init()
|
||||||
|
{
|
||||||
|
QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
|
||||||
|
QDir dir(path);
|
||||||
|
|
||||||
|
m_database = QSqlDatabase::addDatabase("QSQLITE");
|
||||||
|
|
||||||
|
if(!dir.mkpath("."))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(m_database.isValid())
|
||||||
|
{
|
||||||
|
m_database.setDatabaseName(dir.absoluteFilePath("database.db"));
|
||||||
|
if(m_database.open())
|
||||||
|
{
|
||||||
|
m_database.exec("CREATE TABLE IF NOT EXISTS files (id INTEGER PRIMARY KEY AUTOINCREMENT, file VARCHAR(255));");
|
||||||
|
QSqlError error = m_database.lastError();
|
||||||
|
|
||||||
|
if(error.type() == QSqlError::NoError)
|
||||||
|
{
|
||||||
|
m_markQuery = QSqlQuery(m_database);
|
||||||
|
m_markQuery.prepare("INSERT INTO files (file) VALUES (?)");
|
||||||
|
m_unmarkQuery = QSqlQuery(m_database);
|
||||||
|
m_unmarkQuery.prepare("DELETE FROM files WHERE file = '?'");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << error.text();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Database::mark(QString &filename)
|
||||||
|
{
|
||||||
|
m_markQuery.bindValue(0, filename);
|
||||||
|
m_markQuery.exec();
|
||||||
|
return checkError();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Database::unmark(QString &filename)
|
||||||
|
{
|
||||||
|
m_unmarkQuery.bindValue(0, filename);
|
||||||
|
m_unmarkQuery.exec();
|
||||||
|
return checkError();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Database::checkError()
|
||||||
|
{
|
||||||
|
QSqlError error = m_database.lastError();
|
||||||
|
if(error.type() == QSqlError::NoError)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug() << error.text();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
#ifndef DATABASE_H
|
||||||
|
#define DATABASE_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QSqlDatabase>
|
||||||
|
#include <QSqlQuery>
|
||||||
|
|
||||||
|
class Database : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
QSqlDatabase m_database;
|
||||||
|
QSqlQuery m_markQuery;
|
||||||
|
QSqlQuery m_unmarkQuery;
|
||||||
|
public:
|
||||||
|
explicit Database(QObject *parent = 0);
|
||||||
|
bool init();
|
||||||
|
bool mark(QString &filename);
|
||||||
|
bool unmark(QString &filename);
|
||||||
|
protected:
|
||||||
|
bool checkError();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DATABASE_H
|
||||||
+10
-2
@@ -117,6 +117,14 @@ void ImageRingList::setFiles(const QStringList files)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImagePtr ImageRingList::currentImage()
|
||||||
|
{
|
||||||
|
if(m_images.size())
|
||||||
|
return *m_currImage;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void ImageRingList::increment()
|
void ImageRingList::increment()
|
||||||
{
|
{
|
||||||
if(m_images.size())
|
if(m_images.size())
|
||||||
@@ -143,7 +151,7 @@ void ImageRingList::decrement()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<shared_ptr<Image>>::iterator ImageRingList::increment(QList<ImagePtr>::iterator iter)
|
QList<ImagePtr>::iterator ImageRingList::increment(QList<ImagePtr>::iterator iter)
|
||||||
{
|
{
|
||||||
iter++;
|
iter++;
|
||||||
if(iter == m_images.end())
|
if(iter == m_images.end())
|
||||||
@@ -151,7 +159,7 @@ QList<shared_ptr<Image>>::iterator ImageRingList::increment(QList<ImagePtr>::ite
|
|||||||
return iter;
|
return iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<shared_ptr<Image>>::iterator ImageRingList::decrement(QList<ImagePtr>::iterator iter)
|
QList<ImagePtr>::iterator ImageRingList::decrement(QList<ImagePtr>::iterator iter)
|
||||||
{
|
{
|
||||||
if(iter == m_images.begin())
|
if(iter == m_images.begin())
|
||||||
iter = m_images.end();
|
iter = m_images.end();
|
||||||
|
|||||||
+3
-1
@@ -26,10 +26,11 @@ protected slots:
|
|||||||
void imageLoaded(QImage img);
|
void imageLoaded(QImage img);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef std::shared_ptr<Image> ImagePtr;
|
||||||
|
|
||||||
class ImageRingList : public QObject
|
class ImageRingList : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
typedef std::shared_ptr<Image> ImagePtr;
|
|
||||||
int m_width;
|
int m_width;
|
||||||
QList<ImagePtr> m_images;
|
QList<ImagePtr> m_images;
|
||||||
QList<ImagePtr>::iterator m_firstImage;
|
QList<ImagePtr>::iterator m_firstImage;
|
||||||
@@ -39,6 +40,7 @@ public:
|
|||||||
explicit ImageRingList(QObject *parent = 0);
|
explicit ImageRingList(QObject *parent = 0);
|
||||||
bool setDir(const QString path);
|
bool setDir(const QString path);
|
||||||
void setFiles(const QStringList files);
|
void setFiles(const QStringList files);
|
||||||
|
ImagePtr currentImage();
|
||||||
void increment();
|
void increment();
|
||||||
void decrement();
|
void decrement();
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
+5
-3
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------
|
#-------------------------------------------------
|
||||||
|
|
||||||
QT += core gui
|
QT += core gui sql
|
||||||
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
@@ -16,8 +16,10 @@ CONFIG += c++11
|
|||||||
SOURCES += main.cpp\
|
SOURCES += main.cpp\
|
||||||
mainwindow.cpp \
|
mainwindow.cpp \
|
||||||
imagescrollarea.cpp \
|
imagescrollarea.cpp \
|
||||||
imageringlist.cpp
|
imageringlist.cpp \
|
||||||
|
database.cpp
|
||||||
|
|
||||||
HEADERS += mainwindow.h \
|
HEADERS += mainwindow.h \
|
||||||
imagescrollarea.h \
|
imagescrollarea.h \
|
||||||
imageringlist.h
|
imageringlist.h \
|
||||||
|
database.h
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
|
a.setOrganizationName("nou");
|
||||||
|
a.setApplicationName("ImageSelector");
|
||||||
|
|
||||||
MainWindow w;
|
MainWindow w;
|
||||||
w.show();
|
w.show();
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <QMenuBar>
|
#include <QMenuBar>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
|
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
|
||||||
loading(false),
|
loading(false),
|
||||||
@@ -31,6 +32,14 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
|
|||||||
viewMenu->addAction(tr("Best Fit"), m_image, SLOT(bestFit()), QKeySequence("Ctrl+1"));
|
viewMenu->addAction(tr("Best Fit"), m_image, SLOT(bestFit()), QKeySequence("Ctrl+1"));
|
||||||
viewMenu->addAction(tr("100%"), m_image, SLOT(oneToOne()));
|
viewMenu->addAction(tr("100%"), m_image, SLOT(oneToOne()));
|
||||||
menuBar()->addMenu(viewMenu);
|
menuBar()->addMenu(viewMenu);
|
||||||
|
|
||||||
|
QMenu *selectMenu = new QMenu(tr("Select"), this);
|
||||||
|
selectMenu->addAction(tr("Mark"), this, SLOT(markImage()), Qt::Key_F5);
|
||||||
|
//menuBar()->addMenu(selectMenu);
|
||||||
|
|
||||||
|
m_database = new Database(this);
|
||||||
|
if(!m_database->init())
|
||||||
|
QMessageBox::critical(this, tr("Can't open DB"), tr("Can't open SQLITE database"));
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
@@ -84,3 +93,14 @@ void MainWindow::openFile()
|
|||||||
m_ringList->setDir(info.dir().absolutePath());
|
m_ringList->setDir(info.dir().absolutePath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::markImage()
|
||||||
|
{
|
||||||
|
ImagePtr ptr = m_ringList->currentImage();
|
||||||
|
if(ptr)
|
||||||
|
{
|
||||||
|
QString file = ptr->name();
|
||||||
|
if(!file.isEmpty())
|
||||||
|
m_database->mark(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,12 +4,14 @@
|
|||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include "imageringlist.h"
|
#include "imageringlist.h"
|
||||||
#include "imagescrollarea.h"
|
#include "imagescrollarea.h"
|
||||||
|
#include "database.h"
|
||||||
|
|
||||||
class MainWindow : public QMainWindow
|
class MainWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
ImageScrollArea *m_image;
|
ImageScrollArea *m_image;
|
||||||
ImageRingList *m_ringList;
|
ImageRingList *m_ringList;
|
||||||
|
Database *m_database;
|
||||||
bool loading;
|
bool loading;
|
||||||
int queued;
|
int queued;
|
||||||
public:
|
public:
|
||||||
@@ -21,6 +23,7 @@ protected:
|
|||||||
protected slots:
|
protected slots:
|
||||||
void pixmapLoaded(QPixmap pix);
|
void pixmapLoaded(QPixmap pix);
|
||||||
void openFile();
|
void openFile();
|
||||||
|
void markImage();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|||||||
Reference in New Issue
Block a user