From e0d473c8c89d2a3b6141e5ab4c1a1d2556742044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Tue, 19 Apr 2022 19:57:06 +0200 Subject: [PATCH] Add marked files dialog --- CMakeLists.txt | 1 + mainwindow.cpp | 8 ++++++ mainwindow.h | 1 + markedfiles.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ markedfiles.h | 19 +++++++++++++++ 5 files changed, 94 insertions(+) create mode 100644 markedfiles.cpp create mode 100644 markedfiles.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f40d95..ad0db9b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,7 @@ set(TENMON_SRC loadrunable.cpp main.cpp mainwindow.cpp + markedfiles.cpp rawimage.cpp starfit.cpp stfslider.cpp diff --git a/mainwindow.cpp b/mainwindow.cpp index 6d24e66..39411a8 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -16,6 +16,7 @@ #include #include #include "loadrunable.h" +#include "markedfiles.h" #ifdef __linux__ #include @@ -114,6 +115,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) selectMenu->addSeparator(); selectMenu->addAction(tr("Mark and next"), this, SLOT(markAndNext()), Qt::Key_M); selectMenu->addAction(tr("Unmark and next"), this, SLOT(unmarkAndNext()), Qt::Key_X); + selectMenu->addAction(tr("Show marked"), this, &MainWindow::showMarkFilesDialog); menuBar()->addMenu(selectMenu); QMenu *analyzeMenu = new QMenu(tr("Analyze"), this); @@ -446,6 +448,12 @@ void MainWindow::starFinder(bool findStars) m_ringList->setFindStars(findStars); } +void MainWindow::showMarkFilesDialog() +{ + MarkedFiles markedFiles; + markedFiles.exec(); +} + void MainWindow::updateWindowTitle() { ImagePtr ptr = m_ringList->currentImage(); diff --git a/mainwindow.h b/mainwindow.h index db88daf..f0689e2 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -56,6 +56,7 @@ protected slots: void imageStats(bool imageStats); void peakFinder(bool findPeaks); void starFinder(bool findStars); + void showMarkFilesDialog(); }; #endif // MAINWINDOW_H diff --git a/markedfiles.cpp b/markedfiles.cpp new file mode 100644 index 0000000..9b51992 --- /dev/null +++ b/markedfiles.cpp @@ -0,0 +1,65 @@ +#include "markedfiles.h" +#include +#include +#include +#include +#include +#include + +MarkedFiles::MarkedFiles(QWidget *parent) : QDialog(parent) +{ + setWindowTitle(tr("Marked files")); + + QVBoxLayout *layout = new QVBoxLayout(this); + m_tableView = new QTableView(this); + m_tableView->verticalHeader()->setDefaultSectionSize(1); + + QSqlDatabase db = QSqlDatabase::database(); + m_model = new QSqlTableModel(this, db); + + m_model->setTable("files"); + m_model->removeColumn(0); + m_model->setHeaderData(0, Qt::Horizontal, tr("Filename")); + m_model->select(); + + m_tableView->setModel(m_model); + m_tableView->resizeColumnsToContents(); + m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); + + QHBoxLayout *hlayout = new QHBoxLayout; + QPushButton *clearSelectedButton = new QPushButton(tr("Clear selected"), this); + QPushButton *clearAllButton = new QPushButton(tr("Clear all"), this); + + connect(clearSelectedButton, &QPushButton::pressed, this, &MarkedFiles::clearSelected); + connect(clearAllButton, &QPushButton::pressed, this, &MarkedFiles::clearAll); + + layout->addWidget(m_tableView); + layout->addLayout(hlayout); + hlayout->addWidget(clearSelectedButton); + hlayout->addWidget(clearAllButton); + + resize(800, 600); +} + +void MarkedFiles::clearSelected() +{ + + QSqlDatabase db = QSqlDatabase::database(); + QSqlQuery query("DELETE FROM files where file = ?", db); + QModelIndexList rows = m_tableView->selectionModel()->selectedRows(); + QStringList files; + for(const QModelIndex &row : rows) + { + files.append(row.data().toString()); + } + query.bindValue(0, files); + query.execBatch(); + m_model->select(); +} + +void MarkedFiles::clearAll() +{ + QSqlDatabase db = QSqlDatabase::database(); + db.exec("DELETE FROM files"); + m_model->select(); +} diff --git a/markedfiles.h b/markedfiles.h new file mode 100644 index 0000000..102efe4 --- /dev/null +++ b/markedfiles.h @@ -0,0 +1,19 @@ +#ifndef MARKEDFILES_H +#define MARKEDFILES_H + +#include +#include +#include + +class MarkedFiles : public QDialog +{ + QTableView *m_tableView; + QSqlTableModel *m_model; +public: + MarkedFiles(QWidget *parent = nullptr); +protected slots: + void clearSelected(); + void clearAll(); +}; + +#endif // MARKEDFILES_H