예제 #1
0
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;
}
예제 #2
0
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();
}
예제 #3
0
//
// * 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;
}
예제 #4
0
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);
        }
}