/************************************************************************* Handler for when character (printable keys) are typed *************************************************************************/ void MultiLineEditbox::onCharacter(KeyEventArgs& e) { // base class processing Window::onCharacter(e); // only need to take notice if we have focus if (hasInputFocus() && !isReadOnly() && getFont()->isCodepointAvailable(e.codepoint)) { // erase selected text eraseSelectedText(); // if there is room if (d_text.length() - 1 < d_maxTextLen) { d_text.insert(getCaratIndex(), 1, e.codepoint); d_caratPos++; WindowEventArgs args(this); onTextChanged(args); } else { // Trigger text box full event WindowEventArgs args(this); onEditboxFullEvent(args); } } e.handled = true; }
bool Combobox::editbox_EditboxFullEventHandler(const EventArgs& e) { WindowEventArgs args(this); onEditboxFullEvent(args); return true; }
//----------------------------------------------------------------------------// void Editbox::onCharacter(KeyEventArgs& e) { // NB: We are not calling the base class handler here because it propogates // inputs back up the window hierarchy, whereas, as a consumer of key // events, we want such propogation to cease with us regardless of whether // we actually handle the event. // fire event. fireEvent(EventCharacterKey, e, Window::EventNamespace); // only need to take notice if we have focus if (e.handled == 0 && hasInputFocus() && !isReadOnly() && getFont()->isCodepointAvailable(e.codepoint)) { // backup current text String tmp(getText()); tmp.erase(getSelectionStartIndex(), getSelectionLength()); // if there is room if (tmp.length() < d_maxTextLen) { tmp.insert(getSelectionStartIndex(), 1, e.codepoint); if (handleValidityChangeForString(tmp)) { // erase selection using mode that does not modify getText() // (we just want to update state) eraseSelectedText(false); // advance caret (done first so we can "do stuff" in event // handlers!) d_caretPos++; // set text to the newly modified string setText(tmp); // char was accepted into the Editbox - mark event as handled. ++e.handled; } } else { // Trigger text box full event WindowEventArgs args(this); onEditboxFullEvent(args); } } // event was (possibly) not handled }