summaryrefslogtreecommitdiffstats
path: root/profile-widget
diff options
context:
space:
mode:
Diffstat (limited to 'profile-widget')
-rw-r--r--profile-widget/divepixmapitem.cpp7
-rw-r--r--profile-widget/profilewidget2.cpp31
-rw-r--r--profile-widget/profilewidget2.h4
3 files changed, 32 insertions, 10 deletions
diff --git a/profile-widget/divepixmapitem.cpp b/profile-widget/divepixmapitem.cpp
index 611f3f76a..7b2c9cc87 100644
--- a/profile-widget/divepixmapitem.cpp
+++ b/profile-widget/divepixmapitem.cpp
@@ -1,12 +1,13 @@
// SPDX-License-Identifier: GPL-2.0
#include "profile-widget/divepixmapitem.h"
#include "profile-widget/animationfunctions.h"
-#include "qt-models/divepicturemodel.h"
#include "core/pref.h"
#include "core/qthelper.h"
#include "core/settings/qPrefDisplay.h"
#ifndef SUBSURFACE_MOBILE
#include "desktop-widgets/preferences/preferencesdialog.h"
+#include "core/dive.h" // for displayed_dive
+#include "commands/command.h"
#endif
#include <QDesktopServices>
@@ -123,6 +124,8 @@ void DivePictureItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
void DivePictureItem::removePicture()
{
#ifndef SUBSURFACE_MOBILE
- DivePictureModel::instance()->removePictures({ fileUrl });
+ struct dive *d = get_dive_by_uniq_id(displayed_dive.id);
+ if (d)
+ Command::removePictures({ { d, { fileUrl.toStdString() } } });
#endif
}
diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp
index cea5a50f0..e1a0415ea 100644
--- a/profile-widget/profilewidget2.cpp
+++ b/profile-widget/profilewidget2.cpp
@@ -169,9 +169,8 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) : QGraphicsView(parent),
addActionShortcut(Qt::Key_Right, &ProfileWidget2::keyRightAction);
connect(Thumbnailer::instance(), &Thumbnailer::thumbnailChanged, this, &ProfileWidget2::updateThumbnail, Qt::QueuedConnection);
- connect(DivePictureModel::instance(), &DivePictureModel::rowsInserted, this, &ProfileWidget2::plotPictures);
- connect(DivePictureModel::instance(), &DivePictureModel::picturesRemoved, this, &ProfileWidget2::removePictures);
- connect(DivePictureModel::instance(), &DivePictureModel::modelReset, this, &ProfileWidget2::plotPictures);
+ connect(&diveListNotifier, &DiveListNotifier::picturesRemoved, this, &ProfileWidget2::picturesRemoved);
+ connect(&diveListNotifier, &DiveListNotifier::picturesAdded, this, &ProfileWidget2::picturesAdded);
connect(&diveListNotifier, &DiveListNotifier::cylinderEdited, this, &ProfileWidget2::profileChanged);
connect(&diveListNotifier, &DiveListNotifier::eventsChanged, this, &ProfileWidget2::profileChanged);
connect(&diveListNotifier, &DiveListNotifier::pictureOffsetChanged, this, &ProfileWidget2::pictureOffsetChanged);
@@ -2147,11 +2146,10 @@ void ProfileWidget2::plotPicturesInternal(const struct dive *d, bool synchronous
}
// Remove the pictures with the given filenames from the profile plot.
-// TODO: This does not check for the fact that the same image may be attributed
-// to different dives! Deleting the picture from one dive may therefore remove
-// it from the profile of a different dive.
-void ProfileWidget2::removePictures(const QVector<QString> &fileUrls)
+void ProfileWidget2::picturesRemoved(dive *d, QVector<QString> fileUrls)
{
+ if (d->id != displayed_dive.id)
+ return;
// To remove the pictures, we use the std::remove_if() algorithm.
// std::remove_if() does not actually delete the elements, but moves
// them to the end of the given range. It returns an iterator to the
@@ -2165,6 +2163,25 @@ void ProfileWidget2::removePictures(const QVector<QString> &fileUrls)
calculatePictureYPositions();
}
+void ProfileWidget2::picturesAdded(dive *d, QVector<PictureObj> pics)
+{
+ if (d->id != displayed_dive.id)
+ return;
+
+ 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);
+ updateThumbnailXPos(pictures.back());
+ }
+ }
+
+ // Sort pictures by timestamp (and filename if equal timestamps).
+ // This will allow for proper location of the pictures on the profile plot.
+ std::sort(pictures.begin(), pictures.end());
+
+ calculatePictureYPositions();
+}
+
void ProfileWidget2::profileChanged(dive *d)
{
if (!d || d->id != displayed_dive.id)
diff --git a/profile-widget/profilewidget2.h b/profile-widget/profilewidget2.h
index 039424d87..e6f06a7b2 100644
--- a/profile-widget/profilewidget2.h
+++ b/profile-widget/profilewidget2.h
@@ -20,6 +20,7 @@
#include "profile-widget/diveprofileitem.h"
#include "core/display.h"
#include "core/color.h"
+#include "core/pictureobj.h"
#include "core/units.h"
class RulerItem2;
@@ -110,7 +111,8 @@ slots: // Necessary to call from QAction's signals.
void setProfileState();
#ifndef SUBSURFACE_MOBILE
void plotPictures();
- void removePictures(const QVector<QString> &fileUrls);
+ void picturesRemoved(dive *d, QVector<QString> filenames);
+ void picturesAdded(dive *d, QVector<PictureObj> pics);
void setPlanState();
void setAddState();
void pointInserted(const QModelIndex &parent, int start, int end);