summaryrefslogtreecommitdiffstats
path: root/smtreemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-10-13 07:25:50 +0200
committerArno <am@disconnect.de>2013-10-13 07:25:50 +0200
commite07de4e0a1bd56aab8f4ee81d6db252e442c3d7a (patch)
tree02b62d34152e481917ba1bef6a7191e4e3465c72 /smtreemodel.cpp
parent5beb56a09363197e23a630d3fd2f71899d7f00a0 (diff)
downloadSheMov-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.cpp43
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 &regex, 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 &regex, 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();