diff options
Diffstat (limited to 'qt-models')
-rw-r--r-- | qt-models/cylindermodel.cpp | 1 | ||||
-rw-r--r-- | qt-models/divelocationmodel.cpp | 69 | ||||
-rw-r--r-- | qt-models/divelocationmodel.h | 5 |
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(); |