diff options
Diffstat (limited to 'mappingtreemodel.cpp')
-rw-r--r-- | mappingtreemodel.cpp | 72 |
1 files changed, 56 insertions, 16 deletions
diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp index a56f543..78e4802 100644 --- a/mappingtreemodel.cpp +++ b/mappingtreemodel.cpp @@ -204,27 +204,32 @@ bool MappingTreeModel::deleteChild(const QModelIndex &idx){ return false; } -MappingData MappingTreeModel::mappingDataFromIndex(QModelIndex &idx) const{ +MappingData MappingTreeModel::mappingDataFromItem(SmTreeItem *item) const{ MappingData retval; - if(!idx.isValid()){ - return retval; - } - retval.mappingId = idx.data(MappingTreeModel::MappingIdRole).toInt(); - retval.descId = idx.data(MappingTreeModel::DescIdRole).toInt(); - retval.name = idx.data(MappingTreeModel::NameRole).toString(); - retval.parents << idx.data(MappingTreeModel::MappingIdRole).toInt(); - retval.path << idx.data(MappingTreeModel::NameRole).toString(); - QModelIndex pIdx = idx.parent(); - while(pIdx.isValid()){ - retval.parents << pIdx.data(MappingTreeModel::MappingIdRole).toInt(); - retval.path << pIdx.data(MappingTreeModel::NameRole).toString(); - pIdx = pIdx.parent(); + retval.mappingId = item->data(MappingTreeModel::MappingId).toInt(); + retval.descId = item->data(MappingTreeModel::DescId).toInt(); + retval.name = item->data(MappingTreeModel::Name).toString(); + retval.parents << item->data(MappingTreeModel::MappingId).toInt(); + retval.path << item->data(MappingTreeModel::Name).toString(); + SmTreeItem *pItem = item->parent(); + while(pItem->parent()){ + retval.parents << pItem->data(MappingTreeModel::MappingId).toInt(); + retval.path << pItem->data(MappingTreeModel::Name).toString(); + pItem = pItem->parent(); } std::reverse(retval.parents.begin(), retval.parents.end()); std::reverse(retval.path.begin(), retval.path.end()); return retval; } +MappingData MappingTreeModel::mappingDataFromIndex(QModelIndex &idx) const{ + if(!idx.isValid()){ + return MappingData(); + } + SmTreeItem *item = static_cast<SmTreeItem*>(idx.internalPointer()); + return mappingDataFromItem(item); +} + void MappingTreeModel::populate(){ if(mType == -1){ return; @@ -371,7 +376,9 @@ int MappingTreeModel::lowerBound(SmTreeItem *item, const QVariant &value, int co return item->childCount(); } -MappingTreeResultModel::MappingTreeResultModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { } +MappingTreeResultModel::MappingTreeResultModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { + mSourceModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); +} Qt::ItemFlags MappingTreeResultModel::flags(const QModelIndex &index) const { Q_UNUSED(index); @@ -421,8 +428,14 @@ bool MappingTreeResultModel::setData(const QModelIndex &index, const QVariant &v void MappingTreeResultModel::addItem(const MappingData &data){ QList<int> pPath = data.parents; + + if(!mCurrentData.contains(data)){ + mCurrentData << data; + } + QList<int> curPath; std::reverse(pPath.begin(), pPath.end()); + MappingTreeModel *mapModel = qobject_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); QModelIndex curIdx = QModelIndex(); int curId = -1; @@ -465,11 +478,13 @@ void MappingTreeResultModel::removeItem(const QModelIndex &idx){ if(!idx.isValid()){ return; } - beginResetModel(); SmTreeItem *curItem = static_cast<SmTreeItem*>(idx.internalPointer()); + MappingData rmData = mSourceModel->mappingDataFromItem(curItem); + beginResetModel(); int row = curItem->row(); SmTreeItem *parent = curItem->parent(); parent->removeChild(row); + mCurrentData.removeAll(rmData); endResetModel(); } @@ -521,6 +536,31 @@ QList<QVariant> MappingTreeResultModel::columnValuesRecursive(SmTreeItem *parent MappingData::MappingData() : mappingId(-1), descId(-1) {} +bool MappingData::operator ==(const MappingData &other){ + bool retval = ( + mappingId == other.mappingId && + descId == other.descId && + name == other.name && + parents == other.parents && + path == other.path + ); + return retval; +} + +QDataStream &operator <<(QDataStream &out, const MappingData &v){ + out << v.mappingId << v.descId << v.name << v.parents << v.path; + return out; +} + +QDataStream &operator >>(QDataStream &in, MappingData &v){ + in >> v.mappingId; + in >> v.descId; + in >> v.name; + in >> v.parents; + in >> v.path; + return in; +} + bool MappingData::isValid(){ return !(mappingId == -1 && descId == -1); } |