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()
|
||||
{
|
||||
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
@@ -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
@@ -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
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
a.setOrganizationName("nou");
|
||||
a.setApplicationName("ImageSelector");
|
||||
|
||||
MainWindow w;
|
||||
w.show();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user