eric6/E5Gui/E5TreeWidget.py

Wed, 28 Apr 2021 19:42:28 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 28 Apr 2021 19:42:28 +0200
changeset 8268
6b8128e0c9d1
parent 8234
fcb6b4b96274
permissions
-rw-r--r--

Modernized some code.

1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
7923
91e843545d9a Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7780
diff changeset
3 # Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing specialized tree views.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
8268
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
10 import enum
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
11
3656
441956d8fce5 Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3484
diff changeset
12 from PyQt5.QtCore import pyqtSignal, Qt
441956d8fce5 Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3484
diff changeset
13 from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QAbstractItemView
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
8268
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
16 class E5TreeWidgetItemsState(enum.Enum):
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
17 """
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
18 Class defining the items expansion state.
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
19 """
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
20 COLLAPSED = 0
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
21 EXPANDED = 1
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
22
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
23
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 class E5TreeWidget(QTreeWidget):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 Class implementing an extended tree widget.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @signal itemControlClicked(QTreeWidgetItem) emitted after a Ctrl-Click
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 on an item
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @signal itemMiddleButtonClicked(QTreeWidgetItem) emitted after a click
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 of the middle button on an item
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 itemControlClicked = pyqtSignal(QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 itemMiddleButtonClicked = pyqtSignal(QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 def __init__(self, parent=None):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 Constructor
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @param parent reference to the parent widget (QWidget)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
42 super().__init__(parent)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.__refreshAllItemsNeeded = True
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.__allTreeItems = []
8268
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
46 self.__showMode = E5TreeWidgetItemsState.COLLAPSED
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
48 self.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.itemChanged.connect(self.__scheduleRefresh)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 def setDefaultItemShowMode(self, mode):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 Public method to set the default item show mode.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
8268
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
56 @param mode default mode
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
57 @type E5TreeWidgetItemsState
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.__showMode = mode
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 def allItems(self):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 Public method to get a list of all items.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @return list of all items (list of QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 if self.__refreshAllItemsNeeded:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.__allTreeItems = []
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__iterateAllItems(None)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.__refreshAllItemsNeeded = False
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 return self.__allTreeItems
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 def appendToParentItem(self, parent, item):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 Public method to append an item to a parent item.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
2016
2bbc81fcce4a Fixed a few PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1969
diff changeset
78 @param parent text of the parent item (string) or
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 the parent item (QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 @param item item to be appended (QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 @return flag indicating success (boolean)
2953
703452a2876f Started correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
82 @exception RuntimeError raised to indicate an illegal type for
703452a2876f Started correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
83 the parent
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 """
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
85 if not isinstance(parent, (QTreeWidgetItem, str)):
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
86 raise RuntimeError("illegal type for parent")
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
87
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 if isinstance(parent, QTreeWidgetItem):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 if parent is None or parent.treeWidget() != self:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 return False
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 parentItem = parent
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
92 else:
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
93 lst = self.findItems(parent, Qt.MatchFlag.MatchExactly)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 if not lst:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 return False
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 parentItem = lst[0]
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 if parentItem is None:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 return False
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.__allTreeItems.append(item)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 parentItem.addChild(item)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 return True
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 def prependToParentItem(self, parent, item):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 Public method to prepend an item to a parent item.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
2016
2bbc81fcce4a Fixed a few PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1969
diff changeset
108 @param parent text of the parent item (string) or
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 the parent item (QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 @param item item to be prepended (QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 @return flag indicating success (boolean)
2953
703452a2876f Started correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
112 @exception RuntimeError raised to indicate an illegal type for
703452a2876f Started correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
113 the parent
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 """
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
115 if not isinstance(parent, (QTreeWidgetItem, str)):
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
116 raise RuntimeError("illegal type for parent")
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
117
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 if isinstance(parent, QTreeWidgetItem):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 if parent is None or parent.treeWidget() != self:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 return False
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 parentItem = parent
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
122 else:
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
123 lst = self.findItems(parent, Qt.MatchFlag.MatchExactly)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 if not lst:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 return False
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 parentItem = lst[0]
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 if parentItem is None:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 return False
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 self.__allTreeItems.append(item)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 parentItem.insertChild(0, item)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 return True
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 def addTopLevelItem(self, item):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 Public method to add a top level item.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 @param item item to be added as a top level item (QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 self.__allTreeItems.append(item)
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
141 super().addTopLevelItem(item)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 def addTopLevelItems(self, items):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 Public method to add a list of top level items.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146
2990
583beaf0b4b8 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2953
diff changeset
147 @param items items to be added as top level items
583beaf0b4b8 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2953
diff changeset
148 (list of QTreeWidgetItem)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 self.__allTreeItems.extend(items)
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
151 super().addTopLevelItems(items)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 def insertTopLevelItem(self, index, item):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 Public method to insert a top level item.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 @param index index for the insertion (integer)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 @param item item to be inserted as a top level item (QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 self.__allTreeItems.append(item)
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
161 super().insertTopLevelItem(index, item)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 def insertTopLevelItems(self, index, items):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 Public method to insert a list of top level items.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 @param index index for the insertion (integer)
2990
583beaf0b4b8 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2953
diff changeset
168 @param items items to be inserted as top level items
583beaf0b4b8 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2953
diff changeset
169 (list of QTreeWidgetItem)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 self.__allTreeItems.extend(items)
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
172 super().insertTopLevelItems(index, items)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 def deleteItem(self, item):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 Public method to delete an item.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 @param item item to be deleted (QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 if item in self.__allTreeItems:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.__allTreeItems.remove(item)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 self.__refreshAllItemsNeeded = True
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 del item
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 def deleteItems(self, items):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 Public method to delete a list of items.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 @param items items to be deleted (list of QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 for item in items:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 self.deleteItem(item)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
196 def filterString(self, filterStr):
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 Public slot to set a new filter.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
200 @param filterStr filter to be set (string)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 self.expandAll()
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 allItems = self.allItems()
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
205 if filterStr:
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
206 lFilter = filterStr.lower()
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 for itm in allItems:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 itm.setHidden(lFilter not in itm.text(0).lower())
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 itm.setExpanded(True)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 for index in range(self.topLevelItemCount()):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 self.topLevelItem(index).setHidden(False)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 firstItm = self.topLevelItem(0)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 belowItm = self.itemBelow(firstItm)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 topLvlIndex = 0
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 while firstItm:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 if lFilter in firstItm.text(0).lower():
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 firstItm.setHidden(False)
8228
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
219 elif (
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
220 not firstItm.parent() and
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
221 (not belowItm or not belowItm.parent())
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
222 ):
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 firstItm.setHidden(True)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 elif not belowItm:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 break
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 topLvlIndex += 1
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 firstItm = self.topLevelItem(topLvlIndex)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 belowItm = self.itemBelow(firstItm)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 else:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 for itm in allItems:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 itm.setHidden(False)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 for index in range(self.topLevelItemCount()):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 self.topLevelItem(index).setHidden(False)
8268
6b8128e0c9d1 Modernized some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8234
diff changeset
235 if self.__showMode == E5TreeWidgetItemsState.COLLAPSED:
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 self.collapseAll()
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 def clear(self):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 Public slot to clear the tree.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 self.__allTreeItems = []
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
243 super().clear()
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 def __scheduleRefresh(self):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 Private slot to schedule a refresh of the tree.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 self.__refreshAllItemsNeeded = True
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 def mousePressEvent(self, evt):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 Protected method handling mouse press events.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 @param evt mouse press event (QMouseEvent)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 """
7252
c5e3705073eb Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
257 if (
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
258 evt.modifiers() == Qt.KeyboardModifier.ControlModifier and
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
259 evt.buttons() == Qt.MouseButton.LeftButton
7252
c5e3705073eb Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
260 ):
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 self.itemControlClicked.emit(self.itemAt(evt.pos()))
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 return
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
263 elif evt.buttons() == Qt.MouseButton.MidButton:
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 self.itemMiddleButtonClicked.emit(self.itemAt(evt.pos()))
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 return
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 else:
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
267 super().mousePressEvent(evt)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 def __iterateAllItems(self, parent):
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 """
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 Private method to iterate over the child items of the parent.
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 @param parent parent item to iterate (QTreeWidgetItem)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 """
8234
fcb6b4b96274 Applied some more code simplifications suggested by the new Simplify checker (Y108: use ternary operator) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
275 count = parent.childCount() if parent else self.topLevelItemCount()
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 for index in range(count):
8234
fcb6b4b96274 Applied some more code simplifications suggested by the new Simplify checker (Y108: use ternary operator) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
278 itm = parent.child(index) if parent else self.topLevelItem(index)
1969
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 if itm.childCount() == 0:
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 self.__allTreeItems.append(itm)
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282
5522b3266c8b Added an extended tree widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 self.__iterateAllItems(itm)

eric ide

mercurial