diff --git a/database.cpp b/database.cpp index a464f51..26c9110 100644 --- a/database.cpp +++ b/database.cpp @@ -23,7 +23,7 @@ bool Database::init() 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));"); + m_database.exec("CREATE TABLE IF NOT EXISTS files (id INTEGER PRIMARY KEY AUTOINCREMENT, file VARCHAR(255) UNIQUE);"); QSqlError error = m_database.lastError(); if(error.type() == QSqlError::NoError) @@ -31,7 +31,9 @@ bool Database::init() 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 = '?'"); + m_unmarkQuery.prepare("DELETE FROM files WHERE file = (?)"); + m_isMarkedQuery = QSqlQuery(m_database); + m_isMarkedQuery.prepare("SELECT * FROM files WHERE file = (:name)"); return true; } @@ -41,20 +43,28 @@ bool Database::init() return false; } -bool Database::mark(QString &filename) +bool Database::mark(const QString &filename) { m_markQuery.bindValue(0, filename); m_markQuery.exec(); return checkError(); } -bool Database::unmark(QString &filename) +bool Database::unmark(const QString &filename) { m_unmarkQuery.bindValue(0, filename); m_unmarkQuery.exec(); return checkError(); } +bool Database::isMarked(const QString &filename) +{ + m_isMarkedQuery.bindValue(":name", filename); + m_isMarkedQuery.exec(); + checkError(); + return m_isMarkedQuery.next(); +} + bool Database::checkError() { QSqlError error = m_database.lastError(); diff --git a/database.h b/database.h index 2ef0039..21d6a45 100644 --- a/database.h +++ b/database.h @@ -11,11 +11,13 @@ class Database : public QObject QSqlDatabase m_database; QSqlQuery m_markQuery; QSqlQuery m_unmarkQuery; + QSqlQuery m_isMarkedQuery; public: explicit Database(QObject *parent = 0); bool init(); - bool mark(QString &filename); - bool unmark(QString &filename); + bool mark(const QString &filename); + bool unmark(const QString &filename); + bool isMarked(const QString &filename); protected: bool checkError(); }; diff --git a/mainwindow.cpp b/mainwindow.cpp index de07dcc..82f0ef8 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -35,7 +35,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), QMenu *selectMenu = new QMenu(tr("Select"), this); selectMenu->addAction(tr("Mark"), this, SLOT(markImage()), Qt::Key_F5); - //menuBar()->addMenu(selectMenu); + selectMenu->addAction(tr("Unmark"), this, SLOT(unmarkImage()), Qt::Key_F8); + menuBar()->addMenu(selectMenu); m_database = new Database(this); if(!m_database->init()) @@ -67,6 +68,9 @@ void MainWindow::keyPressEvent(QKeyEvent *event) { event->ignore(); } + + if(event->isAccepted()) + updateWindowTitle(); } void MainWindow::keyReleaseEvent(QKeyEvent *event) @@ -91,6 +95,7 @@ void MainWindow::openFile() { QFileInfo info(file); m_ringList->setDir(info.dir().absolutePath()); + updateWindowTitle(); } } @@ -102,5 +107,33 @@ void MainWindow::markImage() QString file = ptr->name(); if(!file.isEmpty()) m_database->mark(file); + + updateWindowTitle(); + } +} + +void MainWindow::unmarkImage() +{ + ImagePtr ptr = m_ringList->currentImage(); + if(ptr) + { + QString file = ptr->name(); + if(!file.isEmpty()) + m_database->unmark(file); + + updateWindowTitle(); + } +} + +void MainWindow::updateWindowTitle() +{ + ImagePtr ptr = m_ringList->currentImage(); + if(ptr) + { + QFileInfo info(ptr->name()); + QString title = info.fileName(); + if(m_database->isMarked(ptr->name())) + title += " *"; + setWindowTitle(title); } } diff --git a/mainwindow.h b/mainwindow.h index dfec646..7d2e2b4 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -20,10 +20,12 @@ public: protected: void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event); + void updateWindowTitle(); protected slots: void pixmapLoaded(QPixmap pix); void openFile(); void markImage(); + void unmarkImage(); }; #endif // MAINWINDOW_H