27 struct ScriptableExtensionPrivate {
28 ScriptableExtension* hostContext;
30 ScriptableExtensionPrivate(): hostContext(0)
35 QObject(parent), d(new ScriptableExtensionPrivate)
45 return KGlobal::findDirectChild<KParts::ScriptableExtension*>(obj);
56 d->hostContext =
host;
61 return d->hostContext;
66 return QVariant::fromValue(
Null());
72 return d->hostContext->encloserForKid(
this);
74 return QVariant::fromValue(
Null());
80 return QVariant::fromValue(Null());
85 ScriptableExtension::Exception except(QString::fromLatin1(
"[unimplemented]"));
86 return QVariant::fromValue(except);
92 Q_UNUSED(callerPrincipal);
95 return unimplemented();
102 Q_UNUSED(callerPrincipal);
106 return unimplemented();
112 Q_UNUSED(callerPrincipal);
115 return unimplemented();
121 Q_UNUSED(callerPrincipal);
130 Q_UNUSED(callerPrincipal);
133 return unimplemented();
139 Q_UNUSED(callerPrincipal);
149 Q_UNUSED(callerPrincipal);
158 Q_UNUSED(callerPrincipal);
167 Q_UNUSED(callerPrincipal);
177 Q_UNUSED(callerPrincipal);
178 Q_UNUSED(contextObjectId);
181 return unimplemented();
197 if (v.canConvert<
Object>()) {
214 if (v.canConvert<
Object>()) {
244 QVariant val =
get(0, objId, propName);
257 for (
int i = 0; i < a.size(); ++i) {
259 qargs.append(toLC(a[i], &ok));
261 return unimplemented();
265 unsigned long retObjId;
267 if (wrapee->
call((
unsigned long)o, f, qargs, retType, retObjId, retVal)) {
270 return unimplemented();
278 unsigned long retObjId;
280 if (wrapee->
get((
unsigned long)objId, propName, retType, retObjId, retVal)) {
281 return acquireValue(fromLC(propName, retType, retObjId, retVal));
284 return unimplemented();
292 QString val = toLC(value, &ok);
296 return wrapee->
put((
unsigned long)objId, propName, val);
307 int i = value.toInt(&ok);
310 return QVariant(value.toLower() == QLatin1String(
"true"));
314 if (!refCounts.contains(objId))
315 refCounts[objId] = 0;
317 Object o = ScriptableExtension::Object(
this, objId);
319 return QVariant::fromValue(o);
321 return QVariant::fromValue(FunctionRef(o, name));
332 return QVariant::fromValue(ScriptableExtension::Undefined());
336 QString ScriptableLiveConnectExtension::toLC(
const QVariant& in,
bool* ok)
341 if (in.canConvert<ScriptableExtension::Object>() ||
342 in.canConvert<ScriptableExtension::Exception>() ||
343 in.canConvert<ScriptableExtension::FunctionRef>()) {
351 if (in.canConvert<ScriptableExtension::Null>())
352 return QString::fromLatin1(
"null");
354 if (in.canConvert<ScriptableExtension::Undefined>())
355 return QString::fromLatin1(
"undefined");
357 if (in.type() == QVariant::Bool)
358 return in.toBool() ? QString::fromLatin1(
"true") :
QString::fromLatin1(
"false");
362 return in.toString();
376 int newRC = --refCounts[objId];
380 refCounts.remove(objId);
389 if (!enclosure.canConvert<
Object>()) {
391 kDebug(1000) <<
"No enclosure, can't evaluate";
399 kDebug(1000) <<
"Host can't evaluate ECMAScript";
405 script.sprintf(
"%s(", event.toLatin1().constData());
407 LiveConnectExtension::ArgList::const_iterator i = args.begin();
408 const LiveConnectExtension::ArgList::const_iterator argsBegin = i;
409 const LiveConnectExtension::ArgList::const_iterator argsEnd = args.end();
411 for ( ; i != argsEnd; ++i) {
416 script +=
QString((*i).second).replace(
'\\',
"\\\\").replace(
'"',
"\\\"");
419 script += (*i).second;
450 #include "scriptableextension.moc"
451 #include "scriptableextension_p.moc"