summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/tab-widgets/TabDivePhotos.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'desktop-widgets/tab-widgets/TabDivePhotos.cpp')
-rw-r--r--desktop-widgets/tab-widgets/TabDivePhotos.cpp98
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();
+}
+