diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index aa4e680..ce7a01f 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -66,12 +66,22 @@ void Filetree::contextMenuEvent(QContextMenuEvent *event) QMenu menu; QAction *open = nullptr; QAction *setRoot = nullptr; + QAction *copy = nullptr; + QAction *move = nullptr; + QAction *indexDir = nullptr; if(info.isFile()) open = menu.addAction(tr("Open")); if(info.isDir()) + { + open = menu.addAction(tr("Open")); setRoot = menu.addAction("Set as root"); + copy = menu.addAction(tr("Copy marked files")); + move = menu.addAction(tr("Move marked files")); + indexDir = menu.addAction(tr("Index directory")); + } + menu.addSeparator(); QAction *resetRoot = menu.addAction("Reset root"); QAction *goUp = menu.addAction("Go up"); @@ -96,4 +106,16 @@ void Filetree::contextMenuEvent(QContextMenuEvent *event) setRootIndex(rootIndex().parent()); m_rootDir = m_fileSystemModel->filePath(rootIndex().parent()); } + else if(a == copy) + { + emit copyFiles(m_fileSystemModel->filePath(index)); + } + else if(a == move) + { + emit moveFiles(m_fileSystemModel->filePath(index)); + } + else if(a == indexDir) + { + emit indexDirectory(m_fileSystemModel->filePath(index)); + } } diff --git a/filesystemwidget.h b/filesystemwidget.h index 0999133..e7603af 100644 --- a/filesystemwidget.h +++ b/filesystemwidget.h @@ -32,6 +32,9 @@ public: void contextMenuEvent(QContextMenuEvent *event); signals: void fileSelected(const QString &path); + void copyFiles(const QString &path); + void moveFiles(const QString &path); + void indexDirectory(const QString &path); }; #endif // FILESYSTEMWIDGET_H diff --git a/mainwindow.cpp b/mainwindow.cpp index 603fb57..92b41ee 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -57,6 +57,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) m_filetree = new Filetree(this); connect(m_filetree, &Filetree::fileSelected, this, static_cast(&MainWindow::loadFile)); + connect(m_filetree, &Filetree::copyFiles, [this](const QString &path){ copyOrMove(true, path); }); + connect(m_filetree, &Filetree::moveFiles, [this](const QString &path){ copyOrMove(false, path); }); + connect(m_filetree, &Filetree::indexDirectory, this, static_cast(&MainWindow::indexDir)); m_database = new Database(this); if(!m_database->init()) @@ -269,6 +272,11 @@ void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::copyOrMove(bool copy) { QString dest = QFileDialog::getExistingDirectory(this, tr("Select destination"), _lastDir); + copyOrMove(copy, dest); +} + +void MainWindow::copyOrMove(bool copy, const QString &dest) +{ QDir dir(dest); if(!dest.isEmpty() && dir.exists()) { @@ -313,8 +321,8 @@ void MainWindow::copyOrMove(bool copy) #endif progress.setValue(i++); } + m_database->clearMarkedFiles(); } - m_database->clearMarkedFiles(); } void MainWindow::socketNotify() @@ -366,6 +374,11 @@ void MainWindow::loadFile(int row) void MainWindow::indexDir() { QString dir = QFileDialog::getExistingDirectory(this, tr("Index directory"), _lastDir); + indexDir(dir); +} + +void MainWindow::indexDir(const QString &dir) +{ if(!dir.isEmpty()) { QProgressDialog progressDialog(tr("Indexing FITS files"), tr("Cancel"), 0, 1, this); diff --git a/mainwindow.h b/mainwindow.h index 74fe6d6..8aa37cd 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -38,6 +38,7 @@ protected: static void signalHandler(int); void closeEvent(QCloseEvent *event); void copyOrMove(bool copy); + void copyOrMove(bool copy, const QString &dest); protected slots: void socketNotify(); void updateWindowTitle(); @@ -46,6 +47,7 @@ protected slots: void loadFile(const QString &path); void loadFile(int row); void indexDir(); + void indexDir(const QString &dir); void reindex(); void saveAs(); void convert(const QString &outfile);