diff --git a/modules/web/SCsub b/modules/web/SCsub index c68c4a54f..315328c54 100644 --- a/modules/web/SCsub +++ b/modules/web/SCsub @@ -57,6 +57,10 @@ sources = [ "nodes/redirect/alias_web_page.cpp", ] +if env["tools"]: + sources.append("editor/web_editor.cpp") + sources.append("editor/web_editor_plugin.cpp") + if ARGUMENTS.get('custom_modules_shared', 'no') == 'yes': # Shared lib compilation module_env.Append(CCFLAGS=['-fPIC']) diff --git a/modules/web/editor/web_editor.cpp b/modules/web/editor/web_editor.cpp new file mode 100644 index 000000000..4b925f165 --- /dev/null +++ b/modules/web/editor/web_editor.cpp @@ -0,0 +1,47 @@ +/* +Copyright (c) 2022 Péter Magyar + +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. +*/ + +#include "web_editor.h" + + +void WebEditor::_notification(int p_what) { + switch (p_what) { + case NOTIFICATION_ENTER_TREE: { + } break; + case NOTIFICATION_VISIBILITY_CHANGED: { + } break; + case NOTIFICATION_POSTINITIALIZE: { + } break; + default: { + } break; + } +} + +WebEditor::WebEditor() { +} + +WebEditor::~WebEditor() { +} + +void WebEditor::_bind_methods() { + //ClassDB::bind_method(D_METHOD("_input", "event"), &WebEditor::_input); +} diff --git a/modules/web/editor/web_editor.h b/modules/web/editor/web_editor.h new file mode 100644 index 000000000..15504765d --- /dev/null +++ b/modules/web/editor/web_editor.h @@ -0,0 +1,42 @@ +#ifndef WEB_EDITOR_H +#define WEB_EDITOR_H + +/* +Copyright (c) 2022 Péter Magyar + +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. +*/ + +#include "core/object/reference.h" + +#include "scene/gui/box_container.h" + +class WebEditor : public HBoxContainer { + GDCLASS(WebEditor, HBoxContainer); + +public: + WebEditor(); + ~WebEditor(); + +protected: + void _notification(int p_what); + static void _bind_methods(); +}; + +#endif diff --git a/modules/web/editor/web_editor_plugin.cpp b/modules/web/editor/web_editor_plugin.cpp new file mode 100644 index 000000000..08da808ab --- /dev/null +++ b/modules/web/editor/web_editor_plugin.cpp @@ -0,0 +1,82 @@ +/* +Copyright (c) 2019-2022 Péter Magyar + +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. +*/ + +#include "web_editor_plugin.h" + +#include "../http/web_node.h" +#include "web_editor.h" + +#include "editor/editor_node.h" + +void WebEditorPlugin::make_visible(const bool visible) { + window->set_visible(visible); +} + +String WebEditorPlugin::get_name() const { + return "Web"; +} + +const Ref WebEditorPlugin::get_icon() const { + return _icon; +} + +bool WebEditorPlugin::has_main_screen() const { + return true; +} + +void WebEditorPlugin::edit(Object *p_object) { + //WebNode *wn = Object::cast_to(p_object); + + //if (wn) { + // window->set_node(wn); + //} +} + +bool WebEditorPlugin::handles(Object *p_object) const { + return p_object->is_class("WebNode"); +} + +WebEditorPlugin::WebEditorPlugin(EditorNode *p_node) { + editor = p_node; + + window = memnew(WebEditor); + + get_editor_interface()->get_editor_viewport()->add_child(window); + _icon = get_editor_interface()->get_base_control()->get_theme_icon("WebNodeEditor", "EditorIcons"); + + make_visible(false); +} + +WebEditorPlugin::~WebEditorPlugin() { +} + +void WebEditorPlugin::_notification(int p_what) { + switch (p_what) { + case NOTIFICATION_ENTER_TREE: { + get_editor_interface()->set_main_screen_editor_tab_button_visible("Web", false); + } break; + } +} + +void WebEditorPlugin::_bind_methods() { + //ClassDB::bind_method(D_METHOD(""), &WebEditorPlugin::); +} diff --git a/modules/web/editor/web_editor_plugin.h b/modules/web/editor/web_editor_plugin.h new file mode 100644 index 000000000..bb7ea780e --- /dev/null +++ b/modules/web/editor/web_editor_plugin.h @@ -0,0 +1,59 @@ +#ifndef WEB_EDITOR_PLUGIN_H +#define WEB_EDITOR_PLUGIN_H + +/* +Copyright (c) 2019-2022 Péter Magyar + +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. +*/ + +#include "core/object/reference.h" + +#include "editor/editor_plugin.h" + +class WebEditor; +class Texture; + +class WebEditorPlugin : public EditorPlugin { + GDCLASS(WebEditorPlugin, EditorPlugin); + +public: + void make_visible(const bool visible); + const Ref get_icon() const; + bool has_main_screen() const; + String get_name() const; + void edit(Object *p_object); + bool handles(Object *p_object) const; + + WebEditorPlugin(EditorNode *p_node); + ~WebEditorPlugin(); + + EditorNode *editor; + + WebEditor *window; + +protected: + void _notification(int p_what); + + static void _bind_methods(); + + Ref _icon; +}; + +#endif diff --git a/modules/web/register_types.cpp b/modules/web/register_types.cpp index 0c7366f78..e53df124b 100644 --- a/modules/web/register_types.cpp +++ b/modules/web/register_types.cpp @@ -61,6 +61,10 @@ SOFTWARE. #include "nodes/redirect/alias_web_page.h" #include "nodes/redirect/redirect_web_page.h" +#if TOOLS_ENABLED +#include "editor/web_editor_plugin.h" +#endif + void register_web_types() { ClassDB::register_class<_HTMLBuilder>(); ClassDB::register_class<_HTMLTag>(); @@ -124,6 +128,10 @@ void register_web_types() { ClassDB::register_class(); ClassDB::register_class(); + +#if TOOLS_ENABLED + EditorPlugins::add_by_type(); +#endif } void unregister_web_types() {