From 8fc7e7b5622ec8b53be05f2bbe82b4bc46e24709 Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Sat, 26 Jul 2025 15:46:49 +0200 Subject: [PATCH] Selection mechanism optimised (regex) --- __init__.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/__init__.py b/__init__.py index deabb0d..6a7ef6b 100644 --- a/__init__.py +++ b/__init__.py @@ -6,10 +6,10 @@ import textual.widgets class MultiSelect(textual.widgets.Select): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.__new_options__ = [] self.__seltion_states__ = {} - self.__default_value__ = True + self.__common_default_value__ = True self.__selection_regex__ = "" + self.__regex_default_value__ = True def __sorted_selection_keys__(self): rv = list(self.__seltion_states__.keys()) @@ -17,18 +17,25 @@ class MultiSelect(textual.widgets.Select): return rv def SetSelectionRegEx(self, regex: str) -> None: - self.__selection_regex__ = regex - self.set_options(self.__get_select_list__()) + if self.__selection_regex__ != regex: + self.__regex_default_value__ = self.__common_default_value__ + self.__selection_regex__ = regex + self.set_options(self.__get_select_list__()) def AddEntry(self, entry) -> None: - if entry not in self.__new_options__ and entry not in self.__seltion_states__: - self.__seltion_states__[entry] = self.__default_value__ - self.__new_options__.append(entry) + if entry not in self.__seltion_states__: + if self.__match__(entry): + self.__seltion_states__[entry] = self.__regex_default_value__ + else: + self.__seltion_states__[entry] = self.__common_default_value__ def __toggle__(self, entry_num): if entry_num < 0: if not self.__selection_regex__: - self.__default_value__ = entry_num == -1 + self.__common_default_value__ = entry_num == -1 + self.__regex_default_value__ = self.__common_default_value__ + else: + self.__regex_default_value__ = entry_num == -1 for key in self.__seltion_states__: if self.__match__(key): self.__seltion_states__[key] = entry_num == -1 @@ -57,12 +64,10 @@ class MultiSelect(textual.widgets.Select): return rv def IsSelected(self, entry): - return self.__seltion_states__.get(entry, self.__default_value__) + # The default should not be needed, if the entry had been added befor asking for Selction + return self.__seltion_states__.get(entry, self.__common_default_value__) def _on_blur(self, event): - for entry in self.__new_options__: - self.__seltion_states__[entry] = self.__default_value__ - self.__new_options__ = [] self.set_options(self.__get_select_list__()) return super()._on_blur(event)