24 , m_refreshAllItemsNeeded(true)
25 , m_showMode(ItemsCollapsed)
27 connect(
this, &QTreeWidget::itemChanged,
this, &TreeWidget::sheduleRefresh);
33 m_allTreeItems.clear();
36void TreeWidget::sheduleRefresh()
38 m_refreshAllItemsNeeded =
true;
43 m_allTreeItems.append(item);
44 QTreeWidget::addTopLevelItem(item);
49 m_allTreeItems.append(items);
50 QTreeWidget::addTopLevelItems(items);
55 m_allTreeItems.append(item);
56 QTreeWidget::insertTopLevelItem(index, item);
61 m_allTreeItems.append(items);
62 QTreeWidget::insertTopLevelItems(index, items);
65void TreeWidget::mousePressEvent(QMouseEvent* event)
67 if (event->modifiers() == Qt::ControlModifier) {
71 if (event->buttons() == Qt::MiddleButton) {
75 QTreeWidget::mousePressEvent(event);
78void TreeWidget::iterateAllItems(QTreeWidgetItem* parent)
80 int count = parent ? parent->childCount() : topLevelItemCount();
82 for (
int i = 0;
i < count;
i++) {
83 QTreeWidgetItem* item = parent ? parent->child(
i) : topLevelItem(
i);
85 if (item->childCount() == 0) {
86 m_allTreeItems.append(item);
89 iterateAllItems(item);
95 if (m_refreshAllItemsNeeded) {
96 m_allTreeItems.clear();
97 iterateAllItems(
nullptr);
98 m_refreshAllItemsNeeded =
false;
101 return m_allTreeItems;
106 const QList<QTreeWidgetItem*> _allItems =
allItems();
107 QList<QTreeWidgetItem*> parents;
108 bool stringIsEmpty =
string.isEmpty();
109 for (QTreeWidgetItem* item : _allItems) {
110 bool containsString = stringIsEmpty || item->text(0).contains(
string, Qt::CaseInsensitive);
111 if (containsString) {
112 item->setHidden(
false);
113 if (item->parent()) {
114 if (!parents.contains(item->parent())) {
115 parents << item->parent();
120 item->setHidden(
true);
121 if (item->parent()) {
122 item->parent()->setHidden(
true);
127 for (
int i = 0;
i < parents.size(); ++
i) {
128 QTreeWidgetItem* parentItem = parents.at(
i);
129 parentItem->setHidden(
false);
134 parentItem->setExpanded(
true);
137 if (parentItem->parent() && !parents.contains(parentItem->parent())) {
138 parents << parentItem->parent();
145 QList<QTreeWidgetItem*> list = findItems(parentText, Qt::MatchExactly);
146 if (list.isEmpty()) {
149 QTreeWidgetItem* parentItem = list.at(0);
154 m_allTreeItems.append(item);
155 parentItem->addChild(item);
161 if (!parent || parent->treeWidget() !=
this) {
165 m_allTreeItems.append(item);
166 parent->addChild(item);
172 QList<QTreeWidgetItem*> list = findItems(parentText, Qt::MatchExactly);
173 if (list.isEmpty()) {
176 QTreeWidgetItem* parentItem = list.at(0);
181 m_allTreeItems.append(item);
182 parentItem->insertChild(0, item);
188 if (!parent || parent->treeWidget() !=
this) {
192 m_allTreeItems.append(item);
193 parent->insertChild(0, item);
203 m_refreshAllItemsNeeded =
true;
210 m_refreshAllItemsNeeded =
true;