summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--editor/filesystem_dock.cpp39
-rw-r--r--editor/import_dock.cpp15
-rw-r--r--editor/import_dock.h1
3 files changed, 48 insertions, 7 deletions
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index 1ff68b7d36..751f1c575d 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -2200,13 +2200,7 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected
} break;
case FILE_REIMPORT: {
- // Reimport all selected files.
- Vector<String> reimport;
- for (int i = 0; i < p_selected.size(); i++) {
- reimport.push_back(p_selected[i]);
- }
-
- ERR_FAIL_COND_MSG(reimport.size() == 0, "You need to select files to reimport them.");
+ ImportDock::get_singleton()->reimport_resources(p_selected);
} break;
case FILE_NEW_FOLDER: {
@@ -2830,6 +2824,37 @@ void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<Str
if (!all_not_favorites) {
p_popup->add_icon_item(get_theme_icon(SNAME("NonFavorite"), SNAME("EditorIcons")), TTR("Remove from Favorites"), FILE_REMOVE_FAVORITE);
}
+
+ {
+ List<String> resource_extensions;
+ ResourceFormatImporter::get_singleton()->get_recognized_extensions_for_type("Resource", &resource_extensions);
+ HashSet<String> extension_list;
+ for (const String &extension : resource_extensions) {
+ extension_list.insert(extension);
+ }
+
+ bool resource_valid = true;
+ String main_extension;
+
+ for (int i = 0; i != p_paths.size(); ++i) {
+ String extension = p_paths[i].get_extension();
+ if (extension_list.has(extension)) {
+ if (main_extension.is_empty()) {
+ main_extension = extension;
+ } else if (extension != main_extension) {
+ resource_valid = false;
+ break;
+ }
+ } else {
+ resource_valid = false;
+ break;
+ }
+ }
+
+ if (resource_valid) {
+ p_popup->add_icon_item(get_theme_icon(SNAME("Load"), SNAME("EditorIcons")), TTR("Reimport"), FILE_REIMPORT);
+ }
+ }
}
if (p_paths.size() == 1) {
diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp
index a17f497725..fcd2d8f908 100644
--- a/editor/import_dock.cpp
+++ b/editor/import_dock.cpp
@@ -324,6 +324,21 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) {
}
}
+void ImportDock::reimport_resources(const Vector<String> &p_paths) {
+ switch (p_paths.size()) {
+ case 0:
+ ERR_FAIL_MSG("You need to select files to reimport them.");
+ case 1:
+ set_edit_path(p_paths[0]);
+ break;
+ default:
+ set_edit_multiple_paths(p_paths);
+ break;
+ }
+
+ _reimport_attempt();
+}
+
void ImportDock::_update_preset_menu() {
preset->get_popup()->clear();
diff --git a/editor/import_dock.h b/editor/import_dock.h
index 07c54f8beb..78cd6a556c 100644
--- a/editor/import_dock.h
+++ b/editor/import_dock.h
@@ -102,6 +102,7 @@ protected:
public:
void set_edit_path(const String &p_path);
void set_edit_multiple_paths(const Vector<String> &p_paths);
+ void reimport_resources(const Vector<String> &p_paths);
void initialize_import_options() const;
void clear();