diff options
author | Arno <am@disconnect.de> | 2013-10-13 07:25:50 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-10-13 07:25:50 +0200 |
commit | e07de4e0a1bd56aab8f4ee81d6db252e442c3d7a (patch) | |
tree | 02b62d34152e481917ba1bef6a7191e4e3465c72 /smtreemodel.cpp | |
parent | 5beb56a09363197e23a630d3fd2f71899d7f00a0 (diff) | |
download | SheMov-e07de4e0a1bd56aab8f4ee81d6db252e442c3d7a.tar.gz SheMov-e07de4e0a1bd56aab8f4ee81d6db252e442c3d7a.tar.bz2 SheMov-e07de4e0a1bd56aab8f4ee81d6db252e442c3d7a.zip |
Add filter bar to MappingTreeWidget
Move matchRecursive from ArchiveModel to SmTreeModel so we can use it
here, too.
Diffstat (limited to 'smtreemodel.cpp')
-rw-r--r-- | smtreemodel.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/smtreemodel.cpp b/smtreemodel.cpp index b909fcd..b52859c 100644 --- a/smtreemodel.cpp +++ b/smtreemodel.cpp @@ -166,6 +166,49 @@ QModelIndex SmTreeModel::findRecursive(const QVariant &value, int column, const return QModelIndex(); } +bool SmTreeModel::matchRecursive(const QModelIndex &parent, const QRegExp ®ex, int column) const { + if(!parent.isValid()){ + return false; + } + // first try the parent itself + QString value = parent.data().toString(); + if(value.isEmpty()){ + return false; + } + if(value.contains(regex)){ + return true; + } + + // no match, check for children + SmTreeItem *item = static_cast<SmTreeItem*>(parent.internalPointer()); + if(!item->childCount()){ + //leaf, chech parents + return checkParents(item, regex, column); + } + + // we have children, traverse them + bool retval = false; + for(int i = 0; i < item->childCount(); ++i){ + QModelIndex newIdx = createIndex(i, column, item->child(i)); + retval = matchRecursive(newIdx, regex, column); + if(retval){ + break; + } + } + return retval; +} + +bool SmTreeModel::checkParents(const SmTreeItem *item, const QRegExp ®ex, int column) const { + while(item != root()){ + QString value = item->data(column).toString(); + if(value.contains(regex)){ + return true; + } + item = item->parent(); + } + return false; +} + bool SmTreeModel::setRoot(SmTreeItem *rootItem){ if(mRootItem){ beginResetModel(); |