Browse Source

Merge pull request #107275 from DexterFstone/file-system-selection-changed-signal

Expose the signal when user select a file/folder in the FileSystemDock
Thaddeus Crews 2 days ago
parent
commit
c2ca5bdd23
3 changed files with 23 additions and 0 deletions
  1. 5 0
      doc/classes/FileSystemDock.xml
  2. 14 0
      editor/docks/filesystem_dock.cpp
  3. 4 0
      editor/docks/filesystem_dock.h

+ 5 - 0
doc/classes/FileSystemDock.xml

@@ -87,5 +87,10 @@
 				Emitted when an external [param resource] had its file removed.
 			</description>
 		</signal>
+		<signal name="selection_changed">
+			<description>
+				Emitted when the selection changes. Use [method EditorInterface.get_selected_paths] in the connected method to get the selected paths.
+			</description>
+		</signal>
 	</signals>
 </class>

+ 14 - 0
editor/docks/filesystem_dock.cpp

@@ -3609,6 +3609,7 @@ void FileSystemDock::_tree_empty_selected() {
 	if (file_list_vb->is_visible()) {
 		_update_file_list(false);
 	}
+	_update_selection_changed();
 }
 
 void FileSystemDock::_file_list_item_clicked(int p_item, const Vector2 &p_pos, MouseButton p_mouse_button_index) {
@@ -3701,6 +3702,16 @@ void FileSystemDock::_file_multi_selected(int p_index, bool p_selected) {
 	callable_mp(this, &FileSystemDock::_update_import_dock).call_deferred();
 }
 
+void FileSystemDock::_update_selection_changed() {
+	Vector<String> selection;
+	selection.append_array(_tree_get_selected());
+	selection.append_array(_file_list_get_selected());
+	if (prev_selection != selection) {
+		prev_selection = selection;
+		emit_signal(SNAME("selection_changed"));
+	}
+}
+
 void FileSystemDock::_tree_mouse_exited() {
 	if (holding_branch) {
 		_reselect_items_selected_on_drag_begin();
@@ -3908,6 +3919,8 @@ void FileSystemDock::_update_import_dock() {
 		return;
 	}
 
+	_update_selection_changed();
+
 	// List selected.
 	Vector<String> selected;
 	if (display_mode == DISPLAY_MODE_TREE_ONLY) {
@@ -4165,6 +4178,7 @@ void FileSystemDock::_bind_methods() {
 	ADD_SIGNAL(MethodInfo("files_moved", PropertyInfo(Variant::STRING, "old_file"), PropertyInfo(Variant::STRING, "new_file")));
 	ADD_SIGNAL(MethodInfo("folder_moved", PropertyInfo(Variant::STRING, "old_folder"), PropertyInfo(Variant::STRING, "new_folder")));
 	ADD_SIGNAL(MethodInfo("folder_color_changed"));
+	ADD_SIGNAL(MethodInfo("selection_changed"));
 
 	ADD_SIGNAL(MethodInfo("display_mode_changed"));
 }

+ 4 - 0
editor/docks/filesystem_dock.h

@@ -256,6 +256,10 @@ private:
 
 	HashSet<String> cached_valid_conversion_targets;
 
+	Vector<String> prev_selection;
+
+	void _update_selection_changed();
+
 	void _tree_mouse_exited();
 	void _reselect_items_selected_on_drag_begin(bool reset = false);