diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2015-05-28 16:52:13 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-05-29 14:10:50 -0700 |
commit | a0f3c9992c0f9d2134742b5ba7fd532094c1a865 (patch) | |
tree | bc307939720b62793da3c78043eb0d1023472a6f /qt-models/weigthsysteminfomodel.cpp | |
parent | 32b0afa3e7f4b0636b65119d63e9f398b9f4bfca (diff) | |
download | subsurface-a0f3c9992c0f9d2134742b5ba7fd532094c1a865.tar.gz |
Move WeigthSystem Info model to qt-models
This is another effort to make it easyer for the mobile
interface of Subsurface.
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-models/weigthsysteminfomodel.cpp')
-rw-r--r-- | qt-models/weigthsysteminfomodel.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/qt-models/weigthsysteminfomodel.cpp b/qt-models/weigthsysteminfomodel.cpp new file mode 100644 index 000000000..1ddc2e940 --- /dev/null +++ b/qt-models/weigthsysteminfomodel.cpp @@ -0,0 +1,126 @@ +#include "weigthsysteminfomodel.h" +#include "dive.h" +#include "metrics.h" +#include "gettextfromc.h" + +WSInfoModel *WSInfoModel::instance() +{ + static QScopedPointer<WSInfoModel> self(new WSInfoModel()); + return self.data(); +} + +bool WSInfoModel::insertRows(int row, int count, const QModelIndex &parent) +{ + beginInsertRows(parent, rowCount(), rowCount()); + rows += count; + endInsertRows(); + return true; +} + +bool WSInfoModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + struct ws_info_t *info = &ws_info[index.row()]; + switch (index.column()) { + case DESCRIPTION: + info->name = strdup(value.toByteArray().data()); + break; + case GR: + info->grams = value.toInt(); + break; + } + emit dataChanged(index, index); + return true; +} + +void WSInfoModel::clear() +{ +} + +QVariant WSInfoModel::data(const QModelIndex &index, int role) const +{ + QVariant ret; + if (!index.isValid()) { + return ret; + } + struct ws_info_t *info = &ws_info[index.row()]; + + int gr = info->grams; + switch (role) { + case Qt::FontRole: + ret = defaultModelFont(); + break; + case Qt::DisplayRole: + case Qt::EditRole: + switch (index.column()) { + case GR: + ret = gr; + break; + case DESCRIPTION: + ret = gettextFromC::instance()->tr(info->name); + break; + } + break; + } + return ret; +} + +int WSInfoModel::rowCount(const QModelIndex &parent) const +{ + return rows + 1; +} + +const QString &WSInfoModel::biggerString() const +{ + return biggerEntry; +} + +WSInfoModel::WSInfoModel() : rows(-1) +{ + setHeaderDataStrings(QStringList() << tr("Description") << tr("kg")); + struct ws_info_t *info = ws_info; + for (info = ws_info; info->name; info++, rows++) { + QString wsInfoName = gettextFromC::instance()->tr(info->name); + if (wsInfoName.count() > biggerEntry.count()) + biggerEntry = wsInfoName; + } + + if (rows > -1) { + beginInsertRows(QModelIndex(), 0, rows); + endInsertRows(); + } +} + +void WSInfoModel::updateInfo() +{ + struct ws_info_t *info = ws_info; + beginRemoveRows(QModelIndex(), 0, this->rows); + endRemoveRows(); + rows = -1; + for (info = ws_info; info->name; info++, rows++) { + QString wsInfoName = gettextFromC::instance()->tr(info->name); + if (wsInfoName.count() > biggerEntry.count()) + biggerEntry = wsInfoName; + } + + if (rows > -1) { + beginInsertRows(QModelIndex(), 0, rows); + endInsertRows(); + } +} + +void WSInfoModel::update() +{ + if (rows > -1) { + beginRemoveRows(QModelIndex(), 0, rows); + endRemoveRows(); + rows = -1; + } + struct ws_info_t *info = ws_info; + for (info = ws_info; info->name; info++, rows++) + ; + + if (rows > -1) { + beginInsertRows(QModelIndex(), 0, rows); + endInsertRows(); + } +} |