int main( int argc, char **argv ) { KAboutData about( "test-kjsembed", I18N_NOOP("KJS Embed Test"), "0.1", I18N_NOOP("Test"), KAboutData::License_LGPL, I18N_NOOP("(c) 2001-2003 Richard Moore") ); KCmdLineArgs::init( argc, argv, &about ); KApplication app; // Setup Interpreter KJS::Interpreter *js = KJSEmbed::JSFactory::defaultJS(); KJS::Object global = js->globalObject(); // Create Console KJSEmbed::JSConsoleWidget *console = new KJSEmbed::JSConsoleWidget( js ); console->addBindings( global ); JSFactory::publish( &app, js, global, "app" ); JSFactory::publish( console, js, global, "console" ); // Setup Window app.setMainWidget( console ); app.connect( &app, SIGNAL( lastWindowClosed() ), SLOT(quit()) ); console->resize( 600, 450 ); console->show(); return app.exec(); }
PluginKateKJSWrapper::PluginKateKJSWrapper( QObject* parent, const char* name, const QStringList& list) : Kate::Plugin ( (Kate::Application *)parent, name ) { m_views.setAutoDelete(true); m_scriptname=list[0]; m_kateAppBindings=new Kate::JS::Bindings(this); KJSEmbed::JSSecurityPolicy::setDefaultPolicy( KJSEmbed::JSSecurityPolicy::CapabilityAll ); m_part = new KJSEmbed::KJSEmbedPart(this); KJS::Interpreter *js = m_part->interpreter(); KJSEmbed::JSFactory *factory=m_part->factory(); /* factories for kate app classes */ factory->addQObjectPlugin("Kate::Application",m_kateAppBindings); factory->addQObjectPlugin("Kate::DocumentManager",m_kateAppBindings); factory->addQObjectPlugin("Kate::MainWindow",m_kateAppBindings); factory->addQObjectPlugin("Kate::PluginManager",m_kateAppBindings); factory->addQObjectPlugin("Kate::InitPluginManager",m_kateAppBindings); factory->addQObjectPlugin("Kate::ProjectManager",m_kateAppBindings); factory->addQObjectPlugin("Kate::Project",m_kateAppBindings); factory->addQObjectPlugin("Kate::ViewManager",m_kateAppBindings); factory->addQObjectPlugin("Kate::View",m_kateAppBindings); /* toplevel objects*/ KJS::Object appobj=m_part->addObject(Kate::application(),"KATE"); js->globalObject().put( js->globalExec(), "addConfigPage", KJS::Object(new Kate::JS::Management(js->globalExec(),Kate::JS::Management::AddConfigPage,this ))); js->globalObject().put( js->globalExec(), "setConfigPages", KJS::Object(new Kate::JS::Management(js->globalExec(),Kate::JS::Management::SetConfigPages,this ))); js->globalObject().put( js->globalExec(), "removeConfigPage", KJS::Object(new Kate::JS::Management(js->globalExec(),Kate::JS::Management::RemoveConfigPage,this ))); js->globalObject().put( js->globalExec(), "setWindowConfiguration", KJS::Object(new Kate::JS::Management(js->globalExec(),Kate::JS::Management::SetWindowConfiguration,this ))); js->globalObject().put( js->globalExec(), "KJSConsole", KJS::Object(new Kate::JS::Management(js->globalExec(),Kate::JS::Management::KJSConsole,this ))); /* KJSEmbed::JSConsoleWidget *w=m_part->view(); w->show(); //w->show();*/ kdDebug()<<"m_scriptname="<<m_scriptname<<endl; m_part->runFile(locate("appdata",QString("plugins/%1/%2.js").arg(m_scriptname).arg(m_scriptname))); //"/home/jowenn/development/kde/cvs/kdeaddons/kate/kjswrapper/samples/test1.js"); }
void PluginKateKJSWrapper::addView(Kate::MainWindow *win) { PluginKateKJSWrapperView * view=getViewObject(win); // this is needed to ensure correct caching the javascript object KJS::Interpreter *js = m_part->interpreter(); KJS::ExecState *exec = js->globalExec(); exec->clearException(); kdDebug()<<"****************************************************************************************"<<endl; kdDebug()<<"PluginKateKJSWrapper::addView"<<endl; kdDebug()<<"****************************************************************************************"<<endl; kdDebug()<<"checking for newWindowHandler"<<endl; if (!m_newWindowHandler.isNull()) { KJS::List param; param.append(view->winObj); KJS::Object newWinFunc=m_newWindowHandler.toObject(exec); if (exec->hadException()) { exec->clearException(); } else { if (newWinFunc.implementsCall()) { newWinFunc.call(exec,js->globalObject(),param); if (exec->hadException()) { kdDebug()<<"Error while calling newWindowHandler"<<endl; exec->clearException(); } } } } if (exec->hadException()) kdDebug()<<"void PluginKateKJSWrapper::addView(Kate::MainWindow *win): exec had an exception - 1"<<endl; kdDebug()<<"checking for toolview constructors"<<endl; if (! (m_toolViewConstructors.isNull() || (m_toolViewConstructors.type()==KJS::NullType))) { KJS::Object constrs=m_toolViewConstructors.toObject(exec); if (!exec->hadException()) { if (QString(constrs.classInfo()->className)=="Array") { kdDebug()<<"Toolview constructor array detected"<<endl; int size=constrs.get(exec,KJS::Identifier("length")).toInteger(exec); if (exec->hadException()) { exec->clearException(); kdDebug()<<"Error while retrieving array length"<<endl; } else { for (int i=0;i<size;i++) { KJS::Object constrO=constrs.get(exec,i).toObject(exec); if (exec->hadException()) { exec->clearException(); } else { KMDI::ToolViewAccessor *w=createToolView(m_part->factory(),js,win,view->winObj,constrO); if (w) { view->toolviews.append(QGuardedPtr<KMDI::ToolViewAccessor>(w)); } exec->clearException(); } } } } else { kdDebug()<<"Single toolview constructor detected"<<endl; if (!constrs.implementsConstruct()) { kdWarning()<<"wrong object type"<<endl; } else { KMDI::ToolViewAccessor *w=createToolView(m_part->factory(),js,win,view->winObj,constrs); if (w) { view->toolviews.append(QGuardedPtr<KMDI::ToolViewAccessor>(w)); } exec->clearException(); } } } } else kdDebug()<<"void PluginKateKJSWrapper::addView(Kate::MainWindow *win): no toolview constructors"<<endl; if (exec->hadException()) kdDebug()<<"void PluginKateKJSWrapper::addView(Kate::MainWindow *win): exec had an exception - 2"<<endl; view->setInstance (new KInstance("kate")); view->setXMLFile(QString("plugins/%1/%2.rc").arg(m_scriptname).arg(m_scriptname)); win->guiFactory()->addClient (view); }