Added an extended tree widget.

Mon, 30 Jul 2012 19:19:29 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 30 Jul 2012 19:19:29 +0200
changeset 1969
5522b3266c8b
parent 1968
eb57efc415c6
child 1970
02cf3bac079b

Added an extended tree widget.

APIs/Python3/eric5.api file | annotate | diff | comparison | revisions
APIs/Python3/eric5.bas file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric5.E5Gui.E5TreeWidget.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric5.E5Gui.html file | annotate | diff | comparison | revisions
E5Gui/E5TreeWidget.py file | annotate | diff | comparison | revisions
eric5.e4p file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric5.api	Mon Jul 30 19:18:58 2012 +0200
+++ b/APIs/Python3/eric5.api	Mon Jul 30 19:19:29 2012 +0200
@@ -1478,6 +1478,24 @@
 eric5.E5Gui.E5TreeView.E5TreeView.keyPressEvent?4(evt)
 eric5.E5Gui.E5TreeView.E5TreeView.removeAll?4()
 eric5.E5Gui.E5TreeView.E5TreeView.removeSelected?4()
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.ItemsCollapsed?7
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.ItemsExpanded?7
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.addTopLevelItem?4(item)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.addTopLevelItems?4(items)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.allItems?4()
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.appendToParentItem?4(parent, item)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.clear?4()
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.deleteItem?4(item)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.deleteItems?4(items)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.filterString?4(filter)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.insertTopLevelItem?4(index, item)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.insertTopLevelItems?4(index, items)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.itemControlClicked?7
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.itemMiddleButtonClicked?7
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.mousePressEvent?4(evt)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.prependToParentItem?4(parent, item)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget.setDefaultItemShowMode?4(mode)
+eric5.E5Gui.E5TreeWidget.E5TreeWidget?1(parent=None)
 eric5.E5Network.E5NetworkHeaderDetailsDialog.E5NetworkHeaderDetailsDialog.setData?4(name, value)
 eric5.E5Network.E5NetworkHeaderDetailsDialog.E5NetworkHeaderDetailsDialog?1(parent=None)
 eric5.E5Network.E5NetworkMonitor.E5NetworkMonitor._monitor?8
--- a/APIs/Python3/eric5.bas	Mon Jul 30 19:18:58 2012 +0200
+++ b/APIs/Python3/eric5.bas	Mon Jul 30 19:19:29 2012 +0200
@@ -162,6 +162,7 @@
 E5ToolBarManager QObject
 E5TreeSortFilterProxyModel QSortFilterProxyModel
 E5TreeView QTreeView
+E5TreeWidget QTreeWidget
 E5VerticalToolBox QToolBox
 E5WheelTabBar QTabBar
 EditBreakpointDialog QDialog Ui_EditBreakpointDialog
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Mon Jul 30 19:18:58 2012 +0200
+++ b/Documentation/Help/source.qhp	Mon Jul 30 19:19:29 2012 +0200
@@ -137,6 +137,7 @@
             <section title="eric5.E5Gui.E5ToolBox" ref="eric5.E5Gui.E5ToolBox.html" />
             <section title="eric5.E5Gui.E5TreeSortFilterProxyModel" ref="eric5.E5Gui.E5TreeSortFilterProxyModel.html" />
             <section title="eric5.E5Gui.E5TreeView" ref="eric5.E5Gui.E5TreeView.html" />
+            <section title="eric5.E5Gui.E5TreeWidget" ref="eric5.E5Gui.E5TreeWidget.html" />
           </section>
           <section title="eric5.E5Network" ref="index-eric5.E5Network.html">
             <section title="eric5.E5Network.E5NetworkHeaderDetailsDialog" ref="eric5.E5Network.E5NetworkHeaderDetailsDialog.html" />
@@ -3630,6 +3631,24 @@
       <keyword name="E5TreeView.keyPressEvent" id="E5TreeView.keyPressEvent" ref="eric5.E5Gui.E5TreeView.html#E5TreeView.keyPressEvent" />
       <keyword name="E5TreeView.removeAll" id="E5TreeView.removeAll" ref="eric5.E5Gui.E5TreeView.html#E5TreeView.removeAll" />
       <keyword name="E5TreeView.removeSelected" id="E5TreeView.removeSelected" ref="eric5.E5Gui.E5TreeView.html#E5TreeView.removeSelected" />
+      <keyword name="E5TreeWidget" id="E5TreeWidget" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget" />
+      <keyword name="E5TreeWidget (Constructor)" id="E5TreeWidget (Constructor)" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.__init__" />
+      <keyword name="E5TreeWidget (Module)" id="E5TreeWidget (Module)" ref="eric5.E5Gui.E5TreeWidget.html" />
+      <keyword name="E5TreeWidget.__iterateAllItems" id="E5TreeWidget.__iterateAllItems" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.__iterateAllItems" />
+      <keyword name="E5TreeWidget.__scheduleRefresh" id="E5TreeWidget.__scheduleRefresh" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.__scheduleRefresh" />
+      <keyword name="E5TreeWidget.addTopLevelItem" id="E5TreeWidget.addTopLevelItem" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.addTopLevelItem" />
+      <keyword name="E5TreeWidget.addTopLevelItems" id="E5TreeWidget.addTopLevelItems" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.addTopLevelItems" />
+      <keyword name="E5TreeWidget.allItems" id="E5TreeWidget.allItems" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.allItems" />
+      <keyword name="E5TreeWidget.appendToParentItem" id="E5TreeWidget.appendToParentItem" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.appendToParentItem" />
+      <keyword name="E5TreeWidget.clear" id="E5TreeWidget.clear" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.clear" />
+      <keyword name="E5TreeWidget.deleteItem" id="E5TreeWidget.deleteItem" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.deleteItem" />
+      <keyword name="E5TreeWidget.deleteItems" id="E5TreeWidget.deleteItems" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.deleteItems" />
+      <keyword name="E5TreeWidget.filterString" id="E5TreeWidget.filterString" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.filterString" />
+      <keyword name="E5TreeWidget.insertTopLevelItem" id="E5TreeWidget.insertTopLevelItem" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.insertTopLevelItem" />
+      <keyword name="E5TreeWidget.insertTopLevelItems" id="E5TreeWidget.insertTopLevelItems" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.insertTopLevelItems" />
+      <keyword name="E5TreeWidget.mousePressEvent" id="E5TreeWidget.mousePressEvent" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.mousePressEvent" />
+      <keyword name="E5TreeWidget.prependToParentItem" id="E5TreeWidget.prependToParentItem" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.prependToParentItem" />
+      <keyword name="E5TreeWidget.setDefaultItemShowMode" id="E5TreeWidget.setDefaultItemShowMode" ref="eric5.E5Gui.E5TreeWidget.html#E5TreeWidget.setDefaultItemShowMode" />
       <keyword name="E5VerticalToolBox" id="E5VerticalToolBox" ref="eric5.E5Gui.E5ToolBox.html#E5VerticalToolBox" />
       <keyword name="E5VerticalToolBox (Constructor)" id="E5VerticalToolBox (Constructor)" ref="eric5.E5Gui.E5ToolBox.html#E5VerticalToolBox.__init__" />
       <keyword name="E5WheelTabBar" id="E5WheelTabBar" ref="eric5.E5Gui.E5TabWidget.html#E5WheelTabBar" />
@@ -12365,6 +12384,7 @@
       <file>eric5.E5Gui.E5ToolBox.html</file>
       <file>eric5.E5Gui.E5TreeSortFilterProxyModel.html</file>
       <file>eric5.E5Gui.E5TreeView.html</file>
+      <file>eric5.E5Gui.E5TreeWidget.html</file>
       <file>eric5.E5Network.E5NetworkHeaderDetailsDialog.html</file>
       <file>eric5.E5Network.E5NetworkMonitor.html</file>
       <file>eric5.E5Network.E5NetworkProxyFactory.html</file>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.E5Gui.E5TreeWidget.html	Mon Jul 30 19:19:29 2012 +0200
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.E5Gui.E5TreeWidget</title>
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.E5Gui.E5TreeWidget</h1>
+<p>
+Module implementing specialized tree views.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#E5TreeWidget">E5TreeWidget</a></td>
+<td>Class implementing an extended tree widget.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="E5TreeWidget" ID="E5TreeWidget"></a>
+<h2>E5TreeWidget</h2>
+<p>
+    Class implementing an extended tree widget.
+</p><h3>Signals</h3>
+<dl>
+<dt>itemControlClicked(QTreeWidgetItem)</dt>
+<dd>
+emitted after a Ctrl-Click
+            on an item
+</dd><dt>itemMiddleButtonClicked(QTreeWidgetItem)</dt>
+<dd>
+emitted after a click
+            of the middle button on an item
+</dd>
+</dl>
+<h3>Derived from</h3>
+QTreeWidget
+<h3>Class Attributes</h3>
+<table>
+<tr><td>ItemsCollapsed</td></tr><tr><td>ItemsExpanded</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#E5TreeWidget.__init__">E5TreeWidget</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.__iterateAllItems">__iterateAllItems</a></td>
+<td>Private method to iterate over the child items of the parent.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.__scheduleRefresh">__scheduleRefresh</a></td>
+<td>Private slot to schedule a refresh of the tree.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.addTopLevelItem">addTopLevelItem</a></td>
+<td>Public method to add a top level item.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.addTopLevelItems">addTopLevelItems</a></td>
+<td>Public method to add a list of top level items.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.allItems">allItems</a></td>
+<td>Public method to get a list of all items.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.appendToParentItem">appendToParentItem</a></td>
+<td>Public method to append an item to a parent item.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.clear">clear</a></td>
+<td>Public slot to clear the tree.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.deleteItem">deleteItem</a></td>
+<td>Public method to delete an item.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.deleteItems">deleteItems</a></td>
+<td>Public method to delete a list of items.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.filterString">filterString</a></td>
+<td>Public slot to set a new filter.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.insertTopLevelItem">insertTopLevelItem</a></td>
+<td>Public method to insert a top level item.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.insertTopLevelItems">insertTopLevelItems</a></td>
+<td>Public method to insert a list of top level items.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.mousePressEvent">mousePressEvent</a></td>
+<td>Protected method handling mouse press events.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.prependToParentItem">prependToParentItem</a></td>
+<td>Public method to prepend an item to a parent item.</td>
+</tr><tr>
+<td><a href="#E5TreeWidget.setDefaultItemShowMode">setDefaultItemShowMode</a></td>
+<td>Public method to set the default item show mode.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="E5TreeWidget.__init__" ID="E5TreeWidget.__init__"></a>
+<h4>E5TreeWidget (Constructor)</h4>
+<b>E5TreeWidget</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="E5TreeWidget.__iterateAllItems" ID="E5TreeWidget.__iterateAllItems"></a>
+<h4>E5TreeWidget.__iterateAllItems</h4>
+<b>__iterateAllItems</b>(<i>parent</i>)
+<p>
+        Private method to iterate over the child items of the parent.
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+parent item to iterate (QTreeWidgetItem)
+</dd>
+</dl><a NAME="E5TreeWidget.__scheduleRefresh" ID="E5TreeWidget.__scheduleRefresh"></a>
+<h4>E5TreeWidget.__scheduleRefresh</h4>
+<b>__scheduleRefresh</b>(<i></i>)
+<p>
+        Private slot to schedule a refresh of the tree.
+</p><a NAME="E5TreeWidget.addTopLevelItem" ID="E5TreeWidget.addTopLevelItem"></a>
+<h4>E5TreeWidget.addTopLevelItem</h4>
+<b>addTopLevelItem</b>(<i>item</i>)
+<p>
+        Public method to add a top level item.
+</p><dl>
+<dt><i>item</i></dt>
+<dd>
+item to be added as a top level item (QTreeWidgetItem)
+</dd>
+</dl><a NAME="E5TreeWidget.addTopLevelItems" ID="E5TreeWidget.addTopLevelItems"></a>
+<h4>E5TreeWidget.addTopLevelItems</h4>
+<b>addTopLevelItems</b>(<i>items</i>)
+<p>
+        Public method to add a list of top level items.
+</p><dl>
+<dt><i>items</i></dt>
+<dd>
+items to be added as top level items (list of QTreeWidgetItem)
+</dd>
+</dl><a NAME="E5TreeWidget.allItems" ID="E5TreeWidget.allItems"></a>
+<h4>E5TreeWidget.allItems</h4>
+<b>allItems</b>(<i></i>)
+<p>
+        Public method to get a list of all items.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of all items (list of QTreeWidgetItem)
+</dd>
+</dl><a NAME="E5TreeWidget.appendToParentItem" ID="E5TreeWidget.appendToParentItem"></a>
+<h4>E5TreeWidget.appendToParentItem</h4>
+<b>appendToParentItem</b>(<i>parent, item</i>)
+<p>
+        Public method to append an item to a parent item.
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+text of the parent item (string) or
+            the parent item (QTreeWidgetItem)
+</dd><dt><i>item</i></dt>
+<dd>
+item to be appended (QTreeWidgetItem)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating success (boolean)
+</dd>
+</dl><a NAME="E5TreeWidget.clear" ID="E5TreeWidget.clear"></a>
+<h4>E5TreeWidget.clear</h4>
+<b>clear</b>(<i></i>)
+<p>
+        Public slot to clear the tree.
+</p><a NAME="E5TreeWidget.deleteItem" ID="E5TreeWidget.deleteItem"></a>
+<h4>E5TreeWidget.deleteItem</h4>
+<b>deleteItem</b>(<i>item</i>)
+<p>
+        Public method to delete an item.
+</p><dl>
+<dt><i>item</i></dt>
+<dd>
+item to be deleted (QTreeWidgetItem)
+</dd>
+</dl><a NAME="E5TreeWidget.deleteItems" ID="E5TreeWidget.deleteItems"></a>
+<h4>E5TreeWidget.deleteItems</h4>
+<b>deleteItems</b>(<i>items</i>)
+<p>
+        Public method to delete a list of items.
+</p><dl>
+<dt><i>items</i></dt>
+<dd>
+items to be deleted (list of QTreeWidgetItem)
+</dd>
+</dl><a NAME="E5TreeWidget.filterString" ID="E5TreeWidget.filterString"></a>
+<h4>E5TreeWidget.filterString</h4>
+<b>filterString</b>(<i>filter</i>)
+<p>
+        Public slot to set a new filter.
+</p><dl>
+<dt><i>filter</i></dt>
+<dd>
+filter to be set (string)
+</dd>
+</dl><a NAME="E5TreeWidget.insertTopLevelItem" ID="E5TreeWidget.insertTopLevelItem"></a>
+<h4>E5TreeWidget.insertTopLevelItem</h4>
+<b>insertTopLevelItem</b>(<i>index, item</i>)
+<p>
+        Public method to insert a top level item.
+</p><dl>
+<dt><i>index</i></dt>
+<dd>
+index for the insertion (integer)
+</dd><dt><i>item</i></dt>
+<dd>
+item to be inserted as a top level item (QTreeWidgetItem)
+</dd>
+</dl><a NAME="E5TreeWidget.insertTopLevelItems" ID="E5TreeWidget.insertTopLevelItems"></a>
+<h4>E5TreeWidget.insertTopLevelItems</h4>
+<b>insertTopLevelItems</b>(<i>index, items</i>)
+<p>
+        Public method to insert a list of top level items.
+</p><dl>
+<dt><i>index</i></dt>
+<dd>
+index for the insertion (integer)
+</dd><dt><i>items</i></dt>
+<dd>
+items to be inserted as top level items (list of QTreeWidgetItem)
+</dd>
+</dl><a NAME="E5TreeWidget.mousePressEvent" ID="E5TreeWidget.mousePressEvent"></a>
+<h4>E5TreeWidget.mousePressEvent</h4>
+<b>mousePressEvent</b>(<i>evt</i>)
+<p>
+        Protected method handling mouse press events.
+</p><dl>
+<dt><i>evt</i></dt>
+<dd>
+mouse press event (QMouseEvent)
+</dd>
+</dl><a NAME="E5TreeWidget.prependToParentItem" ID="E5TreeWidget.prependToParentItem"></a>
+<h4>E5TreeWidget.prependToParentItem</h4>
+<b>prependToParentItem</b>(<i>parent, item</i>)
+<p>
+        Public method to prepend an item to a parent item.
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+text of the parent item (string) or
+            the parent item (QTreeWidgetItem)
+</dd><dt><i>item</i></dt>
+<dd>
+item to be prepended (QTreeWidgetItem)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating success (boolean)
+</dd>
+</dl><a NAME="E5TreeWidget.setDefaultItemShowMode" ID="E5TreeWidget.setDefaultItemShowMode"></a>
+<h4>E5TreeWidget.setDefaultItemShowMode</h4>
+<b>setDefaultItemShowMode</b>(<i>mode</i>)
+<p>
+        Public method to set the default item show mode.
+</p><dl>
+<dt><i>mode</i></dt>
+<dd>
+default mode (ItemsCollapsed, ItemsExpanded)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric5.E5Gui.html	Mon Jul 30 19:18:58 2012 +0200
+++ b/Documentation/Source/index-eric5.E5Gui.html	Mon Jul 30 19:19:29 2012 +0200
@@ -105,6 +105,9 @@
 </tr><tr>
 <td><a href="eric5.E5Gui.E5TreeView.html">E5TreeView</a></td>
 <td>Module implementing specialized tree views.</td>
+</tr><tr>
+<td><a href="eric5.E5Gui.E5TreeWidget.html">E5TreeWidget</a></td>
+<td>Module implementing specialized tree views.</td>
 </tr>
 </table>
 </body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/E5Gui/E5TreeWidget.py	Mon Jul 30 19:19:29 2012 +0200
@@ -0,0 +1,272 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2012 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing specialized tree views.
+"""
+
+from PyQt4.QtCore import pyqtSignal, Qt
+from PyQt4.QtGui import QTreeWidget, QTreeWidgetItem, QAbstractItemView
+
+
+class E5TreeWidget(QTreeWidget):
+    """
+    Class implementing an extended tree widget.
+    
+    @signal itemControlClicked(QTreeWidgetItem) emitted after a Ctrl-Click
+            on an item
+    @signal itemMiddleButtonClicked(QTreeWidgetItem) emitted after a click
+            of the middle button on an item
+    """
+    ItemsCollapsed = 0
+    ItemsExpanded = 1
+    
+    itemControlClicked = pyqtSignal(QTreeWidgetItem)
+    itemMiddleButtonClicked = pyqtSignal(QTreeWidgetItem)
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.__refreshAllItemsNeeded = True
+        self.__allTreeItems = []
+        self.__showMode = E5TreeWidget.ItemsCollapsed
+        
+        self.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
+        
+        self.itemChanged.connect(self.__scheduleRefresh)
+    
+    def setDefaultItemShowMode(self, mode):
+        """
+        Public method to set the default item show mode.
+        
+        @param mode default mode (ItemsCollapsed, ItemsExpanded)
+        """
+        assert mode in [E5TreeWidget.ItemsCollapsed, E5TreeWidget.ItemsExpanded]
+        
+        self.__showMode = mode
+    
+    def allItems(self):
+        """
+        Public method to get a list of all items.
+        
+        @return list of all items (list of QTreeWidgetItem)
+        """
+        if self.__refreshAllItemsNeeded:
+            self.__allTreeItems = []
+            self.__iterateAllItems(None)
+            self.__refreshAllItemsNeeded = False
+        
+        return self.__allTreeItems
+    
+    def appendToParentItem(self, parent, item):
+        """
+        Public method to append an item to a parent item.
+        
+        @param parent text of the parent item (string) or 
+            the parent item (QTreeWidgetItem)
+        @param item item to be appended (QTreeWidgetItem)
+        @return flag indicating success (boolean)
+        """
+        if isinstance(parent, QTreeWidgetItem):
+            if parent is None or parent.treeWidget() != self:
+                return False
+            parentItem = parent
+        elif isinstance(parent, str):
+            lst = self.findItems(parent, Qt.MatchExactly)
+            if not lst:
+                return False
+            parentItem = lst[0]
+            if parentItem is None:
+                return False
+        else:
+            raise RuntimeError("illegal type for parent")
+        
+        self.__allTreeItems.append(item)
+        parentItem.addChild(item)
+        return True
+    
+    def prependToParentItem(self, parent, item):
+        """
+        Public method to prepend an item to a parent item.
+        
+        @param parent text of the parent item (string) or 
+            the parent item (QTreeWidgetItem)
+        @param item item to be prepended (QTreeWidgetItem)
+        @return flag indicating success (boolean)
+        """
+        if isinstance(parent, QTreeWidgetItem):
+            if parent is None or parent.treeWidget() != self:
+                return False
+            parentItem = parent
+        elif isinstance(parent, str):
+            lst = self.findItems(parent, Qt.MatchExactly)
+            if not lst:
+                return False
+            parentItem = lst[0]
+            if parentItem is None:
+                return False
+        else:
+            raise RuntimeError("illegal type for parent")
+        
+        self.__allTreeItems.append(item)
+        parentItem.insertChild(0, item)
+        return True
+    
+    def addTopLevelItem(self, item):
+        """
+        Public method to add a top level item.
+        
+        @param item item to be added as a top level item (QTreeWidgetItem)
+        """
+        self.__allTreeItems.append(item)
+        super().addTopLevelItem(item)
+    
+    def addTopLevelItems(self, items):
+        """
+        Public method to add a list of top level items.
+        
+        @param items items to be added as top level items (list of QTreeWidgetItem)
+        """
+        self.__allTreeItems.extend(items)
+        super().addTopLevelItems(items)
+    
+    def insertTopLevelItem(self, index, item):
+        """
+        Public method to insert a top level item.
+        
+        @param index index for the insertion (integer)
+        @param item item to be inserted as a top level item (QTreeWidgetItem)
+        """
+        self.__allTreeItems.append(item)
+        super().insertTopLevelItem(index, item)
+    
+    def insertTopLevelItems(self, index, items):
+        """
+        Public method to insert a list of top level items.
+        
+        @param index index for the insertion (integer)
+        @param items items to be inserted as top level items (list of QTreeWidgetItem)
+        """
+        self.__allTreeItems.extend(items)
+        super().insertTopLevelItems(index, items)
+    
+    def deleteItem(self, item):
+        """
+        Public method to delete an item.
+        
+        @param item item to be deleted (QTreeWidgetItem)
+        """
+        if item in self.__allTreeItems:
+            self.__allTreeItems.remove(item)
+        
+        self.__refreshAllItemsNeeded = True
+        
+        del item
+    
+    def deleteItems(self, items):
+        """
+        Public method to delete a list of items.
+        
+        @param items items to be deleted (list of QTreeWidgetItem)
+        """
+        for item in items:
+            self.deleteItem(item)
+    
+    def filterString(self, filter):
+        """
+        Public slot to set a new filter.
+        
+        @param filter filter to be set (string)
+        """
+        self.expandAll()
+        allItems = self.allItems()
+        
+        if filter:
+            lFilter = filter.lower()
+            for itm in allItems:
+                itm.setHidden(lFilter not in itm.text(0).lower())
+                itm.setExpanded(True)
+            for index in range(self.topLevelItemCount()):
+                self.topLevelItem(index).setHidden(False)
+            
+            firstItm = self.topLevelItem(0)
+            belowItm = self.itemBelow(firstItm)
+            topLvlIndex = 0
+            while firstItm:
+                if lFilter in firstItm.text(0).lower():
+                    firstItm.setHidden(False)
+                elif not firstItm.parent() and not belowItm:
+                    firstItm.setHidden(True)
+                elif not belowItm:
+                    break
+                elif not firstItm.parent() and not belowItm.parent():
+                    firstItm.setHidden(True)
+                
+                topLvlIndex += 1
+                firstItm = self.topLevelItem(topLvlIndex)
+                belowItm = self.itemBelow(firstItm)
+        else:
+            for itm in allItems:
+                itm.setHidden(False)
+            for index in range(self.topLevelItemCount()):
+                self.topLevelItem(index).setHidden(False)
+            if self.__showMode == E5TreeWidget.ItemsCollapsed:
+                self.collapseAll()
+    
+    def clear(self):
+        """
+        Public slot to clear the tree.
+        """
+        self.__allTreeItems = []
+        super().clear()
+    
+    def __scheduleRefresh(self):
+        """
+        Private slot to schedule a refresh of the tree.
+        """
+        self.__refreshAllItemsNeeded = True
+    
+    def mousePressEvent(self, evt):
+        """
+        Protected method handling mouse press events.
+        
+        @param evt mouse press event (QMouseEvent)
+        """
+        if evt.modifiers() == Qt.ControlModifier and \
+           evt.buttons() == Qt.LeftButton:
+            self.itemControlClicked.emit(self.itemAt(evt.pos()))
+            return
+        elif evt.buttons() == Qt.MiddleButton:
+            self.itemMiddleButtonClicked.emit(self.itemAt(evt.pos()))
+            return
+        else:
+            super().mousePressEvent(evt)
+    
+    def __iterateAllItems(self, parent):
+        """
+        Private method to iterate over the child items of the parent.
+        
+        @param parent parent item to iterate (QTreeWidgetItem)
+        """
+        if parent:
+            count = parent.childCount()
+        else:
+            count = self.topLevelItemCount()
+        
+        for index in range(count):
+            if parent:
+                itm = parent.child(index)
+            else:
+                itm = self.topLevelItem(index)
+            
+            if itm.childCount() == 0:
+                self.__allTreeItems.append(itm)
+            
+            self.__iterateAllItems(itm)
--- a/eric5.e4p	Mon Jul 30 19:18:58 2012 +0200
+++ b/eric5.e4p	Mon Jul 30 19:19:29 2012 +0200
@@ -1037,6 +1037,7 @@
     <Source>Helpviewer/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationScriptInfoDialog.py</Source>
     <Source>E5Gui/E5ClickableLabel.py</Source>
     <Source>Helpviewer/AdBlock/AdBlockIcon.py</Source>
+    <Source>E5Gui/E5TreeWidget.py</Source>
   </Sources>
   <Forms>
     <Form>PyUnit/UnittestDialog.ui</Form>

eric ide

mercurial