diff options
Diffstat (limited to 'mappingtreemodel.cpp')
-rw-r--r-- | mappingtreemodel.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp index 9c96e69..d64cb52 100644 --- a/mappingtreemodel.cpp +++ b/mappingtreemodel.cpp @@ -264,3 +264,61 @@ int MappingTreeModel::lowerBound(SmTreeItem *item, const QVariant &value, int co } return item->childCount(); } + +MappingTreeResultModel::MappingTreeResultModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { } + +Qt::ItemFlags MappingTreeResultModel::flags(const QModelIndex &index) const { + Q_UNUSED(index); + return (Qt::ItemIsEnabled | Qt::ItemIsSelectable); +} + +bool MappingTreeResultModel::setData(const QModelIndex &index, const QVariant &value, int role){ + if(role == NameRole){ + SmTreeItem *item = itemAt(index); + item->setData(Name, value); + return true; + } + return SmTreeModel::setData(index, value, role); +} + +void MappingTreeResultModel::addItem(const MappingData &data){ + SmTreeItem *curItem = root(); + for(int i = 0; i < data.path.count(); ++i){ + int childPos = hasChild(curItem, data.path.at(i)); + if(childPos != -1){ + //child already exists + curItem = curItem->child(childPos); + continue; + }else{ + //insert child + QModelIndex curIdx = insertChild(data.path.at(i), curItem); + curItem = itemAt(curIdx); + } + } +} + +QModelIndex MappingTreeResultModel::insertChild(const QVariant &data, SmTreeItem *parent){ + QModelIndex parentIdx; + int row = parent->childCount(); + if(parent != root()){ + for(int i = 0; i < parent->childCount(); ++i){ + if(parent->child(i)->data(0).toString() > data.toString()){ + row = i; + } + } + parentIdx = createIndex(0, 0, parent); + } + insertRows(row, 1, parentIdx); + QModelIndex newIdx = index(row, 0, parentIdx); + setData(newIdx, data, NameRole); + return newIdx; +} + +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; +} |