Start of marking of images for selection

This commit is contained in:
2016-07-30 21:29:11 +02:00
parent 32e06a3e08
commit 3f226eb952
8 changed files with 135 additions and 6 deletions
+68
View File
@@ -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
View File
@@ -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
View File
@@ -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()
{
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++;
if(iter == m_images.end())
@@ -151,7 +159,7 @@ QList<shared_ptr<Image>>::iterator ImageRingList::increment(QList<ImagePtr>::ite
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())
iter = m_images.end();
+3 -1
View File
@@ -26,10 +26,11 @@ protected slots:
void imageLoaded(QImage img);
};
typedef std::shared_ptr<Image> ImagePtr;
class ImageRingList : public QObject
{
Q_OBJECT
typedef std::shared_ptr<Image> ImagePtr;
int m_width;
QList<ImagePtr> m_images;
QList<ImagePtr>::iterator m_firstImage;
@@ -39,6 +40,7 @@ public:
explicit ImageRingList(QObject *parent = 0);
bool setDir(const QString path);
void setFiles(const QStringList files);
ImagePtr currentImage();
void increment();
void decrement();
protected:
+5 -3
View File
@@ -4,7 +4,7 @@
#
#-------------------------------------------------
QT += core gui
QT += core gui sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@@ -16,8 +16,10 @@ CONFIG += c++11
SOURCES += main.cpp\
mainwindow.cpp \
imagescrollarea.cpp \
imageringlist.cpp
imageringlist.cpp \
database.cpp
HEADERS += mainwindow.h \
imagescrollarea.h \
imageringlist.h
imageringlist.h \
database.h
+3
View File
@@ -4,6 +4,9 @@
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setOrganizationName("nou");
a.setApplicationName("ImageSelector");
MainWindow w;
w.show();
+20
View File
@@ -6,6 +6,7 @@
#include <QMenuBar>
#include <QFileDialog>
#include <QStandardPaths>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
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("100%"), m_image, SLOT(oneToOne()));
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()
@@ -84,3 +93,14 @@ void MainWindow::openFile()
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);
}
}
+3
View File
@@ -4,12 +4,14 @@
#include <QMainWindow>
#include "imageringlist.h"
#include "imagescrollarea.h"
#include "database.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
ImageScrollArea *m_image;
ImageRingList *m_ringList;
Database *m_database;
bool loading;
int queued;
public:
@@ -21,6 +23,7 @@ protected:
protected slots:
void pixmapLoaded(QPixmap pix);
void openFile();
void markImage();
};
#endif // MAINWINDOW_H