diff options
Diffstat (limited to 'desktop-widgets/tab-widgets/TabDivePhotos.cpp')
-rw-r--r-- | desktop-widgets/tab-widgets/TabDivePhotos.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/desktop-widgets/tab-widgets/TabDivePhotos.cpp b/desktop-widgets/tab-widgets/TabDivePhotos.cpp new file mode 100644 index 000000000..7f8b3a8b0 --- /dev/null +++ b/desktop-widgets/tab-widgets/TabDivePhotos.cpp @@ -0,0 +1,98 @@ +#include "TabDivePhotos.h" +#include "ui_TabDivePhotos.h" + +#include <qt-models/divepicturemodel.h> + +#include <QDesktopServices> +#include <QContextMenuEvent> +#include <QMenu> +#include <QUrl> +#include <QMessageBox> + +//TODO: Remove those in the future. +#include "../mainwindow.h" +#include "../divelistview.h" + +TabDivePhotos::TabDivePhotos(QWidget *parent) + : TabBase(parent), + ui(new Ui::TabDivePhotos()), + divePictureModel(DivePictureModel::instance()) +{ + ui->setupUi(this); + ui->photosView->setModel(divePictureModel); + ui->photosView->setSelectionMode(QAbstractItemView::MultiSelection); + + connect(ui->photosView, &DivePictureWidget::photoDoubleClicked, + [](const QString& path) { + QDesktopServices::openUrl(QUrl::fromLocalFile(path)); + } + ); +} + +TabDivePhotos::~TabDivePhotos() +{ + delete ui; +} + +void TabDivePhotos::clear() +{ + updateData(); +} + +void TabDivePhotos::contextMenuEvent(QContextMenuEvent *event) +{ + QMenu popup(this); + popup.addAction(tr("Load image(s) from file(s)"), this, &TabDivePhotos::addPhotosFromFile); + popup.addAction(tr("Load image(s) from web"), this, &TabDivePhotos::addPhotosFromURL); + popup.addSeparator(); + popup.addAction(tr("Delete selected images"), this, &TabDivePhotos::removeSelectedPhotos); + popup.addAction(tr("Delete all images"), this, &TabDivePhotos::removeAllPhotos); + popup.exec(event->globalPos()); + event->accept(); +} + +void TabDivePhotos::removeSelectedPhotos() +{ + bool last = false; + if (!ui->photosView->selectionModel()->hasSelection()) + return; + QModelIndexList indexes = ui->photosView->selectionModel()->selectedRows(); + if (indexes.count() == 0) + indexes = ui->photosView->selectionModel()->selectedIndexes(); + QModelIndex photo = indexes.first(); + do { + photo = indexes.first(); + last = indexes.count() == 1; + if (photo.isValid()) { + QString fileUrl = photo.data(Qt::DisplayPropertyRole).toString(); + if (fileUrl.length() > 0) + DivePictureModel::instance()->removePicture(fileUrl, last); + } + indexes.removeFirst(); + } while(!indexes.isEmpty()); +} + +//TODO: This looks overly wrong. We shouldn't call MainWindow to retrieve the DiveList to add Images. +void TabDivePhotos::addPhotosFromFile() +{ + MainWindow::instance()->dive_list()->loadImages(); +} + +void TabDivePhotos::addPhotosFromURL() +{ + MainWindow::instance()->dive_list()->loadWebImages(); +} + +void TabDivePhotos::removeAllPhotos() +{ + if (QMessageBox::warning(this, tr("Deleting Images"), tr("Are you sure you want to delete all images?"), QMessageBox::Cancel | QMessageBox::Ok, QMessageBox::Cancel) != QMessageBox::Cancel ) { + ui->photosView->selectAll(); + removeSelectedPhotos(); + } +} + +void TabDivePhotos::updateData() +{ + divePictureModel->updateDivePictures(); +} + |