summaryrefslogtreecommitdiffstats
path: root/mappingtreemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mappingtreemodel.cpp')
-rw-r--r--mappingtreemodel.cpp58
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;
+}