Make possible to create inherited scenes via the RMB menu in the FileSystem dock

This commit is contained in:
Michael Alexsander Silva Dias 2019-05-07 23:35:23 -03:00
parent 89c37dae49
commit dcf27c71b7
4 changed files with 26 additions and 6 deletions

View file

@ -3250,6 +3250,12 @@ InspectorDock *EditorNode::get_inspector_dock() {
return inspector_dock;
}
void EditorNode::_inherit_request(String p_file) {
current_option = FILE_NEW_INHERITED_SCENE;
_dialog_action(p_file);
}
void EditorNode::_instance_request(const Vector<String> &p_files) {
request_instance_scenes(p_files);
@ -5023,6 +5029,7 @@ void EditorNode::_bind_methods() {
ClassDB::bind_method("_get_scene_metadata", &EditorNode::_get_scene_metadata);
ClassDB::bind_method("set_edited_scene", &EditorNode::set_edited_scene);
ClassDB::bind_method("open_request", &EditorNode::open_request);
ClassDB::bind_method("_inherit_request", &EditorNode::_inherit_request);
ClassDB::bind_method("_instance_request", &EditorNode::_instance_request);
ClassDB::bind_method("_close_messages", &EditorNode::_close_messages);
ClassDB::bind_method("_show_messages", &EditorNode::_show_messages);
@ -5991,6 +5998,7 @@ EditorNode::EditorNode() {
filesystem_dock = memnew(FileSystemDock(this));
filesystem_dock->connect("open", this, "open_request");
filesystem_dock->connect("inherit", this, "_inherit_request");
filesystem_dock->connect("instance", this, "_instance_request");
filesystem_dock->connect("display_mode_changed", this, "_save_docks");

View file

@ -474,6 +474,7 @@ private:
int _next_unsaved_scene(bool p_valid_filename, int p_start = 0);
void _discard_changes(const String &p_str = String());
void _inherit_request(String p_file);
void _instance_request(const Vector<String> &p_files);
void _display_top_editors(bool p_display);

View file

@ -1505,6 +1505,13 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> p_selected)
}
} break;
case FILE_INHERIT: {
// Create a new scene inherited from the selected one
if (p_selected.size() == 1) {
emit_signal("inherit", p_selected[0]);
}
} break;
case FILE_INSTANCE: {
// Instance all selected scenes
Vector<String> paths;
@ -2071,13 +2078,16 @@ void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<Str
if (all_files) {
if (all_files_scenes && filenames.size() >= 1) {
p_popup->add_item(TTR("Open Scene(s)"), FILE_OPEN);
if (all_files_scenes) {
if (filenames.size() == 1) {
p_popup->add_item(TTR("Open Scene"), FILE_OPEN);
p_popup->add_item(TTR("New Inherited Scene"), FILE_INHERIT);
} else {
p_popup->add_item(TTR("Open Scenes"), FILE_OPEN);
}
p_popup->add_item(TTR("Instance"), FILE_INSTANCE);
p_popup->add_separator();
}
if (!all_files_scenes && filenames.size() == 1) {
} else if (filenames.size() == 1) {
p_popup->add_item(TTR("Open"), FILE_OPEN);
p_popup->add_separator();
}
@ -2378,8 +2388,8 @@ void FileSystemDock::_bind_methods() {
ClassDB::bind_method(D_METHOD("_feature_profile_changed"), &FileSystemDock::_feature_profile_changed);
ADD_SIGNAL(MethodInfo("inherit", PropertyInfo(Variant::STRING, "file")));
ADD_SIGNAL(MethodInfo("instance", PropertyInfo(Variant::POOL_STRING_ARRAY, "files")));
ADD_SIGNAL(MethodInfo("open"));
ADD_SIGNAL(MethodInfo("file_removed", PropertyInfo(Variant::STRING, "file")));
ADD_SIGNAL(MethodInfo("folder_removed", PropertyInfo(Variant::STRING, "folder")));

View file

@ -73,6 +73,7 @@ public:
private:
enum FileMenu {
FILE_OPEN,
FILE_INHERIT,
FILE_INSTANCE,
FILE_ADD_FAVORITE,
FILE_REMOVE_FAVORITE,