#include #include "beetplayerproxy.h" #include BeetPlayerProxy::BeetPlayerProxy(QObject *parent) : QSortFilterProxyModel(parent) { } bool BeetPlayerProxy::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const{ if(filterRegExp().isEmpty()){ return true; } QRegExp filter = filterRegExp(); QModelIndex curIdx = sourceModel()->index(source_row, 0, source_parent); return recurseChildren(curIdx); } bool BeetPlayerProxy::recurseChildren(QModelIndex parent) const{ static bool retval = false; if(parent.data().toString().contains(filterRegExp())){ qDebug() << "found:" << parent.data(); retval = true; }else{ retval = false; } for(int i = 0; i < sourceModel()->rowCount(parent); ++i){ QModelIndex cur = sourceModel()->index(i, 0, parent); //qDebug() << cur.data(); if(cur.data().toString().contains(filterRegExp())){ retval = true; } if(sourceModel()->hasChildren(cur)){ recurseChildren(cur); } } return retval; } bool BeetPlayerProxy::hasValidChild(QModelIndex parent) const{ QModelIndex curIdx = parent; if(curIdx.isValid()){ if(curIdx.data().toString().contains(filterRegExp())){ qDebug() << "found:" << curIdx.data(); return true; } qDebug() << parent.data() << sourceModel()->rowCount(curIdx); for(int i = 0; i < sourceModel()->rowCount(curIdx); ++i){ curIdx = sourceModel()->index(i, 0, curIdx); //qDebug() << "in for:" << curIdx.data() << i; if(sourceModel()->hasChildren(curIdx)){ hasValidChild(curIdx); } } } return false; }