aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-models/divepicturemodel.cpp32
-rw-r--r--qt-models/divepicturemodel.h6
2 files changed, 24 insertions, 14 deletions
diff --git a/qt-models/divepicturemodel.cpp b/qt-models/divepicturemodel.cpp
index aab0e7f6f..799c49c0e 100644
--- a/qt-models/divepicturemodel.cpp
+++ b/qt-models/divepicturemodel.cpp
@@ -43,7 +43,7 @@ void DivePictureModel::updateThumbnails()
{
updateZoom();
for (PictureEntry &entry: pictures)
- entry.image = Thumbnailer::instance()->fetchThumbnail(entry.filename, false);
+ entry.image = Thumbnailer::instance()->fetchThumbnail(QString::fromStdString(entry.filename), false);
}
void DivePictureModel::updateDivePictures()
@@ -87,13 +87,13 @@ QVariant DivePictureModel::data(const QModelIndex &index, int role) const
if (index.column() == 0) {
switch (role) {
case Qt::ToolTipRole:
- return entry.filename;
+ return QString::fromStdString(entry.filename);
case Qt::DecorationRole:
return entry.image.scaled(size, size, Qt::KeepAspectRatio);
case Qt::DisplayRole:
- return QFileInfo(entry.filename).fileName();
+ return QFileInfo(QString::fromStdString(entry.filename)).fileName();
case Qt::DisplayPropertyRole:
- return QFileInfo(entry.filename).filePath();
+ return QFileInfo(QString::fromStdString(entry.filename)).filePath();
case Qt::UserRole:
return entry.diveId;
case Qt::UserRole + 1:
@@ -104,7 +104,7 @@ QVariant DivePictureModel::data(const QModelIndex &index, int role) const
} else if (index.column() == 1) {
switch (role) {
case Qt::DisplayRole:
- return entry.filename;
+ return QString::fromStdString(entry.filename);
}
}
return QVariant();
@@ -122,11 +122,17 @@ static bool removePictureFromSelectedDive(const char *fileUrl)
return false;
}
-void DivePictureModel::removePictures(const QVector<QString> &fileUrls)
+void DivePictureModel::removePictures(const QVector<QString> &fileUrlsIn)
{
+ // Transform vector of QStrings into vector of std::strings
+ std::vector<std::string> fileUrls;
+ fileUrls.reserve(fileUrlsIn.size());
+ std::transform(fileUrlsIn.begin(), fileUrlsIn.end(), std::back_inserter(fileUrls),
+ [] (const QString &s) { return s.toStdString(); });
+
bool removed = false;
- for (const QString &fileUrl: fileUrls)
- removed |= removePictureFromSelectedDive(qPrintable(fileUrl));
+ for (const std::string &fileUrl: fileUrls)
+ removed |= removePictureFromSelectedDive(fileUrl.c_str());
if (!removed)
return;
copy_dive(current_dive, &displayed_dive);
@@ -148,7 +154,7 @@ void DivePictureModel::removePictures(const QVector<QString> &fileUrls)
pictures.erase(pictures.begin() + i, pictures.begin() + j);
endRemoveRows();
}
- emit picturesRemoved(fileUrls);
+ emit picturesRemoved(fileUrlsIn);
}
int DivePictureModel::rowCount(const QModelIndex&) const
@@ -156,7 +162,7 @@ int DivePictureModel::rowCount(const QModelIndex&) const
return pictures.count();
}
-int DivePictureModel::findPictureId(const QString &filename)
+int DivePictureModel::findPictureId(const std::string &filename)
{
for (int i = 0; i < pictures.size(); ++i)
if (pictures[i].filename == filename)
@@ -193,7 +199,7 @@ static void addDurationToThumbnail(QImage &img, duration_t duration)
void DivePictureModel::updateThumbnail(QString filename, QImage thumbnail, duration_t duration)
{
- int i = findPictureId(filename);
+ int i = findPictureId(filename.toStdString());
if (i >= 0) {
if (duration.seconds > 0) {
addDurationToThumbnail(thumbnail, duration); // If we know the duration paint it on top of the thumbnail
@@ -204,8 +210,10 @@ void DivePictureModel::updateThumbnail(QString filename, QImage thumbnail, durat
}
}
-void DivePictureModel::updateDivePictureOffset(int diveId, const QString &filename, int offsetSeconds)
+void DivePictureModel::updateDivePictureOffset(int diveId, const QString &filenameIn, int offsetSeconds)
{
+ std::string filename = filenameIn.toStdString();
+
// Find the pictures of the given dive.
auto from = std::find_if(pictures.begin(), pictures.end(), [diveId](const PictureEntry &e) { return e.diveId == diveId; });
auto to = std::find_if(from, pictures.end(), [diveId](const PictureEntry &e) { return e.diveId != diveId; });
diff --git a/qt-models/divepicturemodel.h b/qt-models/divepicturemodel.h
index 5bee26864..1ed5e8095 100644
--- a/qt-models/divepicturemodel.h
+++ b/qt-models/divepicturemodel.h
@@ -8,9 +8,11 @@
#include <QImage>
#include <QFuture>
+// We use std::string instead of QString to use the same character-encoding
+// as in the C core (UTF-8). This is crucial to guarantee the same sort-order.
struct PictureEntry {
int diveId;
- QString filename;
+ std::string filename;
QImage image;
int offsetSeconds;
duration_t length;
@@ -34,7 +36,7 @@ public slots:
private:
DivePictureModel();
QVector<PictureEntry> pictures;
- int findPictureId(const QString &filename); // Return -1 if not found
+ int findPictureId(const std::string &filename); // Return -1 if not found
double zoomLevel; // -1.0: minimum, 0.0: standard, 1.0: maximum
int size;
void updateThumbnails();