void Console::keyPressEvent(QKeyEvent *e) { // locked State: a command has been submitted but no result // has been received yet. if (locked) return; switch (e->key()) { case Qt::Key_Return: handleEnter(); break; case Qt::Key_Backspace: handleLeft(e); break; case Qt::Key_Up: handleHistoryUp(); break; case Qt::Key_Down: handleHistoryDown(); break; case Qt::Key_Left: handleLeft(e); break; case Qt::Key_Home: handleHome(); break; default: QPlainTextEdit::keyPressEvent(e); break; } }
//----------------------------------------------------------------------------// 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; } }
void Editbox::onSemanticInputEvent(SemanticEventArgs& e) { if (isDisabled()) return; if (e.d_semanticValue == SV_SelectAll && e.d_payload.source == CIS_Left) { d_dragAnchorIdx = 0; setCaretIndex(getText().length()); setSelection(d_dragAnchorIdx, d_caretPos); ++e.handled; } else if (e.d_semanticValue == SV_SelectWord && e.d_payload.source == CIS_Left) { // if masked, set up to select all if (isTextMaskingEnabled()) { d_dragAnchorIdx = 0; setCaretIndex(getText().length()); } // not masked, so select the word that was double-clicked. else { d_dragAnchorIdx = TextUtils::getWordStartIdx(getText(), (d_caretPos == getText().length()) ? d_caretPos : d_caretPos + 1); d_caretPos = TextUtils::getNextWordStartIdx(getText(), d_caretPos); } // perform actual selection operation. setSelection(d_dragAnchorIdx, d_caretPos); ++e.handled; } if (e.handled == 0 && hasInputFocus()) { if (isReadOnly()) { Window::onSemanticInputEvent(e); return; } if (getSelectionLength() == 0 && isSelectionSemanticValue(e.d_semanticValue)) d_dragAnchorIdx = d_caretPos; // Check if the semantic value to be handled is of a general type and can thus be // handled via common EditboxBase handlers bool isSemanticValueHandled = handleBasicSemanticValue(e); // If the semantic value was not handled, check for specific values if (!isSemanticValueHandled) { // We assume it will be handled now, if not it will be set to false in default-case isSemanticValueHandled = true; switch (e.d_semanticValue) { case SV_Confirm: { WindowEventArgs args(this); // Fire 'input accepted' event onTextAcceptedEvent(args); break; } case SV_GoToStartOfLine: handleHome(false); break; case SV_GoToEndOfLine: handleEnd(false); break; case SV_SelectToStartOfLine: handleHome(true); break; case SV_SelectToEndOfLine: handleEnd(true); break; default: Window::onSemanticInputEvent(e); isSemanticValueHandled = false; } } if (isSemanticValueHandled) ++e.handled; } }