E5Gui/E5TreeSortFilterProxyModel.py

changeset 55
b5c84934de9c
child 791
9ec2ac20e54e
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

eric ide

mercurial