1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "ScriptConsole.h"
#include "ScriptEngine.h"
static QScriptValue myPrintFunc(QScriptContext *context, QScriptEngine *engine);
static QScriptValue myPrintErrFunc(QScriptContext *context, QScriptEngine *engine);
ScriptConsole::ScriptConsole(QWidget *parent) :
QDialog(parent)
{
setupUi(this);
this->setWindowFlags(Qt::Window);
setWindowTitle(tr("Script Console"));
ScriptEngine::getInstance()->prepareThis(engine);
QScriptValue myPrint = engine.newFunction(myPrintFunc);
myPrint.setData(engine.newQObject(textEdit_OUTPUT));
engine.globalObject().setProperty("print", myPrint);
QScriptValue myPrintErr = engine.newFunction(myPrintErrFunc);
myPrint.setData(engine.newQObject(textEdit_OUTPUT));
engine.globalObject().setProperty("printErr", myPrintErr);
connect(pushButton_START, SIGNAL(clicked()), this, SLOT(startEvaluation()));
connect(pushButton_STOP, SIGNAL(clicked()), this, SLOT(stopEvaluation()));
}
void ScriptConsole::startEvaluation(){
engine.evaluate(textEdit_INPUT->toPlainText());
}
void ScriptConsole::stopEvaluation(){
engine.abortEvaluation();
if (engine.hasUncaughtException()){
foreach (QString line, engine.uncaughtExceptionBacktrace())
textEdit_OUTPUT->append(line);
}
}
static QScriptValue myPrintFunc(QScriptContext *context, QScriptEngine *engine){
QString result;
for (int i = 0; i < context->argumentCount(); i++){
if (i > 0)
result.append(" ");
result.append(context->argument(i).toString());
}
QScriptValue calleeData = context->callee().data();
QTextEdit *textEdit = qobject_cast<QTextEdit*>(calleeData.toQObject());
if (textEdit)
textEdit->append(result);
return engine->undefinedValue();
}
static QScriptValue myPrintErrFunc(QScriptContext *context, QScriptEngine *engine){
if (context->argumentCount() < 1)
return engine->undefinedValue();
QString result = context->argument(0).toString();
for (int i = 1; i < context->argumentCount(); i++)
result = result.arg(context->argument(i).toString());
QScriptValue calleeData = context->callee().data();
QTextEdit *textEdit = qobject_cast<QTextEdit*>(calleeData.toQObject());
if (textEdit)
textEdit->append(result);
return engine->undefinedValue();
}
|