bool JsAgent::dispatchAndReturn(JsValue& ret) { ArchiveReader<Channel> ar(*m_channel); while(true) { Debug::println("Waiting for MessageHeader..."); MessageHeader mh; if(!mh.serialize(ar)) return false; switch(mh.getMessageType()) { case MT_DefineFunction: Debug::println("MT_DefineFunction"); MSG_DISPATCH(DefineFunctionMessage, onDefineFunction); break; case MT_InvokeFunction: Debug::println("MT_InvokeFunction"); MSG_DISPATCH(InvokeFunctionMessage, onInvokeFunction); break; case MT_Return: { Debug::println("MT_Return"); ReturnMessage msg; msg.serialize(ar); return onReturn(msg, ret); } case MT_Quit: Debug::println("MT_Quit"); return true; default: Debug::println("Unknown message type!"); return false; } } return false; }
void cParser::parse(void) { m_bEnd = false; m_varLine = 0; m_curLine = 0; m_errorID = 0; while(!m_strText.empty() && !m_bEnd) { char ch = m_strText[0]; m_strText = m_strText.substr(1); switch(ch) { case '{' : onLBraket(); break; case '}' : onRBraket(); break; case '=' : onEqual(); break; case '\n' : onReturn(); break; case ' ' : case '\t': onSpace(); break; case '#' : onComment(); break; case ';': break; default: onOther(ch); break; } if (error()) { onError(); } } onEnd(); }
// // * process return to display newline, prompt and set cursor to end // * process backspace to delete chars but not prompt // void CommandEdit::keyPressEvent(QKeyEvent* event) { QString text = event->text(); int key = event->key(); // Reset cursor position to end of document ie: last command setTextCursor(prevCursor); unsigned int numPrint = 0; for(unsigned int i=0; i < text.size(); i++) { if(text[i].isPrint() == true) numPrint++; } cursorColNum += numPrint; if(key == Qt::Key_Return || key == Qt::Key_Enter) { onReturn(); } else if(key == Qt::Key_Backspace) { if(cursorColNum > 0) { cursorColNum--; QTextEdit::keyPressEvent(event); } } else if(key == Qt::Key_Up) { string prevEntry; bool isValid = history.getPrevEntry(prevEntry); QString temp = prevEntry.c_str(); // append(prompt + temp); setCurrentLine( temp); } else if(key == Qt::Key_Down) { string nextEntry; bool isValid = history.getNextEntry(nextEntry); QString temp = nextEntry.c_str(); // append(prompt + temp); setCurrentLine( temp); } else { currLine += text; QTextEdit::keyPressEvent(event); } // std::cout << cursorColNum << std::endl; }
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); } }