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