void FileSystemDock::_update_files(bool p_keep_selection) { Set<String> cselection; if (p_keep_selection) { for(int i=0;i<files->get_item_count();i++) { if (files->is_selected(i)) cselection.insert(files->get_item_text(i)); } } files->clear(); current_path->set_text(path); EditorFileSystemDirectory *efd = EditorFileSystem::get_singleton()->get_path(path); if (!efd) return; int thumbnail_size = EditorSettings::get_singleton()->get("filesystem_dock/thumbnail_size"); thumbnail_size*=EDSCALE; Ref<Texture> folder_thumbnail; Ref<Texture> file_thumbnail; bool use_thumbnails = (display_mode == DISPLAY_THUMBNAILS); bool use_folders = search_box->get_text().length()==0 && split_mode; if (use_thumbnails) { //thumbnails files->set_max_columns(0); files->set_icon_mode(ItemList::ICON_MODE_TOP); files->set_fixed_column_width(thumbnail_size*3/2); files->set_max_text_lines(2); files->set_fixed_icon_size(Size2(thumbnail_size,thumbnail_size)); if (!has_icon("ResizedFolder","EditorIcons")) { Ref<ImageTexture> folder = get_icon("FolderBig","EditorIcons"); Image img = folder->get_data(); img.resize(thumbnail_size,thumbnail_size); Ref<ImageTexture> resized_folder = Ref<ImageTexture>( memnew( ImageTexture)); resized_folder->create_from_image(img,0); Theme::get_default()->set_icon("ResizedFolder","EditorIcons",resized_folder); } folder_thumbnail = get_icon("ResizedFolder","EditorIcons"); if (!has_icon("ResizedFile","EditorIcons")) { Ref<ImageTexture> file = get_icon("FileBig","EditorIcons"); Image img = file->get_data(); img.resize(thumbnail_size,thumbnail_size); Ref<ImageTexture> resized_file = Ref<ImageTexture>( memnew( ImageTexture)); resized_file->create_from_image(img,0); Theme::get_default()->set_icon("ResizedFile","EditorIcons",resized_file); } file_thumbnail = get_icon("ResizedFile","EditorIcons"); } else { files->set_icon_mode(ItemList::ICON_MODE_LEFT); files->set_max_columns(1); files->set_max_text_lines(1); files->set_fixed_column_width(0); files->set_fixed_icon_size(Size2()); } if (use_folders) { if (path!="res://") { if (use_thumbnails) { files->add_item("..",folder_thumbnail,true); } else { files->add_item("..",get_icon("folder","FileDialog"),true); } String bd = path.get_base_dir(); if (bd!="res://" && !bd.ends_with("/")) bd+="/"; files->set_item_metadata(files->get_item_count()-1,bd); } for(int i=0;i<efd->get_subdir_count();i++) { String dname=efd->get_subdir(i)->get_name(); if (use_thumbnails) { files->add_item(dname,folder_thumbnail,true); } else { files->add_item(dname,get_icon("folder","FileDialog"),true); } files->set_item_metadata(files->get_item_count()-1,path.plus_file(dname)+"/"); if (cselection.has(dname)) files->select(files->get_item_count()-1,false); } } List<FileInfo> filelist; if (search_box->get_text().length()) { if (search_box->get_text().length()>1) { _search(EditorFileSystem::get_singleton()->get_filesystem(),&filelist,128); } filelist.sort(); } else { for(int i=0;i<efd->get_file_count();i++) { FileInfo fi; fi.name=efd->get_file(i); fi.path=path.plus_file(fi.name); fi.type=efd->get_file_type(i); if (efd->get_file_meta(i)) { if (efd->is_missing_sources(i)) { fi.import_status=3; } else if (efd->have_sources_changed(i)) { fi.import_status=2; } else { fi.import_status=1; } for(int j=0;j<efd->get_source_count(i);j++) { String s = EditorImportPlugin::expand_source_path(efd->get_source_file(i,j)); if (efd->is_source_file_missing(i,j)) { s+=" (Missing)"; } fi.sources.push_back(s); } } else { fi.import_status=0; } filelist.push_back(fi); } } StringName ei="EditorIcons"; //make it faster.. StringName oi="Object"; for(List<FileInfo>::Element *E=filelist.front();E;E=E->next()) { String fname=E->get().name; String fp = E->get().path; StringName type = E->get().type; Ref<Texture> type_icon; String tooltip=fname; if (E->get().import_status==0) { if (has_icon(type,ei)) { type_icon=get_icon(type,ei); } else { type_icon=get_icon(oi,ei); } } else if (E->get().import_status==1) { type_icon=get_icon("DependencyOk","EditorIcons"); } else if (E->get().import_status==2) { type_icon=get_icon("DependencyChanged","EditorIcons"); tooltip+"\nStatus: Needs Re-Import"; } else if (E->get().import_status==3) { type_icon=get_icon("ImportFail","EditorIcons"); tooltip+"\nStatus: Missing Dependencies"; } if (E->get().sources.size()) { for(int i=0;i<E->get().sources.size();i++) { tooltip+="\nSource: "+E->get().sources[i]; } } if (use_thumbnails) { files->add_item(fname,file_thumbnail,true); files->set_item_metadata(files->get_item_count()-1,fp); files->set_item_tag_icon(files->get_item_count()-1,type_icon); Array udata; udata.resize(2); udata[0]=files->get_item_count()-1; udata[1]=fname; EditorResourcePreview::get_singleton()->queue_resource_preview(fp,this,"_thumbnail_done",udata); } else { files->add_item(fname,type_icon,true); files->set_item_metadata(files->get_item_count()-1,fp); } if (cselection.has(fname)) files->select(files->get_item_count()-1,false); files->set_item_tooltip(files->get_item_count()-1,tooltip); } }
void ScenesDock::_update_files(bool p_keep_selection) { Set<String> cselection; if (p_keep_selection) { for(int i=0;i<files->get_item_count();i++) { if (files->is_selected(i)) cselection.insert(files->get_item_text(i)); } } files->clear(); current_path->set_text(path); EditorFileSystemDirectory *efd = EditorFileSystem::get_singleton()->get_path(path); if (!efd) return; int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size"); Ref<Texture> folder_thumbnail; Ref<Texture> file_thumbnail; bool use_thumbnails=!display_mode->is_pressed(); bool use_folders = !search_box->is_visible() && split_mode; if (use_thumbnails) { //thumbnails files->set_max_columns(0); files->set_icon_mode(ItemList::ICON_MODE_TOP); files->set_fixed_column_width(thumbnail_size*3/2); files->set_max_text_lines(2); files->set_min_icon_size(Size2(thumbnail_size,thumbnail_size)); if (!has_icon("ResizedFolder","EditorIcons")) { Ref<ImageTexture> folder = get_icon("FolderBig","EditorIcons"); Image img = folder->get_data(); img.resize(thumbnail_size,thumbnail_size); Ref<ImageTexture> resized_folder = Ref<ImageTexture>( memnew( ImageTexture)); resized_folder->create_from_image(img,0); Theme::get_default()->set_icon("ResizedFolder","EditorIcons",resized_folder); } folder_thumbnail = get_icon("ResizedFolder","EditorIcons"); if (!has_icon("ResizedFile","EditorIcons")) { Ref<ImageTexture> file = get_icon("FileBig","EditorIcons"); Image img = file->get_data(); img.resize(thumbnail_size,thumbnail_size); Ref<ImageTexture> resized_file = Ref<ImageTexture>( memnew( ImageTexture)); resized_file->create_from_image(img,0); Theme::get_default()->set_icon("ResizedFile","EditorIcons",resized_file); } file_thumbnail = get_icon("ResizedFile","EditorIcons"); } else { files->set_icon_mode(ItemList::ICON_MODE_LEFT); files->set_max_columns(1); files->set_max_text_lines(1); files->set_fixed_column_width(0); files->set_min_icon_size(Size2()); } if (use_folders) { if (path!="res://") { if (use_thumbnails) { files->add_item("..",folder_thumbnail,true); } else { files->add_item("..",get_icon("folder","FileDialog"),true); } String bd = path.get_base_dir(); if (bd!="res://" && !bd.ends_with("/")) bd+="/"; files->set_item_metadata(files->get_item_count()-1,bd); } for(int i=0;i<efd->get_subdir_count();i++) { String dname=efd->get_subdir(i)->get_name(); if (use_thumbnails) { files->add_item(dname,folder_thumbnail,true); } else { files->add_item(dname,get_icon("folder","FileDialog"),true); } files->set_item_metadata(files->get_item_count()-1,path.plus_file(dname)+"/"); if (cselection.has(dname)) files->select(files->get_item_count()-1,false); } } List<FileInfo> filelist; if (search_box->is_visible()) { if (search_box->get_text().length()>1) { _search(EditorFileSystem::get_singleton()->get_filesystem(),&filelist,128); } filelist.sort(); } else { for(int i=0;i<efd->get_file_count();i++) { FileInfo fi; fi.name=efd->get_file(i); fi.path=path.plus_file(fi.name); fi.type=efd->get_file_type(i); filelist.push_back(fi); } } StringName ei="EditorIcons"; //make it faster.. StringName oi="Object"; for(List<FileInfo>::Element *E=filelist.front();E;E=E->next()) { String fname=E->get().name; String fp = E->get().path; StringName type = E->get().type; Ref<Texture> type_icon; if (has_icon(type,ei)) { type_icon=get_icon(type,ei); } else { type_icon=get_icon(oi,ei); } if (use_thumbnails) { files->add_item(fname,file_thumbnail,true); files->set_item_metadata(files->get_item_count()-1,fp); files->set_item_tag_icon(files->get_item_count()-1,type_icon); Array udata; udata.resize(2); udata[0]=files->get_item_count()-1; udata[1]=fname; EditorResourcePreview::get_singleton()->queue_resource_preview(fp,this,"_thumbnail_done",udata); } else { files->add_item(fname,type_icon,true); files->set_item_metadata(files->get_item_count()-1,fp); } if (cselection.has(fname)) files->select(files->get_item_count()-1,false); } }
void ScenesDock::_update_files(bool p_keep_selection) { Set<String> cselection; if (p_keep_selection) { for(int i=0;i<files->get_item_count();i++) { if (files->is_selected(i)) cselection.insert(files->get_item_text(i)); } } files->clear(); EditorFileSystemDirectory *efd = EditorFileSystem::get_singleton()->get_path(path); if (!efd) return; int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size"); Ref<Texture> folder_thumbnail; Ref<Texture> file_thumbnail; bool use_thumbnails=!display_mode->is_pressed(); if (use_thumbnails) { //thumbnails files->set_max_columns(0); files->set_icon_mode(ItemList::ICON_MODE_TOP); files->set_fixed_column_width(thumbnail_size*3/2); files->set_max_text_lines(2); files->set_min_icon_size(Size2(thumbnail_size,thumbnail_size)); if (!has_icon("ResizedFolder","EditorIcons")) { Ref<ImageTexture> folder = get_icon("FolderBig","EditorIcons"); Image img = folder->get_data(); img.resize(thumbnail_size,thumbnail_size); Ref<ImageTexture> resized_folder = Ref<ImageTexture>( memnew( ImageTexture)); resized_folder->create_from_image(img,0); Theme::get_default()->set_icon("ResizedFolder","EditorIcons",resized_folder); } folder_thumbnail = get_icon("ResizedFolder","EditorIcons"); if (!has_icon("ResizedFile","EditorIcons")) { Ref<ImageTexture> file = get_icon("FileBig","EditorIcons"); Image img = file->get_data(); img.resize(thumbnail_size,thumbnail_size); Ref<ImageTexture> resized_file = Ref<ImageTexture>( memnew( ImageTexture)); resized_file->create_from_image(img,0); Theme::get_default()->set_icon("ResizedFile","EditorIcons",resized_file); } file_thumbnail = get_icon("ResizedFile","EditorIcons"); } else { files->set_icon_mode(ItemList::ICON_MODE_LEFT); files->set_max_columns(1); files->set_max_text_lines(1); files->set_fixed_column_width(0); files->set_min_icon_size(Size2()); } if (path!="res://") { if (use_thumbnails) { files->add_item("..",folder_thumbnail,true); } else { files->add_item("..",get_icon("folder","FileDialog"),true); } String bd = path.get_base_dir(); if (bd!="res://" && !bd.ends_with("/")) bd+="/"; files->set_item_metadata(files->get_item_count()-1,bd); } for(int i=0;i<efd->get_subdir_count();i++) { String dname=efd->get_subdir(i)->get_name(); if (use_thumbnails) { files->add_item(dname,folder_thumbnail,true); } else { files->add_item(dname,get_icon("folder","FileDialog"),true); } files->set_item_metadata(files->get_item_count()-1,path.plus_file(dname)+"/"); if (cselection.has(dname)) files->select(files->get_item_count()-1,false); } for(int i=0;i<efd->get_file_count();i++) { String fname=efd->get_file(i); String fp = path.plus_file(fname); String type = efd->get_file_type(i); Ref<Texture> type_icon; if (has_icon(type,"EditorIcons")) { type_icon=get_icon(type,"EditorIcons"); } else { type_icon=get_icon("Object","EditorIcons"); } if (use_thumbnails) { files->add_item(fname,file_thumbnail,true); files->set_item_metadata(files->get_item_count()-1,fp); files->set_item_tag_icon(files->get_item_count()-1,type_icon); EditorResourcePreview::get_singleton()->queue_resource_preview(fp,this,"_thumbnail_done",files->get_item_count()-1); } else { files->add_item(fname,type_icon,true); files->set_item_metadata(files->get_item_count()-1,fp); } if (cselection.has(fname)) files->select(files->get_item_count()-1,false); } }