2016-06-18 14:46:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*  dependency_editor.cpp                                                 */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                         This file is part of:                          */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                             GODOT ENGINE                               */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                        https://godotengine.org                         */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                                                                        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Permission is hereby granted, free of charge, to any person obtaining  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* a copy of this software and associated documentation files (the        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* "Software"), to deal in the Software without restriction, including    */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* without limitation the rights to use, copy, modify, merge, publish,    */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* distribute, sublicense, and/or sell copies of the Software, and to     */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* permit persons to whom the Software is furnished to do so, subject to  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* the following conditions:                                              */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                                                                        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* The above copyright notice and this permission notice shall be         */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* included in all copies or substantial portions of the Software.        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                                                                        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2018-01-05 00:50:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  "dependency_editor.h" 
  
						 
					
						
							
								
									
										
										
										
											2017-01-16 08:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-12 02:46:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "core/config/project_settings.h" 
  
						 
					
						
							
								
									
										
										
										
											2021-06-11 14:51:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "core/io/file_access.h" 
  
						 
					
						
							
								
									
										
										
										
											2018-09-11 18:13:45 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "core/io/resource_loader.h" 
  
						 
					
						
							
								
									
										
										
										
											2022-02-12 02:46:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "editor/editor_file_system.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "editor/editor_node.h" 
  
						 
					
						
							
								
									
										
										
										
											2022-07-31 21:14:15 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "editor/editor_settings.h" 
  
						 
					
						
							
								
									
										
										
										
											2023-04-07 18:59:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "editor/gui/editor_file_dialog.h" 
  
						 
					
						
							
								
									
										
										
										
											2024-01-15 13:14:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "editor/themes/editor_scale.h" 
  
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  "scene/gui/margin_container.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _searched ( const  String  & p_path )  {  
						 
					
						
							
								
									
										
										
										
											2022-05-13 15:04:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									HashMap < String ,  String >  dep_rename ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									dep_rename [ replacing ]  =  p_path ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ResourceLoader : : rename_dependencies ( editing ,  dep_rename ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_update_list ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_update_file ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-18 09:33:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyEditor : : _load_pressed ( Object  * p_item ,  int  p_cell ,  int  p_button ,  MouseButton  p_mouse_button )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( p_mouse_button  ! =  MouseButton : : LEFT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-24 22:58:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									TreeItem  * ti  =  Object : : cast_to < TreeItem > ( p_item ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									replacing  =  ti - > get_text ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									search - > set_title ( TTR ( " Search Replacement For: " )  +  "   "  +  replacing . get_file ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-23 15:29:50 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Set directory to closest existing directory.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									search - > set_current_dir ( replacing . get_base_dir ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									search - > clear_filters ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									List < String >  ext ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ResourceLoader : : get_recognized_extensions_for_type ( ti - > get_metadata ( 0 ) ,  & ext ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-24 15:46:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( const  String  & E  :  ext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-26 23:51:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										search - > add_filter ( " *. "  +  E ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-11 18:45:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									search - > popup_file_dialog ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 15:04:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyEditor : : _fix_and_find ( EditorFileSystemDirectory  * efsd ,  HashMap < String ,  HashMap < String ,  String > >  & candidates )  {  
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_subdir_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_fix_and_find ( efsd - > get_subdir ( i ) ,  candidates ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_file_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  file  =  efsd - > get_file ( i ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( ! candidates . has ( file ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											continue ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  path  =  efsd - > get_file_path ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-09 14:13:42 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										for  ( KeyValue < String ,  String >  & E  :  candidates [ file ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-09 03:42:46 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( E . value . is_empty ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-09 14:13:42 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												E . value  =  path ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											//must match the best, using subdirs
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-09 14:13:42 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											String  existing  =  E . value . replace_first ( " res:// " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											String  current  =  path . replace_first ( " res:// " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-09 14:13:42 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											String  lost  =  E . key . replace_first ( " res:// " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Vector < String >  existingv  =  existing . split ( " / " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-14 07:21:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											existingv . reverse ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											Vector < String >  currentv  =  current . split ( " / " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-14 07:21:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											currentv . reverse ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											Vector < String >  lostv  =  lost . split ( " / " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-14 07:21:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											lostv . reverse ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											int  existing_score  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											int  current_score  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											for  ( int  j  =  0 ;  j  <  lostv . size ( ) ;  j + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( j  <  existingv . size ( )  & &  lostv [ j ]  = =  existingv [ j ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													existing_score + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( j  <  currentv . size ( )  & &  lostv [ j ]  = =  currentv [ j ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													current_score + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( current_score  >  existing_score )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												//if it was the same, could track distance to new path but..
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-09 14:13:42 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												E . value  =  path ;  //replace by more accurate
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _fix_all ( )  {  
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 15:04:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									HashMap < String ,  HashMap < String ,  String > >  candidates ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-24 15:46:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( const  String  & E  :  missing )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-15 23:45:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										String  base  =  E . get_file ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										if  ( ! candidates . has ( base ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 15:04:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											candidates [ base ]  =  HashMap < String ,  String > ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-15 23:45:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										candidates [ base ] [ E ]  =  " " ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_fix_and_find ( EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) ,  candidates ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 15:04:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									HashMap < String ,  String >  remaps ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 15:04:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( KeyValue < String ,  HashMap < String ,  String > >  & E  :  candidates )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-09 14:13:42 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										for  ( const  KeyValue < String ,  String >  & F  :  E . value )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-09 03:42:46 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( ! F . value . is_empty ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-09 14:13:42 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												remaps [ F . key ]  =  F . value ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( remaps . size ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ResourceLoader : : rename_dependencies ( editing ,  remaps ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_update_list ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_update_file ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _update_file ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									EditorFileSystem : : get_singleton ( ) - > update_file ( editing ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _update_list ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									List < String >  deps ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ResourceLoader : : get_dependencies ( editing ,  & deps ,  true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tree - > clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									missing . clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									TreeItem  * root  =  tree - > create_item ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-17 18:22:52 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Ref < Texture2D >  folder  =  tree - > get_theme_icon ( SNAME ( " folder " ) ,  SNAME ( " FileDialog " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  broken  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-24 15:46:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( const  String  & n  :  deps )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										TreeItem  * item  =  tree - > create_item ( root ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  path ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  type ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 21:48:38 +05:45 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( n . contains ( " :: " ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											path  =  n . get_slice ( " :: " ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											type  =  n . get_slice ( " :: " ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											path  =  n ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											type  =  " Resource " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-23 16:01:18 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ResourceUID : : ID  uid  =  ResourceUID : : get_singleton ( ) - > text_to_id ( path ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( uid  ! =  ResourceUID : : INVALID_ID )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-11 23:47:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											// Dependency is in uid format, obtain proper path.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ResourceUID : : get_singleton ( ) - > has_id ( uid ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												path  =  ResourceUID : : get_singleton ( ) - > get_id_path ( uid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											}  else  if  ( n . get_slice_count ( " :: " )  > =  3 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												// If uid can't be found, try to use fallback path.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												path  =  n . get_slice ( " :: " ,  2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ERR_PRINT ( " Invalid dependency UID and fallback path. " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-23 16:01:18 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										String  name  =  path . get_file ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 15:43:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Ref < Texture2D >  icon  =  EditorNode : : get_singleton ( ) - > get_class_icon ( type ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										item - > set_text ( 0 ,  name ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										item - > set_icon ( 0 ,  icon ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										item - > set_metadata ( 0 ,  type ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										item - > set_text ( 1 ,  path ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! FileAccess : : exists ( path ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											item - > set_custom_color ( 1 ,  Color ( 1 ,  0.4 ,  0.3 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											missing . push_back ( path ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											broken  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										item - > add_button ( 1 ,  folder ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									fixdeps - > set_disabled ( ! broken ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : edit ( const  String  & p_path )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									editing  =  p_path ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_title ( TTR ( " Dependencies For: " )  +  "   "  +  p_path . get_file ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_update_list ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-11 18:45:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									popup_centered_ratio ( 0.4 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( EditorNode : : get_singleton ( ) - > is_scene_open ( p_path ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-25 01:54:29 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										EditorNode : : get_singleton ( ) - > show_warning ( vformat ( TTR ( " Scene '%s' is currently being edited. \n Changes will only take effect when reloaded. " ) ,  p_path . get_file ( ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									}  else  if  ( ResourceCache : : has ( p_path ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-25 01:54:29 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										EditorNode : : get_singleton ( ) - > show_warning ( vformat ( TTR ( " Resource '%s' is in use. \n Changes will only take effect when reloaded. " ) ,  p_path . get_file ( ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								DependencyEditor : : DependencyEditor ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									VBoxContainer  * vb  =  memnew ( VBoxContainer ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									vb - > set_name ( TTR ( " Dependencies " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									add_child ( vb ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-10 01:49:55 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									tree  =  memnew ( Tree ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-17 16:28:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tree - > set_auto_translate_mode ( AUTO_TRANSLATE_MODE_DISABLED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									tree - > set_columns ( 2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tree - > set_column_titles_visible ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-29 16:10:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tree - > set_column_title ( 0 ,  TTR ( " Resource " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 00:13:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tree - > set_column_clip_content ( 0 ,  true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tree - > set_column_expand_ratio ( 0 ,  2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-29 16:10:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tree - > set_column_title ( 1 ,  TTR ( " Path " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 00:13:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tree - > set_column_clip_content ( 1 ,  true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tree - > set_column_expand_ratio ( 1 ,  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									tree - > set_hide_root ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-18 09:33:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tree - > connect ( " button_clicked " ,  callable_mp ( this ,  & DependencyEditor : : _load_pressed ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									HBoxContainer  * hbc  =  memnew ( HBoxContainer ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Label  * label  =  memnew ( Label ( TTR ( " Dependencies: " ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-08 15:29:15 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									label - > set_theme_type_variation ( " HeaderSmall " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									hbc - > add_child ( label ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									hbc - > add_spacer ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									fixdeps  =  memnew ( Button ( TTR ( " Fix Broken " ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									hbc - > add_child ( fixdeps ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 09:40:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									fixdeps - > connect ( SceneStringName ( pressed ) ,  callable_mp ( this ,  & DependencyEditor : : _fix_all ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb - > add_child ( hbc ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MarginContainer  * mc  =  memnew ( MarginContainer ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									mc - > set_v_size_flags ( Control : : SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									mc - > add_child ( tree ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb - > add_child ( mc ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_title ( TTR ( " Dependency Editor " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									search  =  memnew ( EditorFileDialog ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-21 18:28:45 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									search - > connect ( " file_selected " ,  callable_mp ( this ,  & DependencyEditor : : _searched ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									search - > set_file_mode ( EditorFileDialog : : FILE_MODE_OPEN_FILE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									search - > set_title ( TTR ( " Search Replacement Resource: " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									add_child ( search ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/////////////////////////////////////
  
						 
					
						
							
								
									
										
										
										
											2021-11-26 00:53:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyEditorOwners : : _list_rmb_clicked ( int  p_item ,  const  Vector2  & p_pos ,  MouseButton  p_mouse_button_index )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( p_mouse_button_index  ! =  MouseButton : : RIGHT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-11-15 12:05:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									file_options - > clear ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-20 11:04:57 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									file_options - > reset_size ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-15 12:05:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_item  > =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-15 21:53:04 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										PackedInt32Array  selected_items  =  owners - > get_selected_items ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										bool  only_scenes_selected  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  ( int  i  =  0 ;  i  <  selected_items . size ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											int  item_idx  =  selected_items [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ResourceLoader : : get_resource_type ( owners - > get_item_text ( item_idx ) )  ! =  " PackedScene " )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												only_scenes_selected  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( only_scenes_selected )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 02:33:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											file_options - > add_icon_item ( get_editor_theme_icon ( SNAME ( " Load " ) ) ,  TTRN ( " Open Scene " ,  " Open Scenes " ,  selected_items . size ( ) ) ,  FILE_OPEN ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-15 21:53:04 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  if  ( selected_items . size ( )  = =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 02:33:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											file_options - > add_icon_item ( get_editor_theme_icon ( SNAME ( " Load " ) ) ,  TTR ( " Open " ) ,  FILE_OPEN ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 22:20:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-15 21:53:04 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 22:20:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-15 12:05:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-31 17:43:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									file_options - > set_position ( owners - > get_screen_position ( )  +  p_pos ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									file_options - > reset_size ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-15 12:05:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									file_options - > popup ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditorOwners : : _select_file ( int  p_idx )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									String  fpath  =  owners - > get_item_text ( p_idx ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-28 17:40:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									EditorNode : : get_singleton ( ) - > load_scene_or_resource ( fpath ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-15 12:05:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-11-15 21:53:04 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									hide ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 14:28:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									emit_signal ( SceneStringName ( confirmed ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-15 21:53:04 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditorOwners : : _empty_clicked ( const  Vector2  & p_pos ,  MouseButton  p_mouse_button_index )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( p_mouse_button_index  ! =  MouseButton : : LEFT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners - > deselect_all ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-15 12:05:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditorOwners : : _file_option ( int  p_option )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									switch  ( p_option )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  FILE_OPEN :  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 22:20:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											PackedInt32Array  selected_items  =  owners - > get_selected_items ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											for  ( int  i  =  0 ;  i  <  selected_items . size ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												int  item_idx  =  selected_items [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( item_idx  <  0  | |  item_idx  > =  owners - > get_item_count ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												_select_file ( item_idx ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-15 12:05:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								void  DependencyEditorOwners : : _fill_owners ( EditorFileSystemDirectory  * efsd )  {  
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! efsd )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_subdir_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_fill_owners ( efsd - > get_subdir ( i ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_file_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Vector < String >  deps  =  efsd - > get_file_deps ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										bool  found  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  ( int  j  =  0 ;  j  <  deps . size ( ) ;  j + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( deps [ j ]  = =  editing )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												found  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( ! found )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											continue ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 15:43:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Ref < Texture2D >  icon  =  EditorNode : : get_singleton ( ) - > get_class_icon ( efsd - > get_file_type ( i ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										owners - > add_item ( efsd - > get_file_path ( i ) ,  icon ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditorOwners : : show ( const  String  & p_path )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									editing  =  p_path ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners - > clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_fill_owners ( EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-11 18:45:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									popup_centered_ratio ( 0.3 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-06-03 01:56:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_title ( vformat ( TTR ( " Owners of: %s (Total: %d) " ) ,  p_path . get_file ( ) ,  owners - > get_item_count ( ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-27 10:36:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								DependencyEditorOwners : : DependencyEditorOwners ( )  {  
						 
					
						
							
								
									
										
										
										
											2017-11-15 12:05:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									file_options  =  memnew ( PopupMenu ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									add_child ( file_options ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 14:13:31 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									file_options - > connect ( SceneStringName ( id_pressed ) ,  callable_mp ( this ,  & DependencyEditorOwners : : _file_option ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners  =  memnew ( ItemList ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-23 18:29:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > set_auto_translate_mode ( AUTO_TRANSLATE_MODE_DISABLED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 22:20:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > set_select_mode ( ItemList : : SELECT_MULTI ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 00:53:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > connect ( " item_clicked " ,  callable_mp ( this ,  & DependencyEditorOwners : : _list_rmb_clicked ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-21 18:28:45 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > connect ( " item_activated " ,  callable_mp ( this ,  & DependencyEditorOwners : : _select_file ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-15 21:53:04 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > connect ( " empty_clicked " ,  callable_mp ( this ,  & DependencyEditorOwners : : _empty_clicked ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-15 12:05:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > set_allow_rmb_select ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									add_child ( owners ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								///////////////////////
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : _find_files_in_removed_folder ( EditorFileSystemDirectory  * efsd ,  const  String  & p_folder )  {  
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! efsd )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_subdir_count ( ) ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_find_files_in_removed_folder ( efsd - > get_subdir ( i ) ,  p_folder ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_file_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  file  =  efsd - > get_file_path ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ERR_FAIL_COND ( all_remove_files . has ( file ) ) ;  //We are deleting a directory which is contained in a directory we are deleting...
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										all_remove_files [ file ]  =  p_folder ;  //Point the file to the ancestor directory we are deleting so we know what to parent it under in the tree.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : _find_all_removed_dependencies ( EditorFileSystemDirectory  * efsd ,  Vector < RemovedDependency >  & p_removed )  {  
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! efsd )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_subdir_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										_find_all_removed_dependencies ( efsd - > get_subdir ( i ) ,  p_removed ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_file_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										const  String  path  =  efsd - > get_file_path ( i ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										//It doesn't matter if a file we are about to delete will have some of its dependencies removed too
 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( all_remove_files . has ( path ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											continue ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Vector < String >  all_deps  =  efsd - > get_file_deps ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  ( int  j  =  0 ;  j  <  all_deps . size ( ) ;  + + j )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( all_remove_files . has ( all_deps [ j ] ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												RemovedDependency  dep ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dep . file  =  path ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dep . file_type  =  efsd - > get_file_type ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dep . dependency  =  all_deps [ j ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dep . dependency_folder  =  all_remove_files [ all_deps [ j ] ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												p_removed . push_back ( dep ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-04 18:52:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : _find_localization_remaps_of_removed_files ( Vector < RemovedDependency >  & p_removed )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( KeyValue < String ,  String >  & files  :  all_remove_files )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										const  String  & path  =  files . key ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// Look for dependencies in the translation remaps.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ProjectSettings : : get_singleton ( ) - > has_setting ( " internationalization/locale/translation_remaps " ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:43:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Dictionary  remaps  =  GLOBAL_GET ( " internationalization/locale/translation_remaps " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-04 18:52:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( remaps . has ( path ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												RemovedDependency  dep ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dep . file  =  TTR ( " Localization remap " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dep . file_type  =  " " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dep . dependency  =  path ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dep . dependency_folder  =  files . value ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												p_removed . push_back ( dep ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-03-21 20:06:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											for  ( const  KeyValue < Variant ,  Variant >  & remap_kv  :  remaps )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												PackedStringArray  remapped_files  =  remap_kv . value ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												for  ( const  String  & remapped_file  :  remapped_files )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													int  splitter_pos  =  remapped_file . rfind_char ( ' : ' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													String  res_path  =  remapped_file . substr ( 0 ,  splitter_pos ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-04 18:52:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													if  ( res_path  = =  path )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-21 20:06:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
														String  locale_name  =  remapped_file . substr ( splitter_pos  +  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-04 18:52:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														RemovedDependency  dep ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-21 20:06:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
														dep . file  =  vformat ( TTR ( " Localization remap for path '%s' and locale '%s'. " ) ,  remap_kv . key ,  locale_name ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-04 18:52:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
														dep . file_type  =  " " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														dep . dependency  =  path ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														dep . dependency_folder  =  files . value ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														p_removed . push_back ( dep ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : _build_removed_dependency_tree ( const  Vector < RemovedDependency >  & p_removed )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners - > clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners - > create_item ( ) ;  // root
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 15:04:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									HashMap < String ,  TreeItem  * >  tree_items ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  p_removed . size ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemovedDependency  rd  =  p_removed [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										//Ensure that the dependency is already in the tree
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! tree_items . has ( rd . dependency ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( rd . dependency_folder . length ( )  >  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												//Ensure the ancestor folder is already in the tree
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( ! tree_items . has ( rd . dependency_folder ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													TreeItem  * folder_item  =  owners - > create_item ( owners - > get_root ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													folder_item - > set_text ( 0 ,  rd . dependency_folder ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 02:33:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													folder_item - > set_icon ( 0 ,  owners - > get_editor_theme_icon ( SNAME ( " Folder " ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													tree_items [ rd . dependency_folder ]  =  folder_item ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												TreeItem  * dependency_item  =  owners - > create_item ( tree_items [ rd . dependency_folder ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dependency_item - > set_text ( 0 ,  rd . dependency ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 02:33:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												dependency_item - > set_icon ( 0 ,  owners - > get_editor_theme_icon ( SNAME ( " Warning " ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												tree_items [ rd . dependency ]  =  dependency_item ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												TreeItem  * dependency_item  =  owners - > create_item ( owners - > get_root ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												dependency_item - > set_text ( 0 ,  rd . dependency ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 02:33:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												dependency_item - > set_icon ( 0 ,  owners - > get_editor_theme_icon ( SNAME ( " Warning " ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												tree_items [ rd . dependency ]  =  dependency_item ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										//List this file under this dependency
 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 15:43:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Ref < Texture2D >  icon  =  EditorNode : : get_singleton ( ) - > get_class_icon ( rd . file_type ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										TreeItem  * file_item  =  owners - > create_item ( tree_items [ rd . dependency ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										file_item - > set_text ( 0 ,  rd . file ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										file_item - > set_icon ( 0 ,  icon ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : _show_files_to_delete_list ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files_to_delete_list - > clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( const  String  & s  :  dirs_to_delete )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  t  =  s . trim_prefix ( " res:// " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										files_to_delete_list - > add_item ( t ,  Ref < Texture2D > ( ) ,  false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( const  String  & s  :  files_to_delete )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  t  =  s . trim_prefix ( " res:// " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										files_to_delete_list - > add_item ( t ,  Ref < Texture2D > ( ) ,  false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : show ( const  Vector < String >  & p_folders ,  const  Vector < String >  & p_files )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									all_remove_files . clear ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dirs_to_delete . clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files_to_delete . clear ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									owners - > clear ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  p_folders . size ( ) ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  folder  =  p_folders [ i ] . ends_with ( " / " )  ?  p_folders [ i ]  :  ( p_folders [ i ]  +  " / " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_find_files_in_removed_folder ( EditorFileSystem : : get_singleton ( ) - > get_filesystem_path ( folder ) ,  folder ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										dirs_to_delete . push_back ( folder ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  p_files . size ( ) ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										all_remove_files [ p_files [ i ] ]  =  String ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										files_to_delete . push_back ( p_files [ i ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_show_files_to_delete_list ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Vector < RemovedDependency >  removed_deps ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_find_all_removed_dependencies ( EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) ,  removed_deps ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-04 18:52:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_find_localization_remaps_of_removed_files ( removed_deps ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									removed_deps . sort ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-15 12:04:21 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( removed_deps . is_empty ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										vb_owners - > hide ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 12:03:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										text - > set_text ( TTR ( " Remove the selected files from the project? (Cannot be undone.) \n Depending on your filesystem configuration, the files will either be moved to the system trash or deleted permanently. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-20 11:04:57 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										reset_size ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-15 04:03:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_build_removed_dependency_tree ( removed_deps ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										vb_owners - > show ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 12:03:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										text - > set_text ( TTR ( " The files being removed are required by other resources in order for them to work. \n Remove them anyway? (Cannot be undone.) \n Depending on your filesystem configuration, the files will either be moved to the system trash or deleted permanently. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-15 04:03:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										popup_centered ( Size2 ( 500 ,  350 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-09 14:36:16 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									EditorFileSystem : : get_singleton ( ) - > scan_changes ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : ok_pressed ( )  {  
						 
					
						
							
								
									
										
										
										
											2023-01-23 12:01:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( const  KeyValue < String ,  String >  & E  :  all_remove_files )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  file  =  E . key ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ResourceCache : : has ( file ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Ref < Resource >  res  =  ResourceCache : : get_ref ( file ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											emit_signal ( SNAME ( " resource_removed " ) ,  res ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-11 21:37:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											res - > set_path ( " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-23 12:01:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-30 22:54:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-02-28 11:32:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									HashMap < String ,  StringName >  setting_path_map ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( const  StringName  & setting  :  path_project_settings )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										const  String  path  =  ResourceUID : : ensure_path ( GLOBAL_GET ( setting ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										setting_path_map [ path ]  =  setting ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-08-08 16:20:08 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  project_settings_modified  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-14 20:10:28 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( const  String  & file  :  files_to_delete )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-05 17:19:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										// If the file we are deleting for e.g. the main scene, default environment,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// or audio bus layout, we must clear its definition in Project Settings.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-02-28 11:32:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										const  StringName  * setting_name  =  setting_path_map . getptr ( file ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( setting_name )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ProjectSettings : : get_singleton ( ) - > set ( * setting_name ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-05 17:19:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-20 10:40:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-12-14 20:10:28 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										const  String  path  =  OS : : get_singleton ( ) - > get_resource_dir ( )  +  file . replace_first ( " res:// " ,  " / " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-24 09:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										print_verbose ( " Moving to trash:  "  +  path ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-11 21:37:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Error  err  =  OS : : get_singleton ( ) - > move_to_trash ( path ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( err  ! =  OK )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-14 20:10:28 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											EditorNode : : get_singleton ( ) - > add_io_error ( TTR ( " Cannot remove: " )  +  " \n "  +  file  +  " \n " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-13 20:17:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-14 20:10:28 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											emit_signal ( SNAME ( " file_removed " ) ,  file ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-11 21:37:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-08-08 16:20:08 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( project_settings_modified )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ProjectSettings : : get_singleton ( ) - > save ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-11 21:37:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 00:07:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( dirs_to_delete . is_empty ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 14:02:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										// If we only deleted files we should only need to tell the file system about the files we touched.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										for  ( int  i  =  0 ;  i  <  files_to_delete . size ( ) ;  + + i )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											EditorFileSystem : : get_singleton ( ) - > update_file ( files_to_delete [ i ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  ( int  i  =  0 ;  i  <  dirs_to_delete . size ( ) ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											String  path  =  OS : : get_singleton ( ) - > get_resource_dir ( )  +  dirs_to_delete [ i ] . replace_first ( " res:// " ,  " / " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-24 09:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											print_verbose ( " Moving to trash:  "  +  path ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Error  err  =  OS : : get_singleton ( ) - > move_to_trash ( path ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( err  ! =  OK )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												EditorNode : : get_singleton ( ) - > add_io_error ( TTR ( " Cannot remove: " )  +  " \n "  +  dirs_to_delete [ i ]  +  " \n " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-13 20:17:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-17 18:22:52 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												emit_signal ( SNAME ( " folder_removed " ) ,  dirs_to_delete [ i ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-01 23:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-25 10:15:11 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 14:02:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										EditorFileSystem : : get_singleton ( ) - > scan_changes ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 14:02:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// If some files/dirs would be deleted, favorite dirs need to be updated
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Vector < String >  previous_favorites  =  EditorSettings : : get_singleton ( ) - > get_favorites ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Vector < String >  new_favorites ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 14:02:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  previous_favorites . size ( ) ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( previous_favorites [ i ] . ends_with ( " / " ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-06 16:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( ! dirs_to_delete . has ( previous_favorites [ i ] ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 14:02:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												new_favorites . push_back ( previous_favorites [ i ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 14:02:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-06 16:20:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( ! files_to_delete . has ( previous_favorites [ i ] ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 14:02:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												new_favorites . push_back ( previous_favorites [ i ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 14:02:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-25 23:59:49 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 14:02:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( new_favorites . size ( )  <  previous_favorites . size ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										EditorSettings : : get_singleton ( ) - > set_favorites ( new_favorites ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-13 20:17:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : _bind_methods ( )  {  
						 
					
						
							
								
									
										
										
										
											2023-01-23 12:01:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SIGNAL ( MethodInfo ( " resource_removed " ,  PropertyInfo ( Variant : : OBJECT ,  " obj " ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-13 20:17:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SIGNAL ( MethodInfo ( " file_removed " ,  PropertyInfo ( Variant : : STRING ,  " file " ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SIGNAL ( MethodInfo ( " folder_removed " ,  PropertyInfo ( Variant : : STRING ,  " folder " ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								DependencyRemoveDialog : : DependencyRemoveDialog ( )  {  
						 
					
						
							
								
									
										
										
										
											2022-07-07 19:31:19 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_ok_button_text ( TTR ( " Remove " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-15 04:03:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									VBoxContainer  * vb  =  memnew ( VBoxContainer ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									vb - > set_h_size_flags ( Control : : SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									add_child ( vb ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-10 01:49:55 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									text  =  memnew ( Label ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-22 11:57:16 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									text - > set_focus_mode ( Control : : FOCUS_ACCESSIBILITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									vb - > add_child ( text ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Label  * files_to_delete_label  =  memnew ( Label ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files_to_delete_label - > set_theme_type_variation ( " HeaderSmall " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files_to_delete_label - > set_text ( TTR ( " Files to be deleted: " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb - > add_child ( files_to_delete_label ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files_to_delete_list  =  memnew ( ItemList ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files_to_delete_list - > set_h_size_flags ( Control : : SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files_to_delete_list - > set_v_size_flags ( Control : : SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files_to_delete_list - > set_custom_minimum_size ( Size2 ( 0 ,  94 )  *  EDSCALE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-21 09:55:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files_to_delete_list - > set_accessibility_name ( TTRC ( " Files to be Deleted " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									vb - > add_child ( files_to_delete_list ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb_owners  =  memnew ( VBoxContainer ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb_owners - > set_h_size_flags ( Control : : SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb_owners - > set_v_size_flags ( Control : : SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb - > add_child ( vb_owners ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Label  * owners_label  =  memnew ( Label ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners_label - > set_theme_type_variation ( " HeaderSmall " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners_label - > set_text ( TTR ( " Dependencies of files to be deleted: " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb_owners - > add_child ( owners_label ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									owners  =  memnew ( Tree ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-17 16:28:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > set_auto_translate_mode ( AUTO_TRANSLATE_MODE_DISABLED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									owners - > set_hide_root ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > set_custom_minimum_size ( Size2 ( 0 ,  94 )  *  EDSCALE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-21 09:55:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > set_accessibility_name ( TTRC ( " Dependencies " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 09:42:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									vb_owners - > add_child ( owners ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > set_v_size_flags ( Control : : SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-02-28 11:32:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									List < PropertyInfo >  property_list ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ProjectSettings : : get_singleton ( ) - > get_property_list ( & property_list ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( const  PropertyInfo  & pi  :  property_list )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( pi . type  = =  Variant : : STRING  & &  pi . hint  = =  PROPERTY_HINT_FILE )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											path_project_settings . push_back ( pi . name ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//////////////
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-12-28 17:40:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DependencyErrorDialog : : show ( const  String  & p_for_file ,  const  Vector < String >  & report )  {  
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									for_file  =  p_for_file ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_title ( TTR ( " Error loading: " )  +  "   "  +  p_for_file . get_file ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									files - > clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-02 01:20:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									TreeItem  * root  =  files - > create_item ( nullptr ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  report . size ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  dep ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  type  =  " Object " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										dep  =  report [ i ] . get_slice ( " :: " ,  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( report [ i ] . get_slice_count ( " :: " )  >  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											type  =  report [ i ] . get_slice ( " :: " ,  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 15:43:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Ref < Texture2D >  icon  =  EditorNode : : get_singleton ( ) - > get_class_icon ( type ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										TreeItem  * ti  =  files - > create_item ( root ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ti - > set_text ( 0 ,  dep ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ti - > set_icon ( 0 ,  icon ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-15 04:03:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyErrorDialog : : ok_pressed ( )  {  
						 
					
						
							
								
									
										
										
										
											2024-12-28 17:40:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									EditorNode : : get_singleton ( ) - > load_scene_or_resource ( for_file ,  true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyErrorDialog : : custom_action ( const  String  & )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									EditorNode : : get_singleton ( ) - > fix_dependencies ( for_file ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								DependencyErrorDialog : : DependencyErrorDialog ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									VBoxContainer  * vb  =  memnew ( VBoxContainer ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									add_child ( vb ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-10 01:49:55 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									files  =  memnew ( Tree ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-17 16:28:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_auto_translate_mode ( AUTO_TRANSLATE_MODE_DISABLED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									files - > set_hide_root ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-02 04:44:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									vb - > add_margin_child ( TTR ( " Load failed due to missing dependencies: " ) ,  files ,  true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_v_size_flags ( Control : : SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-15 04:03:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_min_size ( Size2 ( 500 ,  220 )  *  EDSCALE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-07 19:31:19 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_ok_button_text ( TTR ( " Open Anyway " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_cancel_button_text ( TTR ( " Close " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									text  =  memnew ( Label ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-22 11:57:16 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									text - > set_focus_mode ( Control : : FOCUS_ACCESSIBILITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									vb - > add_child ( text ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									text - > set_text ( TTR ( " Which action should be taken? " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									fdep  =  add_button ( TTR ( " Fix Dependencies " ) ,  true ,  " fixdeps " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_title ( TTR ( " Errors loading! " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//////////////////////////////////////////////////////////////////////
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : ok_pressed ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									paths . clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_find_to_delete ( files - > get_root ( ) ,  paths ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-15 12:04:21 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( paths . is_empty ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-21 16:34:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									delete_confirm - > set_text ( vformat ( TTR ( " Permanently delete %d item(s)? (No undo!) " ) ,  paths . size ( ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									delete_confirm - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bool  OrphanResourcesDialog : : _fill_owners ( EditorFileSystemDirectory  * efsd ,  HashMap < String ,  int >  & refs ,  TreeItem  * p_parent )  {  
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! efsd )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-18 21:37:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  has_children  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_subdir_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-02 01:20:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										TreeItem  * dir_item  =  nullptr ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( p_parent )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											dir_item  =  files - > create_item ( p_parent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											dir_item - > set_text ( 0 ,  efsd - > get_subdir ( i ) - > get_name ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-17 18:22:52 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											dir_item - > set_icon ( 0 ,  files - > get_theme_icon ( SNAME ( " folder " ) ,  SNAME ( " FileDialog " ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										bool  children  =  _fill_owners ( efsd - > get_subdir ( i ) ,  refs ,  dir_item ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( p_parent )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! children )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												memdelete ( dir_item ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-18 21:37:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												has_children  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  efsd - > get_file_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! p_parent )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Vector < String >  deps  =  efsd - > get_file_deps ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											for  ( int  j  =  0 ;  j  <  deps . size ( ) ;  j + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( ! refs . has ( deps [ j ] ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													refs [ deps [ j ] ]  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											String  path  =  efsd - > get_file_path ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! refs . has ( path ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												TreeItem  * ti  =  files - > create_item ( p_parent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ti - > set_cell_mode ( 0 ,  TreeItem : : CELL_MODE_CHECK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ti - > set_text ( 0 ,  efsd - > get_file ( i ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ti - > set_editable ( 0 ,  true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												String  type  =  efsd - > get_file_type ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 15:43:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Ref < Texture2D >  icon  =  EditorNode : : get_singleton ( ) - > get_class_icon ( type ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												ti - > set_icon ( 0 ,  icon ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												int  ds  =  efsd - > get_file_deps ( i ) . size ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ti - > set_text ( 1 ,  itos ( ds ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( ds )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 02:33:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													ti - > add_button ( 1 ,  files - > get_editor_theme_icon ( SNAME ( " GuiVisibilityVisible " ) ) ,  - 1 ,  false ,  TTR ( " Show Dependencies " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ti - > set_metadata ( 0 ,  path ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-18 21:37:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												has_children  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-18 21:37:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  has_children ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : refresh ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									HashMap < String ,  int >  refs ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-02 01:20:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_fill_owners ( EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) ,  refs ,  nullptr ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									TreeItem  * root  =  files - > create_item ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_fill_owners ( EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) ,  refs ,  root ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : show ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									refresh ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-11 18:45:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									popup_centered_ratio ( 0.4 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 12:53:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : _find_to_delete ( TreeItem  * p_item ,  List < String >  & r_paths )  {  
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									while  ( p_item )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( p_item - > get_cell_mode ( 0 )  = =  TreeItem : : CELL_MODE_CHECK  & &  p_item - > is_checked ( 0 ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 12:53:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											r_paths . push_back ( p_item - > get_metadata ( 0 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-07 21:07:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( p_item - > get_first_child ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 12:53:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											_find_to_delete ( p_item - > get_first_child ( ) ,  r_paths ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_item  =  p_item - > get_next ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : _delete_confirm ( )  {  
						 
					
						
							
								
									
										
										
										
											2022-03-23 11:08:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Ref < DirAccess >  da  =  DirAccess : : create ( DirAccess : : ACCESS_RESOURCES ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-24 15:46:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( const  String  & E  :  paths )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-15 23:45:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										da - > remove ( E ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										EditorFileSystem : : get_singleton ( ) - > update_file ( E ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									refresh ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-18 09:33:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : _button_pressed ( Object  * p_item ,  int  p_column ,  int  p_id ,  MouseButton  p_button )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( p_button  ! =  MouseButton : : LEFT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-24 22:58:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									TreeItem  * ti  =  Object : : cast_to < TreeItem > ( p_item ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									String  path  =  ti - > get_metadata ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									dep_edit - > edit ( path ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								OrphanResourcesDialog : : OrphanResourcesDialog ( )  {  
						 
					
						
							
								
									
										
										
										
											2019-06-15 04:03:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_title ( TTR ( " Orphan Resource Explorer " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									delete_confirm  =  memnew ( ConfirmationDialog ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-07 19:31:19 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_ok_button_text ( TTR ( " Delete " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-15 04:03:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									add_child ( delete_confirm ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									dep_edit  =  memnew ( DependencyEditor ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									add_child ( dep_edit ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 14:28:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									delete_confirm - > connect ( SceneStringName ( confirmed ) ,  callable_mp ( this ,  & OrphanResourcesDialog : : _delete_confirm ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-15 04:03:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_hide_on_ok ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									VBoxContainer  * vbc  =  memnew ( VBoxContainer ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									add_child ( vbc ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-10 01:49:55 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files  =  memnew ( Tree ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-17 16:28:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_auto_translate_mode ( AUTO_TRANSLATE_MODE_DISABLED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_columns ( 2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files - > set_column_titles_visible ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 00:13:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_column_custom_minimum_width ( 1 ,  100  *  EDSCALE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_column_expand ( 0 ,  true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 00:13:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_column_clip_content ( 0 ,  true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_column_expand ( 1 ,  false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 00:13:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_column_clip_content ( 1 ,  true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-29 16:10:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_column_title ( 0 ,  TTR ( " Resource " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_column_title ( 1 ,  TTR ( " Owns " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > set_hide_root ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									vbc - > add_margin_child ( TTR ( " Resources Without Explicit Ownership: " ) ,  files ,  true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-18 09:33:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									files - > connect ( " button_clicked " ,  callable_mp ( this ,  & OrphanResourcesDialog : : _button_pressed ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}