1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-11 13:10:58 +00:00

Changed import workflow

-Rearrange favorites in fs dock with drag and drop
-Removed import -> sub-scene, moved to scenetree contextual menu
-Removed import -> re-import , moved and integrated to FS dock
-Added ability in FS dock to re-import more than one resource
simultaneously
-Added ability to drag from native filesystem explorer to Godot, only
works on Windows though
-Removed scene reimport merge options, never worked well. Eventually
merging materials should be re-added
-Added ability to set custom root node type when importing scenes
-Re-Import is now automatic, can be configured back to manual in editor
settings
-Added resource previews in property list for many resource types
This commit is contained in:
Juan Linietsky
2016-05-27 14:18:40 -03:00
parent eb7227a20b
commit 8be2fabbe5
54 changed files with 1258 additions and 636 deletions

View File

@@ -326,6 +326,10 @@ String ScenesDock::get_selected_path() const {
return "res://"+path;
}
String ScenesDock::get_current_path() const {
return path;
}
void ScenesDock::_thumbnail_done(const String& p_path,const Ref<Texture>& p_preview, const Variant& p_udata) {
@@ -388,6 +392,25 @@ void ScenesDock::_search(EditorFileSystemDirectory *p_path,List<FileInfo>* match
fi.name=file;
fi.type=p_path->get_file_type(i);
fi.path=p_path->get_file_path(i);
if (p_path->get_file_meta(i)) {
if (p_path->is_missing_sources(i)) {
fi.import_status=3;
} else if (p_path->have_sources_changed(i)) {
fi.import_status=2;
} else {
fi.import_status=1;
}
} else {
fi.import_status=0;
}
for(int j=0;j<p_path->get_source_count(i);j++) {
String s = EditorImportPlugin::expand_source_path(p_path->get_source_file(i,j));
if (p_path->is_source_file_missing(i,j)) {
s+=" (Missing)";
}
fi.sources.push_back(s);
}
matches->push_back(fi);
if (matches->size()>p_max_items)
return;
@@ -517,6 +540,27 @@ void ScenesDock::_update_files(bool p_keep_selection) {
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);
}
@@ -533,12 +577,33 @@ void ScenesDock::_update_files(bool p_keep_selection) {
Ref<Texture> type_icon;
if (has_icon(type,ei)) {
type_icon=get_icon(type,ei);
} else {
type_icon=get_icon(oi,ei);
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);
@@ -557,6 +622,9 @@ void ScenesDock::_update_files(bool p_keep_selection) {
if (cselection.has(fname))
files->select(files->get_item_count()-1,false);
files->set_item_tooltip(files->get_item_count()-1,tooltip);
}
@@ -997,6 +1065,40 @@ void ScenesDock::_file_option(int p_option) {
case FILE_INFO: {
} break;
case FILE_REIMPORT: {
Vector<String> reimport;
for(int i=0;i<files->get_item_count();i++) {
if (!files->is_selected(i))
continue;
String path = files->get_item_metadata(i);
reimport.push_back(path);
}
ERR_FAIL_COND(reimport.size()==0);
Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(reimport[0]);
ERR_FAIL_COND(!rimd.is_valid());
String editor=rimd->get_editor();
if (editor.begins_with("texture_")) { //compatibility fix for old texture format
editor="texture";
}
Ref<EditorImportPlugin> rimp = EditorImportExport::get_singleton()->get_import_plugin_by_name(editor);
ERR_FAIL_COND(!rimp.is_valid());
if (reimport.size()==1) {
rimp->import_dialog(reimport[0]);
} else {
rimp->reimport_multiple_files(reimport);
}
} break;
}
}
@@ -1362,6 +1464,8 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) {
Vector<String> filenames;
bool all_scenes=true;
bool all_can_reimport=true;
Set<String> types;
for(int i=0;i<files->get_item_count();i++) {
@@ -1381,6 +1485,38 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) {
}
EditorFileSystemDirectory *efsd=NULL;
int pos;
efsd = EditorFileSystem::get_singleton()->find_file(path,&pos);
if (efsd) {
if (!efsd->get_file_meta(pos)) {
all_can_reimport=false;
} else {
Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(path);
if (rimd.is_valid()) {
String editor=rimd->get_editor();
if (editor.begins_with("texture_")) { //compatibility fix for old texture format
editor="texture";
}
types.insert(editor);
} else {
all_can_reimport=false;
}
}
} else {
all_can_reimport=false;
}
filenames.push_back(path);
if (EditorFileSystem::get_singleton()->get_file_type(path)!="PackedScene")
all_scenes=false;
@@ -1412,12 +1548,34 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) {
file_options->add_item(TTR("Move To.."),FILE_MOVE);
}
file_options->add_item(TTR("Delete"),FILE_REMOVE);
//file_options->add_item(TTR("Info"),FILE_INFO);
file_options->add_separator();
file_options->add_item(TTR("Show In File Manager"),FILE_SHOW_IN_EXPLORER);
if (all_can_reimport && types.size()==1) { //all can reimport and are of the same type
bool valid=true;
Ref<EditorImportPlugin> rimp = EditorImportExport::get_singleton()->get_import_plugin_by_name(types.front()->get());
if (rimp.is_valid()) {
if (filenames.size()>1 && !rimp->can_reimport_multiple_files()) {
valid=false;
}
} else {
valid=false;
}
if (valid) {
file_options->add_separator();
file_options->add_item(TTR("Re-Import.."),FILE_REIMPORT);
}
}
file_options->set_pos(files->get_global_pos() + p_pos);
file_options->popup();