Selection mechanism optimised (regex)
This commit is contained in:
parent
bd390d27f0
commit
8fc7e7b562
25
__init__.py
25
__init__.py
@ -6,10 +6,10 @@ import textual.widgets
|
|||||||
class MultiSelect(textual.widgets.Select):
|
class MultiSelect(textual.widgets.Select):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.__new_options__ = []
|
|
||||||
self.__seltion_states__ = {}
|
self.__seltion_states__ = {}
|
||||||
self.__default_value__ = True
|
self.__common_default_value__ = True
|
||||||
self.__selection_regex__ = ""
|
self.__selection_regex__ = ""
|
||||||
|
self.__regex_default_value__ = True
|
||||||
|
|
||||||
def __sorted_selection_keys__(self):
|
def __sorted_selection_keys__(self):
|
||||||
rv = list(self.__seltion_states__.keys())
|
rv = list(self.__seltion_states__.keys())
|
||||||
@ -17,18 +17,25 @@ class MultiSelect(textual.widgets.Select):
|
|||||||
return rv
|
return rv
|
||||||
|
|
||||||
def SetSelectionRegEx(self, regex: str) -> None:
|
def SetSelectionRegEx(self, regex: str) -> None:
|
||||||
|
if self.__selection_regex__ != regex:
|
||||||
|
self.__regex_default_value__ = self.__common_default_value__
|
||||||
self.__selection_regex__ = regex
|
self.__selection_regex__ = regex
|
||||||
self.set_options(self.__get_select_list__())
|
self.set_options(self.__get_select_list__())
|
||||||
|
|
||||||
def AddEntry(self, entry) -> None:
|
def AddEntry(self, entry) -> None:
|
||||||
if entry not in self.__new_options__ and entry not in self.__seltion_states__:
|
if entry not in self.__seltion_states__:
|
||||||
self.__seltion_states__[entry] = self.__default_value__
|
if self.__match__(entry):
|
||||||
self.__new_options__.append(entry)
|
self.__seltion_states__[entry] = self.__regex_default_value__
|
||||||
|
else:
|
||||||
|
self.__seltion_states__[entry] = self.__common_default_value__
|
||||||
|
|
||||||
def __toggle__(self, entry_num):
|
def __toggle__(self, entry_num):
|
||||||
if entry_num < 0:
|
if entry_num < 0:
|
||||||
if not self.__selection_regex__:
|
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__:
|
for key in self.__seltion_states__:
|
||||||
if self.__match__(key):
|
if self.__match__(key):
|
||||||
self.__seltion_states__[key] = entry_num == -1
|
self.__seltion_states__[key] = entry_num == -1
|
||||||
@ -57,12 +64,10 @@ class MultiSelect(textual.widgets.Select):
|
|||||||
return rv
|
return rv
|
||||||
|
|
||||||
def IsSelected(self, entry):
|
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):
|
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__())
|
self.set_options(self.__get_select_list__())
|
||||||
return super()._on_blur(event)
|
return super()._on_blur(event)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user