/************************************************************************* Handler for when non-printable keys are typed. *************************************************************************/ void MultiLineEditbox::onKeyDown(KeyEventArgs& e) { // base class processing Window::onKeyDown(e); if (hasInputFocus() && !isReadOnly()) { WindowEventArgs args(this); switch (e.scancode) { case Key::LeftShift: case Key::RightShift: if (getSelectionLength() == 0) { d_dragAnchorIdx = getCaratIndex(); } break; case Key::Backspace: handleBackspace(); break; case Key::Delete: handleDelete(); break; case Key::Return: case Key::NumpadEnter: handleNewLine(e.sysKeys); break; case Key::ArrowLeft: if (e.sysKeys & Control) { handleWordLeft(e.sysKeys); } else { handleCharLeft(e.sysKeys); } break; case Key::ArrowRight: if (e.sysKeys & Control) { handleWordRight(e.sysKeys); } else { handleCharRight(e.sysKeys); } break; case Key::ArrowUp: handleLineUp(e.sysKeys); break; case Key::ArrowDown: handleLineDown(e.sysKeys); break; case Key::Home: if (e.sysKeys & Control) { handleDocHome(e.sysKeys); } else { handleLineHome(e.sysKeys); } break; case Key::End: if (e.sysKeys & Control) { handleDocEnd(e.sysKeys); } else { handleLineEnd(e.sysKeys); } break; // default case is now to leave event as (possibly) unhandled. default: return; } e.handled = true; } }
//----------------------------------------------------------------------------// void Editbox::onKeyDown(KeyEventArgs& e) { // fire event. fireEvent(EventKeyDown, e, Window::EventNamespace); if (e.handled == 0 && hasInputFocus()) { if (isReadOnly()) { Window::onKeyDown(e); return; } WindowEventArgs args(this); switch (e.scancode) { case Key::LeftShift: case Key::RightShift: if (getSelectionLength() == 0) d_dragAnchorIdx = d_caretPos; break; case Key::Backspace: handleBackspace(); break; case Key::Delete: handleDelete(); break; case Key::Tab: case Key::Return: case Key::NumpadEnter: // Fire 'input accepted' event onTextAcceptedEvent(args); break; case Key::ArrowLeft: if (e.sysKeys & Control) handleWordLeft(e.sysKeys); else handleCharLeft(e.sysKeys); break; case Key::ArrowRight: if (e.sysKeys & Control) handleWordRight(e.sysKeys); else handleCharRight(e.sysKeys); break; case Key::Home: handleHome(e.sysKeys); break; case Key::End: handleEnd(e.sysKeys); break; default: Window::onKeyDown(e); return; } ++e.handled; } }