Skip to content

Commit b981e31

Browse files
committed
perf: improvements for some tree fns
Refactoring to improve performance of the following functions: - tree_set_open() - tree_open() - internal function _tree_open() - display_item() - scroll_to_item()
1 parent febf54f commit b981e31

File tree

1 file changed

+25
-24
lines changed

1 file changed

+25
-24
lines changed

tksheet/sheet.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4670,51 +4670,52 @@ def tree_set_open(self, open_ids: Iterator[str]) -> Sheet:
46704670
deselect_all=False,
46714671
data_indexes=True,
46724672
)
4673-
open_ids = set(filter(self.exists, open_ids))
46744673
self.RI.tree_open_ids = set()
4675-
if open_ids:
4676-
self.show_rows(
4677-
rows=self._tree_open(open_ids),
4678-
redraw=False,
4679-
deselect_all=False,
4680-
)
4674+
open_ids = filter(self.exists, open_ids)
4675+
try:
4676+
first_id = next(open_ids)
4677+
except StopIteration:
4678+
return self.set_refresh_timer()
4679+
self.show_rows(
4680+
rows=self._tree_open(chain((first_id,), open_ids)),
4681+
redraw=False,
4682+
deselect_all=False,
4683+
)
46814684
return self.set_refresh_timer()
46824685

4683-
def _tree_open(self, items: set[str]) -> list[int]:
4686+
def _tree_open(self, items: Iterator[str]) -> Generator[int]:
46844687
"""
46854688
Only meant for internal use
46864689
"""
4687-
to_open = []
46884690
disp_set = set(self.MT.displayed_rows)
46894691
index = self.MT._row_index
46904692
rns = self.RI.rns
46914693
open_ids = self.RI.tree_open_ids
46924694
descendants = self.RI.get_iid_descendants
4693-
for item in filter(items.__contains__, self.get_children()):
4694-
if index[rns[item]].children:
4695+
for item in items:
4696+
if item in rns and index[rns[item]].children:
46954697
open_ids.add(item)
46964698
if rns[item] in disp_set:
46974699
for did in descendants(item, check_open=True):
46984700
disp_set.add(rns[did])
4699-
to_open.append(rns[did])
4700-
return to_open
4701+
yield rns[did]
47014702

4702-
def tree_open(self, *items, redraw: bool = True) -> Sheet:
4703+
def tree_open(self, *items: str, redraw: bool = True) -> Sheet:
47034704
"""
47044705
If used without args all items are opened
47054706
"""
4706-
to_open = self._tree_open(items) if (items := set(unpack(items))) else self._tree_open(set(self.get_children()))
4707+
to_show = self._tree_open(items) if (items := set(unpack(items))) else self._tree_open(self.get_children())
47074708
return self.show_rows(
4708-
rows=to_open,
4709+
rows=to_show,
47094710
redraw=redraw,
47104711
deselect_all=False,
47114712
)
47124713

4713-
def _tree_close(self, items: Iterator[str]) -> list[int]:
4714+
def _tree_close(self, items: Iterator[str]) -> set[int]:
47144715
"""
47154716
Only meant for internal use
47164717
"""
4717-
to_close = set()
4718+
to_hide = set()
47184719
disp_set = set(self.MT.displayed_rows)
47194720
index = self.MT._row_index
47204721
rns = self.RI.rns
@@ -4725,16 +4726,16 @@ def _tree_close(self, items: Iterator[str]) -> list[int]:
47254726
open_ids.discard(item)
47264727
if rns[item] in disp_set:
47274728
for did in descendants(item, check_open=True):
4728-
to_close.add(rns[did])
4729-
return to_close
4729+
to_hide.add(rns[did])
4730+
return to_hide
47304731

4731-
def tree_close(self, *items, redraw: bool = True) -> Sheet:
4732+
def tree_close(self, *items: str, redraw: bool = True) -> Sheet:
47324733
"""
47334734
If used without args all items are closed
47344735
"""
4735-
to_close = self._tree_close(unpack(items)) if items else self._tree_close(self.get_children())
4736+
to_hide = self._tree_close(unpack(items)) if items else self._tree_close(self.get_children())
47364737
return self.hide_rows(
4737-
rows=to_close,
4738+
rows=to_hide,
47384739
redraw=redraw,
47394740
deselect_all=False,
47404741
data_indexes=True,
@@ -5110,7 +5111,7 @@ def display_item(self, item: str, redraw: bool = False) -> Sheet:
51105111
"""
51115112
if not self.item_displayed(item) and self.RI.iid_parent(item):
51125113
self.show_rows(
5113-
rows=self._tree_open(list(self.RI.get_iid_ancestors(item))),
5114+
rows=self._tree_open(self.RI.get_iid_ancestors(item)),
51145115
redraw=False,
51155116
deselect_all=False,
51165117
)

0 commit comments

Comments
 (0)