From a56429d31e1b734d19865dfefd5338b07292590e Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Thu, 28 May 2015 17:51:07 -0300 Subject: Move DiveComputerModel to qt-models Another attempt to make it easyer to create the mobile version of Subsurface. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-models/divecomputermodel.cpp | 108 ++++++++++++++++++++++++++++++++++++++ qt-models/divecomputermodel.h | 34 ++++++++++++ qt-models/models.cpp | 112 ---------------------------------------- qt-models/models.h | 27 ---------- 4 files changed, 142 insertions(+), 139 deletions(-) create mode 100644 qt-models/divecomputermodel.cpp create mode 100644 qt-models/divecomputermodel.h (limited to 'qt-models') diff --git a/qt-models/divecomputermodel.cpp b/qt-models/divecomputermodel.cpp new file mode 100644 index 000000000..51b1a767b --- /dev/null +++ b/qt-models/divecomputermodel.cpp @@ -0,0 +1,108 @@ +#include "divecomputermodel.h" +#include "dive.h" +#include "divelist.h" + +DiveComputerModel::DiveComputerModel(QMultiMap &dcMap, QObject *parent) : CleanerTableModel() +{ + setHeaderDataStrings(QStringList() << "" << tr("Model") << tr("Device ID") << tr("Nickname")); + dcWorkingMap = dcMap; + numRows = 0; +} + +QVariant DiveComputerModel::data(const QModelIndex &index, int role) const +{ + QList values = dcWorkingMap.values(); + DiveComputerNode node = values.at(index.row()); + + QVariant ret; + if (role == Qt::DisplayRole || role == Qt::EditRole) { + switch (index.column()) { + case ID: + ret = QString("0x").append(QString::number(node.deviceId, 16)); + break; + case MODEL: + ret = node.model; + break; + case NICKNAME: + ret = node.nickName; + break; + } + } + + if (index.column() == REMOVE) { + switch (role) { + case Qt::DecorationRole: + ret = trashIcon(); + break; + case Qt::SizeHintRole: + ret = trashIcon().size(); + break; + case Qt::ToolTipRole: + ret = tr("Clicking here will remove this dive computer."); + break; + } + } + return ret; +} + +int DiveComputerModel::rowCount(const QModelIndex &parent) const +{ + return numRows; +} + +void DiveComputerModel::update() +{ + QList values = dcWorkingMap.values(); + int count = values.count(); + + if (numRows) { + beginRemoveRows(QModelIndex(), 0, numRows - 1); + numRows = 0; + endRemoveRows(); + } + + if (count) { + beginInsertRows(QModelIndex(), 0, count - 1); + numRows = count; + endInsertRows(); + } +} + +Qt::ItemFlags DiveComputerModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags flags = QAbstractItemModel::flags(index); + if (index.column() == NICKNAME) + flags |= Qt::ItemIsEditable; + return flags; +} + +bool DiveComputerModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + QList values = dcWorkingMap.values(); + DiveComputerNode node = values.at(index.row()); + dcWorkingMap.remove(node.model, node); + node.nickName = value.toString(); + dcWorkingMap.insert(node.model, node); + emit dataChanged(index, index); + return true; +} + +void DiveComputerModel::remove(const QModelIndex &index) +{ + QList values = dcWorkingMap.values(); + DiveComputerNode node = values.at(index.row()); + dcWorkingMap.remove(node.model, node); + update(); +} + +void DiveComputerModel::dropWorkingList() +{ + // how do I prevent the memory leak ? +} + +void DiveComputerModel::keepWorkingList() +{ + if (dcList.dcMap != dcWorkingMap) + mark_divelist_changed(true); + dcList.dcMap = dcWorkingMap; +} diff --git a/qt-models/divecomputermodel.h b/qt-models/divecomputermodel.h new file mode 100644 index 000000000..bed48b81a --- /dev/null +++ b/qt-models/divecomputermodel.h @@ -0,0 +1,34 @@ +#ifndef DIVECOMPUTERMODEL_H +#define DIVECOMPUTERMODEL_H + +#include "cleanertablemodel.h" +#include "divecomputer.h" + +class DiveComputerModel : public CleanerTableModel { + Q_OBJECT +public: + enum { + REMOVE, + MODEL, + ID, + NICKNAME + }; + DiveComputerModel(QMultiMap &dcMap, QObject *parent = 0); + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + void update(); + void keepWorkingList(); + void dropWorkingList(); + +public +slots: + void remove(const QModelIndex &index); + +private: + int numRows; + QMultiMap dcWorkingMap; +}; + +#endif diff --git a/qt-models/models.cpp b/qt-models/models.cpp index 15e5d9a00..bbd5d7a0c 100644 --- a/qt-models/models.cpp +++ b/qt-models/models.cpp @@ -699,118 +699,6 @@ bool DiveTripModel::setData(const QModelIndex &index, const QVariant &value, int return diveItem->setData(index, value, role); } -/*#################################################################### - * - * Dive Computer Model - * - *#################################################################### - */ - -DiveComputerModel::DiveComputerModel(QMultiMap &dcMap, QObject *parent) : CleanerTableModel() -{ - setHeaderDataStrings(QStringList() << "" << tr("Model") << tr("Device ID") << tr("Nickname")); - dcWorkingMap = dcMap; - numRows = 0; -} - -QVariant DiveComputerModel::data(const QModelIndex &index, int role) const -{ - QList values = dcWorkingMap.values(); - DiveComputerNode node = values.at(index.row()); - - QVariant ret; - if (role == Qt::DisplayRole || role == Qt::EditRole) { - switch (index.column()) { - case ID: - ret = QString("0x").append(QString::number(node.deviceId, 16)); - break; - case MODEL: - ret = node.model; - break; - case NICKNAME: - ret = node.nickName; - break; - } - } - - if (index.column() == REMOVE) { - switch (role) { - case Qt::DecorationRole: - ret = trashIcon(); - break; - case Qt::SizeHintRole: - ret = trashIcon().size(); - break; - case Qt::ToolTipRole: - ret = tr("Clicking here will remove this dive computer."); - break; - } - } - return ret; -} - -int DiveComputerModel::rowCount(const QModelIndex &parent) const -{ - return numRows; -} - -void DiveComputerModel::update() -{ - QList values = dcWorkingMap.values(); - int count = values.count(); - - if (numRows) { - beginRemoveRows(QModelIndex(), 0, numRows - 1); - numRows = 0; - endRemoveRows(); - } - - if (count) { - beginInsertRows(QModelIndex(), 0, count - 1); - numRows = count; - endInsertRows(); - } -} - -Qt::ItemFlags DiveComputerModel::flags(const QModelIndex &index) const -{ - Qt::ItemFlags flags = QAbstractItemModel::flags(index); - if (index.column() == NICKNAME) - flags |= Qt::ItemIsEditable; - return flags; -} - -bool DiveComputerModel::setData(const QModelIndex &index, const QVariant &value, int role) -{ - QList values = dcWorkingMap.values(); - DiveComputerNode node = values.at(index.row()); - dcWorkingMap.remove(node.model, node); - node.nickName = value.toString(); - dcWorkingMap.insert(node.model, node); - emit dataChanged(index, index); - return true; -} - -void DiveComputerModel::remove(const QModelIndex &index) -{ - QList values = dcWorkingMap.values(); - DiveComputerNode node = values.at(index.row()); - dcWorkingMap.remove(node.model, node); - update(); -} - -void DiveComputerModel::dropWorkingList() -{ - // how do I prevent the memory leak ? -} - -void DiveComputerModel::keepWorkingList() -{ - if (dcList.dcMap != dcWorkingMap) - mark_divelist_changed(true); - dcList.dcMap = dcWorkingMap; -} - /*################################################################# * # * # Yearly Statistics Model diff --git a/qt-models/models.h b/qt-models/models.h index 095791694..ec025af9d 100644 --- a/qt-models/models.h +++ b/qt-models/models.h @@ -138,33 +138,6 @@ private: Layout currentLayout; }; -class DiveComputerModel : public CleanerTableModel { - Q_OBJECT -public: - enum { - REMOVE, - MODEL, - ID, - NICKNAME - }; - DiveComputerModel(QMultiMap &dcMap, QObject *parent = 0); - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - void update(); - void keepWorkingList(); - void dropWorkingList(); - -public -slots: - void remove(const QModelIndex &index); - -private: - int numRows; - QMultiMap dcWorkingMap; -}; - class YearlyStatisticsModel : public TreeModel { Q_OBJECT public: -- cgit v1.2.3-70-g09d2