summaryrefslogtreecommitdiffstats
path: root/kjsembed/jsbuiltin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kjsembed/jsbuiltin.cpp')
-rw-r--r--kjsembed/jsbuiltin.cpp189
1 files changed, 189 insertions, 0 deletions
diff --git a/kjsembed/jsbuiltin.cpp b/kjsembed/jsbuiltin.cpp
new file mode 100644
index 00000000..04680116
--- /dev/null
+++ b/kjsembed/jsbuiltin.cpp
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2001-2004, Richard J. Moore <rich@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include <global.h>
+#include <kjs/interpreter.h>
+#include <kjsembed/kjsembedpart.h>
+
+#include "builtins/stddialog_imp.h"
+#include "qtbindings/qt_imp.h"
+
+#ifndef QT_ONLY
+#include "builtins/stdaction_imp.h"
+#include "builtins/resources.h"
+#endif // QT_ONLY
+
+#include "bindings/kconfig_imp.h"
+
+#include "jsfactory_imp.h"
+#include "jsbuiltinproxy.h"
+
+#include "jsbuiltin_imp.h"
+#include "jsbuiltin.h"
+
+namespace KJSEmbed {
+
+typedef Bindings::JSBuiltInImp JSBuiltInImp;
+typedef Bindings::JSFactoryImp JSFactoryImp;
+typedef JSProxy::MethodTable MethodTable;
+typedef Bindings::Config Config;
+
+JSBuiltIn::JSBuiltIn( KJSEmbedPart *part )
+ : jspart(part)
+{
+ init( jspart->globalExec() );
+}
+
+JSBuiltIn::~JSBuiltIn()
+{
+}
+
+void JSBuiltIn::init( KJS::ExecState *exec )
+{
+ JSFactory *jsfact = jspart->factory();
+
+ //
+ // Setup the Factory object
+ //
+ factory = KJS::Object(new JSBuiltinProxy("Factory") );
+
+ MethodTable factoryMethods[] = {
+ { JSFactoryImp::MethodCreateObject, "createObject" },
+ { JSFactoryImp::MethodCreateROPart, "createROPart" },
+ { JSFactoryImp::MethodLoadUI, "loadui" },
+ { JSFactoryImp::MethodWidgets, "widgets" },
+ { JSFactoryImp::MethodConstructors, "constructors" },
+ { JSFactoryImp::MethodIsSupported, "isSupported" },
+ { JSFactoryImp::MethodTypes, "types" },
+ { JSFactoryImp::MethodListPlugins, "listBindingPlugins" },
+ { JSFactoryImp::MethodCreateRWPart, "createRWPart" },
+ { 0, 0 }
+ };
+
+ int i = 0;
+ do {
+ JSFactoryImp *obj = new JSFactoryImp( exec, jsfact,
+ factoryMethods[i].id, factoryMethods[i].name );
+ factory.put( exec , obj->name(), KJS::Object(obj), KJS::Function );
+ i++;
+ } while( factoryMethods[i].id );
+
+ //
+ // Setup the System object
+ //
+ system = KJS::Object(new JSBuiltinProxy("System") );
+ MethodTable systemMethods[] = {
+ { JSBuiltInImp::MethodOpenFile, "openFile" },
+ { JSBuiltInImp::MethodReadFile, "readFile" },
+ { JSBuiltInImp::MethodWriteFile, "writeFile" },
+ { JSBuiltInImp::MethodExit, "exit" },
+ { 0, 0 }
+ };
+
+ i = 0;
+ do {
+ JSBuiltInImp *obj = new JSBuiltInImp( this, systemMethods[i].id, systemMethods[i].name );
+ system.put( exec , obj->name(), KJS::Object(obj), KJS::Function );
+ i++;
+ } while( systemMethods[i].id );
+
+ // The stdio streams
+ system.put( exec ,"stdin", jsfact->createProxy( exec, KJSEmbed::conin() ), KJS::Function );
+ system.put( exec ,"stdout", jsfact->createProxy( exec, KJSEmbed::conout() ), KJS::Function );
+ system.put( exec ,"stderr", jsfact->createProxy( exec, KJSEmbed::conerr() ), KJS::Function );
+
+ // Qt namespace object
+ qt = KJS::Object(new JSBuiltinProxy("Qt") );
+ QtImp::addStaticBindings( exec, qt );
+ QtImp::addBindings( exec, qt );
+
+ // The global config object
+ Config *scriptCfg = new Config( jspart );
+
+ system.put( exec, "KJSConfig", jsfact->createProxy( exec, scriptCfg ) );
+
+ //
+ // Setup builtin KDE objects
+ //
+ stddialog = KJS::Object(new JSBuiltinProxy("StdDialog") );
+ BuiltIns::StdDialogImp::addBindings( exec, stddialog );
+
+#ifndef QT_ONLY
+ stdaction = KJS::Object(new JSBuiltinProxy("StdAction") );
+ BuiltIns::StdActionImp::addBindings( jsfact, exec, stdaction );
+
+ stddrs = KJS::Object(new JSBuiltinProxy("StdDirs") );
+ BuiltIns::StdDirsImp::addBindings( exec, stddrs );
+
+ stdicns = KJS::Object(new JSBuiltinProxy("StdAction") );
+ BuiltIns::StdIconsImp::addBindings( jsfact, exec, stdicns );
+#endif // QT_ONLY
+}
+
+void JSBuiltIn::add( KJS::ExecState *exec, KJS::Object &parent )
+{
+ // Add the static objects
+ parent.put( exec, "Factory", builtinFactory() );
+ parent.put( exec, "System", builtinSystem() );
+ parent.put( exec, "StdDialog", builtinStdDialog() );
+ parent.put( exec, "Qt", builtinQt() );
+#ifndef QT_ONLY
+ parent.put( exec, "StdAction", builtinStdAction() );
+ parent.put( exec, "StdDirs", builtinStdDirs() );
+ parent.put( exec, "StdIcons", builtinStdIcons() );
+#endif // QT_ONLY
+
+ // Redundant, and will break things, use dump(this) instead
+ //parent.put( exec, "Global", exec->interpreter()->globalObject() );
+
+ // Add the global functions
+ addGlobals( exec, parent );
+}
+
+void JSBuiltIn::addGlobals( KJS::ExecState *exec, KJS::Object &parent )
+{
+ MethodTable methods[] = {
+ { JSBuiltInImp::MethodLoadScript,"load" },
+ { JSBuiltInImp::MethodDumpObject,"dump" },
+ { JSBuiltInImp::MethodRunKSpy,"run_kspy" },
+ { JSBuiltInImp::MethodPrint,"print" },
+ { JSBuiltInImp::MethodPrintLn, "println" },
+ { JSBuiltInImp::MethodWarn,"warn" },
+ { JSBuiltInImp::MethodReadLine,"readLine" },
+ { JSBuiltInImp::MethodExit,"exit" },
+ { JSBuiltInImp::MethodDumpCompletion,"dumpCompletion" },
+ { JSBuiltInImp::MethodSaxLoadFile,"saxLoadFile" },
+ { JSBuiltInImp::MethodAlert,"alert" },
+ { JSBuiltInImp::MethodConfirm,"confirm" },
+ { JSBuiltInImp::MethodPrompt,"prompt" },
+ { JSBuiltInImp::MethodI18n,"i18n" },
+ { JSBuiltInImp::MethodImport,"include" },
+ { JSBuiltInImp::MethodShell, "shell" },
+ //{ JSBuiltInImp::MethodImport,"import" }, reserved keyword
+ { 0, 0 }
+ };
+ int i = 0;
+ do {
+ JSBuiltInImp *obj = new JSBuiltInImp( this, methods[i].id, methods[i].name );
+ parent.put( exec , obj->name(), KJS::Object(obj), KJS::Function );
+ i++;
+ } while( methods[i].id );
+}
+
+} // namespace KJSEmbed
+