2016-06-18 14:46:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*  dependency_editor.cpp                                                */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                       This file is part of:                           */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                           GODOT ENGINE                                */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                    http://www.godotengine.org                         */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2017-01-01 22:01:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.                 */  
						 
					
						
							
								
									
										
										
										
											2016-06-18 14:46:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*                                                                       */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* 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.                */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  "dependency_editor.h" 
  
						 
					
						
							
								
									
										
										
										
											2017-01-16 08:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  "os/file_access.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "scene/gui/margin_container.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "io/resource_loader.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "editor_node.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _notification ( int  p_what ) {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _searched ( const  String &  p_path )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Map < String , String >  dep_rename ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									dep_rename [ replacing ] = p_path ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ResourceLoader : : rename_dependencies ( editing , dep_rename ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_update_list ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_update_file ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _load_pressed ( Object *  p_item , int  p_cell , int  p_button ) {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									TreeItem  * ti = p_item - > cast_to < TreeItem > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									String  fname  =  ti - > get_text ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									search - > clear_filters ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									List < String >  ext ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ResourceLoader : : get_recognized_extensions_for_type ( ti - > get_metadata ( 0 ) , & ext ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( List < String > : : Element  * E = ext . front ( ) ; E ; E = E - > next ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										search - > add_filter ( " * " + E - > get ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									search - > popup_centered_ratio ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _fix_and_find ( EditorFileSystemDirectory  * efsd ,  Map < String , Map < String , String >  > &  candidates ) {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! candidates . has ( file ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  path  =  efsd - > get_file_path ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for ( Map < String , String > : : Element  * E = candidates [ file ] . front ( ) ; E ; E = E - > next ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( E - > get ( ) = = String ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												E - > get ( ) = path ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											//must match the best, using subdirs
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											String  existing = E - > get ( ) . replace_first ( " res:// " , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											String  current = path . replace_first ( " res:// " , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											String  lost = E - > key ( ) . replace_first ( " res:// " , " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Vector < String >  existingv = existing . split ( " / " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											existingv . invert ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Vector < String >  currentv = current . split ( " / " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											currentv . invert ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Vector < String >  lostv = lost . split ( " / " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											lostv . invert ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											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..
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												E - > get ( ) = path ;  //replace by more accurate
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _fix_all ( ) {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Map < String , Map < String , String >  >  candidates ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( List < String > : : Element  * E = missing . front ( ) ; E ; E = E - > next ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  base  =  E - > get ( ) . get_file ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! candidates . has ( base ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											candidates [ base ] = Map < String , String > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										candidates [ base ] [ E - > get ( ) ] = " " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_fix_and_find ( EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) , candidates ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Map < String , String >  remaps ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( Map < String , Map < String , String >  > : : Element  * E = candidates . front ( ) ; E ; E = E - > next ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  ( Map < String , String > : : Element  * F = E - > get ( ) . front ( ) ; F ; F = F - > next ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( F - > get ( ) ! = String ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												remaps [ F - > key ( ) ] = F - > get ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Ref < Texture >  folder  =  get_icon ( " folder " , " FileDialog " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  broken = false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for ( List < String > : : Element  * E = deps . front ( ) ; E ; E = E - > next ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										TreeItem  * item  =  tree - > create_item ( root ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  n  =  E - > get ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  path ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  type ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( n . find ( " :: " ) ! = - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											path  =  n . get_slice ( " :: " , 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											type  =  n . get_slice ( " :: " , 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											path = n ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											type = " Resource " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  name  =  path . get_file ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Ref < Texture >  icon ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( has_icon ( type , " EditorIcons " ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											icon = get_icon ( type , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											icon = get_icon ( " Object " , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										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 ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									popup_centered_ratio ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( EditorNode : : get_singleton ( ) - > is_scene_open ( p_path ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										EditorNode : : get_singleton ( ) - > show_warning ( vformat ( TTR ( " Scene '%s' is currently being edited. \n Changes will not take effect unless reloaded. " ) , p_path . get_file ( ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									}  else  if  ( ResourceCache : : has ( p_path ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										EditorNode : : get_singleton ( ) - > show_warning ( vformat ( TTR ( " Resource '%s' is in use. \n Changes will take effect when reloaded. " ) , p_path . get_file ( ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditor : : _bind_methods ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-02 23:03:46 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( _MD ( " _searched " ) , & DependencyEditor : : _searched ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( _MD ( " _load_pressed " ) , & DependencyEditor : : _load_pressed ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( _MD ( " _fix_all " ) , & DependencyEditor : : _fix_all ) ; 
							 
						 
					
						
							
								
									
										
										
										
											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  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tree - > set_column_title ( 1 , TTR ( " Path " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									tree - > set_hide_root ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tree - > connect ( " button_pressed " , this , " _load_pressed " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									HBoxContainer  * hbc  =  memnew (  HBoxContainer  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Label  * label  =  memnew (  Label ( TTR ( " Dependencies: " ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									fixdeps - > connect ( " pressed " , this , " _fix_all " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb - > add_child ( hbc ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MarginContainer  * mc  =  memnew (  MarginContainer  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									mc - > set_v_size_flags ( SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									search - > connect ( " file_selected " , this , " _searched " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									search - > set_mode ( EditorFileDialog : : 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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/////////////////////////////////////
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyEditorOwners : : _fill_owners ( EditorFileSystemDirectory  * efsd )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! efsd ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										//print_line(":::"+efsd->get_file_path(i));
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										bool  found = false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for ( int  j = 0 ; j < deps . size ( ) ; j + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											//print_line("\t"+deps[j]+" vs "+editing);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( deps [ j ] = = editing )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												//print_line("found");
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												found = true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! found ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Ref < Texture >  icon ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  type = efsd - > get_file_type ( i ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( ! has_icon ( type , " EditorIcons " ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											icon = get_icon ( " Object " , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											icon = get_icon ( type , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										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 ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									popup_centered_ratio ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_title ( TTR ( " Owners Of: " ) + "   " + p_path . get_file ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								DependencyEditorOwners : : DependencyEditorOwners ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners  =  memnew (  ItemList  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									add_child ( owners ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-10 01:49:55 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								///////////////////////
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : _fill_owners ( EditorFileSystemDirectory  * efsd )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! efsd ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										//print_line(":::"+efsd->get_file_path(i));
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Set < String >  met ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for ( int  j = 0 ; j < deps . size ( ) ; j + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( files . has ( deps [ j ] ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												met . insert ( deps [ j ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! met . size ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										exist = true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Ref < Texture >  icon ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  type = efsd - > get_file_type ( i ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( ! has_icon ( type , " EditorIcons " ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											icon = get_icon ( " Object " , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											icon = get_icon ( type , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for ( Set < String > : : Element  * E = met . front ( ) ; E ; E = E - > next ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											String  which  =  E - > get ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! files [ which ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												TreeItem  * ti = owners - > create_item ( owners - > get_root ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ti - > set_text ( 0 , which . get_file ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												files [ which ] = ti ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											TreeItem  * ti = owners - > create_item ( files [ which ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ti - > set_text ( 0 , efsd - > get_file_path ( i ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ti - > set_icon ( 0 , icon ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : show ( const  Vector < String >  & to_erase )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									exist = false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners - > clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files . clear ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 00:32:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									owners - > create_item ( ) ;  // root
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									for ( int  i = 0 ; i < to_erase . size ( ) ; i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										files [ to_erase [ i ] ] = NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_fill_owners ( EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 21:43:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									if  ( exist )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										owners - > show ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-29 16:10:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										text - > set_text ( TTR ( " The files being removed are required by other resources in order for them to work. \n Remove them anyway? (no undo) " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										popup_centered_minsize ( Size2 ( 500 , 220 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										owners - > hide ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										text - > set_text ( TTR ( " Remove selected files from the project? (no undo) " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										popup_centered_minsize ( Size2 ( 400 , 100 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyRemoveDialog : : ok_pressed ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									DirAccess  * da  =  DirAccess : : create ( DirAccess : : ACCESS_RESOURCES ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( Map < String , TreeItem * > : : Element  * E = files . front ( ) ; E ; E = E - > next ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 21:43:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( ResourceCache : : has ( E - > key ( ) ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Resource  * res  =  ResourceCache : : get ( E - > key ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											res - > set_path ( " " ) ;  //clear reference to path
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										da - > remove ( E - > key ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										EditorFileSystem : : get_singleton ( ) - > update_file ( E - > key ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									memdelete ( da ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								DependencyRemoveDialog : : DependencyRemoveDialog ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									VBoxContainer  * vb  =  memnew (  VBoxContainer  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									add_child ( vb ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-10 01:49:55 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									text  =  memnew (  Label  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb - > add_child ( text ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners  =  memnew (  Tree  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners - > set_hide_root ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									vb - > add_child ( owners ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									owners - > set_v_size_flags ( SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									get_ok ( ) - > set_text ( TTR ( " Remove " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//////////////
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyErrorDialog : : show ( const  String &  p_for_file , const  Vector < String >  & report )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									TreeItem  * root  =  files - > create_item ( NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for ( int  i = 0 ; i < report . size ( ) ; i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  dep ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										String  type = " Object " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										dep = report [ i ] . get_slice ( " :: " , 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( report [ i ] . get_slice_count ( " :: " ) > 0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											type = report [ i ] . get_slice ( " :: " , 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Ref < Texture >  icon ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( ! has_icon ( type , " EditorIcons " ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											icon = get_icon ( " Object " , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											icon = get_icon ( type , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										TreeItem  * ti = files - > create_item ( root ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ti - > set_text ( 0 , dep ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ti - > set_icon ( 0 , icon ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									popup_centered_minsize ( Size2 ( 500 , 220 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DependencyErrorDialog : : ok_pressed ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									EditorNode : : get_singleton ( ) - > load_scene ( for_file , true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								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  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files - > set_hide_root ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									vb - > add_margin_child ( TTR ( " Scene failed to load due to missing dependencies: " ) , files , true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									files - > set_v_size_flags ( SIZE_EXPAND_FILL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									get_ok ( ) - > set_text ( TTR ( " Open Anyway " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-23 20:15:56 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									text  =  memnew (  Label  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( paths . empty ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-21 16:34:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									delete_confirm - > set_text ( vformat ( TTR ( " Permanently delete %d item(s)? (No undo!) " ) , paths . size ( ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									delete_confirm - > popup_centered_minsize ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bool  OrphanResourcesDialog : : _fill_owners ( EditorFileSystemDirectory  * efsd , HashMap < String , int > &  refs , TreeItem *  p_parent ) {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! efsd ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  has_childs = false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for ( int  i = 0 ; i < efsd - > get_subdir_count ( ) ; i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										TreeItem  * dir_item = NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( p_parent )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											dir_item  =  files - > create_item ( p_parent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											dir_item - > set_text ( 0 , efsd - > get_subdir ( i ) - > get_name ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											dir_item - > set_icon ( 0 , get_icon ( " folder " , " FileDialog " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										bool  children  =  _fill_owners ( efsd - > get_subdir ( i ) , refs , dir_item ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( p_parent )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! children )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												memdelete ( dir_item ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												has_childs = true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for ( int  i = 0 ; i < efsd - > get_file_count ( ) ; i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! p_parent )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Vector < String >  deps  =  efsd - > get_file_deps ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											//print_line(":::"+efsd->get_file_path(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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Ref < Texture >  icon ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-19 00:08:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												if  ( has_icon ( type , " EditorIcons " ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													icon = get_icon ( type , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													icon = get_icon ( " Object " , " EditorIcons " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ti - > set_icon ( 0 , icon ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												int  ds  =  efsd - > get_file_deps ( i ) . size ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ti - > set_text ( 1 , itos ( ds ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( ds )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													ti - > add_button ( 1 , get_icon ( " Visible " , " EditorIcons " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ti - > set_metadata ( 0 , path ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												has_childs = true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  has_childs ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : refresh ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									HashMap < String , int >  refs ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_fill_owners ( EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) , refs , NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files - > clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									TreeItem  * root = files - > create_item ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_fill_owners ( EditorFileSystem : : get_singleton ( ) - > get_filesystem ( ) , refs , root ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : show ( ) {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									refresh ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									popup_centered_ratio ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : _find_to_delete ( TreeItem *  p_item , List < String > &  paths )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									while ( p_item )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( p_item - > get_cell_mode ( 0 ) = = TreeItem : : CELL_MODE_CHECK  & &  p_item - > is_checked ( 0 ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											paths . push_back ( p_item - > get_metadata ( 0 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( p_item - > get_children ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											_find_to_delete ( p_item - > get_children ( ) , paths ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_item = p_item - > get_next ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : _delete_confirm ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									DirAccess  * da  =  DirAccess : : create ( DirAccess : : ACCESS_RESOURCES ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( List < String > : : Element  * E = paths . front ( ) ; E ; E = E - > next ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										da - > remove ( E - > get ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										EditorFileSystem : : get_singleton ( ) - > update_file ( E - > get ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									memdelete ( da ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									refresh ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : _button_pressed ( Object  * p_item , int  p_column ,  int  p_id )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									TreeItem  * ti = p_item - > cast_to < TreeItem > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									String  path  =  ti - > get_metadata ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									dep_edit - > edit ( path ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  OrphanResourcesDialog : : _bind_methods ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-02 23:03:46 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( _MD ( " _delete_confirm " ) , & OrphanResourcesDialog : : _delete_confirm ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( _MD ( " _button_pressed " ) , & OrphanResourcesDialog : : _button_pressed ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								OrphanResourcesDialog : : OrphanResourcesDialog ( ) {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files - > set_columns ( 2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files - > set_column_titles_visible ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files - > set_column_min_width ( 1 , 100 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files - > set_column_expand ( 0 , true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files - > set_column_expand ( 1 , false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											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 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_title ( TTR ( " Orphan Resource Explorer " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									delete_confirm  =  memnew (  ConfirmationDialog  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-03 22:25:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									delete_confirm - > set_text ( TTR ( " Delete selected files? " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									get_ok ( ) - > set_text ( TTR ( " Delete " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-29 01:08:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									add_child ( delete_confirm ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									dep_edit  =  memnew (  DependencyEditor  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									add_child ( dep_edit ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									files - > connect ( " button_pressed " , this , " _button_pressed " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									delete_confirm - > connect ( " confirmed " , this , " _delete_confirm " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_hide_on_ok ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}