From 3f226eb952a97938fbafa2ed4ce1b2b4347fc075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sat, 30 Jul 2016 21:29:11 +0200 Subject: [PATCH] Start of marking of images for selection --- database.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++++ database.h | 23 ++++++++++++++++ imageringlist.cpp | 12 +++++++-- imageringlist.h | 4 ++- imageselector.pro | 8 +++--- main.cpp | 3 +++ mainwindow.cpp | 20 ++++++++++++++ mainwindow.h | 3 +++ 8 files changed, 135 insertions(+), 6 deletions(-) create mode 100644 database.cpp create mode 100644 database.h diff --git a/database.cpp b/database.cpp new file mode 100644 index 0000000..a464f51 --- /dev/null +++ b/database.cpp @@ -0,0 +1,68 @@ +#include "database.h" +#include +#include +#include +#include + +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; + } +} diff --git a/database.h b/database.h new file mode 100644 index 0000000..2ef0039 --- /dev/null +++ b/database.h @@ -0,0 +1,23 @@ +#ifndef DATABASE_H +#define DATABASE_H + +#include +#include +#include + +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 diff --git a/imageringlist.cpp b/imageringlist.cpp index 39e2baa..0203036 100644 --- a/imageringlist.cpp +++ b/imageringlist.cpp @@ -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>::iterator ImageRingList::increment(QList::iterator iter) +QList::iterator ImageRingList::increment(QList::iterator iter) { iter++; if(iter == m_images.end()) @@ -151,7 +159,7 @@ QList>::iterator ImageRingList::increment(QList::ite return iter; } -QList>::iterator ImageRingList::decrement(QList::iterator iter) +QList::iterator ImageRingList::decrement(QList::iterator iter) { if(iter == m_images.begin()) iter = m_images.end(); diff --git a/imageringlist.h b/imageringlist.h index a73773c..700d651 100644 --- a/imageringlist.h +++ b/imageringlist.h @@ -26,10 +26,11 @@ protected slots: void imageLoaded(QImage img); }; +typedef std::shared_ptr ImagePtr; + class ImageRingList : public QObject { Q_OBJECT - typedef std::shared_ptr ImagePtr; int m_width; QList m_images; QList::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: diff --git a/imageselector.pro b/imageselector.pro index ad9c4c1..6b24534 100644 --- a/imageselector.pro +++ b/imageselector.pro @@ -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 diff --git a/main.cpp b/main.cpp index b48f94e..2f76569 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,9 @@ int main(int argc, char *argv[]) { QApplication a(argc, argv); + a.setOrganizationName("nou"); + a.setApplicationName("ImageSelector"); + MainWindow w; w.show(); diff --git a/mainwindow.cpp b/mainwindow.cpp index d50018b..de07dcc 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -6,6 +6,7 @@ #include #include #include +#include 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); + } +} diff --git a/mainwindow.h b/mainwindow.h index 08b445e..dfec646 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -4,12 +4,14 @@ #include #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