Files
oak-editor/app/node
Mike-Solar e012f16083 feat: group OpenFX plugins under dedicated "OpenFX" category with sub-groups
All OpenFX plugins were previously hardcoded to return kCategoryUnknown,
  causing them to pile up under "Uncategorized" in the node creation menu.

  This commit introduces a two-level grouping system for OFX plugins:

  1. Add new kCategoryOpenFX top-level category
     - Node::CategoryID enum extended with kCategoryOpenFX
     - PluginNode::Category() now returns {kCategoryOpenFX}
     - Node::GetCategoryName() returns "OpenFX"

  2. Add secondary sub-grouping support
     - Node base class gains virtual SubCategory() method
     - PluginNode implements SubCategory() backed by sub_category_ member
     - sub_category_ is set in the constructor from the plugin's OFX context:
         Filter     → "Filter"
         Generator  → "Generator"
         Transition → "Transition"
         others     → "General"

  3. Update NodeFactory::CreateMenu()
     - When a node belongs to kCategoryOpenFX and provides a non-empty
       SubCategory(), creates a second-level submenu under "OpenFX"
     - Nodes without a sub-category are placed directly in the top menu

  Expected menu layout:
    OpenFX
      ├── Filter
      │     ├── ColorCorrect
      │     └── ...
      ├── Generator
      ├── Transition
      └── General

  All 4 test suites pass.
2026-05-14 21:05:29 +08:00
..
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-17 17:03:39 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-05-14 01:51:14 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00