本文整理汇总了C++中kjs::JSObject类的典型用法代码示例。如果您正苦于以下问题:C++ JSObject类的具体用法?C++ JSObject怎么用?C++ JSObject使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了JSObject类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: convertEvent
KJS::JSObject *convertEvent(KJS::ExecState *exec, const QCloseEvent *ev)
{
KJS::JSObject *cev = convertEvent(exec, (QEvent *)ev);
cev->put(exec, "isAccepted", KJS::jsBoolean(ev->isAccepted()));
return cev;
}
示例2: data
QVariant KJSObjectModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
Node *item = static_cast<Node*>(index.internalPointer());
KJS::JSObject *instance = item->instance;
if (role == Qt::DecorationRole )
{
if( instance->implementsConstruct() )
return QPixmap(":/images/class.png");
else if( instance->implementsCall() )
return QPixmap(":/images/method.png");
else
return QPixmap(":/images/property.png");
}
if( role == Qt::TextColorRole )
{
if( instance->implementsConstruct() )
return QColor("blue");
else if( instance->implementsCall() )
return QColor("green");
else
return QColor("black");
}
if (role == Qt::DisplayRole)
return item->name;
return QVariant();
}
示例3: toNodeFilter
NodeFilter* toNodeFilter(KJS::JSValue* val)
{
if (!val || !val->isObject())
return 0;
if (val->isObject(&JSNodeFilter::info))
return static_cast<JSNodeFilter*>(val)->impl();
KJS::JSObject* o = static_cast<KJS::JSObject*>(val);
if (o->implementsCall())
return new NodeFilter(new JSNodeFilterCondition(o));
return 0;
}
示例4: convertToVariant
QMap<QString, QVariant> KJSEmbed::convertArrayToMap(KJS::ExecState *exec, KJS::JSValue *value)
{
QMap<QString, QVariant> returnMap;
KJS::JSObject *obj = value->toObject(exec);
KJS::PropertyNameArray lst;
obj->getPropertyNames(exec, lst);
KJS::PropertyNameArrayIterator idx = lst.begin();
for (; idx != lst.end(); idx++) {
KJS::Identifier id = *idx;
KJS::JSValue *val = obj->get(exec, id);
returnMap[toQString(id)] = convertToVariant(exec, val);
}
return returnMap;
}
示例5: callHandler
bool EventProxy::callHandler( QEvent *e )
{
// Be careful enabling this as if there are a lot of events then the event loop times
// out and the app crashes with 'Alarm Clock'.
// qDebug("JSObjectEventProxy::callHandler() event type %d" , e->type() );
KJS::ExecState *exec = m_interpreter->globalExec();
KJS::Identifier id = JSEventMapper::mapper()->findEventHandler( e->type() );
KJS::JSObject *jsobj(m_watch);
KJS::JSObject *fun = jsobj->get(exec, id )->toObject( exec );
KJS::JSValue *retValue;
if ( !fun->implementsCall() )
{
QString msg = i18n( "Bad event handler: Object %1 Identifier %2 Method %3 Type: %4.",
jsobj->className().ascii(),
id.ascii(),
fun->className().ascii(),
e->type());
retValue = throwError(exec, KJS::TypeError, msg);
}
else
{
// Process args
KJS::List args;
args.append( JSEventUtils::event(exec, e) );
// Call handler
retValue = fun->call( exec, jsobj, args );
}
if ( exec->hadException() )
{
if (m_interpreter->shouldPrintExceptions())
{
KJS::JSLock lock;
KJS::JSObject* exceptObj = retValue->toObject(exec);
QString message = toQString(exceptObj->toString(exec));
QString sourceURL = toQString(exceptObj->get(exec, "sourceURL")->toString(exec));
int sourceId = exceptObj->get(exec, "sourceId")->toUInt32(exec);
int line = exceptObj->get(exec, "line")->toUInt32(exec);
(*KJSEmbed::conerr()) << i18n("Exception calling '%1' function from %2:%3:%4", id.ascii(), !sourceURL.isEmpty() ? sourceURL : QString::number(sourceId), line, message) << endl;
}
// clear it so it doesn't stop other things
exec->clearException();
return false;
}
return true;
}
示例6: jsNull
KJS::JSValue *SlotProxy::callMethod(const QByteArray &methodName, void **_a)
{
#ifdef DEBUG_SLOTPROXY
qDebug() << "SlotProxy::callMethod(" << methodName << ",_a) obj=" << this;
#endif
KJS::ExecState *exec = m_interpreter->globalExec();
exec->clearException();
// Crash
// KJS::Interpreter::globalExec()->context().thisValue()
KJS::List args = convertArguments(exec, _a);
KJS::Identifier id = KJS::Identifier(KJS::UString(methodName.data()));
KJS::JSObject *fun = m_object->get(exec, id)->toObject(exec);
KJS::JSValue *retValue;
if (!fun->implementsCall()) {
#ifdef DEBUG_SLOTPROXY
qDebug() << "SlotProxy::callMethod got bad handler";
#endif
QString msg = i18n("Bad slot handler: Object %1 Identifier %2 Method %3 Signature: %4.",
m_object->className().ascii(),
id.ascii(),
methodName.data(),
QString(m_signature));
retValue = throwError(exec, KJS::TypeError, msg);
} else {
retValue = fun->call(exec, m_object, args);
}
if (exec->hadException()) {
#ifdef DEBUG_SLOTPROXY
qDebug() << "SlotProxy::callMethod had exception";
#endif
if (m_interpreter->shouldPrintExceptions()) {
KJS::JSLock lock;
KJS::JSObject *exceptObj = exec->exception()->toObject(exec);//retValue->toObject(exec);
QString message = toQString(exceptObj->toString(exec));
QString sourceURL = toQString(exceptObj->get(exec, "sourceURL")->toString(exec));
int sourceId = exceptObj->get(exec, "sourceId")->toUInt32(exec);
// would include the line number, but it's always last line of file
int line = exceptObj->get(exec, "line")->toUInt32(exec);
(*KJSEmbed::conerr()) << i18n("Exception calling '%1' slot from %2:%3:%4", QString(methodName), !sourceURL.isEmpty() ? sourceURL : QString::number(sourceId), line, message) << endl;
}
// clear it so it doesn't stop other things
exec->clearException();
return KJS::jsNull();
} else {
if (retValue->type() == 1 || retValue->type() == 0) {
return KJS::jsNull();
}
}
return retValue;
}
示例7: throwError
KJS::JSValue *Engine::callMethod( KJS::JSObject *parent,
const KJS::UString &methodName, const KJS::List &args )
{
KJS::ExecState *exec = dptr->m_interpreter->globalExec();
KJS::Identifier id = KJS::Identifier( methodName);
KJS::JSObject *fun = parent->get( exec, id )->toObject( exec );
KJS::JSValue *retValue;
if ( !fun->implementsCall() ) {
QString msg = i18n( "%1 is not a function and cannot be called.", toQString(methodName) );
return throwError( exec, KJS::TypeError, msg );
}
retValue = fun->call( exec, parent, args );
if( exec->hadException() )
return exec->exception();
return retValue;
}
示例8: checkArray
JavaScriptArrayType checkArray(KJS::ExecState *exec, KJS::JSValue *val)
{
KJS::JSObject *obj = val->toObject(exec);
if (toQString(obj->className()) == "Array") {
if (!obj->hasProperty(exec, KJS::Identifier("length"))) {
return Map;
}
KJS::JSValue *jslen = obj->get(exec, KJS::Identifier("length"));
const int len = jslen->toNumber(exec);
if (len > 0) {
QByteArray buff;
buff.setNum(len - 1);
if (!obj->hasProperty(exec, KJS::Identifier(buff.data()))) {
return Map;
}
}
return List;
} else {
return None;
}
}
示例9: index
QModelIndex KJSObjectModel::index(int row, int column, const QModelIndex &parent ) const
{
KJS::JSObject *parentInstance = 0;
Node *childItem = 0;
KJS::ExecState *exec = m_js->globalExec();
if (!parent.isValid())
{
if (m_root)
parentInstance = m_root;
else
return QModelIndex();
}
else
parentInstance = static_cast<Node*>(parent.internalPointer())->instance;
int idx = 0;
KJS::PropertyNameArray props;
parentInstance->getPropertyNames(exec, props);
for( KJS::PropertyNameArrayIterator ref = props.begin(); ref != props.end(); ref++)
{
if( idx == row)
{
childItem = new Node;
childItem->name = ref->ascii(); //### M.O.: this is wrong, can be unicode.
childItem->instance = parentInstance->get( exec,
childItem->name.constData() )->toObject(exec);
childItem->parent = static_cast<Node*>(parent.internalPointer());
break;
}
++idx;
}
if (childItem)
return createIndex(row, column, childItem);
return QModelIndex();
}
示例10: convertDateToDateTime
QDateTime convertDateToDateTime(KJS::ExecState *exec, KJS::JSValue *value)
{
KJS::List args;
QDateTime returnDateTime;
KJS::JSObject *obj = value->toObject(exec);
if (toQString(obj->className()) == "Date") {
int seconds = int(obj->get(exec, KJS::Identifier("getSeconds"))->toObject(exec)->call(exec, obj, args)->toInteger(exec));
int minutes = int(obj->get(exec, KJS::Identifier("getMinutes"))->toObject(exec)->call(exec, obj, args)->toInteger(exec));
int hours = int(obj->get(exec, KJS::Identifier("getHours"))->toObject(exec)->call(exec, obj, args)->toInteger(exec));
int month = int(obj->get(exec, KJS::Identifier("getMonth"))->toObject(exec)->call(exec, obj, args)->toInteger(exec));
int day = int(obj->get(exec, KJS::Identifier("getDate"))->toObject(exec)->call(exec, obj, args)->toInteger(exec));
int year = int(obj->get(exec, KJS::Identifier("getFullYear"))->toObject(exec)->call(exec, obj, args)->toInteger(exec));
returnDateTime.setDate(QDate(year, month + 1, day));
returnDateTime.setTime(QTime(hours, minutes, seconds));
} else {
// Throw error
}
return returnDateTime;
}
示例11: qDebug
KJS::JSValue *KJSEmbed::convertToValue(KJS::ExecState *exec, const QVariant &value)
{
#ifdef KJSEMBED_VARIANT_DEBUG
qDebug() << "KJSEmbed::convertToValue typeid=" << value.type() << "typename=" << value.typeName() << "toString=" << value.toString();
#endif
KJS::JSValue *returnValue;
switch (value.type()) {
case QVariant::Invalid:
returnValue = KJS::jsNull();
break;
case QVariant::Int:
returnValue = KJS::jsNumber(value.value<int>());
break;
case QVariant::UInt:
returnValue = KJS::jsNumber(value.value<unsigned int>());
break;
case QVariant::LongLong:
returnValue = KJS::jsNumber(value.value<qlonglong>());
break;
case QVariant::ULongLong:
returnValue = KJS::jsNumber(value.value<qulonglong>());
break;
case QVariant::Double:
returnValue = KJS::jsNumber(value.value<double>());
break;
case QVariant::Bool:
returnValue = KJS::jsBoolean(value.value<bool>());
break;
case QVariant::ByteArray:
returnValue = KJS::jsString(QString(value.value<QByteArray>()));
break;
case QVariant::String:
returnValue = KJS::jsString(value.value<QString>());
break;
case QVariant::StringList: {
KJS::List items;
QStringList lst = value.value<QStringList>();
QStringList::Iterator idx = lst.begin();
for (; idx != lst.end(); ++idx) {
items.append(KJS::jsString((*idx)));
}
returnValue = exec->lexicalInterpreter()->builtinArray()->construct(exec, items);
break;
}
case QVariant::Date: // fall through
case QVariant::DateTime: // fall through
case QVariant::Time: {
QDateTime dt = QDateTime::currentDateTime();
if (value.type() == QVariant::Date) {
dt.setDate(value.toDate());
} else if (value.type() == QVariant::Time) {
dt.setTime(value.toTime());
} else {
dt = value.toDateTime();
}
KJS::List items;
items.append(KJS::jsNumber(dt.date().year()));
items.append(KJS::jsNumber(dt.date().month() - 1));
items.append(KJS::jsNumber(dt.date().day()));
items.append(KJS::jsNumber(dt.time().hour()));
items.append(KJS::jsNumber(dt.time().minute()));
items.append(KJS::jsNumber(dt.time().second()));
items.append(KJS::jsNumber(dt.time().msec()));
returnValue = exec->lexicalInterpreter()->builtinDate()->construct(exec, items);
break;
}
case QVariant::List: {
KJS::List items;
QList<QVariant> lst = value.toList();
foreach (const QVariant &item, lst) {
items.append(convertToValue(exec, item));
}
returnValue = exec->lexicalInterpreter()->builtinArray()->construct(exec, items);
break;
}
case QVariant::Map: {
QMap<QString, QVariant> map = value.toMap();
QMap<QString, QVariant>::Iterator idx = map.begin();
KJS::JSObject *obj = exec->lexicalInterpreter()->builtinObject()->construct(exec, KJS::List());
for (; idx != map.end(); ++idx) {
obj->put(exec, KJS::Identifier(toUString(idx.key())), convertToValue(exec, idx.value()));
}
returnValue = obj;
break;
}
default: {
if (value.canConvert< QWidget * >()) {
QWidget *widget = qvariant_cast< QWidget * >(value);
returnValue = widget ? createQObject(exec, widget, KJSEmbed::ObjectBinding::CPPOwned) : KJS::jsNull();
} else if (value.canConvert< QObject * >()) {
QObject *object = qvariant_cast< QObject * >(value);
returnValue = object ? createQObject(exec, object, KJSEmbed::ObjectBinding::CPPOwned) : KJS::jsNull();
} else {
returnValue = createVariant(exec, value.typeName(), value);
if (returnValue->isNull()) {
returnValue = KJS::jsString(value.value<QString>());
}
}
//.........这里部分代码省略.........
示例12: main
//.........这里部分代码省略.........
{
kde = false;
}
#endif
else
{
printUsage(appName);
return 0;
}
}
else
{
if (!script.isEmpty())
scriptArgs.append(KJS::jsString(arg));
else
script = arg;
}
}
}
else
{
printUsage(appName);
return 0;
}
// Setup QApplication
QCoreApplication *app;
#ifndef QT_ONLY
if (kde)
{
KAboutData aboutData( "kjscmd", 0, ki18n("KJSCmd"), "0.2",
ki18n(""
"Utility for running KJSEmbed scripts \n" ),
KAboutData::License_LGPL,
ki18n("(C) 2005-2006 The KJSEmbed Authors") );
KCmdLineOptions options;
options.add("e", ki18n("Execute script without gui support"));
options.add("exec", ki18n("Execute script without gui support"));
options.add("i", ki18n("start interactive kjs interpreter"));
options.add("interactive", ki18n("start interactive kjs interpreter"));
options.add("n", ki18n("start without KDE KApplication support."));
options.add("no-kde", ki18n("start without KDE KApplication support."));
options.add("!+command", ki18n("Script to execute"));
KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
KCmdLineArgs::init( argc, argv, &aboutData );
app = new KApplication(gui);
}
else
#endif
if (gui)
{
qDebug("no KDE");
app = new QApplication( argc, argv );
dynamic_cast<QApplication*>(app)->connect( app, SIGNAL(lastWindowClosed()), SLOT(quit()) );
}
else
{
qDebug("no GUI");
app = new QCoreApplication(argc, argv);
}
qDebug(" New %s %dms", app->metaObject()->className(), time.elapsed());
app->setApplicationName( appName );
// Setup Interpreter
time.restart();
Engine kernel;
qDebug(" New engine %dms", time.elapsed());
time.restart();
KJS::Interpreter *js = kernel.interpreter();
js->setShouldPrintExceptions(true);
KJS::ExecState *exec = js->globalExec();
// Publish bindings
KJS::JSObject *appObject = kernel.addObject( app, "Application" );
KJS::JSObject *argObject = js->builtinArray()->construct( exec, scriptArgs );
appObject->put( exec, "args", argObject );
Engine::ExitStatus result = Engine::Failure;
if (!script.isEmpty())
{
result = kernel.runFile(toUString(script));
}
else // exec shell
{
result = kernel.runFile( ":/console.js" );
}
if ( result != Engine::Success )
{
KJS::Completion jsres = kernel.completion();
(*KJSEmbed::conerr()) << toQString(jsres.value()->toString(exec)) << endl;
}
return (int)result;
}
示例13: exceptionToString
// from khtml/ecma/debugger/debugwindow.cpp
static QString exceptionToString(KJS::ExecState* exec, KJS::JSValue* exceptionObj)
{
QString exceptionMsg = valueToString(exceptionObj);
// Since we purposefully bypass toString, we need to figure out
// string serialization ourselves.
//### might be easier to export class info for ErrorInstance ---
KJS::JSObject* valueObj = exceptionObj->getObject();
KJS::JSValue* protoObj = valueObj ? valueObj->prototype() : 0;
bool exception = false;
bool syntaxError = false;
if (protoObj == exec->lexicalInterpreter()->builtinSyntaxErrorPrototype())
{
exception = true;
syntaxError = true;
}
if (protoObj == exec->lexicalInterpreter()->builtinErrorPrototype() ||
protoObj == exec->lexicalInterpreter()->builtinEvalErrorPrototype() ||
protoObj == exec->lexicalInterpreter()->builtinReferenceErrorPrototype() ||
protoObj == exec->lexicalInterpreter()->builtinRangeErrorPrototype() ||
protoObj == exec->lexicalInterpreter()->builtinTypeErrorPrototype() ||
protoObj == exec->lexicalInterpreter()->builtinURIErrorPrototype())
{
exception = true;
}
if (!exception)
return exceptionMsg;
// Clear exceptions temporarily so we can get/call a few things.
// We memorize the old exception first, of course. Note that
// This is not always the same as exceptionObj since we may be
// asked to translate a non-active exception
KJS::JSValue* oldExceptionObj = exec->exception();
exec->clearException();
// We want to serialize the syntax errors ourselves, to provide the line number.
// The URL is in "sourceURL" and the line is in "line"
// ### TODO: Perhaps we want to use 'sourceId' in case of eval contexts.
if (syntaxError)
{
KJS::JSValue* lineValue = valueObj->get(exec, "line");
KJS::JSValue* urlValue = valueObj->get(exec, "sourceURL");
int line = lineValue->toNumber(exec);
QString url = urlValue->toString(exec).qstring();
exceptionMsg = i18n("Parse error at %1 line %2",
url, line + 1);
}
else
{
// ### it's still not 100% safe to call toString here, even on
// native exception objects, since someone might have changed the toString property
// of the exception prototype, but I'll punt on this case for now.
exceptionMsg = exceptionObj->toString(exec).qstring();
}
exec->setException(oldExceptionObj);
return exceptionMsg;
}
示例14: convertArguments
KJS::List SlotProxy::convertArguments(KJS::ExecState *exec, void **_a)
{
KJS::List args;
int offset = metaObject()->indexOfMethod(m_signature.constData());
QMetaMethod method = metaObject()->method(offset);
QList<QByteArray> params = method.parameterTypes();
int idx = 1;
#ifdef DEBUG_SLOTPROXY
qDebug() << "SlotProxy::convertArguments(): obj=" << this << " m_signature=" << m_signature << " offset=" << offset << " params=" << params;
#endif
foreach (const QByteArray ¶m, params) {
#ifdef DEBUG_SLOTPROXY
int type = QMetaType::type(param.constData());
qDebug("\tGot a %d - %s - _a[%d] = %p", type, param.data(), idx, _a[idx]);
qDebug("\t QMetaType::type()=%d", QMetaType::type(QByteArray("Pinya::") + param.constData()));
#endif
int tp = QVariant::nameToType(param.constData());
switch (tp) {
case QVariant::Int:
args.append(KJS::jsNumber(*(int *)_a[idx]));
break;
case QVariant::UInt:
args.append(KJS::jsNumber(*(uint *)_a[idx]));
break;
case QVariant::LongLong:
args.append(KJS::jsNumber(*(qlonglong *)_a[idx]));
break;
case QVariant::ULongLong:
args.append(KJS::jsNumber(*(qulonglong *)_a[idx]));
break;
case QVariant::Double:
args.append(KJS::jsNumber(*(double *)_a[idx]));
break;
case QVariant::Bool:
args.append(KJS::jsBoolean(*(bool *)_a[idx]));
break;
case QVariant::String:
args.append(KJS::jsString((*reinterpret_cast<QString(*)>(_a[idx]))));
break;
case QVariant::UserType: {
KJS::JSObject *returnValue;
KJS::JSObject *parent = exec->dynamicInterpreter()->globalObject();
QByteArray typeName = param.constData();
bool isPtr = typeName.contains("*");
if (isPtr) {
typeName.replace("*", ""); //krazy:exclude=doublequote_chars
}
#ifdef DEBUG_SLOTPROXY
qDebug() << "\tQVariant::UserType: typeName=" << typeName << " param=" << param.constData() << " isPtr" << isPtr;
#endif
if (parent->hasProperty(exec, KJS::Identifier(toUString(typeName)))) {
QObject *qObj;
if (isPtr &&
((qObj = *reinterpret_cast<QObject **>(_a[idx])) != 0)) {
#ifdef DEBUG_SLOTPROXY
qDebug() << "qObj=" << qObj;
#endif
Pointer<QObject> pov(*reinterpret_cast<QObject*(*)>(_a[idx]));
returnValue = StaticConstructor::bind(exec, typeName, pov);
if (returnValue) {
args.append(returnValue);
break;
} else {
#ifdef DEBUG_SLOTPROXY
qDebug("\t\tNo binding retrieved");
#endif
returnValue = StaticConstructor::construct(exec, parent, toUString(typeName));
if (returnValue) {
if (QObjectBinding *objImp = KJSEmbed::extractBindingImp<QObjectBinding>(exec, returnValue)) {
#ifdef DEBUG_SLOTPROXY
qDebug() << "\t\t\tFound QObjectBinding";
#endif
objImp->setOwnership(KJSEmbed::ObjectBinding::JSOwned);
objImp->setObject(qObj);
if (qObj->parent() != 0) {
objImp->setOwnership(KJSEmbed::ObjectBinding::QObjOwned);
} else {
objImp->setOwnership(KJSEmbed::ObjectBinding::CPPOwned);
}
args.append(returnValue);
break;
}
}
}
}
} else {
#ifdef DEBUG_SLOTPROXY
qDebug("\t\tNo binding registered");
#endif
KJS::JSObject *returnValue = 0;
const int metaTypeId = QMetaType::type(param.constData());
if (QMetaType::typeFlags(metaTypeId) & QMetaType::PointerToQObject) {
QObject *obj = (*reinterpret_cast< QObject*(*)>(_a[idx]));
returnValue = KJSEmbed::createQObject(exec, obj, KJSEmbed::ObjectBinding::QObjOwned);
}
if (returnValue) {
args.append(returnValue);
break;
}
}
//.........这里部分代码省略.........