/*************************************************************************/ /* scene_tree_dock.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ /* */ /* Permission is hereby granted, free of charge, to any person obtaining */ /* a copy of this software and associated documentation files (the */ /* "Software"), to deal in the Software without restriction, including */ /* without limitation the rights to use, copy, modify, merge, publish, */ /* distribute, sublicense, and/or sell copies of the Software, and to */ /* permit persons to whom the Software is furnished to do so, subject to */ /* the following conditions: */ /* */ /* The above copyright notice and this permission notice shall be */ /* included in all copies or substantial portions of the Software. */ /* */ /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #ifndef SCENE_TREE_DOCK_H #define SCENE_TREE_DOCK_H #include "scene_tree_editor.h" #include "editor/editor_data.h" #include "editor/script_create_dialog.h" #include "scene/gui/box_container.h" #include "scene/resources/animation.h" class EditorQuickOpen; class MenuButton; class ReparentDialog; class ShaderCreateDialog; class TextureRect; #include "modules/modules_enabled.gen.h" // For regex. #ifdef MODULE_REGEX_ENABLED class RenameDialog; #endif // MODULE_REGEX_ENABLED class SceneTreeDock : public VBoxContainer { GDCLASS(SceneTreeDock, VBoxContainer); enum Tool { TOOL_NEW, TOOL_INSTANTIATE, TOOL_EXPAND_COLLAPSE, TOOL_CUT, TOOL_COPY, TOOL_PASTE, TOOL_RENAME, #ifdef MODULE_REGEX_ENABLED TOOL_BATCH_RENAME, #endif // MODULE_REGEX_ENABLED TOOL_REPLACE, TOOL_EXTEND_SCRIPT, TOOL_ATTACH_SCRIPT, TOOL_DETACH_SCRIPT, TOOL_MOVE_UP, TOOL_MOVE_DOWN, TOOL_DUPLICATE, TOOL_REPARENT, TOOL_REPARENT_TO_NEW_NODE, TOOL_MAKE_ROOT, TOOL_NEW_SCENE_FROM, TOOL_MULTI_EDIT, TOOL_ERASE, TOOL_COPY_NODE_PATH, TOOL_BUTTON_MAX, TOOL_OPEN_DOCUMENTATION, TOOL_AUTO_EXPAND, TOOL_SCENE_EDITABLE_CHILDREN, TOOL_SCENE_USE_PLACEHOLDER, TOOL_SCENE_MAKE_LOCAL, TOOL_SCENE_OPEN, TOOL_SCENE_CLEAR_INHERITANCE, TOOL_SCENE_CLEAR_INHERITANCE_CONFIRM, TOOL_SCENE_OPEN_INHERITED, TOOL_TOGGLE_SCENE_UNIQUE_NAME, TOOL_CREATE_2D_SCENE, TOOL_CREATE_3D_SCENE, TOOL_CREATE_USER_INTERFACE, TOOL_CREATE_FAVORITE, }; enum { EDIT_SUBRESOURCE_BASE = 100 }; Vector subresources; bool reset_create_dialog = false; int current_option = 0; CreateDialog *create_dialog = nullptr; #ifdef MODULE_REGEX_ENABLED RenameDialog *rename_dialog = nullptr; #endif // MODULE_REGEX_ENABLED Button *button_add = nullptr; Button *button_instance = nullptr; Button *button_create_script = nullptr; Button *button_detach_script = nullptr; MenuButton *button_tree_menu = nullptr; Button *node_shortcuts_toggle = nullptr; VBoxContainer *beginner_node_shortcuts = nullptr; VBoxContainer *favorite_node_shortcuts = nullptr; Button *button_2d = nullptr; Button *button_3d = nullptr; Button *button_ui = nullptr; Button *button_custom = nullptr; Button *button_clipboard = nullptr; HBoxContainer *button_hb = nullptr; Button *edit_local, *edit_remote; SceneTreeEditor *scene_tree = nullptr; Control *remote_tree = nullptr; HBoxContainer *tool_hbc = nullptr; void _tool_selected(int p_tool, bool p_confirm_override = false); void _property_selected(int p_idx); Node *property_drop_node = nullptr; String resource_drop_path; void _perform_property_drop(Node *p_node, String p_property, Ref p_res); EditorData *editor_data = nullptr; EditorSelection *editor_selection = nullptr; List node_clipboard; String clipboard_source_scene; HashMap, Ref>> clipboard_resource_remap; ScriptCreateDialog *script_create_dialog = nullptr; ShaderCreateDialog *shader_create_dialog = nullptr; AcceptDialog *accept = nullptr; ConfirmationDialog *delete_dialog = nullptr; ConfirmationDialog *editable_instance_remove_dialog = nullptr; ConfirmationDialog *placeholder_editable_instance_remove_dialog = nullptr; ReparentDialog *reparent_dialog = nullptr; EditorQuickOpen *quick_open = nullptr; EditorFileDialog *new_scene_from_dialog = nullptr; enum FilterMenuItems { FILTER_BY_TYPE = 64, // Used in the same menus as the Tool enum. FILTER_BY_GROUP, }; LineEdit *filter = nullptr; PopupMenu *filter_quick_menu = nullptr; TextureRect *filter_icon = nullptr; PopupMenu *menu = nullptr; PopupMenu *menu_subresources = nullptr; PopupMenu *menu_properties = nullptr; ConfirmationDialog *clear_inherit_confirm = nullptr; bool first_enter = true; void _create(); void _do_create(Node *p_parent); Node *scene_root = nullptr; Node *edited_scene = nullptr; Node *pending_click_select = nullptr; bool tree_clicked = false; VBoxContainer *create_root_dialog = nullptr; String selected_favorite_root; Ref selected_shader_material; void _add_children_to_popup(Object *p_obj, int p_depth); void _node_reparent(NodePath p_path, bool p_keep_global_xform); void _do_reparent(Node *p_new_parent, int p_position_in_parent, Vector p_nodes, bool p_keep_global_xform); void _set_owners(Node *p_owner, const Array &p_nodes); enum ReplaceOwnerMode { MODE_BIDI, MODE_DO, MODE_UNDO }; void _node_replace_owner(Node *p_base, Node *p_node, Node *p_root, ReplaceOwnerMode p_mode = MODE_BIDI); void _load_request(const String &p_path); void _script_open_request(const Ref