void Console::keyPressEvent(QKeyEvent *event) { if(isLocked) return; if(event->key() >= 0x20 && event->key() <= 0x7e && (event->modifiers() == Qt::NoModifier || event->modifiers() == Qt::ShiftModifier)) QPlainTextEdit::keyPressEvent(event); if(event->key() == Qt::Key_Backspace && event->modifiers() == Qt::NoModifier && textCursor().positionInBlock() > prompt.length()) QPlainTextEdit::keyPressEvent(event); if(event->key() == Qt::Key_Return && event->modifiers() == Qt::NoModifier) onEnter(); if(event->key() == Qt::Key_Up && event->modifiers() == Qt::NoModifier) historyBack(); if(event->key() == Qt::Key_Down && event->modifiers() == Qt::NoModifier) historyForward(); QString cmd = textCursor().block().text().mid(prompt.length()); emit onChange(cmd); }
void Editor::keyPressEvent(QKeyEvent* event) { int key = event->key(); switch (key) { case Qt::Key_Enter: case Qt::Key_Return: QTimer::singleShot(0, this, SLOT(triggerEnter())); event->accept(); return; case Qt::Key_Up: if (event->modifiers() & Qt::ShiftModifier) emit shiftUpPressed(); else historyBack(); event->accept(); return; case Qt::Key_Down: if (event->modifiers() & Qt::ShiftModifier) emit shiftDownPressed(); else historyForward(); event->accept(); return; case Qt::Key_PageUp: if (event->modifiers() & Qt::ShiftModifier) emit shiftPageUpPressed(); else if (event->modifiers() & Qt::ControlModifier) emit controlPageUpPressed(); else emit pageUpPressed(); event->accept(); return; case Qt::Key_PageDown: if (event->modifiers() & Qt::ShiftModifier) emit shiftPageDownPressed(); else if (event->modifiers() & Qt::ControlModifier) emit controlPageDownPressed(); else emit pageDownPressed(); event->accept(); return; case Qt::Key_Left: case Qt::Key_Right: case Qt::Key_Home: case Qt::Key_End: checkMatching(); checkAutoCalc(); case Qt::Key_Space: if (event->modifiers() == Qt::ControlModifier && !m_constantCompletion) { m_constantCompletion = new ConstantCompletion(this); connect(m_constantCompletion, SIGNAL(selectedCompletion(const QString&)), SLOT(insertConstant(const QString&))); connect(m_constantCompletion, SIGNAL(canceledCompletion()), SLOT(cancelConstantCompletion())); m_constantCompletion->showCompletion(); event->accept(); return; } case Qt::Key_P: if (event->modifiers() == Qt::ControlModifier) { QTextCursor cursor = textCursor(); if (cursor.hasSelection()) { const int selectionStart = cursor.selectionStart(); const int selectionEnd = cursor.selectionEnd(); cursor.setPosition(selectionStart); cursor.insertText("("); cursor.setPosition(selectionEnd + 1); cursor.insertText(")"); } else { cursor.movePosition(QTextCursor::Start); cursor.insertText("("); cursor.movePosition(QTextCursor::End); cursor.insertText(")"); } setTextCursor(cursor); event->accept(); return; } default:; } if (event->matches(QKeySequence::Copy)) { emit copySequencePressed(); event->accept(); return; } QPlainTextEdit::keyPressEvent(event); }
void Console::keyPressEvent(QKeyEvent *e) { if (locked) return; if ((e->key() == Qt::Key_V && e->modifiers() == Qt::ControlModifier)) QTextEdit::keyPressEvent(e); else if (e->key() >= Qt::Key_Space && e->key() <= Qt::Key_BraceRight && e->key() != Qt::Key_QuoteLeft) { if (e->modifiers() == Qt::NoModifier || e->modifiers() == Qt::ShiftModifier) QTextEdit::keyPressEvent(e); } else switch (e->key()) { case Qt::Key_Return: onReturn(); break; case Qt::Key_Up: historyBack(); break; case Qt::Key_Down: historyForward(); break; case Qt::Key_Backspace: if (textCursor().positionInBlock() > prompt.length()) QTextEdit::keyPressEvent(e); break; case Qt::Key_End: case Qt::Key_Delete: QTextEdit::keyPressEvent(e); break; case Qt::Key_Left: if (e->modifiers() == Qt::NoModifier) { QTextEdit::keyPressEvent(e); QTextCursor cursor = textCursor(); if (cursor.positionInBlock() < prompt.length()) cursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor); setTextCursor(cursor); } else if (e->modifiers() == Qt::ControlModifier) { QTextEdit::keyPressEvent(e); QTextCursor cursor = textCursor(); if (cursor.positionInBlock() < prompt.length()) cursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, 2); setTextCursor(cursor); } break; case Qt::Key_Right: if (e->modifiers() == Qt::NoModifier || e->modifiers() == Qt::ControlModifier) QTextEdit::keyPressEvent(e); break; case Qt::Key_Home: { QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::StartOfBlock); cursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, prompt.length()); setTextCursor(cursor); } break; // case Qt::Key_PageUp: // case Qt::Key_PageDown: // { // QTextEdit::keyPressEvent(e); // QTextCursor cursor = textCursor(); // cursor.movePosition(QTextCursor::End); // setTextCursor(cursor); // } break; case Qt::Key_PageUp: { QScrollBar *vbar = verticalScrollBar(); vbar->setValue(vbar->value() - 15); } break; case Qt::Key_PageDown: { QScrollBar *vbar = verticalScrollBar(); vbar->setValue(vbar->value() + 15); } break; // case Qt::Key_Escape: // { // QTextCursor cursor = textCursor(); // cursor.movePosition(QTextCursor::StartOfBlock); // cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); // cursor.removeSelectedText(); // insertPrompt(); // } break; default: QWidget::keyPressEvent(e); } }