diff options
author | Willem Ferguson <willemferguson@zoology.up.ac.za> | 2016-11-19 14:23:54 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2016-11-24 09:58:16 +0900 |
commit | 1fa855e1c091175afcdb0cc4a3395d3aecb96d1c (patch) | |
tree | 1f127c399e6f1f0cb367fba602c3b6045970f653 | |
parent | 2aeb2b8d8b045b317efa595aabb356680dbf4978 (diff) | |
download | subsurface-1fa855e1c091175afcdb0cc4a3395d3aecb96d1c.tar.gz |
Provide photos summary on dive list
1) Add an extra column to dive list, just left of Locality field.
2) For each dive, give summary of photos as follows:
i) no photos: no icon in that column
ii) photos taken during dive: show icon of fish
iii) photos taken before/after dive: show icon of sun
iv) photos taken during as well as before/after dive: show
icon with both fish and sun
3) Provide information for the sort operation to work on
this column of the dive list.
Signed-off-by: Willem Ferguson <willemferguson@zoology.up.ac.za>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | desktop-widgets/divelistview.cpp | 7 | ||||
-rw-r--r-- | icons/duringPhoto.png | bin | 0 -> 5352 bytes | |||
-rw-r--r-- | icons/inAndOutPhoto.png | bin | 0 -> 5520 bytes | |||
-rw-r--r-- | icons/outsidePhoto.png | bin | 0 -> 3032 bytes | |||
-rw-r--r-- | qt-models/divetripmodel.cpp | 50 | ||||
-rw-r--r-- | qt-models/divetripmodel.h | 5 | ||||
-rw-r--r-- | subsurface.qrc | 5 |
7 files changed, 62 insertions, 5 deletions
diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp index 0c1ea91e7..081cd93be 100644 --- a/desktop-widgets/divelistview.cpp +++ b/desktop-widgets/divelistview.cpp @@ -24,8 +24,8 @@ #include "core/metrics.h" #include "core/helpers.h" -// # Date Rtg Dpth Dur Tmp Wght Suit Cyl Gas SAC OTU CNS Loc -static int defaultWidth[] = { 70, 140, 90, 50, 50, 50, 50, 70, 50, 50, 70, 50, 50, 500}; +// # Date Rtg Dpth Dur Tmp Wght Suit Cyl Gas SAC OTU CNS Px Loc +static int defaultWidth[] = { 70, 140, 90, 50, 50, 50, 50, 70, 50, 50, 70, 50, 50, 25, 500}; DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false), sortColumn(0), currentOrder(Qt::DescendingOrder), dontEmitDiveChangedSignal(false), selectionSaved(false) @@ -81,6 +81,9 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec case DiveTripModel::SAC: sw = 7*em; break; + case DiveTripModel::PHOTOS: + sw = 5*em; + break; case DiveTripModel::LOCATION: sw = 50*em; break; diff --git a/icons/duringPhoto.png b/icons/duringPhoto.png Binary files differnew file mode 100644 index 000000000..6984b3041 --- /dev/null +++ b/icons/duringPhoto.png diff --git a/icons/inAndOutPhoto.png b/icons/inAndOutPhoto.png Binary files differnew file mode 100644 index 000000000..cbbc112de --- /dev/null +++ b/icons/inAndOutPhoto.png diff --git a/icons/outsidePhoto.png b/icons/outsidePhoto.png Binary files differnew file mode 100644 index 000000000..8976bb7b4 --- /dev/null +++ b/icons/outsidePhoto.png diff --git a/qt-models/divetripmodel.cpp b/qt-models/divetripmodel.cpp index e0f95b0b3..c7a7e9001 100644 --- a/qt-models/divetripmodel.cpp +++ b/qt-models/divetripmodel.cpp @@ -22,6 +22,7 @@ static QVariant dive_table_alignment(int column) case DiveTripModel::TOTALWEIGHT: case DiveTripModel::SAC: case DiveTripModel::OTU: + case DiveTripModel::PHOTOS: case DiveTripModel::MAXCNS: // Right align numeric columns retVal = int(Qt::AlignRight | Qt::AlignVCenter); @@ -80,6 +81,8 @@ QVariant TripItem::data(int column, int role) const QVariant DiveItem::data(int column, int role) const { QVariant retVal; + int iconIndex; + QString icon_names[4] = {":zero",":duringPhoto", ":outsidePhoto", ":inAndOutPhoto" }; struct dive *dive = get_dive_by_uniq_id(diveId); if (!dive) return QVariant(); @@ -130,6 +133,9 @@ QVariant DiveItem::data(int column, int role) const case MAXCNS: retVal = dive->maxcns; break; + case PHOTOS: + retVal = countPhotos(dive); + break; case LOCATION: retVal = QString(get_dive_location(dive)); break; @@ -171,6 +177,8 @@ QVariant DiveItem::data(int column, int role) const case MAXCNS: retVal = dive->maxcns; break; + case PHOTOS: + break; case LOCATION: retVal = QString(get_dive_location(dive)); break; @@ -182,11 +190,21 @@ QVariant DiveItem::data(int column, int role) const } break; case Qt::DecorationRole: - if (column == LOCATION) + switch (column) { + case LOCATION: if (dive_has_gps_location(dive)) { IconMetrics im = defaultIconMetrics(); - retVal = QIcon(":satellite").pixmap(im.sz_small, im.sz_small); + retVal = QIcon(":globe-icon").pixmap(im.sz_small, im.sz_small); } + break; + case PHOTOS: // if enabled, show photos icon: fish= photos during dive; sun=photos before/after dive + if (dive->picture_list) // sun+fish=photos during dive as well as before/after + { + IconMetrics im = defaultIconMetrics(); + retVal = QIcon(icon_names[countPhotos(dive)]).pixmap(im.sz_small, im.sz_small); + } + break; + } break; case Qt::ToolTipRole: switch (column) { @@ -231,6 +249,9 @@ QVariant DiveItem::data(int column, int role) const case MAXCNS: retVal = tr("Max CNS"); break; + case PHOTOS: + retVal = tr("Photos before/during/after dive"); + break; case LOCATION: retVal = tr("Location"); break; @@ -301,6 +322,25 @@ QString DiveItem::displayDepthWithUnit() const return get_depth_string(dive->maxdepth, true); } +int DiveItem::countPhotos(dive *dive) const +{ + int diveDuration = dive->duration.seconds; + int pic_offset, icon_index = 0; + struct picture *pic_list = dive->picture_list; // Point to 1st picture of dive + if (!pic_list) return 0; // This dive does not contain pictures + do { + pic_offset = pic_list->offset.seconds; + if ((pic_offset < 0) | (pic_offset > diveDuration)) { + icon_index |= 0x02; // If picture is before/after the dive + } // then set the appropriate bit ... + else { + icon_index |= 0x01; // else set the bit for picture during the dive + } + pic_list = pic_list->next; // look at next photo + } while (pic_list); + return icon_index; // return value: 0=no pictures; 1=pictures during dive; +} // 2=pictures before/after; 3=pictures during as well as before/after + QString DiveItem::displayDuration() const { int hrs, mins, fullmins, secs; @@ -430,6 +470,9 @@ QVariant DiveTripModel::headerData(int section, Qt::Orientation orientation, int case MAXCNS: ret = tr("Max CNS"); break; + case PHOTOS: + ret = tr("█"); + break; case LOCATION: ret = tr("Location"); break; @@ -478,6 +521,9 @@ QVariant DiveTripModel::headerData(int section, Qt::Orientation orientation, int case MAXCNS: ret = tr("Max CNS"); break; + case PHOTOS: + ret = tr("Photos before/during/after dive"); + break; case LOCATION: ret = tr("Location"); break; diff --git a/qt-models/divetripmodel.h b/qt-models/divetripmodel.h index 7844d813f..01626448f 100644 --- a/qt-models/divetripmodel.h +++ b/qt-models/divetripmodel.h @@ -3,6 +3,7 @@ #include "treemodel.h" #include "core/dive.h" +#include <string> struct DiveItem : public TreeItem { Q_DECLARE_TR_FUNCTIONS(TripItem) @@ -21,6 +22,7 @@ public: SAC, OTU, MAXCNS, + PHOTOS, LOCATION, COLUMNS }; @@ -36,7 +38,9 @@ public: QString displayTemperature() const; QString displayWeight() const; QString displaySac() const; + int countPhotos(dive *dive) const; int weight() const; + QString icon_names[4]; }; struct TripItem : public TreeItem { @@ -63,6 +67,7 @@ public: SAC, OTU, MAXCNS, + PHOTOS, LOCATION, COLUMNS }; diff --git a/subsurface.qrc b/subsurface.qrc index 2f58782cf..dc73ad454 100644 --- a/subsurface.qrc +++ b/subsurface.qrc @@ -74,7 +74,10 @@ <file alias="filter-hide">icons/go-top.svg</file> <file alias="filter-close">icons/process-stop.svg</file> <file alias="edit">icons/edit-circled.svg</file> - <file alias="satellite">icons/Emblem-earth.svg</file> + <file alias="globe-icon">icons/Emblem-earth.svg</file> <file alias="geocode">icons/geocode.svg</file> + <file alias="duringPhoto">icons/duringPhoto.png</file> + <file alias="outsidePhoto">icons/outsidePhoto.png</file> + <file alias="inAndOutPhoto">icons/inAndOutPhoto.png</file> </qresource> </RCC> |