summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--profile-widget/divepixmapitem.cpp18
-rw-r--r--profile-widget/divepixmapitem.h7
-rw-r--r--profile-widget/profilewidget2.cpp17
-rw-r--r--profile-widget/profilewidget2.h3
4 files changed, 23 insertions, 22 deletions
diff --git a/profile-widget/divepixmapitem.cpp b/profile-widget/divepixmapitem.cpp
index 0e46519b6..91b7ac469 100644
--- a/profile-widget/divepixmapitem.cpp
+++ b/profile-widget/divepixmapitem.cpp
@@ -5,13 +5,9 @@
#include "core/qthelper.h"
#include "core/settings/qPrefDisplay.h"
#include "core/subsurface-qt/divelistnotifier.h"
-#ifndef SUBSURFACE_MOBILE
-#include "core/dive.h" // for displayed_dive
-#include "commands/command.h"
-#endif
#include <QDesktopServices>
-#include <QGraphicsView>
+#include <QPen>
#include <QUrl>
#include <QGraphicsSceneMouseEvent>
@@ -28,7 +24,7 @@ CloseButtonItem::CloseButtonItem(QGraphicsItem *parent): DivePixmapItem(parent)
void CloseButtonItem::mousePressEvent(QGraphicsSceneMouseEvent *)
{
- qgraphicsitem_cast<DivePictureItem*>(parentItem())->removePicture();
+ emit clicked();
}
DivePictureItem::DivePictureItem(QGraphicsItem *parent): DivePixmapItem(parent),
@@ -41,6 +37,7 @@ DivePictureItem::DivePictureItem(QGraphicsItem *parent): DivePixmapItem(parent),
setAcceptHoverEvents(true);
setScale(0.2);
connect(&diveListNotifier, &DiveListNotifier::settingsChanged, this, &DivePictureItem::settingsChanged);
+ connect(button, &CloseButtonItem::clicked, [this] () { emit removePicture(fileUrl); });
canvas->setPen(Qt::NoPen);
canvas->setBrush(QColor(Qt::white));
@@ -108,12 +105,3 @@ void DivePictureItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
if (event->button() == Qt::LeftButton)
QDesktopServices::openUrl(QUrl::fromLocalFile(localFilePath(fileUrl)));
}
-
-void DivePictureItem::removePicture()
-{
-#ifndef SUBSURFACE_MOBILE
- struct dive *d = get_dive_by_uniq_id(displayed_dive.id);
- if (d)
- Command::removePictures({ { d, { fileUrl.toStdString() } } });
-#endif
-}
diff --git a/profile-widget/divepixmapitem.h b/profile-widget/divepixmapitem.h
index 545ecb2ae..44c5dd88e 100644
--- a/profile-widget/divepixmapitem.h
+++ b/profile-widget/divepixmapitem.h
@@ -19,6 +19,8 @@ class CloseButtonItem : public DivePixmapItem {
Q_OBJECT
public:
CloseButtonItem(QGraphicsItem *parent = 0);
+signals:
+ void clicked();
private:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
};
@@ -30,10 +32,11 @@ public:
DivePictureItem(QGraphicsItem *parent = 0);
void setPixmap(const QPixmap& pix);
void setBaseZValue(double z);
+ void setFileUrl(const QString& s);
+signals:
+ void removePicture(const QString &fileUrl);
public slots:
void settingsChanged();
- void removePicture();
- void setFileUrl(const QString& s);
private:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp
index 09d1dc135..19819eae9 100644
--- a/profile-widget/profilewidget2.cpp
+++ b/profile-widget/profilewidget2.cpp
@@ -2091,17 +2091,19 @@ void ProfileWidget2::updateThumbnail(QString filename, QImage thumbnail, duratio
}
// Create a PictureEntry object and add its thumbnail to the scene if profile pictures are shown.
-ProfileWidget2::PictureEntry::PictureEntry(offset_t offsetIn, const QString &filenameIn, QGraphicsScene *scene, bool synchronous) : offset(offsetIn),
+ProfileWidget2::PictureEntry::PictureEntry(offset_t offsetIn, const QString &filenameIn, ProfileWidget2 *profile, bool synchronous) : offset(offsetIn),
duration(duration_t {0}),
filename(filenameIn),
thumbnail(new DivePictureItem)
{
+ QGraphicsScene *scene = profile->scene();
int size = Thumbnailer::defaultThumbnailSize();
scene->addItem(thumbnail.get());
thumbnail->setVisible(prefs.show_pictures_in_profile);
QImage img = Thumbnailer::instance()->fetchThumbnail(filename, synchronous).scaled(size, size, Qt::KeepAspectRatio);
thumbnail->setPixmap(QPixmap::fromImage(img));
thumbnail->setFileUrl(filename);
+ connect(thumbnail.get(), &DivePictureItem::removePicture, profile, &ProfileWidget2::removePicture);
}
// Define a default sort order for picture-entries: sort lexicographically by timestamp and filename.
@@ -2181,7 +2183,7 @@ void ProfileWidget2::plotPicturesInternal(const struct dive *d, bool synchronous
// Note that FOR_EACH_PICTURE handles d being null gracefully.
FOR_EACH_PICTURE(d) {
if (picture->offset.seconds > 0 && picture->offset.seconds <= d->duration.seconds)
- pictures.emplace_back(picture->offset, QString(picture->filename), scene(), synchronous);
+ pictures.emplace_back(picture->offset, QString(picture->filename), this, synchronous);
}
if (pictures.empty())
return;
@@ -2220,7 +2222,7 @@ void ProfileWidget2::picturesAdded(dive *d, QVector<PictureObj> pics)
for (const PictureObj &pic: pics) {
if (pic.offset.seconds > 0 && pic.offset.seconds <= d->duration.seconds) {
- pictures.emplace_back(pic.offset, QString::fromStdString(pic.filename), scene(), false);
+ pictures.emplace_back(pic.offset, QString::fromStdString(pic.filename), this, false);
updateThumbnailXPos(pictures.back());
}
}
@@ -2232,6 +2234,13 @@ void ProfileWidget2::picturesAdded(dive *d, QVector<PictureObj> pics)
calculatePictureYPositions();
}
+void ProfileWidget2::removePicture(const QString &fileUrl)
+{
+ struct dive *d = get_dive_by_uniq_id(displayed_dive.id);
+ if (d)
+ Command::removePictures({ { d, { fileUrl.toStdString() } } });
+}
+
void ProfileWidget2::profileChanged(dive *d)
{
if (!d || d->id != displayed_dive.id)
@@ -2323,7 +2332,7 @@ void ProfileWidget2::pictureOffsetChanged(dive *d, QString filename, offset_t of
// The parameters are passed directly to the contructor.
// The call returns an iterator to the new element (which might differ from
// the old iterator, since the buffer might have been reallocated).
- newPos = pictures.emplace(newPos, offset, filename, scene(), false);
+ newPos = pictures.emplace(newPos, offset, filename, this, false);
updateThumbnailXPos(*newPos);
calculatePictureYPositions();
}
diff --git a/profile-widget/profilewidget2.h b/profile-widget/profilewidget2.h
index fe54da3d9..272398095 100644
--- a/profile-widget/profilewidget2.h
+++ b/profile-widget/profilewidget2.h
@@ -118,6 +118,7 @@ slots: // Necessary to call from QAction's signals.
void updateThumbnail(QString filename, QImage thumbnail, duration_t duration);
void profileChanged(dive *d);
void pictureOffsetChanged(dive *d, QString filename, offset_t offset);
+ void removePicture(const QString &fileUrl);
/* this is called for every move on the handlers. maybe we can speed up this a bit? */
void recreatePlannedDive();
@@ -243,7 +244,7 @@ private:
std::unique_ptr<DivePictureItem> thumbnail;
// For videos with known duration, we represent the duration of the video by a line
std::unique_ptr<QGraphicsRectItem> durationLine;
- PictureEntry (offset_t offsetIn, const QString &filenameIn, QGraphicsScene *scene, bool synchronous);
+ PictureEntry (offset_t offsetIn, const QString &filenameIn, ProfileWidget2 *profile, bool synchronous);
bool operator< (const PictureEntry &e) const;
};
void updateThumbnailXPos(PictureEntry &e);