@@ -1027,7 +1027,16 @@ def on_treeview_selection_changed(self, selection, pane):
10271027
10281028 busy = self ._scan_in_progress > 0
10291029
1030+ is_single_foldable_row = False
1031+ if (selection .count_selected_rows () == 1 ):
1032+ path = selection .get_selected_rows ()[1 ][0 ]
1033+ iter = self .model .get_iter (path )
1034+ os_path = self .model .value_path (iter , pane )
1035+ is_single_foldable_row = self .model .is_folder (iter , pane , os_path )
1036+
10301037 get_action ("DirCompare" ).set_sensitive (True )
1038+ get_action ("DirCollapseRecursively" ).set_sensitive (is_single_foldable_row )
1039+ get_action ("DirExpandRecursively" ).set_sensitive (is_single_foldable_row )
10311040 get_action ("Hide" ).set_sensitive (True )
10321041 get_action ("DirDelete" ).set_sensitive (
10331042 is_valid and not busy )
@@ -1184,6 +1193,27 @@ def on_button_diff_clicked(self, button):
11841193 for row in selected :
11851194 self .run_diff_from_iter (self .model .get_iter (row ))
11861195
1196+ def on_collapse_recursive_clicked (self , action ):
1197+ pane = self ._get_focused_pane ()
1198+ root_path = self ._get_selected_paths (pane )[0 ]
1199+ filter_model = Gtk .TreeModelFilter (child_model = self .model , virtual_root = root_path )
1200+ paths_to_collapse = []
1201+ filter_model .foreach (self .append_paths_to_collapse , paths_to_collapse )
1202+ paths_to_collapse .insert (0 , root_path )
1203+
1204+ for path in reversed (paths_to_collapse ):
1205+ self .treeview [pane ].collapse_row (path )
1206+
1207+ def append_paths_to_collapse (self , filter_model , filter_path , filter_iter , paths_to_collapse ):
1208+ path = filter_model .convert_path_to_child_path (filter_path )
1209+ paths_to_collapse .append (path )
1210+
1211+ def on_expand_recursive_clicked (self , action ):
1212+ pane = self ._get_focused_pane ()
1213+ paths = self ._get_selected_paths (pane )
1214+ for path in paths :
1215+ self .treeview [pane ].expand_row (path , True )
1216+
11871217 def on_button_copy_left_clicked (self , button ):
11881218 self .copy_selected (- 1 )
11891219
0 commit comments