Skip to content

Commit 15a270d

Browse files
Quincunx271Justin Bassett
authored and
Justin Bassett
committed
Keep categories in registration order, but have a way to sort them
1 parent 3025983 commit 15a270d

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

include/nodes/internal/DataModelRegistry.hpp

+19-4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class NODE_EDITOR_PUBLIC DataModelRegistry
3838
using RegisteredModelsCategoryMap = std::unordered_map<QString, QString>;
3939
using RegisteredModelsOrder = std::vector<QString>;
4040
using CategoriesSet = std::set<QString>;
41+
using CategoriesOrder = std::vector<QString>;
4142

4243
using RegisteredTypeConvertersMap = std::map<TypeConverterId, TypeConverter>;
4344

@@ -89,6 +90,10 @@ class NODE_EDITOR_PUBLIC DataModelRegistry
8990

9091
CategoriesSet const &categories() const;
9192

93+
CategoriesOrder const &categoriesOrder() const;
94+
95+
void sortCategories();
96+
9297
TypeConverter getTypeConverter(NodeDataType const & d1,
9398
NodeDataType const & d2) const;
9499

@@ -100,6 +105,8 @@ class NODE_EDITOR_PUBLIC DataModelRegistry
100105

101106
RegisteredModelCreatorsMap _registeredItemCreators;
102107

108+
CategoriesOrder _categoriesOrder;
109+
103110
RegisteredModelsOrder _registeredModelsOrder;
104111

105112
RegisteredTypeConvertersMap _registeredTypeConverters;
@@ -130,12 +137,16 @@ class NODE_EDITOR_PUBLIC DataModelRegistry
130137
registerModelImpl(RegistryItemCreator creator, QString const &category )
131138
{
132139
const QString name = ModelType::Name();
133-
if (_registeredItemCreators.count(name) == 0)
140+
if (!_registeredItemCreators.count(name))
134141
{
135142
_registeredItemCreators[name] = std::move(creator);
136-
_categories.insert(category);
137143
_registeredModelsOrder.push_back(name);
138144
_registeredModelsCategory[name] = category;
145+
146+
if (!_categories.count(category)) {
147+
_categories.insert(category);
148+
_categoriesOrder.push_back(category);
149+
}
139150
}
140151
}
141152

@@ -144,12 +155,16 @@ class NODE_EDITOR_PUBLIC DataModelRegistry
144155
registerModelImpl(RegistryItemCreator creator, QString const &category )
145156
{
146157
const QString name = creator()->name();
147-
if (_registeredItemCreators.count(name) == 0)
158+
if (!_registeredItemCreators.count(name))
148159
{
149160
_registeredItemCreators[name] = std::move(creator);
150-
_categories.insert(category);
151161
_registeredModelsOrder.push_back(name);
152162
_registeredModelsCategory[name] = category;
163+
164+
if (!_categories.count(category)) {
165+
_categories.insert(category);
166+
_categoriesOrder.push_back(category);
167+
}
153168
}
154169
}
155170

src/DataModelRegistry.cpp

+17
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

+1-1
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)