aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-05-06 22:25:48 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2020-05-07 08:46:15 -0700
commit7a443423bc633d8ea085879f9ad675cb134cc93c (patch)
tree6c2d0025273594257530a63a54f3cf3c1990af22
parent2ff459c35691f1548cc8a587cd437f5215f8ccc1 (diff)
downloadsubsurface-7a443423bc633d8ea085879f9ad675cb134cc93c.tar.gz
cleanup: generalize ExtraDataModel to display data of any dc
The goal here is to remove a dependency on displayed_dive. While doing so, make the model more general and display any dc. Pass in the dc of the current dive instead of displayed dive, since all other tabs are already converted to show data of the current dive. The QStrings are cached since we generate them anyway, so we may just keep them. Thus, there is no danger of the dc becoming invalid. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r--desktop-widgets/tab-widgets/TabDiveExtraInfo.cpp8
-rw-r--r--qt-models/divecomputerextradatamodel.cpp26
-rw-r--r--qt-models/divecomputerextradatamodel.h10
3 files changed, 23 insertions, 21 deletions
diff --git a/desktop-widgets/tab-widgets/TabDiveExtraInfo.cpp b/desktop-widgets/tab-widgets/TabDiveExtraInfo.cpp
index caf7c99bf..c078b7e40 100644
--- a/desktop-widgets/tab-widgets/TabDiveExtraInfo.cpp
+++ b/desktop-widgets/tab-widgets/TabDiveExtraInfo.cpp
@@ -1,12 +1,13 @@
// SPDX-License-Identifier: GPL-2.0
#include "TabDiveExtraInfo.h"
#include "ui_TabDiveExtraInfo.h"
+#include "core/dive.h"
#include "qt-models/divecomputerextradatamodel.h"
TabDiveExtraInfo::TabDiveExtraInfo(QWidget *parent) :
TabBase(parent),
ui(new Ui::TabDiveExtraInfo()),
- extraDataModel(new ExtraDataModel())
+ extraDataModel(new ExtraDataModel(this))
{
ui->setupUi(this);
ui->extraData->setModel(extraDataModel);
@@ -19,11 +20,10 @@ TabDiveExtraInfo::~TabDiveExtraInfo()
void TabDiveExtraInfo::updateData()
{
- extraDataModel->updateDive();
+ extraDataModel->updateDiveComputer(current_dc);
}
void TabDiveExtraInfo::clear()
{
- extraDataModel->updateDive();
+ extraDataModel->clear();
}
-
diff --git a/qt-models/divecomputerextradatamodel.cpp b/qt-models/divecomputerextradatamodel.cpp
index e322a70a8..ef16a30f2 100644
--- a/qt-models/divecomputerextradatamodel.cpp
+++ b/qt-models/divecomputerextradatamodel.cpp
@@ -4,8 +4,7 @@
#include "core/metrics.h"
-ExtraDataModel::ExtraDataModel(QObject *parent) : CleanerTableModel(parent),
- rows(0)
+ExtraDataModel::ExtraDataModel(QObject *parent) : CleanerTableModel(parent)
{
//enum Column {KEY, VALUE};
setHeaderDataStrings(QStringList() << tr("Key") << tr("Value"));
@@ -14,18 +13,15 @@ ExtraDataModel::ExtraDataModel(QObject *parent) : CleanerTableModel(parent),
void ExtraDataModel::clear()
{
beginResetModel();
- rows = 0;
+ items.clear();
endResetModel();
}
QVariant ExtraDataModel::data(const QModelIndex &index, int role) const
{
- struct extra_data *ed = get_dive_dc(&displayed_dive, dc_number)->extra_data;
- int i = -1;
- while (ed && ++i < index.row())
- ed = ed->next;
- if (!ed)
+ if (!index.isValid() || index.row() > (int)items.size())
return QVariant();
+ const Item &item = items[index.row()];
switch (role) {
case Qt::FontRole:
@@ -35,9 +31,9 @@ QVariant ExtraDataModel::data(const QModelIndex &index, int role) const
case Qt::DisplayRole:
switch (index.column()) {
case KEY:
- return ed->key;
+ return item.key;
case VALUE:
- return ed->value;
+ return item.value;
}
return QVariant();
}
@@ -46,16 +42,16 @@ QVariant ExtraDataModel::data(const QModelIndex &index, int role) const
int ExtraDataModel::rowCount(const QModelIndex&) const
{
- return rows;
+ return (int)items.size();
}
-void ExtraDataModel::updateDive()
+void ExtraDataModel::updateDiveComputer(const struct divecomputer *dc)
{
beginResetModel();
- rows = 0;
- struct extra_data *ed = get_dive_dc(&displayed_dive, dc_number)->extra_data;
+ struct extra_data *ed = dc ? dc->extra_data : nullptr;
+ items.clear();
while (ed) {
- rows++;
+ items.push_back({ ed->key, ed->value });
ed = ed->next;
}
endResetModel();
diff --git a/qt-models/divecomputerextradatamodel.h b/qt-models/divecomputerextradatamodel.h
index ab78e4541..9af4028eb 100644
--- a/qt-models/divecomputerextradatamodel.h
+++ b/qt-models/divecomputerextradatamodel.h
@@ -4,6 +4,8 @@
#include "cleanertablemodel.h"
+struct divecomputer;
+
/* extra data model for additional dive computer data */
class ExtraDataModel : public CleanerTableModel {
Q_OBJECT
@@ -17,10 +19,14 @@ public:
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
void clear();
- void updateDive();
+ void updateDiveComputer(const struct divecomputer *dc);
private:
- int rows;
+ struct Item {
+ QString key;
+ QString value;
+ };
+ std::vector<Item> items;
};
#endif