소스 검색

Add scrolling to overwrite dialog

kobewi 2 년 전
부모
커밋
ab787fe4d2
2개의 변경된 파일30개의 추가작업 그리고 5개의 파일을 삭제
  1. 24 5
      editor/filesystem_dock.cpp
  2. 6 0
      editor/filesystem_dock.h

+ 24 - 5
editor/filesystem_dock.cpp

@@ -460,6 +460,8 @@ void FileSystemDock::_notification(int p_what) {
 		} break;
 		} break;
 
 
 		case NOTIFICATION_THEME_CHANGED: {
 		case NOTIFICATION_THEME_CHANGED: {
+			overwrite_dialog_scroll->add_theme_style_override("panel", get_theme_stylebox("panel", "Tree"));
+
 			if (is_visible_in_tree()) {
 			if (is_visible_in_tree()) {
 				_update_display_mode(true);
 				_update_display_mode(true);
 			}
 			}
@@ -1725,11 +1727,12 @@ void FileSystemDock::_move_operation_confirm(const String &p_to_path, bool p_cop
 		Vector<String> conflicting_items = _check_existing();
 		Vector<String> conflicting_items = _check_existing();
 		if (!conflicting_items.is_empty()) {
 		if (!conflicting_items.is_empty()) {
 			// Ask to do something.
 			// Ask to do something.
-			overwrite_dialog->set_text(vformat(
-					p_copy ? TTR("The following files or folders conflict with items in the target location '%s':\n\n%s\n\nDo you wish to overwrite them or rename the copied files?")
-						   : TTR("The following files or folders conflict with items in the target location '%s':\n\n%s\n\nDo you wish to overwrite them or rename the moved files?"),
-					to_move_path,
-					String("\n").join(conflicting_items)));
+			overwrite_dialog_header->set_text(vformat(
+					TTR("The following files or folders conflict with items in the target location '%s':"), to_move_path));
+			overwrite_dialog_file_list->set_text(String("\n").join(conflicting_items));
+			overwrite_dialog_footer->set_text(
+					p_copy ? TTR("Do you wish to overwrite them or rename the copied files?")
+						   : TTR("Do you wish to overwrite them or rename the moved files?"));
 			overwrite_dialog->popup_centered();
 			overwrite_dialog->popup_centered();
 			return;
 			return;
 		}
 		}
@@ -3368,6 +3371,22 @@ FileSystemDock::FileSystemDock() {
 	overwrite_dialog->add_button(TTR("Keep Both"), true)->connect("pressed", callable_mp(this, &FileSystemDock::_overwrite_dialog_action).bind(false));
 	overwrite_dialog->add_button(TTR("Keep Both"), true)->connect("pressed", callable_mp(this, &FileSystemDock::_overwrite_dialog_action).bind(false));
 	overwrite_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_overwrite_dialog_action).bind(true));
 	overwrite_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_overwrite_dialog_action).bind(true));
 
 
+	VBoxContainer *overwrite_dialog_vb = memnew(VBoxContainer);
+	overwrite_dialog->add_child(overwrite_dialog_vb);
+
+	overwrite_dialog_header = memnew(Label);
+	overwrite_dialog_vb->add_child(overwrite_dialog_header);
+
+	overwrite_dialog_scroll = memnew(ScrollContainer);
+	overwrite_dialog_vb->add_child(overwrite_dialog_scroll);
+	overwrite_dialog_scroll->set_custom_minimum_size(Vector2(400, 600) * EDSCALE);
+
+	overwrite_dialog_file_list = memnew(Label);
+	overwrite_dialog_scroll->add_child(overwrite_dialog_file_list);
+
+	overwrite_dialog_footer = memnew(Label);
+	overwrite_dialog_vb->add_child(overwrite_dialog_footer);
+
 	duplicate_dialog = memnew(ConfirmationDialog);
 	duplicate_dialog = memnew(ConfirmationDialog);
 	VBoxContainer *duplicate_dialog_vb = memnew(VBoxContainer);
 	VBoxContainer *duplicate_dialog_vb = memnew(VBoxContainer);
 	duplicate_dialog->add_child(duplicate_dialog_vb);
 	duplicate_dialog->add_child(duplicate_dialog_vb);

+ 6 - 0
editor/filesystem_dock.h

@@ -164,7 +164,13 @@ private:
 	ConfirmationDialog *duplicate_dialog = nullptr;
 	ConfirmationDialog *duplicate_dialog = nullptr;
 	LineEdit *duplicate_dialog_text = nullptr;
 	LineEdit *duplicate_dialog_text = nullptr;
 	DirectoryCreateDialog *make_dir_dialog = nullptr;
 	DirectoryCreateDialog *make_dir_dialog = nullptr;
+
 	ConfirmationDialog *overwrite_dialog = nullptr;
 	ConfirmationDialog *overwrite_dialog = nullptr;
+	ScrollContainer *overwrite_dialog_scroll = nullptr;
+	Label *overwrite_dialog_header = nullptr;
+	Label *overwrite_dialog_footer = nullptr;
+	Label *overwrite_dialog_file_list = nullptr;
+
 	SceneCreateDialog *make_scene_dialog = nullptr;
 	SceneCreateDialog *make_scene_dialog = nullptr;
 	ScriptCreateDialog *make_script_dialog = nullptr;
 	ScriptCreateDialog *make_script_dialog = nullptr;
 	ShaderCreateDialog *make_shader_dialog = nullptr;
 	ShaderCreateDialog *make_shader_dialog = nullptr;