diff --git a/cimportdialog.ui b/cimportdialog.ui index 6dd6bd5..f96cc31 100644 --- a/cimportdialog.ui +++ b/cimportdialog.ui @@ -148,11 +148,17 @@ Qt::Horizontal + + Qt::CustomContextMenu + false + + Qt::CustomContextMenu + QAbstractItemView::ExtendedSelection diff --git a/cmainwindow.cpp b/cmainwindow.cpp index ed5fdb6..1b46357 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -3,6 +3,8 @@ #include "cmainwindow.h" #include "cimportdialog.h" +#include "cdatetimepicker.h" + #include "ui_cmainwindow.h" #include @@ -93,9 +95,19 @@ void cMainWindow::createActions() setToolButtonStyle(Qt::ToolButtonFollowStyle); createFileActions(); + createContextActions(); + + connect(ui->m_lpThumbnailView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &cMainWindow::onThumbnailSelected); + connect(ui->m_lpFolderView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &cMainWindow::onFolderSelected); - connect(ui->m_lpThumbnailView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &cMainWindow::onThumbnailSelected); - connect(ui->m_lpFolderView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &cMainWindow::onFolderSelected); + connect(ui->m_lpThumbnailView, &QListView::customContextMenuRequested, this, &cMainWindow::onThumbnailViewContextMenu); +} + +void cMainWindow::createContextActions() +{ + m_lpChangeDateAction = new QAction(tr("change date"), this); + m_lpChangeDateAction->setStatusTip(tr("change the date of this picture")); + connect(m_lpChangeDateAction, &QAction::triggered, this, &cMainWindow::onChangeDate); } void cMainWindow::loadData(bool bProgressBar) @@ -401,3 +413,42 @@ void cMainWindow::onFileImport() m_lpProgressBar->setVisible(false); } } + +void cMainWindow::onThumbnailViewContextMenu(const QPoint& pos) +{ + QMenu menu(this); + + if(ui->m_lpThumbnailView->selectionModel()->selectedIndexes().count() != 1) + return; + + menu.addAction(m_lpChangeDateAction); + menu.exec(ui->m_lpThumbnailView->mapToGlobal(pos)); +} + +void cMainWindow::onChangeDate() +{ + if(ui->m_lpThumbnailView->selectionModel()->selectedIndexes().count() != 1) + return; + + QModelIndex index = ui->m_lpThumbnailView->selectionModel()->selectedIndexes()[0]; + if(!index.isValid()) + return; + + cPicture* lpPicture = m_lpThumbnailFilterProxyModel->data(index, Qt::UserRole+1).value(); + + if(lpPicture->dateTime().isValid()) + { + cDateTimePicker dateTimePicker; + dateTimePicker.setWindowTitle("Date"); + dateTimePicker.setText(QString(tr("Please set a new date for \"%1\".").arg(lpPicture->filePath() + QDir::separator() + lpPicture->fileName()))); + dateTimePicker.setImage(lpPicture->thumbnail()); + + dateTimePicker.setDateTime(lpPicture->dateTime()); + if(dateTimePicker.exec() == QDialog::Rejected) + return; + + lpPicture->setDateTime(dateTimePicker.dateTime()); + + m_lpThumbnailFilterProxyModel->submit(); + } +} diff --git a/cmainwindow.h b/cmainwindow.h index 18276fb..a335687 100644 --- a/cmainwindow.h +++ b/cmainwindow.h @@ -77,6 +77,8 @@ private: enum { MaxRecentFiles = 5 }; /*!< TODO: describe */ QAction* m_lpRecentFileAction[MaxRecentFiles]; /*!< TODO: describe */ + QAction* m_lpChangeDateAction; /*!< TODO: describe */ + /*! \brief @@ -95,6 +97,12 @@ private: \fn createFileActions */ void createFileActions(); + /*! + \brief + + \fn createContextActions + */ + void createContextActions(); /*! \brief @@ -165,6 +173,21 @@ private slots: \fn onFileImport */ void onFileImport(); + + /*! + \brief + + \fn onThumbnailViewContextMenu + \param pos + */ + void onThumbnailViewContextMenu(const QPoint& pos); + + /*! + \brief + + \fn onChangeDate + */ + void onChangeDate(); }; #endif // CMAINWINDOW_H diff --git a/cmainwindow.ui b/cmainwindow.ui index 22fc0d0..8e8a9b5 100644 --- a/cmainwindow.ui +++ b/cmainwindow.ui @@ -39,6 +39,9 @@ 0 + + Qt::CustomContextMenu + true @@ -53,6 +56,9 @@ 0 + + Qt::CustomContextMenu + QAbstractItemView::NoEditTriggers