diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2015-05-28 16:39:15 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-05-29 14:10:30 -0700 |
commit | 32b0afa3e7f4b0636b65119d63e9f398b9f4bfca (patch) | |
tree | 6283f64c8615b647dbb6e9602d705d22f316344d /qt-models/tankinfomodel.cpp | |
parent | f432b764e78ac3d66f5ab1bfc7c18fbdb75624e5 (diff) | |
download | subsurface-32b0afa3e7f4b0636b65119d63e9f398b9f4bfca.tar.gz |
Move Tankinfomodel to its own file
Another change to make it easier to program the mobile ui. This was a
fairly easy patch: just moved the contents of the file and fixed the
includes.
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-models/tankinfomodel.cpp')
-rw-r--r-- | qt-models/tankinfomodel.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/qt-models/tankinfomodel.cpp b/qt-models/tankinfomodel.cpp new file mode 100644 index 000000000..0a06a3b08 --- /dev/null +++ b/qt-models/tankinfomodel.cpp @@ -0,0 +1,115 @@ +#include "tankinfomodel.h" +#include "dive.h" +#include "gettextfromc.h" +#include "metrics.h" + +TankInfoModel *TankInfoModel::instance() +{ + static QScopedPointer<TankInfoModel> self(new TankInfoModel()); + return self.data(); +} + +const QString &TankInfoModel::biggerString() const +{ + return biggerEntry; +} + +bool TankInfoModel::insertRows(int row, int count, const QModelIndex &parent) +{ + beginInsertRows(parent, rowCount(), rowCount()); + rows += count; + endInsertRows(); + return true; +} + +bool TankInfoModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + struct tank_info_t *info = &tank_info[index.row()]; + switch (index.column()) { + case DESCRIPTION: + info->name = strdup(value.toByteArray().data()); + break; + case ML: + info->ml = value.toInt(); + break; + case BAR: + info->bar = value.toInt(); + break; + } + emit dataChanged(index, index); + return true; +} + +void TankInfoModel::clear() +{ +} + +QVariant TankInfoModel::data(const QModelIndex &index, int role) const +{ + QVariant ret; + if (!index.isValid()) { + return ret; + } + if (role == Qt::FontRole) { + return defaultModelFont(); + } + if (role == Qt::DisplayRole || role == Qt::EditRole) { + struct tank_info_t *info = &tank_info[index.row()]; + int ml = info->ml; + double bar = (info->psi) ? psi_to_bar(info->psi) : info->bar; + + if (info->cuft && info->psi) + ml = cuft_to_l(info->cuft) * 1000 / bar_to_atm(bar); + + switch (index.column()) { + case BAR: + ret = bar * 1000; + break; + case ML: + ret = ml; + break; + case DESCRIPTION: + ret = QString(info->name); + break; + } + } + return ret; +} + +int TankInfoModel::rowCount(const QModelIndex &parent) const +{ + return rows + 1; +} + +TankInfoModel::TankInfoModel() : rows(-1) +{ + setHeaderDataStrings(QStringList() << tr("Description") << tr("ml") << tr("bar")); + struct tank_info_t *info = tank_info; + for (info = tank_info; info->name; info++, rows++) { + QString infoName = gettextFromC::instance()->tr(info->name); + if (infoName.count() > biggerEntry.count()) + biggerEntry = infoName; + } + + if (rows > -1) { + beginInsertRows(QModelIndex(), 0, rows); + endInsertRows(); + } +} + +void TankInfoModel::update() +{ + if (rows > -1) { + beginRemoveRows(QModelIndex(), 0, rows); + endRemoveRows(); + rows = -1; + } + struct tank_info_t *info = tank_info; + for (info = tank_info; info->name; info++, rows++) + ; + + if (rows > -1) { + beginInsertRows(QModelIndex(), 0, rows); + endInsertRows(); + } +} |