summaryrefslogtreecommitdiffstats
path: root/mappingtreemodel.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-07-20 14:34:45 +0200
committerArno <arno@disconnect.de>2018-07-20 14:40:30 +0200
commit6baa7366f20eabac32c3d84ae9832e517f5e0400 (patch)
treeae26564ebcf7139ad335025d3e757a29eb847629 /mappingtreemodel.cpp
parent83873855d4f4d3042b50e521029c902bc5e05893 (diff)
downloadSheMov-6baa7366f20eabac32c3d84ae9832e517f5e0400.tar.gz
SheMov-6baa7366f20eabac32c3d84ae9832e517f5e0400.tar.bz2
SheMov-6baa7366f20eabac32c3d84ae9832e517f5e0400.zip
More code churn
Create separate files for MappingData and MappingTreeResultModel. Hopefully no functional changes.
Diffstat (limited to 'mappingtreemodel.cpp')
-rw-r--r--mappingtreemodel.cpp203
1 files changed, 1 insertions, 202 deletions
diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp
index 58fed18..2790ef7 100644
--- a/mappingtreemodel.cpp
+++ b/mappingtreemodel.cpp
@@ -10,6 +10,7 @@
#include <QHash>
#include "mappingtreemodel.h"
+#include "mappingdata.h"
#include "smtreeitem.h"
#include "smglobals.h"
@@ -376,205 +377,3 @@ int MappingTreeModel::lowerBound(SmTreeItem *item, const QVariant &value, int co
return item->childCount();
}
-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);
- return (Qt::ItemIsEnabled | Qt::ItemIsSelectable);
-}
-
-QVariant MappingTreeResultModel::data(const QModelIndex &index, int role) const{
- if(!index.isValid()){
- return QVariant();
- }
- SmTreeItem *item = itemAt(index);
- if(role == NameRole){
- return item->data(Name);
- }
- if(role == MappingIdRole){
- return item->data(MappingId);
- }
- if(role == DescIdRole){
- return item->data(DescId);
- }
- if(role == ParentIdRole){
- return item->data(ParentId);
- }
- return SmTreeModel::data(index, role);
-}
-
-bool MappingTreeResultModel::setData(const QModelIndex &index, const QVariant &value, int role){
- SmTreeItem *item = itemAt(index);
- if(role == NameRole){
- item->setData(Name, value);
- return true;
- }
- if(role == MappingIdRole){
- item->setData(MappingId, value);
- return true;
- }
- if(role == ParentIdRole){
- item->setData(ParentId, value);
- return true;
- }
- if(role == DescIdRole){
- item->setData(DescId, value);
- return true;
- }
- return SmTreeModel::setData(index, value, role);
-}
-
-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;
- beginResetModel();
- while(!pPath.isEmpty()){
- curId = pPath.last();
- curPath << curId;
- pPath.removeLast();
- QModelIndex lastIdx = curIdx;
- curIdx = find(curId, MappingId, curIdx);
- if(!curIdx.isValid()){
- QModelIndex sourceIdx = mapModel->indexFromParentPath(curPath, true);
- if(!sourceIdx.isValid()){
- return; //should never happen!
- }
- SmTreeItem *pItem;
- if(!lastIdx.isValid()){
- pItem = root();
- }else{
- pItem = static_cast<SmTreeItem*>(lastIdx.internalPointer());
- }
- int row = pItem->childCount();
- const QString curName = sourceIdx.data(MappingTreeModel::NameRole).toString();
- for(int i = 0; i < pItem->childCount(); ++i){
- if(pItem->child(i)->data(Name).toString() > curName){
- row = i;
- }
- }
- QVariantList data;
- data << curName << sourceIdx.data(MappingTreeModel::MappingIdRole) << sourceIdx.data(MappingTreeModel::MappingParentIdRole) << sourceIdx.data(MappingTreeModel::DescIdRole);
- SmTreeItem *newItem = new SmTreeItem(data, pItem);
- pItem->insertChild(row, newItem);
- curIdx = createIndex(row, 0, newItem);
- }
- }
- endResetModel();
-}
-
-void MappingTreeResultModel::removeItem(const QModelIndex &idx){
- if(!idx.isValid()){
- return;
- }
- SmTreeItem *curItem = static_cast<SmTreeItem*>(idx.internalPointer());
- MappingData rmData = mSourceModel->mappingDataFromItem(curItem);
- beginResetModel();
- int row = curItem->row();
- SmTreeItem *parent = curItem->parent();
- parent->removeChild(row);
- int count = mCurrentData.removeAll(rmData);
- int toRemove = -1;
- if(count == 0){
- for(int i = 0; i < mCurrentData.count(); ++i){
- MappingData cur = mCurrentData.at(i);
- if(cur.parents.contains(rmData.mappingId)){
- toRemove = i;
- break;
- }
- }
- }
- if(toRemove > -1 && toRemove < mCurrentData.count()){
- mCurrentData.removeAt(toRemove);
- }
- endResetModel();
-}
-
-QList<QVariant> MappingTreeResultModel::getMappings(SmTreeItem *start) const{
- QList<QVariant> retval;
- for(int i = 0; i < start->childCount(); ++i){
- SmTreeItem *childItem = start->child(i);
- if(childItem->childCount()){
- retval.append(getMappings(childItem));
- }else{
- retval << childItem->data(MappingId);
- }
- }
- return retval;
-}
-
-QList<QVariant> MappingTreeResultModel::columnValues(int column) const {
- return columnValuesRecursive(root(), column);
-}
-
-void MappingTreeResultModel::clearData(){
- setRoot(new SmTreeItem(NumFields));
- mCurrentData.clear();
-}
-
-int MappingTreeResultModel::hasChild(SmTreeItem *item, const QVariant &name, int column) const{
- for(int i = 0; i < item->childCount(); ++i){
- if(item->child(i)->data(column) == name){
- return i;
- }
- }
- return -1;
-}
-
-QList<QVariant> MappingTreeResultModel::columnValuesRecursive(SmTreeItem *parent, int column) const {
- QList<QVariant> retval;
- if(!parent->childCount()){
- return retval;
- }
- for(int i = 0; i < parent->childCount(); ++i){
- SmTreeItem *child = parent->child(i);
- QVariant value = child->data(column);
- if(value.canConvert(QVariant::Int) && (value.toInt() != -1)){
- retval << value;
- }
- retval << columnValuesRecursive(child, column);
- }
- return retval;
-}
-
-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);
-}