void CodeEditor::keyPressEvent(QKeyEvent *e) { QString curString = textCursor().block().text(); int indentWidth = -1; switch (e->key()) { case (Qt::Key_Tab) : if (! (e->modifiers() & Qt::ShiftModifier)) putTab(); break; case (Qt::Key_Enter) : case (Qt::Key_Return) : while (curString[++indentWidth] == ' '); QPlainTextEdit::keyPressEvent(e); for (int i = 0; i < indentWidth; i++) insertPlainText(" "); break; case (Qt::Key_Q) : if ((e->modifiers() & Qt::ShiftModifier) && (e->modifiers() & Qt::ControlModifier)) commentSelectedCode(); else QPlainTextEdit::keyPressEvent(e); break; case (Qt::Key_A) : if ((e->modifiers() & Qt::ShiftModifier) && (e->modifiers() & Qt::ControlModifier)) uncommentSelectedCode(); else QPlainTextEdit::keyPressEvent(e); break; default: QPlainTextEdit::keyPressEvent(e); } }
// Standard getchar char getchar() { char c; int sx = getCursorX(); int sy = getCursorY(); while ((c = getC()) != '\n') { if (c != 0) { if (c != 0x0f) { if (c != '\r' || getCursorY() > sy || getCursorX() > sx) putchar(c); } else { putTab(); } } } putchar(c); return c; }