diff -r 31463df17fd5 -r b5c84934de9c E5Gui/E5TreeSortFilterProxyModel.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/E5Gui/E5TreeSortFilterProxyModel.py Wed Jan 13 18:53:58 2010 +0000 @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2009 - 2010 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a modified QSortFilterProxyModel. +""" + +from PyQt4.QtCore import Qt, QModelIndex +from PyQt4.QtGui import QSortFilterProxyModel + +class E5TreeSortFilterProxyModel(QSortFilterProxyModel): + """ + Class implementing a modified QSortFilterProxyModel. + + It always accepts the root nodes in the tree so filtering is only done + on the children. + """ + def __init__(self, parent = None): + """ + Constructor + + @param parent reference to the parent object (QObject) + """ + QSortFilterProxyModel.__init__(self, parent) + + self.setFilterCaseSensitivity(Qt.CaseInsensitive) + + def filterAcceptsRow(self, sourceRow, sourceParent): + """ + Protected method to determine, if the row is acceptable. + + @param sourceRow row number in the source model (integer) + @param sourceParent index of the source item (QModelIndex) + @return flag indicating acceptance (boolean) + """ + idx = self.sourceModel().index(sourceRow, 0, sourceParent) + if self.sourceModel().hasChildren(idx): + return True + + return QSortFilterProxyModel.filterAcceptsRow(self, sourceRow, sourceParent) + + def hasChildren(self, parent = QModelIndex()): + """ + Public method to check, if a parent node has some children. + + @param parent index of the parent node (QModelIndex) + @return flag indicating the presence of children (boolean) + """ + sindex = self.mapToSource(parent) + return self.sourceModel().hasChildren(sindex) \ No newline at end of file