import Crafter.CppDOM; using namespace Crafter; import std; HtmlElementPtr body("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
" "
" "
" "
" "
"); HtmlElementPtr mouseButton("mouseButton"); HtmlElementPtr mouseOutput("mouseOutput"); HtmlElementPtr keyInput("keyInput"); HtmlElementPtr keyOutput("keyOutput"); HtmlElementPtr focusInput("focusInput"); HtmlElementPtr focusOutput("focusOutput"); HtmlElementPtr formInput("formInput"); HtmlElementPtr formSelect("formSelect"); HtmlElementPtr formElement("formElement"); HtmlElementPtr formOutput("formOutput"); HtmlElementPtr windowOutput("windowOutput"); HtmlElementPtr dragSource("dragSource"); HtmlElementPtr dropTarget("dropTarget"); HtmlElementPtr dragOutput("dragOutput"); HtmlElementPtr wheelContainer("wheelContainer"); HtmlElementPtr wheelOutput("wheelOutput"); int main() { 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)); }); 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)); }); formElement.AddSubmitListener([&]() { formOutput.SetInnerHTML("

Submit: Form submitted successfully!

"); }); body.AddResizeListener([&](ResizeEvent event) { windowOutput.SetInnerHTML(std::format("

Resize: Width={}, Height={}

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

Scroll: X={}, Y={}

", event.scrollX, event.scrollY)); }); body.AddContextMenuListener([&](MouseEvent event) { windowOutput.SetInnerHTML(std::format("

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

", event.clientX, event.clientY)); }); 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

"); }); wheelContainer.AddWheelListener([&](WheelEvent event) { wheelOutput.SetInnerHTML(std::format("

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

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