summaryrefslogtreecommitdiffstats
path: root/qt-models
diff options
context:
space:
mode:
Diffstat (limited to 'qt-models')
-rw-r--r--qt-models/cylindermodel.cpp1
-rw-r--r--qt-models/divelocationmodel.cpp69
-rw-r--r--qt-models/divelocationmodel.h5
3 files changed, 63 insertions, 12 deletions
diff --git a/qt-models/cylindermodel.cpp b/qt-models/cylindermodel.cpp
index 129f25a6c..9796907cf 100644
--- a/qt-models/cylindermodel.cpp
+++ b/qt-models/cylindermodel.cpp
@@ -29,7 +29,6 @@ QVariant CylindersModel::headerData(int section, Qt::Orientation orientation, in
CylindersModel *CylindersModel::instance()
{
-
static CylindersModel self;
return &self;
}
diff --git a/qt-models/divelocationmodel.cpp b/qt-models/divelocationmodel.cpp
index 2ce2e0a3e..b9bf5702b 100644
--- a/qt-models/divelocationmodel.cpp
+++ b/qt-models/divelocationmodel.cpp
@@ -3,6 +3,8 @@
#include "qt-models/divelocationmodel.h"
#include "core/qthelper.h"
#include "core/divesite.h"
+#include "core/metrics.h"
+#include "cleanertablemodel.h" // for trashIcon();
#include <QDebug>
#include <QLineEdit>
#include <QIcon>
@@ -23,16 +25,57 @@ LocationInformationModel::LocationInformationModel(QObject *obj) : QAbstractTabl
{
}
-int LocationInformationModel::columnCount(const QModelIndex&) const
+int LocationInformationModel::columnCount(const QModelIndex &) const
{
return COLUMNS;
}
-int LocationInformationModel::rowCount(const QModelIndex&) const
+int LocationInformationModel::rowCount(const QModelIndex &) const
{
return dive_site_table.nr;
}
+QVariant LocationInformationModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ if (orientation == Qt::Vertical)
+ return QVariant();
+
+ switch (role) {
+ case Qt::TextAlignmentRole:
+ return int(Qt::AlignLeft | Qt::AlignVCenter);
+ case Qt::FontRole:
+ return defaultModelFont();
+ case Qt::InitialSortOrderRole:
+ // By default, sort number of dives descending, everything else ascending.
+ return section == NUM_DIVES ? Qt::DescendingOrder : Qt::AscendingOrder;
+ case Qt::DisplayRole:
+ case Qt::ToolTipRole:
+ switch (section) {
+ case NAME:
+ return tr("Name");
+ case DESCRIPTION:
+ return tr("Description");
+ case NUM_DIVES:
+ return tr("# of dives");
+ }
+ break;
+ }
+
+ return QVariant();
+}
+
+Qt::ItemFlags LocationInformationModel::flags(const QModelIndex &index) const
+{
+ switch (index.column()) {
+ case REMOVE:
+ return Qt::ItemIsEnabled;
+ case NAME:
+ case DESCRIPTION:
+ return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
+ }
+ return QAbstractItemModel::flags(index);
+}
+
QVariant LocationInformationModel::getDiveSiteData(const struct dive_site *ds, int column, int role)
{
if (!ds)
@@ -40,10 +83,11 @@ QVariant LocationInformationModel::getDiveSiteData(const struct dive_site *ds, i
switch(role) {
case Qt::EditRole:
- case Qt::DisplayRole :
+ case Qt::DisplayRole:
switch(column) {
case DIVESITE: return QVariant::fromValue<dive_site *>((dive_site *)ds); // Not nice: casting away const
case NAME: return ds->name;
+ case NUM_DIVES: return ds->dives.nr;
case LATITUDE: return ds->location.lat.udeg;
case LONGITUDE: return ds->location.lon.udeg;
case COORDS: return "TODO";
@@ -54,12 +98,19 @@ QVariant LocationInformationModel::getDiveSiteData(const struct dive_site *ds, i
case TAXONOMY_3: return "TODO";
}
break;
- case Qt::DecorationRole : {
- if (dive_site_has_gps_location(ds))
- return QIcon(":geotag-icon");
- else
- return QVariant();
- }
+ case Qt::ToolTipRole:
+ switch(column) {
+ case REMOVE: return tr("Clicking here will remove this divesite.");
+ }
+ break;
+ case Qt::DecorationRole:
+ switch(column) {
+#ifndef SUBSURFACE_MOBILE
+ case REMOVE: return trashIcon();
+#endif
+ case NAME: return dive_site_has_gps_location(ds) ? QIcon(":geotag-icon") : QVariant();
+ }
+ break;
case DIVESITE_ROLE:
return QVariant::fromValue<dive_site *>((dive_site *)ds); // Not nice: casting away const
}
diff --git a/qt-models/divelocationmodel.h b/qt-models/divelocationmodel.h
index 407031590..4840bff21 100644
--- a/qt-models/divelocationmodel.h
+++ b/qt-models/divelocationmodel.h
@@ -5,7 +5,6 @@
#include <QAbstractTableModel>
#include <QStringListModel>
#include <QSortFilterProxyModel>
-#include <stdint.h>
#include "core/units.h"
#define RECENTLY_ADDED_DIVESITE ((struct dive_site *)~0)
@@ -15,7 +14,7 @@ Q_OBJECT
public:
// Common columns, roles and accessor function for all dive-site models.
// Thus, different views can connect to different models.
- enum Columns { DIVESITE, NAME, LATITUDE, LONGITUDE, COORDS, DESCRIPTION, NOTES, TAXONOMY_1, TAXONOMY_2, TAXONOMY_3, COLUMNS};
+ enum Columns { REMOVE, NAME, DESCRIPTION, NUM_DIVES, COORDS, NOTES, LATITUDE, LONGITUDE, DIVESITE, TAXONOMY_1, TAXONOMY_2, TAXONOMY_3, COLUMNS};
enum Roles { DIVESITE_ROLE = Qt::UserRole + 1 };
static QVariant getDiveSiteData(const struct dive_site *ds, int column, int role);
@@ -25,6 +24,8 @@ public:
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index = QModelIndex(), int role = Qt::DisplayRole) const;
bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
public slots:
void update();