@@ -76,8 +76,6 @@ createSceneMenu(QPointF const scenePos)
7676{
7777 QMenu* modelMenu = new QMenu ();
7878
79- auto skipText = QStringLiteral (" skip me" );
80-
8179 // Add filterbox to the context menu
8280 auto * txtBox = new QLineEdit (modelMenu);
8381 txtBox->setPlaceholderText (QStringLiteral (" Filter" ));
@@ -101,39 +99,38 @@ createSceneMenu(QPointF const scenePos)
10199
102100 auto registry = _graphModel.dataModelRegistry ();
103101
104- QMap<QString, QTreeWidgetItem*> topLevelItems;
105102 for (auto const & cat : registry->categories ())
106103 {
107104 auto item = new QTreeWidgetItem (treeView);
108105 item->setText (0 , cat);
109- item->setData (0 , Qt::UserRole, skipText);
110- topLevelItems[cat] = item;
106+ item->setFlags (item->flags () & ~Qt::ItemIsSelectable);
111107 }
112108
113109 for (auto const & assoc : registry->registeredModelsCategoryAssociation ())
114110 {
115- auto parent = topLevelItems[assoc.second ];
116- auto item = new QTreeWidgetItem (parent);
111+ QList<QTreeWidgetItem*> parent = treeView->findItems (assoc.second ,
112+ Qt::MatchExactly);
113+
114+ if (parent.count () <= 0 )
115+ continue ;
116+
117+ auto item = new QTreeWidgetItem (parent.first ());
117118 item->setText (0 , assoc.first );
118- item->setData (0 , Qt::UserRole, assoc.first );
119119 }
120120
121121 treeView->expandAll ();
122122
123123 connect (treeView, &QTreeWidget::itemClicked,
124124 [this ,
125125 modelMenu,
126- skipText,
127126 scenePos](QTreeWidgetItem* item, int )
128127 {
129- QString modelName = item->data (0 , Qt::UserRole).toString ();
130-
131- if (modelName == skipText)
128+ if (!(item->flags () & (Qt::ItemIsSelectable)))
132129 {
133130 return ;
134131 }
135132
136- NodeId nodeId = this ->_graphModel .addNode (modelName );
133+ NodeId nodeId = this ->_graphModel .addNode (item-> text ( 0 ) );
137134
138135 if (nodeId != InvalidNodeId)
139136 {
@@ -147,17 +144,16 @@ createSceneMenu(QPointF const scenePos)
147144
148145 // Setup filtering
149146 connect (txtBox, &QLineEdit::textChanged,
150- [& ](const QString& text)
147+ [treeView ](const QString& text)
151148 {
152- for (auto & topLvlItem : topLevelItems)
149+ QTreeWidgetItemIterator it (treeView, QTreeWidgetItemIterator::NoChildren);
150+ while (*it)
153151 {
154- for (int i = 0 ; i < topLvlItem->childCount (); ++i)
155- {
156- auto child = topLvlItem->child (i);
157- auto modelName = child->data (0 , Qt::UserRole).toString ();
158- const bool match = (modelName.contains (text, Qt::CaseInsensitive));
159- child->setHidden (!match);
160- }
152+ auto modelName = (*it)->data (0 , Qt::UserRole).toString ();
153+ const bool match = (modelName.contains (text, Qt::CaseInsensitive));
154+ (*it)->setHidden (!match);
155+
156+ ++it;
161157 }
162158 });
163159
0 commit comments