Skip to content

Commit 3edf358

Browse files
committed
Keep categories in registration order, but have a way to sort them
1 parent faf702a commit 3edf358

3 files changed

Lines changed: 31 additions & 3 deletions

File tree

include/nodes/internal/DataModelRegistry.hpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class NODE_EDITOR_PUBLIC DataModelRegistry
3535
using RegisteredModelsCategoryMap = std::unordered_map<QString, QString>;
3636
using RegisteredModelsOrder = std::vector<QString>;
3737
using CategoriesSet = std::set<QString>;
38+
using CategoriesOrder = std::vector<QString>;
3839

3940
using RegisteredTypeConvertersMap = std::map<TypeConverterId, TypeConverter>;
4041

@@ -59,12 +60,16 @@ class NODE_EDITOR_PUBLIC DataModelRegistry
5960

6061
QString const name = uniqueModel->name();
6162

62-
if (_registeredModels.count(name) == 0)
63+
if (!_registeredModels.count(name))
6364
{
6465
_registeredModels[name] = std::move(uniqueModel);
65-
_categories.insert(category);
6666
_registeredModelsOrder.push_back(name);
6767
_registeredModelsCategory[name] = category;
68+
69+
if (!_categories.count(category)) {
70+
_categories.insert(category);
71+
_categoriesOrder.push_back(category);
72+
}
6873
}
6974
}
7075

@@ -91,6 +96,10 @@ class NODE_EDITOR_PUBLIC DataModelRegistry
9196

9297
CategoriesSet const &categories() const;
9398

99+
CategoriesOrder const &categoriesOrder() const;
100+
101+
void sortCategories();
102+
94103
TypeConverter getTypeConverter(NodeDataType const & d1,
95104
NodeDataType const & d2) const;
96105

@@ -100,6 +109,8 @@ class NODE_EDITOR_PUBLIC DataModelRegistry
100109

101110
CategoriesSet _categories;
102111

112+
CategoriesOrder _categoriesOrder;
113+
103114
RegisteredModelsMap _registeredModels;
104115

105116
RegisteredModelsOrder _registeredModelsOrder;

src/DataModelRegistry.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "DataModelRegistry.hpp"
22

3+
#include <algorithm>
4+
35
#include <QtCore/QFile>
46
#include <QtWidgets/QMessageBox>
57

@@ -53,6 +55,21 @@ categories() const
5355
}
5456

5557

58+
DataModelRegistry::CategoriesOrder const &
59+
DataModelRegistry::
60+
categoriesOrder() const
61+
{
62+
return _categoriesOrder;
63+
}
64+
65+
void
66+
DataModelRegistry::
67+
sortCategories()
68+
{
69+
std::sort(_categoriesOrder.begin(), _categoriesOrder.end());
70+
}
71+
72+
5673
TypeConverter
5774
DataModelRegistry::
5875
getTypeConverter(NodeDataType const & d1,

src/FlowView.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ contextMenuEvent(QContextMenuEvent *event)
133133
modelMenu.addAction(treeViewAction);
134134

135135
QMap<QString, QTreeWidgetItem*> topLevelItems;
136-
for (auto const &cat : _scene->registry().categories())
136+
for (auto const &cat : _scene->registry().categoriesOrder())
137137
{
138138
auto item = new QTreeWidgetItem(treeView);
139139
item->setText(0, cat);

0 commit comments

Comments
 (0)