Selection mechanism optimised (regex)

This commit is contained in:
Dirk Alders 2025-07-26 15:46:49 +02:00
parent bd390d27f0
commit 8fc7e7b562

View File

@ -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)