From 67ddb23a59cb56bd917db2d9c3c7bc62c96e53b4 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 25 Feb 2012 16:52:48 +0100 Subject: Implemented mapping widget for NewPicsDialog Make it possible to add mappings to new pictures. This actually was a tough one. Maybe I shouldn't drink and code. Next: make NewPicsDialog actually do something. --- mappingtreemodel.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'mappingtreemodel.cpp') 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; +} -- cgit v1.2.3-70-g09d2