summaryrefslogtreecommitdiffstats
path: root/qt-models/tankinfomodel.cpp
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tomaz.canabrava@intel.com>2015-05-28 16:39:15 -0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-05-29 14:10:30 -0700
commit32b0afa3e7f4b0636b65119d63e9f398b9f4bfca (patch)
tree6283f64c8615b647dbb6e9602d705d22f316344d /qt-models/tankinfomodel.cpp
parentf432b764e78ac3d66f5ab1bfc7c18fbdb75624e5 (diff)
downloadsubsurface-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.cpp115
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();
+ }
+}