From 8808b71653b8a0f4e8e9cdd3b78194f6c3a5d8ba Mon Sep 17 00:00:00 2001 From: MohamedASLI Date: Mon, 15 Sep 2025 19:04:49 +0200 Subject: [PATCH 1/2] fix : add _get_all_ctx() method to retrieve checked items from all contexts (not only filtered or currently displayed group) --- pyrevitlib/pyrevit/forms/__init__.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pyrevitlib/pyrevit/forms/__init__.py b/pyrevitlib/pyrevit/forms/__init__.py index d5481fc8b..6144a38d9 100644 --- a/pyrevitlib/pyrevit/forms/__init__.py +++ b/pyrevitlib/pyrevit/forms/__init__.py @@ -1016,6 +1016,16 @@ def _get_active_ctx(self): else: return self._context + def _get_all_ctx(self): + """Get all context items across all groups""" + if isinstance(self._context, dict): + all_items = [] + for group_items in self._context.values(): + all_items.extend(group_items) + return all_items + else: + return self._context + def _list_options(self, option_filter=None): if option_filter: self.checkall_b.Content = "Check" @@ -1062,12 +1072,12 @@ def _unwrap_options(options): def _get_options(self): if self.multiselect: if self.return_all: - return [x for x in self._get_active_ctx()] + return [x for x in self._get_all_ctx()] else: return self._unwrap_options( [ x - for x in self._get_active_ctx() + for x in self._get_all_ctx() if x.state or x in self.list_lb.SelectedItems ] ) From 84d69747f3d0c0e23848b5a37e129d95fca09a88 Mon Sep 17 00:00:00 2001 From: MohamedASLI Date: Tue, 23 Sep 2025 14:36:06 +0200 Subject: [PATCH 2/2] turn get_all_ctx into a generator --- pyrevitlib/pyrevit/forms/__init__.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/pyrevitlib/pyrevit/forms/__init__.py b/pyrevitlib/pyrevit/forms/__init__.py index 6144a38d9..0e84f579e 100644 --- a/pyrevitlib/pyrevit/forms/__init__.py +++ b/pyrevitlib/pyrevit/forms/__init__.py @@ -1018,13 +1018,19 @@ def _get_active_ctx(self): def _get_all_ctx(self): """Get all context items across all groups""" - if isinstance(self._context, dict): - all_items = [] - for group_items in self._context.values(): - all_items.extend(group_items) - return all_items + ctx = self._context + if ctx is None: + return + + if isinstance(ctx, dict): + for group_items in ctx.values(): + for item in group_items: + yield item + elif isinstance(ctx, (list, tuple, set)): + for item in ctx: + yield item else: - return self._context + yield ctx def _list_options(self, option_filter=None): if option_filter: @@ -1072,7 +1078,7 @@ def _unwrap_options(options): def _get_options(self): if self.multiselect: if self.return_all: - return [x for x in self._get_all_ctx()] + return list(self._get_all_ctx()) else: return self._unwrap_options( [