From 67ae2d4b628337e7d0ae1fb4b99400f20f665a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Fri, 20 May 2022 11:07:18 +0200 Subject: [PATCH] Mark unmark files from database view --- database.cpp | 14 ++++++++++++++ database.h | 2 ++ databaseview.cpp | 42 ++++++++++++++++++++++++++++++++++++++++-- databaseview.h | 18 +++++++++++++++--- 4 files changed, 71 insertions(+), 5 deletions(-) diff --git a/database.cpp b/database.cpp index 591ab39..af90f54 100644 --- a/database.cpp +++ b/database.cpp @@ -76,6 +76,20 @@ bool Database::unmark(const QString &filename) return checkError(m_unmarkQuery); } +bool Database::mark(const QStringList &filenames) +{ + m_markQuery.bindValue(0, filenames); + m_markQuery.execBatch(); + return checkError(m_markQuery); +} + +bool Database::unmark(const QStringList &filenames) +{ + m_unmarkQuery.bindValue(0, filenames); + m_unmarkQuery.execBatch(); + return checkError(m_unmarkQuery); +} + bool Database::isMarked(const QString &filename) { m_isMarkedQuery.bindValue(":name", filename); diff --git a/database.h b/database.h index a701052..3ea81e5 100644 --- a/database.h +++ b/database.h @@ -26,6 +26,8 @@ public: bool init(); bool mark(const QString &filename); bool unmark(const QString &filename); + bool mark(const QStringList &filenames); + bool unmark(const QStringList &filenames); bool isMarked(const QString &filename); QStringList getMarkedFiles(); void clearMarkedFiles(); diff --git a/databaseview.cpp b/databaseview.cpp index 4f6fb39..4e01477 100644 --- a/databaseview.cpp +++ b/databaseview.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include #include const QStringList DEFAULT_COLUMNS = {"EXPTIME", "OBJECT", "RA", "DEC"}; @@ -124,16 +126,40 @@ void FITSFileModel::prepareQuery() qDebug() << lastError(); } +DatabaseTableView::DatabaseTableView(QWidget *parent) : QTableView(parent) +{ +} + +void DatabaseTableView::contextMenuEvent(QContextMenuEvent *event) +{ + QMenu menu; + QAction *mark = menu.addAction(tr("Mark")); + QAction *unmark = menu.addAction(tr("Unmark")); + + QAction *a = menu.exec(event->globalPos()); + if(a == nullptr) + return; + + QModelIndexList indexes = selectionModel()->selectedRows(); + + if(a == mark) + emit filesMarked(indexes); + else if(a == unmark) + emit filesUnmarked(indexes); + +} + DataBaseView::DataBaseView(Database *database, QWidget *parent) : QWidget(parent) ,m_database(database) { QVBoxLayout *layout = new QVBoxLayout(this); setLayout(layout); - m_tableView = new QTableView(this); + m_tableView = new DatabaseTableView(this); m_tableView->verticalHeader()->setDefaultSectionSize(1); m_tableView->setSortingEnabled(true); m_tableView->horizontalHeader()->setSortIndicatorShown(true); + m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); layout->addWidget(m_tableView); connect(m_tableView, &QTableView::activated, this, &DataBaseView::itemActivated); @@ -151,6 +177,19 @@ DataBaseView::DataBaseView(Database *database, QWidget *parent) : QWidget(parent hlayout->addWidget(selectColumnsButton); connect(selectColumnsButton, &QPushButton::pressed, this, &DataBaseView::selectColumns); + connect(m_tableView, &DatabaseTableView::filesMarked, [this](QModelIndexList indexes){ + QStringList files; + for(auto &index : indexes) + files.append(index.data().toString()); + m_database->mark(files); + }); + connect(m_tableView, &DatabaseTableView::filesUnmarked, [this](QModelIndexList indexes){ + QStringList files; + for(auto &index : indexes) + files.append(index.data().toString()); + m_database->unmark(files); + }); + for(int i=0; i<3; i++) { m_filterKeyword[i] = new QComboBox(this); @@ -214,4 +253,3 @@ void DataBaseView::applyFilter() } m_model->setFilter(keys, values); } - diff --git a/databaseview.h b/databaseview.h index f566ce9..9d62381 100644 --- a/databaseview.h +++ b/databaseview.h @@ -15,7 +15,7 @@ class SelectColumnsDialog : public QDialog Q_OBJECT QListWidget *m_listWidget; public: - SelectColumnsDialog(QWidget *parent = nullptr); + explicit SelectColumnsDialog(QWidget *parent = nullptr); void setColumns(QStringList columns); QStringList selectedColumns(); }; @@ -28,7 +28,7 @@ class FITSFileModel : public QSqlQueryModel QStringList m_key; QStringList m_value; public: - FITSFileModel(QObject *parent = nullptr); + explicit FITSFileModel(QObject *parent = nullptr); void sort(int column, Qt::SortOrder order) override; void setColumns(const QStringList &columns); void setFilter(const QStringList &key, const QStringList &value); @@ -36,11 +36,23 @@ protected: void prepareQuery(); }; +class DatabaseTableView : public QTableView +{ + Q_OBJECT +public: + explicit DatabaseTableView(QWidget *parent = nullptr); +protected: + void contextMenuEvent(QContextMenuEvent *event) override; +signals: + void filesMarked(QModelIndexList indexes); + void filesUnmarked(QModelIndexList indexes); +}; + class DataBaseView : public QWidget { Q_OBJECT Database *m_database; - QTableView *m_tableView; + DatabaseTableView *m_tableView; FITSFileModel *m_model; QComboBox *m_filterKeyword[3]; QLineEdit *m_search[3];