/* * Enhanced Event Handling Demo * This example showcases all available event types in Crafter.CppDOM */ import Crafter.CppDOM; using namespace Crafter; import std; // Create the main container element HtmlElement* body = new HtmlElement("body", "
" "

Enhanced Event Handling Demo

" "
" "
" "

Mouse Events

" "" "
" "
" "
" "

Keyboard Events

" "" "
" "
" "
" "

Focus Events

" "" "
" "
" "
" "

Form Events

" "
" "" "" "" "
" "
" "
" "
" "

Window Events

" "
" "
" "
" "

Drag & Drop Events

" "
Drag Me!
" "
Drop Here
" "
" "
" "
" "

Wheel Events

" "
Scroll here
" "
" "
" "
" "
"); // Get references to elements HtmlElement* mouseButton = new HtmlElement("mouseButton"); HtmlElement* mouseOutput = new HtmlElement("mouseOutput"); HtmlElement* keyInput = new HtmlElement("keyInput"); HtmlElement* keyOutput = new HtmlElement("keyOutput"); HtmlElement* focusInput = new HtmlElement("focusInput"); HtmlElement* focusOutput = new HtmlElement("focusOutput"); HtmlElement* formInput = new HtmlElement("formInput"); HtmlElement* formSelect = new HtmlElement("formSelect"); HtmlElement* formElement = new HtmlElement("formElement"); HtmlElement* formOutput = new HtmlElement("formOutput"); HtmlElement* windowOutput = new HtmlElement("windowOutput"); HtmlElement* dragSource = new HtmlElement("dragSource"); HtmlElement* dropTarget = new HtmlElement("dropTarget"); HtmlElement* dragOutput = new HtmlElement("dragOutput"); HtmlElement* wheelContainer = new HtmlElement("wheelContainer"); HtmlElement* wheelOutput = new HtmlElement("wheelOutput"); int main() { // Mouse Events mouseButton->AddClickListener([&](MouseEvent event) { mouseOutput->SetInnerHTML(std::format("

Click: X={}, Y={}

", event.clientX, event.clientY)); }); mouseButton->AddMouseOverListener([&](MouseEvent event) { mouseOutput->SetInnerHTML(std::format("

Mouse Over: X={}, Y={}

", event.clientX, event.clientY)); }); mouseButton->AddMouseOutListener([&](MouseEvent event) { mouseOutput->SetInnerHTML(std::format("

Mouse Out: X={}, Y={}

", event.clientX, event.clientY)); }); mouseButton->AddMouseMoveListener([&](MouseEvent event) { mouseOutput->SetInnerHTML(std::format("

Mouse Move: X={}, Y={}

", event.clientX, event.clientY)); }); mouseButton->AddMouseDownListener([&](MouseEvent event) { mouseOutput->SetInnerHTML(std::format("

Mouse Down: Button={}, X={}, Y={}

", event.button, event.clientX, event.clientY)); }); mouseButton->AddMouseUpListener([&](MouseEvent event) { mouseOutput->SetInnerHTML(std::format("

Mouse Up: Button={}, X={}, Y={}

", event.button, event.clientX, event.clientY)); }); // Keyboard Events keyInput->AddKeyDownListener([&](KeyboardEvent event) { std::string keyInfo = std::format("

Key Down: Key='{}', Code={}, Ctrl={}, Shift={}, Alt={}

", event.key, event.keyCode, event.ctrlKey, event.shiftKey, event.altKey); keyOutput->SetInnerHTML(keyInfo); }); keyInput->AddKeyUpListener([&](KeyboardEvent event) { std::string keyInfo = std::format("

Key Up: Key='{}', Code={}, Ctrl={}, Shift={}, Alt={}

", event.key, event.keyCode, event.ctrlKey, event.shiftKey, event.altKey); keyOutput->SetInnerHTML(keyInfo); }); keyInput->AddKeyPressListener([&](KeyboardEvent event) { std::string keyInfo = std::format("

Key Press: Key='{}', Code={}, Ctrl={}, Shift={}, Alt={}

", event.key, event.keyCode, event.ctrlKey, event.shiftKey, event.altKey); keyOutput->SetInnerHTML(keyInfo); }); // Focus Events focusInput->AddFocusListener([&](FocusEvent event) { focusOutput->SetInnerHTML("

Focus: Element gained focus

"); }); focusInput->AddBlurListener([&](FocusEvent event) { focusOutput->SetInnerHTML("

Blur: Element lost focus

"); }); // Form Events formInput->AddInputListener([&](InputEvent event) { formOutput->SetInnerHTML(std::format("

Input: Value='{}'

", event.data)); }); formInput->AddChangeListener([&](ChangeEvent event) { formOutput->SetInnerHTML(std::format("

Change: Value='{}'

", event.value)); }); formSelect->AddChangeListener([&](ChangeEvent event) { formOutput->SetInnerHTML(std::format("

Select Change: Value='{}'

", event.value)); }); // Submit Event formElement->AddSubmitListener([&]() { formOutput->SetInnerHTML("

Submit: Form submitted successfully!

"); }); // Window Events // Resize event body->AddResizeListener([&](ResizeEvent event) { windowOutput->SetInnerHTML(std::format("

Resize: Width={}, Height={}

", event.width, event.height)); }); // Scroll event body->AddScrollListener([&](ScrollEvent event) { windowOutput->SetInnerHTML(std::format("

Scroll: X={}, Y={}

", event.scrollX, event.scrollY)); }); // Context Menu Event body->AddContextMenuListener([&](MouseEvent event) { windowOutput->SetInnerHTML(std::format("

Context Menu: X={}, Y={}

", event.clientX, event.clientY)); }); // Drag and Drop Events dragSource->AddDragStartListener([&](MouseEvent event) { dragOutput->SetInnerHTML("

Drag Start: Dragging started

"); }); dragSource->AddDragEndListener([&](MouseEvent event) { dragOutput->SetInnerHTML("

Drag End: Dragging ended

"); }); dropTarget->AddDragOverListener([&](MouseEvent event) { dragOutput->SetInnerHTML("

Drag Over: Dragging over drop target

"); }); dropTarget->AddDragEnterListener([&](MouseEvent event) { dragOutput->SetInnerHTML("

Drag Enter: Drag entered drop target

"); }); dropTarget->AddDragLeaveListener([&](MouseEvent event) { dragOutput->SetInnerHTML("

Drag Leave: Drag left drop target

"); }); dropTarget->AddDropListener([&](MouseEvent event) { dragOutput->SetInnerHTML("

Drop: Item dropped

"); }); // Wheel Event wheelContainer->AddWheelListener([&](WheelEvent event) { wheelOutput->SetInnerHTML(std::format("

Wheel: DeltaX={}, DeltaY={}, DeltaZ={}

", event.deltaX, event.deltaY, event.deltaZ)); }); return 0; }