From 4cb8cccfcc28ccbc20a44cac05baeb1c79bd529a Mon Sep 17 00:00:00 2001 From: Jorijn van der Graaf Date: Mon, 10 Nov 2025 21:52:23 +0100 Subject: [PATCH] split --- .../Crafter.CppDOM-HtmlElement.cpp | 476 +++++++++++++++++ interfaces/Crafter.CppDOM-HtmlElement.cppm | 480 ++---------------- project.json | 1 + 3 files changed, 529 insertions(+), 428 deletions(-) create mode 100644 implementations/Crafter.CppDOM-HtmlElement.cpp diff --git a/implementations/Crafter.CppDOM-HtmlElement.cpp b/implementations/Crafter.CppDOM-HtmlElement.cpp new file mode 100644 index 0000000..72d863d --- /dev/null +++ b/implementations/Crafter.CppDOM-HtmlElement.cpp @@ -0,0 +1,476 @@ +/* +Crafter.CppDOM +Copyright (C) 2025 Catcrafts +Catcrafts.net + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 3.0 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +export module Crafter.CppDOM:HtmlElement_impl; +import std; +import :HtmlElement; +import :BindingsExport; +import :BindingsImport; +import :EventTypes; + +namespace Crafter { + HtmlElement::HtmlElement(const std::string_view id): ptr(CppDOMBindings::GetElementById(id)) { + + } + + HtmlElement::HtmlElement(const std::string_view id, const std::string_view html): ptr(CppDOMBindings::GetElementById(id)) { + CppDOMBindings::SetInnerHTML(ptr, html); + } + + void HtmlElement::SetInnerHTML(const std::string_view html) { + CppDOMBindings::SetInnerHTML(ptr, html); + } + + std::int32_t HtmlElement::AddClickListener(std::function callback) { + std::int32_t id = CppDOMBindings::clickHandlerMaxId++; + clickHandlers.push_back(id); + CppDOMBindings::clickHandlers->insert({id, callback}); + CppDOMBindings::AddClickListener(ptr, id); + return id; + } + + void HtmlElement::RemoveClickListener(std::int32_t id) { + clickHandlers.erase(std::remove(clickHandlers.begin(), clickHandlers.end(), id), clickHandlers.end()); + CppDOMBindings::clickHandlers->erase(id); + CppDOMBindings::RemoveClickListener(ptr, id); + } + + std::int32_t HtmlElement::AddMouseOverListener(std::function callback) { + std::int32_t id = CppDOMBindings::mouseOverHandlerMaxId++; + mouseOverHandlers.push_back(id); + CppDOMBindings::mouseOverHandlers->insert({id, callback}); + CppDOMBindings::AddMouseOverListener(ptr, id); + return id; + } + + void HtmlElement::RemoveMouseOverListener(std::int32_t id) { + mouseOverHandlers.erase(std::remove(mouseOverHandlers.begin(), mouseOverHandlers.end(), id), mouseOverHandlers.end()); + CppDOMBindings::mouseOverHandlers->erase(id); + CppDOMBindings::RemoveMouseOverListener(ptr, id); + } + + std::int32_t HtmlElement::AddMouseOutListener(std::function callback) { + std::int32_t id = CppDOMBindings::mouseOutHandlerMaxId++; + mouseOutHandlers.push_back(id); + CppDOMBindings::mouseOutHandlers->insert({id, callback}); + CppDOMBindings::AddMouseOutListener(ptr, id); + return id; + } + + void HtmlElement::RemoveMouseOutListener(std::int32_t id) { + mouseOutHandlers.erase(std::remove(mouseOutHandlers.begin(), mouseOutHandlers.end(), id), mouseOutHandlers.end()); + CppDOMBindings::mouseOutHandlers->erase(id); + CppDOMBindings::RemoveMouseOutListener(ptr, id); + } + + std::int32_t HtmlElement::AddMouseMoveListener(std::function callback) { + std::int32_t id = CppDOMBindings::mouseMoveHandlerMaxId++; + mouseMoveHandlers.push_back(id); + CppDOMBindings::mouseMoveHandlers->insert({id, callback}); + CppDOMBindings::AddMouseMoveListener(ptr, id); + return id; + } + + void HtmlElement::RemoveMouseMoveListener(std::int32_t id) { + mouseMoveHandlers.erase(std::remove(mouseMoveHandlers.begin(), mouseMoveHandlers.end(), id), mouseMoveHandlers.end()); + CppDOMBindings::mouseMoveHandlers->erase(id); + CppDOMBindings::RemoveMouseMoveListener(ptr, id); + } + + std::int32_t HtmlElement::AddMouseDownListener(std::function callback) { + std::int32_t id = CppDOMBindings::mouseDownHandlerMaxId++; + mouseDownHandlers.push_back(id); + CppDOMBindings::mouseDownHandlers->insert({id, callback}); + CppDOMBindings::AddMouseDownListener(ptr, id); + return id; + } + + void HtmlElement::RemoveMouseDownListener(std::int32_t id) { + mouseDownHandlers.erase(std::remove(mouseDownHandlers.begin(), mouseDownHandlers.end(), id), mouseDownHandlers.end()); + CppDOMBindings::mouseDownHandlers->erase(id); + CppDOMBindings::RemoveMouseDownListener(ptr, id); + } + + std::int32_t HtmlElement::AddMouseUpListener(std::function callback) { + std::int32_t id = CppDOMBindings::mouseUpHandlerMaxId++; + mouseUpHandlers.push_back(id); + CppDOMBindings::mouseUpHandlers->insert({id, callback}); + CppDOMBindings::AddMouseUpListener(ptr, id); + return id; + } + + void HtmlElement::RemoveMouseUpListener(std::int32_t id) { + mouseUpHandlers.erase(std::remove(mouseUpHandlers.begin(), mouseUpHandlers.end(), id), mouseUpHandlers.end()); + CppDOMBindings::mouseUpHandlers->erase(id); + CppDOMBindings::RemoveMouseUpListener(ptr, id); + } + + std::int32_t HtmlElement::AddFocusListener(std::function callback) { + std::int32_t id = CppDOMBindings::focusHandlerMaxId++; + focusHandlers.push_back(id); + CppDOMBindings::focusHandlers->insert({id, callback}); + CppDOMBindings::AddFocusListener(ptr, id); + return id; + } + + void HtmlElement::RemoveFocusListener(std::int32_t id) { + focusHandlers.erase(std::remove(focusHandlers.begin(), focusHandlers.end(), id), focusHandlers.end()); + CppDOMBindings::focusHandlers->erase(id); + CppDOMBindings::RemoveFocusListener(ptr, id); + } + + std::int32_t HtmlElement::AddBlurListener(std::function callback) { + std::int32_t id = CppDOMBindings::blurHandlerMaxId++; + blurHandlers.push_back(id); + CppDOMBindings::blurHandlers->insert({id, callback}); + CppDOMBindings::AddBlurListener(ptr, id); + return id; + } + + void HtmlElement::RemoveBlurListener(std::int32_t id) { + blurHandlers.erase(std::remove(blurHandlers.begin(), blurHandlers.end(), id), blurHandlers.end()); + CppDOMBindings::blurHandlers->erase(id); + CppDOMBindings::RemoveBlurListener(ptr, id); + } + + std::int32_t HtmlElement::AddKeyDownListener(std::function callback) { + std::int32_t id = CppDOMBindings::keyDownHandlerMaxId++; + keyDownHandlers.push_back(id); + CppDOMBindings::keyDownHandlers->insert({id, callback}); + CppDOMBindings::AddKeyDownListener(ptr, id); + return id; + } + + void HtmlElement::RemoveKeyDownListener(std::int32_t id) { + keyDownHandlers.erase(std::remove(keyDownHandlers.begin(), keyDownHandlers.end(), id), keyDownHandlers.end()); + CppDOMBindings::keyDownHandlers->erase(id); + CppDOMBindings::RemoveKeyDownListener(ptr, id); + } + + std::int32_t HtmlElement::AddKeyUpListener(std::function callback) { + std::int32_t id = CppDOMBindings::keyUpHandlerMaxId++; + keyUpHandlers.push_back(id); + CppDOMBindings::keyUpHandlers->insert({id, callback}); + CppDOMBindings::AddKeyUpListener(ptr, id); + return id; + } + + void HtmlElement::RemoveKeyUpListener(std::int32_t id) { + keyUpHandlers.erase(std::remove(keyUpHandlers.begin(), keyUpHandlers.end(), id), keyUpHandlers.end()); + CppDOMBindings::keyUpHandlers->erase(id); + CppDOMBindings::RemoveKeyUpListener(ptr, id); + } + + std::int32_t HtmlElement::AddKeyPressListener(std::function callback) { + std::int32_t id = CppDOMBindings::keyPressHandlerMaxId++; + keyPressHandlers.push_back(id); + CppDOMBindings::keyPressHandlers->insert({id, callback}); + CppDOMBindings::AddKeyPressListener(ptr, id); + return id; + } + + void HtmlElement::RemoveKeyPressListener(std::int32_t id) { + keyPressHandlers.erase(std::remove(keyPressHandlers.begin(), keyPressHandlers.end(), id), keyPressHandlers.end()); + CppDOMBindings::keyPressHandlers->erase(id); + CppDOMBindings::RemoveKeyPressListener(ptr, id); + } + + std::int32_t HtmlElement::AddChangeListener(std::function callback) { + std::int32_t id = CppDOMBindings::changeHandlerMaxId++; + changeHandlers.push_back(id); + CppDOMBindings::changeHandlers->insert({id, callback}); + CppDOMBindings::AddChangeListener(ptr, id); + return id; + } + + void HtmlElement::RemoveChangeListener(std::int32_t id) { + changeHandlers.erase(std::remove(changeHandlers.begin(), changeHandlers.end(), id), changeHandlers.end()); + CppDOMBindings::changeHandlers->erase(id); + CppDOMBindings::RemoveChangeListener(ptr, id); + } + + std::int32_t HtmlElement::AddSubmitListener(std::function callback) { + std::int32_t id = CppDOMBindings::submitHandlerMaxId++; + submitHandlers.push_back(id); + CppDOMBindings::submitHandlers->insert({id, callback}); + CppDOMBindings::AddSubmitListener(ptr, id); + return id; + } + + void HtmlElement::RemoveSubmitListener(std::int32_t id) { + submitHandlers.erase(std::remove(submitHandlers.begin(), submitHandlers.end(), id), submitHandlers.end()); + CppDOMBindings::submitHandlers->erase(id); + CppDOMBindings::RemoveSubmitListener(ptr, id); + } + + std::int32_t HtmlElement::AddInputListener(std::function callback) { + std::int32_t id = CppDOMBindings::inputHandlerMaxId++; + inputHandlers.push_back(id); + CppDOMBindings::inputHandlers->insert({id, callback}); + CppDOMBindings::AddInputListener(ptr, id); + return id; + } + + void HtmlElement::RemoveInputListener(std::int32_t id) { + inputHandlers.erase(std::remove(inputHandlers.begin(), inputHandlers.end(), id), inputHandlers.end()); + CppDOMBindings::inputHandlers->erase(id); + CppDOMBindings::RemoveInputListener(ptr, id); + } + + std::int32_t HtmlElement::AddResizeListener(std::function callback) { + std::int32_t id = CppDOMBindings::resizeHandlerMaxId++; + resizeHandlers.push_back(id); + CppDOMBindings::resizeHandlers->insert({id, callback}); + CppDOMBindings::AddResizeListener(ptr, id); + return id; + } + + void HtmlElement::RemoveResizeListener(std::int32_t id) { + resizeHandlers.erase(std::remove(resizeHandlers.begin(), resizeHandlers.end(), id), resizeHandlers.end()); + CppDOMBindings::resizeHandlers->erase(id); + CppDOMBindings::RemoveResizeListener(ptr, id); + } + + std::int32_t HtmlElement::AddScrollListener(std::function callback) { + std::int32_t id = CppDOMBindings::scrollHandlerMaxId++; + scrollHandlers.push_back(id); + CppDOMBindings::scrollHandlers->insert({id, callback}); + CppDOMBindings::AddScrollListener(ptr, id); + return id; + } + + void HtmlElement::RemoveScrollListener(std::int32_t id) { + scrollHandlers.erase(std::remove(scrollHandlers.begin(), scrollHandlers.end(), id), scrollHandlers.end()); + CppDOMBindings::scrollHandlers->erase(id); + CppDOMBindings::RemoveScrollListener(ptr, id); + } + + std::int32_t HtmlElement::AddContextMenuListener(std::function callback) { + std::int32_t id = CppDOMBindings::contextMenuHandlerMaxId++; + contextMenuHandlers.push_back(id); + CppDOMBindings::contextMenuHandlers->insert({id, callback}); + CppDOMBindings::AddContextMenuListener(ptr, id); + return id; + } + + void HtmlElement::RemoveContextMenuListener(std::int32_t id) { + contextMenuHandlers.erase(std::remove(contextMenuHandlers.begin(), contextMenuHandlers.end(), id), contextMenuHandlers.end()); + CppDOMBindings::contextMenuHandlers->erase(id); + CppDOMBindings::RemoveContextMenuListener(ptr, id); + } + + std::int32_t HtmlElement::AddDragStartListener(std::function callback) { + std::int32_t id = CppDOMBindings::dragStartHandlerMaxId++; + dragStartHandlers.push_back(id); + CppDOMBindings::dragStartHandlers->insert({id, callback}); + CppDOMBindings::AddDragStartListener(ptr, id); + return id; + } + + void HtmlElement::RemoveDragStartListener(std::int32_t id) { + dragStartHandlers.erase(std::remove(dragStartHandlers.begin(), dragStartHandlers.end(), id), dragStartHandlers.end()); + CppDOMBindings::dragStartHandlers->erase(id); + CppDOMBindings::RemoveDragStartListener(ptr, id); + } + + std::int32_t HtmlElement::AddDragEndListener(std::function callback) { + std::int32_t id = CppDOMBindings::dragEndHandlerMaxId++; + dragEndHandlers.push_back(id); + CppDOMBindings::dragEndHandlers->insert({id, callback}); + CppDOMBindings::AddDragEndListener(ptr, id); + return id; + } + + void HtmlElement::RemoveDragEndListener(std::int32_t id) { + dragEndHandlers.erase(std::remove(dragEndHandlers.begin(), dragEndHandlers.end(), id), dragEndHandlers.end()); + CppDOMBindings::dragEndHandlers->erase(id); + CppDOMBindings::RemoveDragEndListener(ptr, id); + } + + std::int32_t HtmlElement::AddDropListener(std::function callback) { + std::int32_t id = CppDOMBindings::dropHandlerMaxId++; + dropHandlers.push_back(id); + CppDOMBindings::dropHandlers->insert({id, callback}); + CppDOMBindings::AddDropListener(ptr, id); + return id; + } + + void HtmlElement::RemoveDropListener(std::int32_t id) { + dropHandlers.erase(std::remove(dropHandlers.begin(), dropHandlers.end(), id), dropHandlers.end()); + CppDOMBindings::dropHandlers->erase(id); + CppDOMBindings::RemoveDropListener(ptr, id); + } + + std::int32_t HtmlElement::AddDragOverListener(std::function callback) { + std::int32_t id = CppDOMBindings::dragOverHandlerMaxId++; + dragOverHandlers.push_back(id); + CppDOMBindings::dragOverHandlers->insert({id, callback}); + CppDOMBindings::AddDragOverListener(ptr, id); + return id; + } + + void HtmlElement::RemoveDragOverListener(std::int32_t id) { + dragOverHandlers.erase(std::remove(dragOverHandlers.begin(), dragOverHandlers.end(), id), dragOverHandlers.end()); + CppDOMBindings::dragOverHandlers->erase(id); + CppDOMBindings::RemoveDragOverListener(ptr, id); + } + + std::int32_t HtmlElement::AddDragEnterListener(std::function callback) { + std::int32_t id = CppDOMBindings::dragEnterHandlerMaxId++; + dragEnterHandlers.push_back(id); + CppDOMBindings::dragEnterHandlers->insert({id, callback}); + CppDOMBindings::AddDragEnterListener(ptr, id); + return id; + } + + void HtmlElement::RemoveDragEnterListener(std::int32_t id) { + dragEnterHandlers.erase(std::remove(dragEnterHandlers.begin(), dragEnterHandlers.end(), id), dragEnterHandlers.end()); + CppDOMBindings::dragEnterHandlers->erase(id); + CppDOMBindings::RemoveDragEnterListener(ptr, id); + } + + std::int32_t HtmlElement::AddDragLeaveListener(std::function callback) { + std::int32_t id = CppDOMBindings::dragLeaveHandlerMaxId++; + dragLeaveHandlers.push_back(id); + CppDOMBindings::dragLeaveHandlers->insert({id, callback}); + CppDOMBindings::AddDragLeaveListener(ptr, id); + return id; + } + + void HtmlElement::RemoveDragLeaveListener(std::int32_t id) { + dragLeaveHandlers.erase(std::remove(dragLeaveHandlers.begin(), dragLeaveHandlers.end(), id), dragLeaveHandlers.end()); + CppDOMBindings::dragLeaveHandlers->erase(id); + CppDOMBindings::RemoveDragLeaveListener(ptr, id); + } + + std::int32_t HtmlElement::AddWheelListener(std::function callback) { + std::int32_t id = CppDOMBindings::wheelHandlerMaxId++; + wheelHandlers.push_back(id); + CppDOMBindings::wheelHandlers->insert({id, callback}); + CppDOMBindings::AddWheelListener(ptr, id); + return id; + } + + void HtmlElement::RemoveWheelListener(std::int32_t id) { + wheelHandlers.erase(std::remove(wheelHandlers.begin(), wheelHandlers.end(), id), wheelHandlers.end()); + CppDOMBindings::wheelHandlers->erase(id); + CppDOMBindings::RemoveWheelListener(ptr, id); + } + + HtmlElement::~HtmlElement(){ + for(std::int32_t handler : clickHandlers) { + CppDOMBindings::clickHandlers->erase(handler); + CppDOMBindings::RemoveClickListener(ptr, handler); + } + for(std::int32_t handler : mouseOverHandlers) { + CppDOMBindings::mouseOverHandlers->erase(handler); + CppDOMBindings::RemoveMouseOverListener(ptr, handler); + } + for(std::int32_t handler : mouseOutHandlers) { + CppDOMBindings::mouseOutHandlers->erase(handler); + CppDOMBindings::RemoveMouseOutListener(ptr, handler); + } + for(std::int32_t handler : mouseMoveHandlers) { + CppDOMBindings::mouseMoveHandlers->erase(handler); + CppDOMBindings::RemoveMouseMoveListener(ptr, handler); + } + for(std::int32_t handler : mouseDownHandlers) { + CppDOMBindings::mouseDownHandlers->erase(handler); + CppDOMBindings::RemoveMouseDownListener(ptr, handler); + } + for(std::int32_t handler : mouseUpHandlers) { + CppDOMBindings::mouseUpHandlers->erase(handler); + CppDOMBindings::RemoveMouseUpListener(ptr, handler); + } + for(std::int32_t handler : focusHandlers) { + CppDOMBindings::focusHandlers->erase(handler); + CppDOMBindings::RemoveFocusListener(ptr, handler); + } + for(std::int32_t handler : blurHandlers) { + CppDOMBindings::blurHandlers->erase(handler); + CppDOMBindings::RemoveBlurListener(ptr, handler); + } + for(std::int32_t handler : keyDownHandlers) { + CppDOMBindings::keyDownHandlers->erase(handler); + CppDOMBindings::RemoveKeyDownListener(ptr, handler); + } + for(std::int32_t handler : keyUpHandlers) { + CppDOMBindings::keyUpHandlers->erase(handler); + CppDOMBindings::RemoveKeyUpListener(ptr, handler); + } + for(std::int32_t handler : keyPressHandlers) { + CppDOMBindings::keyPressHandlers->erase(handler); + CppDOMBindings::RemoveKeyPressListener(ptr, handler); + } + for(std::int32_t handler : changeHandlers) { + CppDOMBindings::changeHandlers->erase(handler); + CppDOMBindings::RemoveChangeListener(ptr, handler); + } + for(std::int32_t handler : submitHandlers) { + CppDOMBindings::submitHandlers->erase(handler); + CppDOMBindings::RemoveSubmitListener(ptr, handler); + } + for(std::int32_t handler : inputHandlers) { + CppDOMBindings::inputHandlers->erase(handler); + CppDOMBindings::RemoveInputListener(ptr, handler); + } + for(std::int32_t handler : resizeHandlers) { + CppDOMBindings::resizeHandlers->erase(handler); + CppDOMBindings::RemoveResizeListener(ptr, handler); + } + for(std::int32_t handler : scrollHandlers) { + CppDOMBindings::scrollHandlers->erase(handler); + CppDOMBindings::RemoveScrollListener(ptr, handler); + } + for(std::int32_t handler : contextMenuHandlers) { + CppDOMBindings::contextMenuHandlers->erase(handler); + CppDOMBindings::RemoveContextMenuListener(ptr, handler); + } + for(std::int32_t handler : dragStartHandlers) { + CppDOMBindings::dragStartHandlers->erase(handler); + CppDOMBindings::RemoveDragStartListener(ptr, handler); + } + for(std::int32_t handler : dragEndHandlers) { + CppDOMBindings::dragEndHandlers->erase(handler); + CppDOMBindings::RemoveDragEndListener(ptr, handler); + } + for(std::int32_t handler : dropHandlers) { + CppDOMBindings::dropHandlers->erase(handler); + CppDOMBindings::RemoveDropListener(ptr, handler); + } + for(std::int32_t handler : dragOverHandlers) { + CppDOMBindings::dragOverHandlers->erase(handler); + CppDOMBindings::RemoveDragOverListener(ptr, handler); + } + for(std::int32_t handler : dragEnterHandlers) { + CppDOMBindings::dragEnterHandlers->erase(handler); + CppDOMBindings::RemoveDragEnterListener(ptr, handler); + } + for(std::int32_t handler : dragLeaveHandlers) { + CppDOMBindings::dragLeaveHandlers->erase(handler); + CppDOMBindings::RemoveDragLeaveListener(ptr, handler); + } + for(std::int32_t handler : wheelHandlers) { + CppDOMBindings::wheelHandlers->erase(handler); + CppDOMBindings::RemoveWheelListener(ptr, handler); + } + CppDOMBindings::FreeJs(ptr); + } +} \ No newline at end of file diff --git a/interfaces/Crafter.CppDOM-HtmlElement.cppm b/interfaces/Crafter.CppDOM-HtmlElement.cppm index fe93cb4..561b6a3 100644 --- a/interfaces/Crafter.CppDOM-HtmlElement.cppm +++ b/interfaces/Crafter.CppDOM-HtmlElement.cppm @@ -53,458 +53,82 @@ namespace Crafter { std::vector dragLeaveHandlers; std::vector wheelHandlers; - HtmlElement(const std::string_view id): ptr(CppDOMBindings::GetElementById(id)) { - - } - HtmlElement(const std::string_view id, const std::string_view html): ptr(CppDOMBindings::GetElementById(id)) { - CppDOMBindings::SetInnerHTML(ptr, html); - } - void SetInnerHTML(const std::string_view html) { - CppDOMBindings::SetInnerHTML(ptr, html); - } + HtmlElement(const std::string_view id); + HtmlElement(const std::string_view id, const std::string_view html); + void SetInnerHTML(const std::string_view html); - std::int32_t AddClickListener(std::function callback) { - std::int32_t id = CppDOMBindings::clickHandlerMaxId++; - clickHandlers.push_back(id); - CppDOMBindings::clickHandlers->insert({id, callback}); - CppDOMBindings::AddClickListener(ptr, id); - return id; - } + std::int32_t AddClickListener(std::function callback); + void RemoveClickListener(std::int32_t id); - void RemoveClickListener(std::int32_t id) { - clickHandlers.erase(std::remove(clickHandlers.begin(), clickHandlers.end(), id), clickHandlers.end()); - CppDOMBindings::clickHandlers->erase(id); - CppDOMBindings::RemoveClickListener(ptr, id); - } + std::int32_t AddMouseOverListener(std::function callback); + void RemoveMouseOverListener(std::int32_t id); - std::int32_t AddMouseOverListener(std::function callback) { - std::int32_t id = CppDOMBindings::mouseOverHandlerMaxId++; - mouseOverHandlers.push_back(id); - CppDOMBindings::mouseOverHandlers->insert({id, callback}); - CppDOMBindings::AddMouseOverListener(ptr, id); - return id; - } + std::int32_t AddMouseOutListener(std::function callback); + void RemoveMouseOutListener(std::int32_t id); - void RemoveMouseOverListener(std::int32_t id) { - mouseOverHandlers.erase(std::remove(mouseOverHandlers.begin(), mouseOverHandlers.end(), id), mouseOverHandlers.end()); - CppDOMBindings::mouseOverHandlers->erase(id); - CppDOMBindings::RemoveMouseOverListener(ptr, id); - } + std::int32_t AddMouseMoveListener(std::function callback); + void RemoveMouseMoveListener(std::int32_t id); - std::int32_t AddMouseOutListener(std::function callback) { - std::int32_t id = CppDOMBindings::mouseOutHandlerMaxId++; - mouseOutHandlers.push_back(id); - CppDOMBindings::mouseOutHandlers->insert({id, callback}); - CppDOMBindings::AddMouseOutListener(ptr, id); - return id; - } + std::int32_t AddMouseDownListener(std::function callback); + void RemoveMouseDownListener(std::int32_t id); - void RemoveMouseOutListener(std::int32_t id) { - mouseOutHandlers.erase(std::remove(mouseOutHandlers.begin(), mouseOutHandlers.end(), id), mouseOutHandlers.end()); - CppDOMBindings::mouseOutHandlers->erase(id); - CppDOMBindings::RemoveMouseOutListener(ptr, id); - } + std::int32_t AddMouseUpListener(std::function callback); + void RemoveMouseUpListener(std::int32_t id); - std::int32_t AddMouseMoveListener(std::function callback) { - std::int32_t id = CppDOMBindings::mouseMoveHandlerMaxId++; - mouseMoveHandlers.push_back(id); - CppDOMBindings::mouseMoveHandlers->insert({id, callback}); - CppDOMBindings::AddMouseMoveListener(ptr, id); - return id; - } + std::int32_t AddFocusListener(std::function callback); + void RemoveFocusListener(std::int32_t id); - void RemoveMouseMoveListener(std::int32_t id) { - mouseMoveHandlers.erase(std::remove(mouseMoveHandlers.begin(), mouseMoveHandlers.end(), id), mouseMoveHandlers.end()); - CppDOMBindings::mouseMoveHandlers->erase(id); - CppDOMBindings::RemoveMouseMoveListener(ptr, id); - } + std::int32_t AddBlurListener(std::function callback); + void RemoveBlurListener(std::int32_t id); - std::int32_t AddMouseDownListener(std::function callback) { - std::int32_t id = CppDOMBindings::mouseDownHandlerMaxId++; - mouseDownHandlers.push_back(id); - CppDOMBindings::mouseDownHandlers->insert({id, callback}); - CppDOMBindings::AddMouseDownListener(ptr, id); - return id; - } + std::int32_t AddKeyDownListener(std::function callback); + void RemoveKeyDownListener(std::int32_t id); - void RemoveMouseDownListener(std::int32_t id) { - mouseDownHandlers.erase(std::remove(mouseDownHandlers.begin(), mouseDownHandlers.end(), id), mouseDownHandlers.end()); - CppDOMBindings::mouseDownHandlers->erase(id); - CppDOMBindings::RemoveMouseDownListener(ptr, id); - } + std::int32_t AddKeyUpListener(std::function callback); + void RemoveKeyUpListener(std::int32_t id); - std::int32_t AddMouseUpListener(std::function callback) { - std::int32_t id = CppDOMBindings::mouseUpHandlerMaxId++; - mouseUpHandlers.push_back(id); - CppDOMBindings::mouseUpHandlers->insert({id, callback}); - CppDOMBindings::AddMouseUpListener(ptr, id); - return id; - } + std::int32_t AddKeyPressListener(std::function callback); + void RemoveKeyPressListener(std::int32_t id); - void RemoveMouseUpListener(std::int32_t id) { - mouseUpHandlers.erase(std::remove(mouseUpHandlers.begin(), mouseUpHandlers.end(), id), mouseUpHandlers.end()); - CppDOMBindings::mouseUpHandlers->erase(id); - CppDOMBindings::RemoveMouseUpListener(ptr, id); - } + std::int32_t AddChangeListener(std::function callback); + void RemoveChangeListener(std::int32_t id); - // Focus Events - std::int32_t AddFocusListener(std::function callback) { - std::int32_t id = CppDOMBindings::focusHandlerMaxId++; - focusHandlers.push_back(id); - CppDOMBindings::focusHandlers->insert({id, callback}); - CppDOMBindings::AddFocusListener(ptr, id); - return id; - } + std::int32_t AddSubmitListener(std::function callback); + void RemoveSubmitListener(std::int32_t id); - void RemoveFocusListener(std::int32_t id) { - focusHandlers.erase(std::remove(focusHandlers.begin(), focusHandlers.end(), id), focusHandlers.end()); - CppDOMBindings::focusHandlers->erase(id); - CppDOMBindings::RemoveFocusListener(ptr, id); - } + std::int32_t AddInputListener(std::function callback); + void RemoveInputListener(std::int32_t id); - std::int32_t AddBlurListener(std::function callback) { - std::int32_t id = CppDOMBindings::blurHandlerMaxId++; - blurHandlers.push_back(id); - CppDOMBindings::blurHandlers->insert({id, callback}); - CppDOMBindings::AddBlurListener(ptr, id); - return id; - } + std::int32_t AddResizeListener(std::function callback); + void RemoveResizeListener(std::int32_t id); - void RemoveBlurListener(std::int32_t id) { - blurHandlers.erase(std::remove(blurHandlers.begin(), blurHandlers.end(), id), blurHandlers.end()); - CppDOMBindings::blurHandlers->erase(id); - CppDOMBindings::RemoveBlurListener(ptr, id); - } + std::int32_t AddScrollListener(std::function callback); + void RemoveScrollListener(std::int32_t id); - // Keyboard Events - std::int32_t AddKeyDownListener(std::function callback) { - std::int32_t id = CppDOMBindings::keyDownHandlerMaxId++; - keyDownHandlers.push_back(id); - CppDOMBindings::keyDownHandlers->insert({id, callback}); - CppDOMBindings::AddKeyDownListener(ptr, id); - return id; - } + std::int32_t AddContextMenuListener(std::function callback); + void RemoveContextMenuListener(std::int32_t id); - void RemoveKeyDownListener(std::int32_t id) { - keyDownHandlers.erase(std::remove(keyDownHandlers.begin(), keyDownHandlers.end(), id), keyDownHandlers.end()); - CppDOMBindings::keyDownHandlers->erase(id); - CppDOMBindings::RemoveKeyDownListener(ptr, id); - } + std::int32_t AddDragStartListener(std::function callback); + void RemoveDragStartListener(std::int32_t id); - std::int32_t AddKeyUpListener(std::function callback) { - std::int32_t id = CppDOMBindings::keyUpHandlerMaxId++; - keyUpHandlers.push_back(id); - CppDOMBindings::keyUpHandlers->insert({id, callback}); - CppDOMBindings::AddKeyUpListener(ptr, id); - return id; - } + std::int32_t AddDragEndListener(std::function callback); + void RemoveDragEndListener(std::int32_t id); - void RemoveKeyUpListener(std::int32_t id) { - keyUpHandlers.erase(std::remove(keyUpHandlers.begin(), keyUpHandlers.end(), id), keyUpHandlers.end()); - CppDOMBindings::keyUpHandlers->erase(id); - CppDOMBindings::RemoveKeyUpListener(ptr, id); - } + std::int32_t AddDropListener(std::function callback); + void RemoveDropListener(std::int32_t id); - std::int32_t AddKeyPressListener(std::function callback) { - std::int32_t id = CppDOMBindings::keyPressHandlerMaxId++; - keyPressHandlers.push_back(id); - CppDOMBindings::keyPressHandlers->insert({id, callback}); - CppDOMBindings::AddKeyPressListener(ptr, id); - return id; - } + std::int32_t AddDragOverListener(std::function callback); + void RemoveDragOverListener(std::int32_t id); - void RemoveKeyPressListener(std::int32_t id) { - keyPressHandlers.erase(std::remove(keyPressHandlers.begin(), keyPressHandlers.end(), id), keyPressHandlers.end()); - CppDOMBindings::keyPressHandlers->erase(id); - CppDOMBindings::RemoveKeyPressListener(ptr, id); - } + std::int32_t AddDragEnterListener(std::function callback); + void RemoveDragEnterListener(std::int32_t id); - // Form Events - std::int32_t AddChangeListener(std::function callback) { - std::int32_t id = CppDOMBindings::changeHandlerMaxId++; - changeHandlers.push_back(id); - CppDOMBindings::changeHandlers->insert({id, callback}); - CppDOMBindings::AddChangeListener(ptr, id); - return id; - } + std::int32_t AddDragLeaveListener(std::function callback); + void RemoveDragLeaveListener(std::int32_t id); - void RemoveChangeListener(std::int32_t id) { - changeHandlers.erase(std::remove(changeHandlers.begin(), changeHandlers.end(), id), changeHandlers.end()); - CppDOMBindings::changeHandlers->erase(id); - CppDOMBindings::RemoveChangeListener(ptr, id); - } + std::int32_t AddWheelListener(std::function callback); + void RemoveWheelListener(std::int32_t id); - std::int32_t AddSubmitListener(std::function callback) { - std::int32_t id = CppDOMBindings::submitHandlerMaxId++; - submitHandlers.push_back(id); - CppDOMBindings::submitHandlers->insert({id, callback}); - CppDOMBindings::AddSubmitListener(ptr, id); - return id; - } - - void RemoveSubmitListener(std::int32_t id) { - submitHandlers.erase(std::remove(submitHandlers.begin(), submitHandlers.end(), id), submitHandlers.end()); - CppDOMBindings::submitHandlers->erase(id); - CppDOMBindings::RemoveSubmitListener(ptr, id); - } - - std::int32_t AddInputListener(std::function callback) { - std::int32_t id = CppDOMBindings::inputHandlerMaxId++; - inputHandlers.push_back(id); - CppDOMBindings::inputHandlers->insert({id, callback}); - CppDOMBindings::AddInputListener(ptr, id); - return id; - } - - void RemoveInputListener(std::int32_t id) { - inputHandlers.erase(std::remove(inputHandlers.begin(), inputHandlers.end(), id), inputHandlers.end()); - CppDOMBindings::inputHandlers->erase(id); - CppDOMBindings::RemoveInputListener(ptr, id); - } - - std::int32_t AddResizeListener(std::function callback) { - std::int32_t id = CppDOMBindings::resizeHandlerMaxId++; - resizeHandlers.push_back(id); - CppDOMBindings::resizeHandlers->insert({id, callback}); - CppDOMBindings::AddResizeListener(ptr, id); - return id; - } - - void RemoveResizeListener(std::int32_t id) { - resizeHandlers.erase(std::remove(resizeHandlers.begin(), resizeHandlers.end(), id), resizeHandlers.end()); - CppDOMBindings::resizeHandlers->erase(id); - CppDOMBindings::RemoveResizeListener(ptr, id); - } - - std::int32_t AddScrollListener(std::function callback) { - std::int32_t id = CppDOMBindings::scrollHandlerMaxId++; - scrollHandlers.push_back(id); - CppDOMBindings::scrollHandlers->insert({id, callback}); - CppDOMBindings::AddScrollListener(ptr, id); - return id; - } - - void RemoveScrollListener(std::int32_t id) { - scrollHandlers.erase(std::remove(scrollHandlers.begin(), scrollHandlers.end(), id), scrollHandlers.end()); - CppDOMBindings::scrollHandlers->erase(id); - CppDOMBindings::RemoveScrollListener(ptr, id); - } - - // Context Menu Events - std::int32_t AddContextMenuListener(std::function callback) { - std::int32_t id = CppDOMBindings::contextMenuHandlerMaxId++; - contextMenuHandlers.push_back(id); - CppDOMBindings::contextMenuHandlers->insert({id, callback}); - CppDOMBindings::AddContextMenuListener(ptr, id); - return id; - } - - void RemoveContextMenuListener(std::int32_t id) { - contextMenuHandlers.erase(std::remove(contextMenuHandlers.begin(), contextMenuHandlers.end(), id), contextMenuHandlers.end()); - CppDOMBindings::contextMenuHandlers->erase(id); - CppDOMBindings::RemoveContextMenuListener(ptr, id); - } - - // Drag and Drop Events - std::int32_t AddDragStartListener(std::function callback) { - std::int32_t id = CppDOMBindings::dragStartHandlerMaxId++; - dragStartHandlers.push_back(id); - CppDOMBindings::dragStartHandlers->insert({id, callback}); - CppDOMBindings::AddDragStartListener(ptr, id); - return id; - } - - void RemoveDragStartListener(std::int32_t id) { - dragStartHandlers.erase(std::remove(dragStartHandlers.begin(), dragStartHandlers.end(), id), dragStartHandlers.end()); - CppDOMBindings::dragStartHandlers->erase(id); - CppDOMBindings::RemoveDragStartListener(ptr, id); - } - - std::int32_t AddDragEndListener(std::function callback) { - std::int32_t id = CppDOMBindings::dragEndHandlerMaxId++; - dragEndHandlers.push_back(id); - CppDOMBindings::dragEndHandlers->insert({id, callback}); - CppDOMBindings::AddDragEndListener(ptr, id); - return id; - } - - void RemoveDragEndListener(std::int32_t id) { - dragEndHandlers.erase(std::remove(dragEndHandlers.begin(), dragEndHandlers.end(), id), dragEndHandlers.end()); - CppDOMBindings::dragEndHandlers->erase(id); - CppDOMBindings::RemoveDragEndListener(ptr, id); - } - - std::int32_t AddDropListener(std::function callback) { - std::int32_t id = CppDOMBindings::dropHandlerMaxId++; - dropHandlers.push_back(id); - CppDOMBindings::dropHandlers->insert({id, callback}); - CppDOMBindings::AddDropListener(ptr, id); - return id; - } - - void RemoveDropListener(std::int32_t id) { - dropHandlers.erase(std::remove(dropHandlers.begin(), dropHandlers.end(), id), dropHandlers.end()); - CppDOMBindings::dropHandlers->erase(id); - CppDOMBindings::RemoveDropListener(ptr, id); - } - - // Additional Drag Events - std::int32_t AddDragOverListener(std::function callback) { - std::int32_t id = CppDOMBindings::dragOverHandlerMaxId++; - dragOverHandlers.push_back(id); - CppDOMBindings::dragOverHandlers->insert({id, callback}); - CppDOMBindings::AddDragOverListener(ptr, id); - return id; - } - - void RemoveDragOverListener(std::int32_t id) { - dragOverHandlers.erase(std::remove(dragOverHandlers.begin(), dragOverHandlers.end(), id), dragOverHandlers.end()); - CppDOMBindings::dragOverHandlers->erase(id); - CppDOMBindings::RemoveDragOverListener(ptr, id); - } - - std::int32_t AddDragEnterListener(std::function callback) { - std::int32_t id = CppDOMBindings::dragEnterHandlerMaxId++; - dragEnterHandlers.push_back(id); - CppDOMBindings::dragEnterHandlers->insert({id, callback}); - CppDOMBindings::AddDragEnterListener(ptr, id); - return id; - } - - void RemoveDragEnterListener(std::int32_t id) { - dragEnterHandlers.erase(std::remove(dragEnterHandlers.begin(), dragEnterHandlers.end(), id), dragEnterHandlers.end()); - CppDOMBindings::dragEnterHandlers->erase(id); - CppDOMBindings::RemoveDragEnterListener(ptr, id); - } - - std::int32_t AddDragLeaveListener(std::function callback) { - std::int32_t id = CppDOMBindings::dragLeaveHandlerMaxId++; - dragLeaveHandlers.push_back(id); - CppDOMBindings::dragLeaveHandlers->insert({id, callback}); - CppDOMBindings::AddDragLeaveListener(ptr, id); - return id; - } - - void RemoveDragLeaveListener(std::int32_t id) { - dragLeaveHandlers.erase(std::remove(dragLeaveHandlers.begin(), dragLeaveHandlers.end(), id), dragLeaveHandlers.end()); - CppDOMBindings::dragLeaveHandlers->erase(id); - CppDOMBindings::RemoveDragLeaveListener(ptr, id); - } - - // Wheel Event - std::int32_t AddWheelListener(std::function callback) { - std::int32_t id = CppDOMBindings::wheelHandlerMaxId++; - wheelHandlers.push_back(id); - CppDOMBindings::wheelHandlers->insert({id, callback}); - CppDOMBindings::AddWheelListener(ptr, id); - return id; - } - - void RemoveWheelListener(std::int32_t id) { - wheelHandlers.erase(std::remove(wheelHandlers.begin(), wheelHandlers.end(), id), wheelHandlers.end()); - CppDOMBindings::wheelHandlers->erase(id); - CppDOMBindings::RemoveWheelListener(ptr, id); - } - - ~HtmlElement(){ - // Clean up all handlers by type - for(std::int32_t handler : clickHandlers) { - CppDOMBindings::clickHandlers->erase(handler); - CppDOMBindings::RemoveClickListener(ptr, handler); - } - for(std::int32_t handler : mouseOverHandlers) { - CppDOMBindings::mouseOverHandlers->erase(handler); - CppDOMBindings::RemoveMouseOverListener(ptr, handler); - } - for(std::int32_t handler : mouseOutHandlers) { - CppDOMBindings::mouseOutHandlers->erase(handler); - CppDOMBindings::RemoveMouseOutListener(ptr, handler); - } - for(std::int32_t handler : mouseMoveHandlers) { - CppDOMBindings::mouseMoveHandlers->erase(handler); - CppDOMBindings::RemoveMouseMoveListener(ptr, handler); - } - for(std::int32_t handler : mouseDownHandlers) { - CppDOMBindings::mouseDownHandlers->erase(handler); - CppDOMBindings::RemoveMouseDownListener(ptr, handler); - } - for(std::int32_t handler : mouseUpHandlers) { - CppDOMBindings::mouseUpHandlers->erase(handler); - CppDOMBindings::RemoveMouseUpListener(ptr, handler); - } - for(std::int32_t handler : focusHandlers) { - CppDOMBindings::focusHandlers->erase(handler); - CppDOMBindings::RemoveFocusListener(ptr, handler); - } - for(std::int32_t handler : blurHandlers) { - CppDOMBindings::blurHandlers->erase(handler); - CppDOMBindings::RemoveBlurListener(ptr, handler); - } - for(std::int32_t handler : keyDownHandlers) { - CppDOMBindings::keyDownHandlers->erase(handler); - CppDOMBindings::RemoveKeyDownListener(ptr, handler); - } - for(std::int32_t handler : keyUpHandlers) { - CppDOMBindings::keyUpHandlers->erase(handler); - CppDOMBindings::RemoveKeyUpListener(ptr, handler); - } - for(std::int32_t handler : keyPressHandlers) { - CppDOMBindings::keyPressHandlers->erase(handler); - CppDOMBindings::RemoveKeyPressListener(ptr, handler); - } - for(std::int32_t handler : changeHandlers) { - CppDOMBindings::changeHandlers->erase(handler); - CppDOMBindings::RemoveChangeListener(ptr, handler); - } - for(std::int32_t handler : submitHandlers) { - CppDOMBindings::submitHandlers->erase(handler); - CppDOMBindings::RemoveSubmitListener(ptr, handler); - } - for(std::int32_t handler : inputHandlers) { - CppDOMBindings::inputHandlers->erase(handler); - CppDOMBindings::RemoveInputListener(ptr, handler); - } - for(std::int32_t handler : resizeHandlers) { - CppDOMBindings::resizeHandlers->erase(handler); - CppDOMBindings::RemoveResizeListener(ptr, handler); - } - for(std::int32_t handler : scrollHandlers) { - CppDOMBindings::scrollHandlers->erase(handler); - CppDOMBindings::RemoveScrollListener(ptr, handler); - } - for(std::int32_t handler : contextMenuHandlers) { - CppDOMBindings::contextMenuHandlers->erase(handler); - CppDOMBindings::RemoveContextMenuListener(ptr, handler); - } - for(std::int32_t handler : dragStartHandlers) { - CppDOMBindings::dragStartHandlers->erase(handler); - CppDOMBindings::RemoveDragStartListener(ptr, handler); - } - for(std::int32_t handler : dragEndHandlers) { - CppDOMBindings::dragEndHandlers->erase(handler); - CppDOMBindings::RemoveDragEndListener(ptr, handler); - } - for(std::int32_t handler : dropHandlers) { - CppDOMBindings::dropHandlers->erase(handler); - CppDOMBindings::RemoveDropListener(ptr, handler); - } - for(std::int32_t handler : dragOverHandlers) { - CppDOMBindings::dragOverHandlers->erase(handler); - CppDOMBindings::RemoveDragOverListener(ptr, handler); - } - for(std::int32_t handler : dragEnterHandlers) { - CppDOMBindings::dragEnterHandlers->erase(handler); - CppDOMBindings::RemoveDragEnterListener(ptr, handler); - } - for(std::int32_t handler : dragLeaveHandlers) { - CppDOMBindings::dragLeaveHandlers->erase(handler); - CppDOMBindings::RemoveDragLeaveListener(ptr, handler); - } - for(std::int32_t handler : wheelHandlers) { - CppDOMBindings::wheelHandlers->erase(handler); - CppDOMBindings::RemoveWheelListener(ptr, handler); - } - CppDOMBindings::FreeJs(ptr); - } + ~HtmlElement(); }; } \ No newline at end of file diff --git a/project.json b/project.json index dea2085..cad7db7 100644 --- a/project.json +++ b/project.json @@ -3,6 +3,7 @@ "configurations": [ { "name": "lib", + "implementations": ["implementations/Crafter.CppDOM-HtmlElement"], "interfaces": ["interfaces/Crafter.CppDOM-HtmlElement", "interfaces/Crafter.CppDOM", "interfaces/Crafter.CppDOM-BindingsExport", "interfaces/Crafter.CppDOM-BindingsImport", "interfaces/Crafter.CppDOM-EventTypes"], "additional_files": ["additional/env.js"], "type":"library",