nodeeditor icon indicating copy to clipboard operation
nodeeditor copied to clipboard

Keep registration order as order for context menu

Open Quincunx271 opened this issue 6 years ago • 2 comments

Implements #147

I kept _categories and _registeredModelsCategory as-is. Someone could've called those functions and stored the variables, and removing them, but especially replacing it with a new data-type, would break their code (replacing could silently break in some cases). My ideal would've been to just change the categories() function to return the std::vector and to change the registeredModelsCategoryAssociation to return a separate map type that preserves insertion order (similar to LinkedHashMap in Java; I would've just combined std::vector and std::unordered_map).

If removing / changing _categories or _registeredModelsCategory is desired, I'll make the change and update this PR.

Note: if we do remove categories(), such that _categories becomes inaccessible through any external functions, it'd be best to change its type from std::set to std::unordered_set

Quincunx271 avatar Apr 30 '18 21:04 Quincunx271

examples/calculator

This is the registration code (edited to make this comment smaller):

  auto ret = std::make_shared<DataModelRegistry>();

  ret->registerModel<NumberSourceDataModel>("Sources");
  ret->registerModel<NumberDisplayDataModel>("Displays");
  ret->registerModel<AdditionModel>("Operators");
  ret->registerModel<SubtractionModel>("Operators");
  ret->registerModel<MultiplicationModel>("Operators");
  ret->registerModel<DivisionModel>("Operators");
  ret->registerModel<ModuloModel>("Operators");

Before this PR:

image

After this PR:

image

The categories can still be sorted after this PR by calling ret->sortCategories()

Quincunx271 avatar Apr 30 '18 21:04 Quincunx271

Just found that version 2.1.3 still not support manually context menu settings.

charlietsao avatar Dec 21 '20 12:12 charlietsao