From 404bde0a9cf6a3eb7deff141706f76fc74376093 Mon Sep 17 00:00:00 2001 From: h Date: Sat, 31 Jan 2026 12:56:11 +0100 Subject: [PATCH] feat: display categories in user-defined order Replace alphabetical sorting with user-defined order from logic-plugin-manager. Categories now display according to their index property, preserving both top-level and nested category ordering as specified in Logic Pro. --- src/illogical/modules/models.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/illogical/modules/models.py b/src/illogical/modules/models.py index 7c198ab..cd14e4d 100644 --- a/src/illogical/modules/models.py +++ b/src/illogical/modules/models.py @@ -290,7 +290,7 @@ class CategoryTreeModel(QAbstractItemModel): top_level_item = CategoryTreeItem("Top Level", "Top Level", self._root) self._root.append_child(top_level_item) - for cat_path in sorted(categories): + for cat_path in categories: parts = cat_path.split(":") current_path = "" parent_item = self._root @@ -305,8 +305,22 @@ class CategoryTreeModel(QAbstractItemModel): parent_item = category_items[current_path] + self._sort_category_tree(self._root, logic) self.endResetModel() + def _sort_category_tree(self, item: CategoryTreeItem, logic: Logic) -> None: + def get_sort_key(path: str) -> tuple[int, str]: + if path in logic.categories: + return (logic.categories[path].index, path.lower()) + return (2**31 - 1, path.lower()) + + top_level = [c for c in item.children if c.full_path == "Top Level"] + others = [c for c in item.children if c.full_path != "Top Level"] + others.sort(key=lambda c: get_sort_key(c.full_path)) + item.children = top_level + others + for child in item.children: + self._sort_category_tree(child, logic) + def index( self, row: int, column: int, parent: QModelIndex | None = None ) -> QModelIndex: