Răsfoiți Sursa

add open feture to dependency_editor.cpp

sersoong 7 ani în urmă
părinte
comite
13b07fef81
3 a modificat fișierele cu 68 adăugiri și 3 ștergeri
  1. 52 1
      editor/dependency_editor.cpp
  2. 15 1
      editor/dependency_editor.h
  3. 1 1
      editor/filesystem_dock.cpp

+ 52 - 1
editor/dependency_editor.cpp

@@ -281,6 +281,47 @@ DependencyEditor::DependencyEditor() {
 }
 
 /////////////////////////////////////
+void DependencyEditorOwners::_list_rmb_select(int p_item, const Vector2 &p_pos) {
+
+	file_options->clear();
+	file_options->set_size(Size2(1, 1));
+	if (p_item >= 0) {
+		file_options->add_item(TTR("Open"), FILE_OPEN);
+	}
+
+	file_options->set_position(owners->get_global_position() + p_pos);
+	file_options->popup();
+}
+
+void DependencyEditorOwners::_select_file(int p_idx) {
+
+	String fpath = owners->get_item_text(p_idx);
+
+	if (ResourceLoader::get_resource_type(fpath) == "PackedScene") {
+		editor->open_request(fpath);
+		hide();
+		emit_signal("confirmed");
+	}
+}
+
+void DependencyEditorOwners::_file_option(int p_option) {
+
+	switch (p_option) {
+		case FILE_OPEN: {
+			int idx = owners->get_current();
+			if (idx < 0 || idx >= owners->get_item_count())
+				break;
+			_select_file(idx);
+		} break;
+	}
+}
+
+void DependencyEditorOwners::_bind_methods() {
+
+	ClassDB::bind_method(D_METHOD("_list_rmb_select"), &DependencyEditorOwners::_list_rmb_select);
+	ClassDB::bind_method(D_METHOD("_file_option"), &DependencyEditorOwners::_file_option);
+	ClassDB::bind_method(D_METHOD("_select_file"), &DependencyEditorOwners::_select_file);
+}
 
 void DependencyEditorOwners::_fill_owners(EditorFileSystemDirectory *efsd) {
 
@@ -329,9 +370,19 @@ void DependencyEditorOwners::show(const String &p_path) {
 	set_title(TTR("Owners Of:") + " " + p_path.get_file());
 }
 
-DependencyEditorOwners::DependencyEditorOwners() {
+DependencyEditorOwners::DependencyEditorOwners(EditorNode *p_editor) {
+
+	editor = p_editor;
+
+	file_options = memnew(PopupMenu);
+	add_child(file_options);
+	file_options->connect("id_pressed", this, "_file_option");
 
 	owners = memnew(ItemList);
+	owners->set_select_mode(ItemList::SELECT_SINGLE);
+	owners->connect("item_rmb_selected", this, "_list_rmb_select");
+	owners->connect("item_activated", this, "_select_file");
+	owners->set_allow_rmb_select(true);
 	add_child(owners);
 }
 

+ 15 - 1
editor/dependency_editor.h

@@ -36,6 +36,7 @@
 #include "scene/gui/tree.h"
 
 class EditorFileSystemDirectory;
+class EditorNode;
 
 class DependencyEditor : public AcceptDialog {
 	GDCLASS(DependencyEditor, AcceptDialog);
@@ -71,12 +72,25 @@ class DependencyEditorOwners : public AcceptDialog {
 	GDCLASS(DependencyEditorOwners, AcceptDialog);
 
 	ItemList *owners;
+	PopupMenu *file_options;
+	EditorNode *editor;
 	String editing;
+
 	void _fill_owners(EditorFileSystemDirectory *efsd);
 
+	static void _bind_methods();
+	void _list_rmb_select(int p_item, const Vector2 &p_pos);
+	void _select_file(int p_idx);
+	void _file_option(int p_option);
+
+private:
+	enum FileMenu {
+		FILE_OPEN
+	};
+
 public:
 	void show(const String &p_path);
-	DependencyEditorOwners();
+	DependencyEditorOwners(EditorNode *p_editor);
 };
 
 class DependencyRemoveDialog : public ConfirmationDialog {

+ 1 - 1
editor/filesystem_dock.cpp

@@ -1670,7 +1670,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
 	deps_editor = memnew(DependencyEditor);
 	add_child(deps_editor);
 
-	owners_editor = memnew(DependencyEditorOwners);
+	owners_editor = memnew(DependencyEditorOwners(editor));
 	add_child(owners_editor);
 
 	remove_dialog = memnew(DependencyRemoveDialog);