Dive pictures: Don't update all pictures on drag & drop to profile

In the old code, we used to reload the whole picture list on drag & drop
to the profile. Instead, only update the drag&dropped picture and repaint
the profile-pictures.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2018-05-01 12:35:18 +02:00 committed by Dirk Hohndel
parent d33e3b22fc
commit c71a5d7413
3 changed files with 25 additions and 7 deletions

View file

@ -2060,14 +2060,14 @@ void ProfileWidget2::dropEvent(QDropEvent *event)
if (QString(picture->filename) == filename) {
picture->offset.seconds = lrint(timeAxis->valueAt(mappedPos));
mark_divelist_changed(true);
#ifndef SUBSURFACE_MOBILE
DivePictureModel::instance()->updateDivePictureOffset(filename, picture->offset.seconds);
plotPictures();
#endif
break;
}
}
copy_dive(current_dive, &displayed_dive);
#ifndef SUBSURFACE_MOBILE
DivePictureModel::instance()->updateDivePictures();
#endif
if (event->source() == this) {
event->setDropAction(Qt::MoveAction);

View file

@ -153,12 +153,28 @@ int DivePictureModel::rowCount(const QModelIndex &parent) const
return pictures.count();
}
int DivePictureModel::findPictureId(const QString &filename)
{
for (int i = 0; i < pictures.size(); ++i)
if (pictures[i].filename == filename)
return i;
return -1;
}
void DivePictureModel::updateThumbnail(QString filename, QImage thumbnail)
{
for (int i = 0; i < pictures.size(); ++i) {
if (pictures[i].filename != filename)
continue;
int i = findPictureId(filename);
if (i >= 0) {
pictures[i].image = thumbnail;
emit dataChanged(createIndex(i, 0), createIndex(i, 1));
}
}
void DivePictureModel::updateDivePictureOffset(const QString &filename, int offsetSeconds)
{
int i = findPictureId(filename);
if (i >= 0) {
pictures[i].offsetSeconds = offsetSeconds;
emit dataChanged(createIndex(i, 0), createIndex(i, 1));
}
}

View file

@ -24,12 +24,14 @@ public:
void updateDivePicturesWhenDone(QList<QFuture<void>>);
void removePicture(const QString& fileUrl, bool last);
int rowDDStart, rowDDEnd;
void updateDivePictureOffset(const QString &filename, int offsetSeconds);
public slots:
void setZoomLevel(int level);
void updateThumbnail(QString filename, QImage thumbnail);
private:
DivePictureModel();
QList<PictureEntry> pictures;
int findPictureId(const QString &filename); // Return -1 if not found
double zoomLevel; // -1.0: minimum, 0.0: standard, 1.0: maximum
int size;
int defaultSize;