void KJSEmbedPart::putValue( const QString & valueName, const KJS::Value & value ) { KJS::ExecState *exec = js->globalExec(); KJS::Identifier id = KJS::Identifier( KJS::UString(valueName.latin1() )); KJS::Object obj = js->globalObject(); obj.put(exec, id, value); }
void TextStreamImp::addBindings( KJS::ExecState *exec, KJS::Object &parent ) { kdDebug() << "TextStreamImp::addBindings()" << endl; JSOpaqueProxy *op = JSProxy::toOpaqueProxy( parent.imp() ); if ( !op ) { kdWarning() << "TextStreamImp::addBindings() failed, not a JSOpaqueProxy" << endl; return; } QTextStream *ts = op->toTextStream(); if ( !ts ) { kdWarning() << "TextStreamImp::addBindings() failed, type is " << op->typeName() << endl; return; } JSProxy::MethodTable methods[] = { { MethodIsReadable, "isReadable" }, { MethodIsWritable, "isWritable" }, { MethodPrint, "print" }, { MethodPrintLn, "println" }, { MethodReadLine, "readLine" }, { MethodFlush, "flush" }, { 0, 0 } }; int idx = 0; do { TextStreamImp *tsi = new TextStreamImp( exec, idx, ts ); parent.put( exec , methods[idx].name, KJS::Object(tsi) ); ++idx; } while( methods[idx].id ); }
KJS::Value KJSEmbedPart::callMethod( const QString & methodName, const KJS::List & args ) const { KJS::ExecState *exec = js->globalExec(); KJS::Identifier id = KJS::Identifier( KJS::UString(methodName.latin1() )); KJS::Object obj = js->globalObject(); KJS::Object fun = obj.get(exec, id ).toObject( exec ); KJS::Value retValue; if ( !fun.implementsCall() ) { // We need to create an exception here... } else retValue = fun.call(exec, obj, args); kdDebug( 80001 ) << "Returned type is: " << retValue.type() << endl; if( exec->hadException() ) { kdWarning( 80001 ) << "Got error: " << exec->exception().toString(exec).qstring() << endl; return exec->exception(); } else { if( retValue.type() == 1 && retValue.type() == 0) { kdDebug( 80001 ) << "Got void return type. " << endl; return KJS::Null(); } } return retValue; }
KJS::Value KJSEmbedPart::getValue( const QString & valueName ) const { KJS::ExecState *exec = js->globalExec(); KJS::Identifier id = KJS::Identifier( KJS::UString(valueName.latin1() )); KJS::Object obj = js->globalObject(); return obj.get(exec, id ); }
void JSObjectProxy::addBindingsClass( KJS::ExecState *exec, KJS::Object & /*object*/ ) { KJS::Identifier clazzid; QObject *o = obj; Bindings::BindingObject *bo = dynamic_cast<Bindings::BindingObject *>( o ); if ( bo ) { clazzid = KJS::Identifier( bo->jsClassName() ? bo->jsClassName() : obj->className() ); } else { clazzid = KJS::Identifier( obj->className() ); } KJS::Object global = js->globalObject(); if ( global.hasProperty( exec, clazzid ) ) { kdDebug( 80001 ) << "addBindingsClass() " << clazzid.qstring() << " already known" << endl; KJS::Object clazz = global.get( exec, clazzid ).toObject( exec ); Bindings::JSFactoryImp *imp = dynamic_cast<Bindings::JSFactoryImp *>( clazz.imp() ); if ( !imp ) { kdWarning() << "addBindingsClass() Class was not created by normal means" << endl; return ; } kdDebug( 80001 ) << "addBindingsClass() Adding enums" << endl; imp->setDefaultValue( js->builtinObject().construct( exec, KJS::List() ) ); addBindingsEnum( exec, clazz ); } else { kdWarning() << "addBindingsClass() " << clazzid.qstring() << " not known" << endl; } }
bool SaxHandler::startElement( const QString &ns, const QString &ln, const QString &qn, const QXmlAttributes &attrs ) { if ( !jshandler.isValid() ) { error = ErrorNoHandler; return false; } KJS::Identifier funName("startElement"); if ( !jshandler.hasProperty(exec, funName) ) return QXmlDefaultHandler::startElement( ns, ln, qn, attrs ); KJS::Object fun = jshandler.get(exec, funName).toObject( exec ); if ( !fun.implementsCall() ) { error = ErrorNotCallable; return false; } KJS::List args; args.append( KJS::String(ns) ); args.append( KJS::String(ln) ); args.append( KJS::String(qn) ); // TODO: XmlAttributes not yet supported KJS::Value ret = fun.call( exec, jshandler, args ); return ret.toBoolean( exec ); }
bool KJSEmbedPart::hasMethod( const QString & methodName ) { KJS::ExecState *exec = js->globalExec(); KJS::Identifier id = KJS::Identifier( KJS::UString(methodName.latin1() )); KJS::Object obj = js->globalObject(); KJS::Object fun = obj.get(exec, id ).toObject( exec ); return fun.implementsCall(); }
void KJSEmbed::Bindings::KFileItemImp::addBindings( KJS::ExecState * exec, KJS::Object & object ) { JSOpaqueProxy *op = JSProxy::toOpaqueProxy( object.imp() ); if ( !op ) { kdWarning() << "KFileItemImp::addBindings() failed, not a JSOpaqueProxy" << endl; return; } if ( op->typeName() != "KFileItem" ) { kdWarning() << "KFileItemImp::addBindings() failed, type is " << op->typeName() << endl; return; } JSProxy::MethodTable methods[] = { { Methodrefresh, "refresh"}, { MethodrefreshMimeType, "refreshMimeType"}, { Methodurl, "url"}, { MethodsetUrl, "setUrl"}, { MethodsetName, "setName"}, { MethodpermissionsString, "permissionsString"}, { Methoduser, "user"}, { Methodgroup, "group"}, { MethodisLink, "isLink"}, { MethodisDir, "isDir"}, { MethodisFile, "isFile"}, { MethodisReadable, "isReadable"}, { MethodlinkDest, "linkDest"}, { MethodtimeString, "timeString"}, { MethodisLocalFile, "isLocalFile"}, { Methodtext, "text"}, { Methodname, "name"}, { MethodmimeType, "mimeType"}, { MethodisMimeTypeKnown, "isMimeTypeKnown"}, { MethodmimeComment, "mimeComment"}, { MethodiconName, "iconName"}, { Methodpixmap, "pixmap"}, { Methodoverlays, "overlays"}, { MethodgetStatusBarInfo, "getStatusBarInfo"}, { MethodgetToolTipText, "getToolTipText"}, { Methodrun, "run"}, { 0, 0 } }; int idx = 0; do { KFileItemImp *meth = new KFileItemImp( exec, methods[idx].id ); object.put( exec , methods[idx].name, KJS::Object(meth) ); ++idx; } while( methods[idx].id ); }
void KstJS::createBindings() { _jsPart->factory()->addType("KstJSUIBuilder"); _jsPart->factory()->addType("KActionCollection"); if (_merge) { _jsPart->addObject(_merge, _merge->name()); } KJS::ExecState *exec = _jsPart->globalExec(); KJS::Object globalObj = _jsPart->globalObject(); new KstBindPoint(exec, &globalObj); new KstBindSize(exec, &globalObj); new KstBindVector(exec, &globalObj); new KstBindScalar(exec, &globalObj); new KstBindString(exec, &globalObj); new KstBindDataSource(exec, &globalObj); new KstBindDataVector(exec, &globalObj); new KstBindMatrix(exec, &globalObj); new KstBindDataMatrix(exec, &globalObj); new KstBindVectorView(exec, &globalObj); new KstBindBinnedMap(exec, &globalObj); new KstBindCSD(exec, &globalObj); new KstBindCrossPowerSpectrum(exec, &globalObj); new KstBindEquation(exec, &globalObj); new KstBindPlugin(exec, &globalObj); new KstBindPowerSpectrum(exec, &globalObj); new KstBindHistogram(exec, &globalObj); new KstBindCurve(exec, &globalObj); new KstBindImage(exec, &globalObj); new KstBindGroup(exec, &globalObj); new KstBindPlot(exec, &globalObj); new KstBindLine(exec, &globalObj); new KstBindLabel(exec, &globalObj); new KstBindLegend(exec, &globalObj); new KstBindBox(exec, &globalObj); new KstBindEllipse(exec, &globalObj); new KstBindPicture(exec, &globalObj); new KstBindArrow(exec, &globalObj); new KstBindWindow(exec, &globalObj); new KstBindDebug(exec, &globalObj); new KstBindKst(exec, &globalObj, this); new KstBindFile(exec, &globalObj); new KstBindELOG(exec, &globalObj); globalObj.put(exec, "loadScript", KJS::Object(new LoadScript(this))); createRegistry(); }
static KJS::Object scopeWalker( KJS::ExecState *exec, const KJS::Object &root, const QString &objectString ) { KJS::Object returnObject = root; QStringList objects = QStringList::split(".", objectString); for( uint idx = 0; idx < objects.count(); ++idx) { KJS::Identifier id = KJS::Identifier( KJS::UString( objects[idx] )); KJS::Value newObject = returnObject.get(exec, id ); if( newObject.isValid() ) returnObject = newObject.toObject(exec); } return returnObject; }
void MyCustomObjectImp::addBindings( KJS::ExecState *exec, KJS::Object &object ) { kdDebug() << "MyCustomObjectImp::addBindings()" << endl; JSOpaqueProxy *op = JSProxy::toOpaqueProxy( object.imp() ); if ( !op ) { kdWarning() << "MyCustomObjectImp::addBindings() failed, not a JSOpaqueProxy" << endl; return; } if ( op->typeName() != "MyCustomObject" ) { kdWarning() << "MyCustomObjectImp::addBindings() failed, type is " << op->typeName() << endl; return; } JSProxy::MethodTable methods[] = { { Methodmode, "mode"}, { MethodsetMode, "setMode"}, { Methodthing, "thing"}, { MethodsetThing, "setThing"}, { 0, 0 } }; int idx = 0; do { MyCustomObjectImp *meth = new MyCustomObjectImp( exec, methods[idx].id ); object.put( exec , methods[idx].name, KJS::Object(meth) ); ++idx; } while( methods[idx].id ); // // Define the enum constants // struct EnumValue { const char *id; int val; }; EnumValue enums[] = { // MyCustomObject::mode { "On", 0 }, { "Off", 1 }, { 0, 0 } }; int enumidx = 0; do { object.put( exec, enums[enumidx].id, KJS::Number(enums[enumidx].val), KJS::ReadOnly ); ++enumidx; } while( enums[enumidx].id ); }
void KstBindLegend::addBindings(KJS::ExecState *exec, KJS::Object& obj) { int start = KstBindBorderedViewObject::methodCount(); for (int i = 0; legendBindings[i].name != 0L; ++i) { KJS::Object o = KJS::Object(new KstBindLegend(i + start + 1)); obj.put(exec, legendBindings[i].name, o, KJS::Function); } }
KJS::Object KJSEmbedPart::addObject( QObject *obj, KJS::Object &parent, const char *name ) { KJS::Object jsobj = bind( obj ); parent.put( js->globalExec(), name ? name : obj->name(), jsobj ); return jsobj; }
void KstBindCurve::addBindings(KJS::ExecState *exec, KJS::Object& obj) { int start = KstBindDataObject::methodCount(); for (int i = 0; curveBindings[i].name != 0L; ++i) { KJS::Object o = KJS::Object(new KstBindCurve(i + start + 1)); obj.put(exec, curveBindings[i].name, o, KJS::Function); } }
void KstBindEllipse::addBindings(KJS::ExecState *exec, KJS::Object& obj) { int start = KstBindViewObject::methodCount(); for (int i = 0; ellipseBindings[i].name != 0L; ++i) { KJS::Object o = KJS::Object(new KstBindEllipse(i + start + 1)); obj.put(exec, ellipseBindings[i].name, o, KJS::Function); } }
KJS::Value Point::call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ) { if( !JSProxy::checkType(self, JSProxy::ValueProxy, "QPoint") ) return KJS::Value(); JSValueProxy *vp = JSProxy::toValueProxy( self.imp() ); KJS::Value retValue = KJS::Value(); QPoint val = vp->toVariant().toPoint(); switch ( mid ) { case Methodx: retValue = KJS::Number(val.x()); break; case MethodsetX: val.setX(extractInt(exec,args,0)); break; case Methody: retValue = KJS::Number(val.y()); break; case MethodsetY: val.setY(extractInt(exec,args,0)); break; case MethodmanhattanLength: retValue = KJS::Number(val.manhattanLength()); break; default: QString msg = i18n( "Point has no method %1" ).arg(mid); return throwError(exec, msg); break; } vp->setValue(val); return retValue; }
void JSObjectProxy::addSlotBinding( const QCString &name, KJS::ExecState *exec, KJS::Object &object ) { // Lookup and bind slot QMetaObject * mo = obj->metaObject(); int slotid = mo->findSlot( name.data(), true ); if ( slotid == -1 ) return ; const QMetaData *md = mo->slot( slotid, true ); if ( md->access != QMetaData::Public ) return ; // Find signature int id = Bindings::JSSlotUtils::findSignature( name ); // kdDebug( 80001 )<<"JSObjectProxy::addSlotBinding()::slot:"<<name<<" id:"<<id<<endl; if ( id < 0 ) return ; QCString jsname = name; jsname.detach(); jsname.replace( QRegExp( "\\([^\\)]*\\)" ), "" ); // Find the return type, we only care if it is a pointer type const QUMethod *m = md->method; const char *retclass = 0; QCString ptr( "ptr" ); if ( m->count && ( m->parameters->inOut == QUParameter::Out ) && ( ptr == m->parameters->type->desc() ) ) { retclass = ( const char * ) m->parameters->typeExtra; // kdDebug(80001) << "Return type is a pointer, type " << retclass << endl; } // Create the Imp JSObjectProxyImp *imp = new JSObjectProxyImp( exec, JSObjectProxyImp::MethodSlot, retclass ? retclass : "", id, name, this ); if ( !object.hasProperty( exec, KJS::Identifier( jsname ) ) ) { // The identifier is unused object.put( exec, KJS::Identifier( jsname.data() ), KJS::Object( imp ) ); } else { // The identifier has already been used QString s( name ); QCString cs = QString( "%1%2" ).arg( jsname ).arg( s.contains( ',' ) + 1 ).ascii(); //kdDebug(80001) << "Method " << jsname << " exists, using " << cs << " for " << s << endl; object.put( exec, KJS::Identifier( cs.data() ), KJS::Object( imp ) ); } }
DOM::EventListener *KJSProxyImpl::createHTMLEventHandler(QString sourceUrl, QString code) { #ifdef KJS_DEBUGGER if (KJSDebugWin::instance()) KJSDebugWin::instance()->setNextSourceInfo(sourceUrl,m_handlerLineno); #else Q_UNUSED(sourceUrl); #endif initScript(); //KJS::Constructor constr(KJS::Global::current().get("Function").imp()); KJS::Object constr = m_script->builtinFunction(); KJS::List args; args.append(KJS::String("event")); args.append(KJS::String(code)); Object handlerFunc = constr.construct(m_script->globalExec(), args); // ### is globalExec ok ? return KJS::Window::retrieveWindow(m_part)->getJSEventListener(handlerFunc,true); }
bool SaxHandler::endDocument() { if ( !jshandler.isValid() ) { error = ErrorNoHandler; return false; } KJS::Identifier funName("endDocument"); if ( !jshandler.hasProperty(exec, funName) ) return QXmlDefaultHandler::endDocument(); KJS::Object fun = jshandler.get(exec, funName).toObject( exec ); if ( !fun.implementsCall() ) { error = ErrorNotCallable; return false; } KJS::Value ret = fun.call( exec, jshandler, KJS::List() ); return ret.toBoolean( exec ); }
KJS::List KJSEmbedPart::constructorList() const { KJS::List items; KJS::Object obj = js->globalObject(); KJS::ExecState *exec = js->globalExec(); KJS::ReferenceList l = obj.propList( exec ); KJS::ReferenceListIterator propIt = l.begin(); while ( propIt != l.end() ) { KJS::Identifier name = propIt->getPropertyName( exec ); if ( obj.hasProperty( exec, name ) ) { KJS::Value v = obj.get( exec, name ); KJS::Object vobj = v.toObject( exec ); if ( vobj.implementsConstruct() ) items.append( KJS::String( name.ustring() ) ); } propIt++; } return items; }
KJS::Value KstBindWindow::call(KJS::ExecState *exec, KJS::Object& self, const KJS::List& args) { int id = this->id(); if (id <= 0) { return createInternalError(exec); } KstBindWindow *imp = dynamic_cast<KstBindWindow*>(self.imp()); if (!imp) { return createInternalError(exec); } return (imp->*windowBindings[id - 1].method)(exec, args); }
void JSObjectProxy::addBindingsEnum( KJS::ExecState *exec, KJS::Object &object ) { QMetaObject * mo = obj->metaObject(); QStrList enumList = mo->enumeratorNames( true ); for ( QStrListIterator iter( enumList ); iter.current(); ++iter ) { const QMetaEnum *me = mo->enumerator( iter.current(), true ); for ( uint i = 0 ; i < me->count ; i++ ) { QCString key( ( me->items ) [ i ].key ); int val = ( me->items ) [ i ].value; object.put( exec, key.data(), KJS::Number( val ), KJS::ReadOnly ); } } }
KateKJSWrapperConfigPage::KateKJSWrapperConfigPage(KJS::Object pageConstructor,PluginKateKJSWrapper* parent, QWidget *parentWidget) : Kate::PluginConfigPage( parentWidget ),m_plugin(parent) { QVBoxLayout *l=new QVBoxLayout(this); l->setAutoAdd(true); l->activate(); KJS::Interpreter *js = parent->m_part->interpreter(); KJS::ExecState *exec = js->globalExec(); exec->clearException(); KJS::List param; param.append(parent->m_part->factory()->createProxy(exec,this,0)); m_pageObject=pageConstructor.construct(exec,param); }
static void JsDebugExtension(ExecState *exec, KParts::ReadOnlyPart *part, const KURL &, const QString &, KJS::Object &hostobj ) { if ( !part->inherits( "KHTMLPart" ) ) return; if ( !s_debug ) { s_debug = new JsDebug; s_debug->ref(); } hostobj.put(exec, "DebugOut", Object(s_debug)); }
bool SaxHandler::characters( const QString &chars ) { if ( !jshandler.isValid() ) { error = ErrorNoHandler; return false; } KJS::Identifier funName("characters"); if ( !jshandler.hasProperty(exec, funName) ) return QXmlDefaultHandler::characters( chars ); KJS::Object fun = jshandler.get(exec, funName).toObject( exec ); if ( !fun.implementsCall() ) { error = ErrorNotCallable; return false; } KJS::List args; args.append( KJS::String(chars) ); KJS::Value ret = fun.call( exec, jshandler, args ); return ret.toBoolean( exec ); }
KJS::Value KstBindPlot::call(KJS::ExecState *exec, KJS::Object& self, const KJS::List& args) { int id = this->id(); if (id <= 0) { return createInternalError(exec); } int start = KstBindBorderedViewObject::methodCount(); if (id > start) { KstBindPlot *imp = dynamic_cast<KstBindPlot*>(self.imp()); if (!imp) { return createInternalError(exec); } return (imp->*plotBindings[id - start - 1].method)(exec, args); } return KstBindBorderedViewObject::call(exec, self, args); }
KJS::Value KstBindTimeInterpretation::call(KJS::ExecState *exec, KJS::Object& self, const KJS::List& args) { int id = this->id(); if (id <= 0) { KJS::Object eobj = KJS::Error::create(exec, KJS::GeneralError); exec->setException(eobj); return KJS::Undefined(); } KstBindTimeInterpretation *imp = dynamic_cast<KstBindTimeInterpretation*>(self.imp()); if (!imp) { KJS::Object eobj = KJS::Error::create(exec, KJS::GeneralError); exec->setException(eobj); return KJS::Undefined(); } return (imp->*timeInterpretationBindings[id - 1].method)(exec, args); }
KJS::Value MyCustomObjectImp::call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ) { kdDebug() << "MyCustomObjectImp::call() " << mid << endl; JSOpaqueProxy *op = JSProxy::toOpaqueProxy( self.imp() ); if ( !op ) { kdWarning() << "MyCustomObjectImp::call() failed, not a JSOpaqueProxy" << endl; return KJS::Value(); } if ( op->typeName() != "MyCustomObject" ) { kdWarning() << "MyCustomObjectImp::call() failed, type is " << op->typeName() << endl; return KJS::Value(); } MyCustomObject *obj = op->toNative<MyCustomObject>(); KJS::Value retValue = KJS::Value(); switch ( mid ) { case Methodthing: { retValue = KJS::String(obj->thing); break; } case MethodsetThing: { obj->thing = extractString(exec, args, 0); break; } case Methodmode: { retValue = KJS::Number( (int)obj->mode ); break; } case MethodsetMode: { obj->mode = (MyCustomObject::Mode) extractInt(exec, args, 0); break; } default: kdWarning() << "MyCustomObject has no method " << mid << endl; break; } op->setValue((void*) obj, "MyCustomObject"); return retValue; }
void QFrameImp::addBindings( KJS::ExecState *exec, KJS::Object &object ) { // // Define the enum constants // struct EnumValue { const char *id; int val; }; EnumValue enums[] = { // enum Shape { "NoFrame", QFrame::NoFrame }, { "Box", QFrame::Box }, { "Panel", QFrame::Panel }, { "WinPanel", QFrame::WinPanel }, { "HLine", QFrame::HLine }, { "VLine", QFrame::VLine }, { "StyledPanel", QFrame::StyledPanel }, { "PopupPanel", QFrame::PopupPanel }, { "MenuBarPanel", QFrame::MenuBarPanel }, { "ToolBarPanel", QFrame::ToolBarPanel }, { "LineEditPanel", QFrame::LineEditPanel }, { "TabWidgetPanel", QFrame::TabWidgetPanel }, { "GroupBoxPanel", QFrame::GroupBoxPanel }, { "MShape", QFrame::MShape }, // enum Shadow { "Plain", QFrame::Plain }, { "Raised", QFrame::Raised }, { "Sunken", QFrame::Sunken }, { "MShadow", QFrame::MShadow }, { 0, 0 } }; int enumidx = 0; do { object.put( exec, enums[enumidx].id, KJS::Number(enums[enumidx].val), KJS::ReadOnly ); ++enumidx; } while( enums[enumidx].id ); }
void JSObjectProxy::addBindings( KJS::ExecState *exec, KJS::Object &object ) { kdDebug( 80001 ) << "JSObjectProxy::addBindings() " << ( obj->name() ? obj->name() : "dunno" ) << ", class " << obj->className() << endl; if ( policy->hasCapability( JSSecurityPolicy::CapabilityGetProperties | JSSecurityPolicy::CapabilitySetProperties ) ) { object.put( exec, "properties", KJS::Object( new JSObjectProxyImp( exec, JSObjectProxyImp::MethodProps, this ) ) ); } if ( policy->hasCapability( JSSecurityPolicy::CapabilityTree ) ) { JSObjectProxyImp::addBindingsTree( exec, object, this ); JSObjectProxyImp::addBindingsDOM( exec, object, this ); } if ( policy->hasCapability( JSSecurityPolicy::CapabilitySlots ) ) { addBindingsSlots( exec, object ); JSObjectProxyImp::addBindingsConnect( exec, object, this ); } addBindingsClass( exec, object ); }