1/**************************************************************************/
2/* mesh_library_editor_plugin.h */
3/**************************************************************************/
4/* This file is part of: */
5/* GODOT ENGINE */
6/* https://godotengine.org */
7/**************************************************************************/
8/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
9/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
10/* */
11/* Permission is hereby granted, free of charge, to any person obtaining */
12/* a copy of this software and associated documentation files (the */
13/* "Software"), to deal in the Software without restriction, including */
14/* without limitation the rights to use, copy, modify, merge, publish, */
15/* distribute, sublicense, and/or sell copies of the Software, and to */
16/* permit persons to whom the Software is furnished to do so, subject to */
17/* the following conditions: */
18/* */
19/* The above copyright notice and this permission notice shall be */
20/* included in all copies or substantial portions of the Software. */
21/* */
22/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
23/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
24/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
25/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
26/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
27/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
28/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29/**************************************************************************/
30
31#ifndef MESH_LIBRARY_EDITOR_PLUGIN_H
32#define MESH_LIBRARY_EDITOR_PLUGIN_H
33
34#include "editor/editor_plugin.h"
35#include "scene/resources/mesh_library.h"
36
37class EditorFileDialog;
38class ConfirmationDialog;
39class MenuButton;
40
41class MeshLibraryEditor : public Control {
42 GDCLASS(MeshLibraryEditor, Control);
43
44 Ref<MeshLibrary> mesh_library;
45
46 MenuButton *menu = nullptr;
47 ConfirmationDialog *cd_remove = nullptr;
48 ConfirmationDialog *cd_update = nullptr;
49 EditorFileDialog *file = nullptr;
50 bool apply_xforms = false;
51 int to_erase = 0;
52
53 enum {
54 MENU_OPTION_ADD_ITEM,
55 MENU_OPTION_REMOVE_ITEM,
56 MENU_OPTION_UPDATE_FROM_SCENE,
57 MENU_OPTION_IMPORT_FROM_SCENE,
58 MENU_OPTION_IMPORT_FROM_SCENE_APPLY_XFORMS
59 };
60
61 int option = 0;
62 void _import_scene_cbk(const String &p_str);
63 void _menu_cbk(int p_option);
64 void _menu_remove_confirm();
65 void _menu_update_confirm(bool p_apply_xforms);
66
67 static void _import_scene(Node *p_scene, Ref<MeshLibrary> p_library, bool p_merge, bool p_apply_xforms);
68
69protected:
70 static void _bind_methods();
71
72public:
73 MenuButton *get_menu_button() const { return menu; }
74
75 void edit(const Ref<MeshLibrary> &p_mesh_library);
76 static Error update_library_file(Node *p_base_scene, Ref<MeshLibrary> ml, bool p_merge = true, bool p_apply_xforms = false);
77
78 MeshLibraryEditor();
79};
80
81class MeshLibraryEditorPlugin : public EditorPlugin {
82 GDCLASS(MeshLibraryEditorPlugin, EditorPlugin);
83
84 MeshLibraryEditor *mesh_library_editor = nullptr;
85
86public:
87 virtual String get_name() const override { return "MeshLibrary"; }
88 bool has_main_screen() const override { return false; }
89 virtual void edit(Object *p_node) override;
90 virtual bool handles(Object *p_node) const override;
91 virtual void make_visible(bool p_visible) override;
92
93 MeshLibraryEditorPlugin();
94};
95
96#endif // MESH_LIBRARY_EDITOR_PLUGIN_H
97