diff options
Diffstat (limited to 'kjsembed/builtins')
-rw-r--r-- | kjsembed/builtins/Makefile.am | 18 | ||||
-rw-r--r-- | kjsembed/builtins/builtins.pro | 18 | ||||
-rw-r--r-- | kjsembed/builtins/qdir_imp.cpp | 1009 | ||||
-rw-r--r-- | kjsembed/builtins/qdir_imp.h | 172 | ||||
-rw-r--r-- | kjsembed/builtins/qfile_imp.cpp | 622 | ||||
-rw-r--r-- | kjsembed/builtins/qfile_imp.h | 148 | ||||
-rw-r--r-- | kjsembed/builtins/resources.cpp | 231 | ||||
-rw-r--r-- | kjsembed/builtins/resources.h | 99 | ||||
-rw-r--r-- | kjsembed/builtins/saxhandler.cpp | 186 | ||||
-rw-r--r-- | kjsembed/builtins/saxhandler.h | 80 | ||||
-rw-r--r-- | kjsembed/builtins/stdaction_imp.cpp | 99 | ||||
-rw-r--r-- | kjsembed/builtins/stdaction_imp.h | 68 | ||||
-rw-r--r-- | kjsembed/builtins/stddialog_imp.cpp | 147 | ||||
-rw-r--r-- | kjsembed/builtins/stddialog_imp.h | 81 | ||||
-rw-r--r-- | kjsembed/builtins/textstream_imp.cpp | 134 | ||||
-rw-r--r-- | kjsembed/builtins/textstream_imp.h | 79 |
16 files changed, 3191 insertions, 0 deletions
diff --git a/kjsembed/builtins/Makefile.am b/kjsembed/builtins/Makefile.am new file mode 100644 index 00000000..d1b1ade9 --- /dev/null +++ b/kjsembed/builtins/Makefile.am @@ -0,0 +1,18 @@ +INCLUDES= -I$(srcdir)/../.. -I.. -I$(top_srcdir)/kjsembed $(all_includes) +KDE_CXXFLAGS = -DQT_NO_ASCII_CAST -DQT_CLEAN_NAMESPACE -Wno-unused + +noinst_LTLIBRARIES = libkjsembedbuiltins.la + +libkjsembedbuiltins_la_SOURCES = stdaction_imp.cpp \ + resources.cpp \ + stddialog_imp.cpp \ + saxhandler.cpp \ + textstream_imp.cpp \ + qdir_imp.cpp \ + qfile_imp.cpp + +libkjsembedbuiltins_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) +libkjsembedbuiltins_la_LIBADD = $(LIB_QT) $(LIB_KDECORE) $(LIB_KDEUI) $(LIB_KPARTS) \ + $(LIB_KFILE) -lkjs $(LIBSOCKET) + +libkjsembedbuiltins_la_METASOURCES = AUTO diff --git a/kjsembed/builtins/builtins.pro b/kjsembed/builtins/builtins.pro new file mode 100644 index 00000000..cb408cf2 --- /dev/null +++ b/kjsembed/builtins/builtins.pro @@ -0,0 +1,18 @@ +# File generated by kdevelop's qmake manager. +# ------------------------------------------- +# Subdir relative project main directory: ./builtins +# Target is a library: +include(../qjsembed.pri) +INCLUDEPATH += .. . ../.. +CONFIG += staticlib +TEMPLATE = lib +HEADERS += textstream_imp.h \ + qdir_imp.h \ + saxhandler.h \ + stddialog_imp.h + +SOURCES += saxhandler.cpp \ + qdir_imp.cpp \ + stddialog_imp.cpp \ + textstream_imp.cpp \ + qfile_imp.cpp diff --git a/kjsembed/builtins/qdir_imp.cpp b/kjsembed/builtins/qdir_imp.cpp new file mode 100644 index 00000000..32d79d14 --- /dev/null +++ b/kjsembed/builtins/qdir_imp.cpp @@ -0,0 +1,1009 @@ + + + +#include <kjsembed/global.h> + +#include <kjs/object.h> + +#ifndef QT_ONLY +#include <klocale.h> +#include <kdebug.h> +#endif + + +#include <kjsembed/jsopaqueproxy.h> +#include <kjsembed/jsbinding.h> + +#include <qdir.h> +#include "qdir_imp.h" + +/** + * Namespace containing the KJSEmbed library. + */ +namespace KJSEmbed { +namespace Bindings { + KJS::Object QDirLoader::createBinding(KJSEmbedPart *jspart, KJS::ExecState *exec, const KJS::List &args) const + { + JSOpaqueProxy * prx; + if ( args.size() == 0 ) { + prx = new JSOpaqueProxy( new QDir( QDir::current() ), "QDir" ); + } else { + QString arg0 = ( args.size() >= 1 ) ? args[ 0 ].toString( exec ).qstring() : QString::null; + prx = new JSOpaqueProxy( new QDir( arg0 ), "QDir" ); + } + prx->setOwner( JSProxy::JavaScript ); + KJS::Object proxyObj( prx ); + addBindings( jspart, exec, proxyObj ); + return proxyObj; + } + + void QDirLoader::addBindings( KJSEmbedPart *jspart, KJS::ExecState *exec, KJS::Object &proxy ) const + { + QDirImp::addBindings( exec, proxy ); + } + +} + +QDirImp::QDirImp( KJS::ExecState *exec, int id ) + : JSProxyImp(exec), mid(id) +{ +} + +QDirImp::~QDirImp() +{ +} + +void QDirImp::addBindings( KJS::ExecState *exec, KJS::Object &object ) +{ + JSProxy::MethodTable methods[] = { + + { Method_setPath_7, "setPath" }, + + { Method_path_8, "path" }, + + { Method_absPath_9, "absPath" }, + + { Method_canonicalPath_10, "canonicalPath" }, + + { Method_dirName_11, "dirName" }, + + { Method_filePath_12, "filePath" }, + + { Method_absFilePath_13, "absFilePath" }, + + { Method_cd_14, "cd" }, + + { Method_cdUp_15, "cdUp" }, + + { Method_nameFilter_16, "nameFilter" }, + + { Method_setNameFilter_17, "setNameFilter" }, + + { Method_filter_18, "filter" }, + + { Method_setFilter_19, "setFilter" }, + + { Method_sorting_20, "sorting" }, + + { Method_setSorting_21, "setSorting" }, + + { Method_matchAllDirs_22, "matchAllDirs" }, + + { Method_setMatchAllDirs_23, "setMatchAllDirs" }, + + { Method_count_24, "count" }, + + { Method_encodedEntryList_26, "encodedEntryList" }, + + { Method_encodedEntryList_27, "encodedEntryList" }, + + { Method_entryList_28, "entryList" }, + + { Method_entryList_29, "entryList" }, + + { Method_entryInfoList_30, "entryInfoList" }, + + { Method_entryInfoList_31, "entryInfoList" }, + + { Method_mkdir_32, "mkdir" }, + + { Method_rmdir_33, "rmdir" }, + + { Method_isReadable_34, "isReadable" }, + + { Method_exists_35, "exists" }, + + { Method_isRoot_36, "isRoot" }, + + { Method_isRelative_37, "isRelative" }, + + { Method_convertToAbs_38, "convertToAbs" }, + + { Method_remove_41, "remove" }, + + { Method_rename_42, "rename" }, + + { Method_exists_43, "exists" }, + + { Method_refresh_44, "refresh" }, + + { Method_convertSeparators_45, "convertSeparators" }, + + { Method_drives_46, "drives" }, + + { Method_separator_47, "separator" }, + + { Method_setCurrent_48, "setCurrent" }, + + { Method_current_49, "current" }, + + { Method_home_50, "home" }, + + { Method_root_51, "root" }, + + { Method_currentDirPath_52, "currentDirPath" }, + + { Method_homeDirPath_53, "homeDirPath" }, + + { Method_rootDirPath_54, "rootDirPath" }, + + { Method_match_55, "match" }, + + { Method_match_56, "match" }, + + { Method_cleanDirPath_57, "cleanDirPath" }, + + { Method_isRelativePath_58, "isRelativePath" }, + + { 0, 0 } + }; + + int idx = 0; + do { + QDirImp *meth = new QDirImp( 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[] = { + + // enum FilterSpec + { "Dirs", QDir::Dirs }, + { "Files", QDir::Files }, + { "Drives", QDir::Drives }, + { "NoSymLinks", QDir::NoSymLinks }, + { "All", QDir::All }, + { "TypeMask", QDir::TypeMask }, + { "Readable", QDir::Readable }, + { "Writable", QDir::Writable }, + { "Executable", QDir::Executable }, + { "RWEMask", QDir::RWEMask }, + { "Modified", QDir::Modified }, + { "Hidden", QDir::Hidden }, + { "System", QDir::System }, + { "AccessMask", QDir::AccessMask }, + { "DefaultFilter", QDir::DefaultFilter }, + // enum SortSpec + { "Name", QDir::Name }, + { "Time", QDir::Time }, + { "Size", QDir::Size }, + { "Unsorted", QDir::Unsorted }, + { "SortByMask", QDir::SortByMask }, + { "DirsFirst", QDir::DirsFirst }, + { "Reversed", QDir::Reversed }, + { "IgnoreCase", QDir::IgnoreCase }, + { "DefaultSort", QDir::DefaultSort }, + { 0, 0 } + }; + + int enumidx = 0; + do { + object.put( exec, enums[enumidx].id, KJS::Number(enums[enumidx].val), KJS::ReadOnly ); + ++enumidx; + } while( enums[enumidx].id ); + +} + + +KJS::Value QDirImp::call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ) +{ + JSOpaqueProxy *op = JSProxy::toOpaqueProxy( self.imp() ); + if ( !op ) { + kdWarning() << "QDirImp::call() failed, not a JSOpaqueProxy" << endl; + return KJS::Value(); + } + + if ( op->typeName() != "QDir" ) { + kdWarning() << "QDirImp::call() failed, type is " << op->typeName() << endl; + return KJS::Value(); + } + + instance = op->toNative<QDir>(); + + switch( mid ) { + + case Method_setPath_7: + return setPath_7( exec, self, args ); + break; + + case Method_path_8: + return path_8( exec, self, args ); + break; + + case Method_absPath_9: + return absPath_9( exec, self, args ); + break; + + case Method_canonicalPath_10: + return canonicalPath_10( exec, self, args ); + break; + + case Method_dirName_11: + return dirName_11( exec, self, args ); + break; + + case Method_filePath_12: + return filePath_12( exec, self, args ); + break; + + case Method_absFilePath_13: + return absFilePath_13( exec, self, args ); + break; + + case Method_cd_14: + return cd_14( exec, self, args ); + break; + + case Method_cdUp_15: + return cdUp_15( exec, self, args ); + break; + + case Method_nameFilter_16: + return nameFilter_16( exec, self, args ); + break; + + case Method_setNameFilter_17: + return setNameFilter_17( exec, self, args ); + break; + + case Method_filter_18: + return filter_18( exec, self, args ); + break; + + case Method_setFilter_19: + return setFilter_19( exec, self, args ); + break; + + case Method_sorting_20: + return sorting_20( exec, self, args ); + break; + + case Method_setSorting_21: + return setSorting_21( exec, self, args ); + break; + + case Method_matchAllDirs_22: + return matchAllDirs_22( exec, self, args ); + break; + + case Method_setMatchAllDirs_23: + return setMatchAllDirs_23( exec, self, args ); + break; + + case Method_count_24: + return count_24( exec, self, args ); + break; + + case Method_encodedEntryList_26: + return encodedEntryList_26( exec, self, args ); + break; + + case Method_encodedEntryList_27: + return encodedEntryList_27( exec, self, args ); + break; + + case Method_entryList_28: + return entryList_28( exec, self, args ); + break; + + case Method_entryList_29: + return entryList_29( exec, self, args ); + break; + + case Method_entryInfoList_30: + return entryInfoList_30( exec, self, args ); + break; + + case Method_entryInfoList_31: + return entryInfoList_31( exec, self, args ); + break; + + case Method_mkdir_32: + return mkdir_32( exec, self, args ); + break; + + case Method_rmdir_33: + return rmdir_33( exec, self, args ); + break; + + case Method_isReadable_34: + return isReadable_34( exec, self, args ); + break; + + case Method_exists_35: + return exists_35( exec, self, args ); + break; + + case Method_isRoot_36: + return isRoot_36( exec, self, args ); + break; + + case Method_isRelative_37: + return isRelative_37( exec, self, args ); + break; + + case Method_convertToAbs_38: + return convertToAbs_38( exec, self, args ); + break; + + case Method_remove_41: + return remove_41( exec, self, args ); + break; + + case Method_rename_42: + return rename_42( exec, self, args ); + break; + + case Method_exists_43: + return exists_43( exec, self, args ); + break; + + case Method_refresh_44: + return refresh_44( exec, self, args ); + break; + + case Method_convertSeparators_45: + return convertSeparators_45( exec, self, args ); + break; + + case Method_drives_46: + return drives_46( exec, self, args ); + break; + + case Method_separator_47: + return separator_47( exec, self, args ); + break; + + case Method_setCurrent_48: + return setCurrent_48( exec, self, args ); + break; + + case Method_current_49: + return current_49( exec, self, args ); + break; + + case Method_home_50: + return home_50( exec, self, args ); + break; + + case Method_root_51: + return root_51( exec, self, args ); + break; + + case Method_currentDirPath_52: + return currentDirPath_52( exec, self, args ); + break; + + case Method_homeDirPath_53: + return homeDirPath_53( exec, self, args ); + break; + + case Method_rootDirPath_54: + return rootDirPath_54( exec, self, args ); + break; + + case Method_match_55: + return match_55( exec, self, args ); + break; + + case Method_match_56: + return match_56( exec, self, args ); + break; + + case Method_cleanDirPath_57: + return cleanDirPath_57( exec, self, args ); + break; + + case Method_isRelativePath_58: + return isRelativePath_58( exec, self, args ); + break; + + default: + break; + } + + QString msg = i18n( "QDirImp has no method with id '%1'." ).arg( mid ); + return throwError(exec, msg,KJS::ReferenceError); +} + + +KJS::Value QDirImp::setPath_7( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + instance->setPath( + arg0 ); + return KJS::Value(); // Returns void + +} + +KJS::Value QDirImp::path_8( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->path( ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::absPath_9( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->absPath( ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::canonicalPath_10( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->canonicalPath( ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::dirName_11( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->dirName( ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::filePath_12( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool arg1 = (args.size() >= 2) ? args[1].toBoolean(exec) : false; + + QString ret; + ret = instance->filePath( + arg0, + arg1 ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::absFilePath_13( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool arg1 = (args.size() >= 2) ? args[1].toBoolean(exec) : false; + + QString ret; + ret = instance->absFilePath( + arg0, + arg1 ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::cd_14( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool arg1 = (args.size() >= 2) ? args[1].toBoolean(exec) : false; + + bool ret; + ret = instance->cd( + arg0, + arg1 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::cdUp_15( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool ret; + ret = instance->cdUp( ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::nameFilter_16( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->nameFilter( ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::setNameFilter_17( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + instance->setNameFilter( + arg0 ); + return KJS::Value(); // Returns void + +} + +KJS::Value QDirImp::filter_18( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->filter( ); + return KJS::Value(); // Returns 'FilterSpec' + +} + +KJS::Value QDirImp::setFilter_19( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + instance->setFilter( + arg0 ); + return KJS::Value(); // Returns void + +} + +KJS::Value QDirImp::sorting_20( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->sorting( ); + return KJS::Value(); // Returns 'SortSpec' + +} + +KJS::Value QDirImp::setSorting_21( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + instance->setSorting( + arg0 ); + return KJS::Value(); // Returns void + +} + +KJS::Value QDirImp::matchAllDirs_22( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool ret; + ret = instance->matchAllDirs( ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::setMatchAllDirs_23( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool arg0 = (args.size() >= 1) ? args[0].toBoolean(exec) : false; + + instance->setMatchAllDirs( + arg0 ); + return KJS::Value(); // Returns void + +} + +KJS::Value QDirImp::count_24( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + uint ret; + ret = instance->count( ); + return KJS::Number( ret ); + +} + +KJS::Value QDirImp::encodedEntryList_26( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + int arg1 = (args.size() >= 2) ? args[1].toInteger(exec) : -1; + + instance->encodedEntryList( + arg0, + arg1 ); + return KJS::Value(); // Returns 'QStrList' + +} + +KJS::Value QDirImp::encodedEntryList_27( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + int arg1 = (args.size() >= 2) ? args[1].toInteger(exec) : -1; + + int arg2 = (args.size() >= 3) ? args[2].toInteger(exec) : -1; + + instance->encodedEntryList( + arg0, + arg1, + arg2 ); + return KJS::Value(); // Returns 'QStrList' + +} + +KJS::Value QDirImp::entryList_28( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + int arg1 = (args.size() >= 2) ? args[1].toInteger(exec) : -1; + + QStringList ret; + ret = instance->entryList( + arg0, + arg1 ); + + return convertToValue( exec, ret ); + +} + +KJS::Value QDirImp::entryList_29( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + int arg1 = (args.size() >= 2) ? args[1].toInteger(exec) : -1; + + int arg2 = (args.size() >= 3) ? args[2].toInteger(exec) : -1; + + QStringList ret; + ret = instance->entryList( + arg0, + arg1, + arg2 ); + + return convertToValue( exec, ret ); + +} + +KJS::Value QDirImp::entryInfoList_30( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + int arg1 = (args.size() >= 2) ? args[1].toInteger(exec) : -1; + + instance->entryInfoList( + arg0, + arg1 ); + return KJS::Value(); // Returns 'const QFileInfoList *' + +} + +KJS::Value QDirImp::entryInfoList_31( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + int arg1 = (args.size() >= 2) ? args[1].toInteger(exec) : -1; + + int arg2 = (args.size() >= 3) ? args[2].toInteger(exec) : -1; + + instance->entryInfoList( + arg0, + arg1, + arg2 ); + return KJS::Value(); // Returns 'const QFileInfoList *' + +} + +KJS::Value QDirImp::mkdir_32( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool arg1 = (args.size() >= 2) ? args[1].toBoolean(exec) : false; + + bool ret; + ret = instance->mkdir( + arg0, + arg1 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::rmdir_33( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool arg1 = (args.size() >= 2) ? args[1].toBoolean(exec) : false; + + bool ret; + ret = instance->rmdir( + arg0, + arg1 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::isReadable_34( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool ret; + ret = instance->isReadable( ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::exists_35( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool ret; + ret = instance->exists( ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::isRoot_36( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool ret; + ret = instance->isRoot( ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::isRelative_37( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool ret; + ret = instance->isRelative( ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::convertToAbs_38( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->convertToAbs( ); + return KJS::Value(); // Returns void + +} + +KJS::Value QDirImp::remove_41( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool arg1 = (args.size() >= 2) ? args[1].toBoolean(exec) : false; + + bool ret; + ret = instance->remove( + arg0, + arg1 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::rename_42( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + QString arg1 = (args.size() >= 2) ? args[1].toString(exec).qstring() : QString::null; + + bool arg2 = (args.size() >= 3) ? args[2].toBoolean(exec) : false; + + bool ret; + ret = instance->rename( + arg0, + arg1, + arg2 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::exists_43( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool arg1 = (args.size() >= 2) ? args[1].toBoolean(exec) : false; + + bool ret; + ret = instance->exists( + arg0, + arg1 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::refresh_44( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->refresh( ); + return KJS::Value(); // Returns void + +} + +KJS::Value QDirImp::convertSeparators_45( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + QString ret; + ret = instance->convertSeparators( + arg0 ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::drives_46( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->drives( ); + return KJS::Value(); // Returns 'const QFileInfoList *' + +} + +KJS::Value QDirImp::separator_47( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->separator( ); + return KJS::Value(); // Returns 'char' + +} + +KJS::Value QDirImp::setCurrent_48( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool ret; + ret = instance->setCurrent( + arg0 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::current_49( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->current( ); + return KJS::Value(); // Returns 'QDir' + +} + +KJS::Value QDirImp::home_50( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->home( ); + return KJS::Value(); // Returns 'QDir' + +} + +KJS::Value QDirImp::root_51( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->root( ); + return KJS::Value(); // Returns 'QDir' + +} + +KJS::Value QDirImp::currentDirPath_52( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->currentDirPath( ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::homeDirPath_53( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->homeDirPath( ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::rootDirPath_54( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->rootDirPath( ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::match_55( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QStringList arg0; + if ( args.size() >= 1 ) { + // TODO: populate the list + } + + QString arg1 = (args.size() >= 2) ? args[1].toString(exec).qstring() : QString::null; + + bool ret; + ret = instance->match( + arg0, + arg1 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::match_56( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + QString arg1 = (args.size() >= 2) ? args[1].toString(exec).qstring() : QString::null; + + bool ret; + ret = instance->match( + arg0, + arg1 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QDirImp::cleanDirPath_57( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + QString ret; + ret = instance->cleanDirPath( + arg0 ); + return KJS::String( ret ); + +} + +KJS::Value QDirImp::isRelativePath_58( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool ret; + ret = instance->isRelativePath( + arg0 ); + return KJS::Boolean( ret ); + +} + + +} // namespace KJSEmbed + +// Local Variables: +// c-basic-offset: 4 +// End: + + diff --git a/kjsembed/builtins/qdir_imp.h b/kjsembed/builtins/qdir_imp.h new file mode 100644 index 00000000..f78850e7 --- /dev/null +++ b/kjsembed/builtins/qdir_imp.h @@ -0,0 +1,172 @@ + + + +#ifndef KJSEMBED_QDir_H +#define KJSEMBED_QDir_H + +#include <kjs/interpreter.h> +#include <kjs/object.h> + +#include <kjsembed/jsobjectproxy_imp.h> +#include <kjsembed/jsbindingbase.h> + +class QDir; + +/** + * Namespace containing the KJSEmbed library. + */ +namespace KJSEmbed { +namespace Bindings { + class QDirLoader : public JSBindingBase + { + public: + KJS::Object createBinding(KJSEmbedPart *jspart, KJS::ExecState *exec, const KJS::List &args) const; + void addBindings( KJSEmbedPart *jspart, KJS::ExecState *exec, KJS::Object &proxy) const; + }; +} +/** + * Wrapper class for QDir methods. + * + * @author Richard Moore, rich@kde.org + */ +class QDirImp : public JSProxyImp +{ +public: + /** Enumerates the methods supported by this class. */ + enum Methods { + + Method_setPath_7, + Method_path_8, + Method_absPath_9, + Method_canonicalPath_10, + Method_dirName_11, + Method_filePath_12, + Method_absFilePath_13, + Method_cd_14, + Method_cdUp_15, + Method_nameFilter_16, + Method_setNameFilter_17, + Method_filter_18, + Method_setFilter_19, + Method_sorting_20, + Method_setSorting_21, + Method_matchAllDirs_22, + Method_setMatchAllDirs_23, + Method_count_24, + Method_encodedEntryList_26, + Method_encodedEntryList_27, + Method_entryList_28, + Method_entryList_29, + Method_entryInfoList_30, + Method_entryInfoList_31, + Method_mkdir_32, + Method_rmdir_33, + Method_isReadable_34, + Method_exists_35, + Method_isRoot_36, + Method_isRelative_37, + Method_convertToAbs_38, + Method_remove_41, + Method_rename_42, + Method_exists_43, + Method_refresh_44, + Method_convertSeparators_45, + Method_drives_46, + Method_separator_47, + Method_setCurrent_48, + Method_current_49, + Method_home_50, + Method_root_51, + Method_currentDirPath_52, + Method_homeDirPath_53, + Method_rootDirPath_54, + Method_match_55, + Method_match_56, + Method_cleanDirPath_57, + Method_isRelativePath_58, + Method_Last = -1 + }; + + QDirImp( KJS::ExecState *exec, int id ); + ~QDirImp(); + + static void addBindings( KJS::ExecState *exec, KJS::Object &object ); + + // + // Methods implemented by this class. + // + + KJS::Value setPath_7( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value path_8( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value absPath_9( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value canonicalPath_10( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value dirName_11( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value filePath_12( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value absFilePath_13( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value cd_14( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value cdUp_15( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value nameFilter_16( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value setNameFilter_17( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value filter_18( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value setFilter_19( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value sorting_20( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value setSorting_21( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value matchAllDirs_22( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value setMatchAllDirs_23( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value count_24( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value encodedEntryList_26( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value encodedEntryList_27( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value entryList_28( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value entryList_29( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value entryInfoList_30( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value entryInfoList_31( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value mkdir_32( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value rmdir_33( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value isReadable_34( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value exists_35( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value isRoot_36( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value isRelative_37( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value convertToAbs_38( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value remove_41( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value rename_42( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value exists_43( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value refresh_44( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value convertSeparators_45( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value drives_46( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value separator_47( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value setCurrent_48( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value current_49( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value home_50( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value root_51( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value currentDirPath_52( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value homeDirPath_53( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value rootDirPath_54( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value match_55( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value match_56( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value cleanDirPath_57( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value isRelativePath_58( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + + // + // JS binding code. + // + + /** Returns true iff this object implements the call function. */ + virtual bool implementsCall() const { return true; } + + /** Invokes the call function. */ + virtual KJS::Value call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ); + +private: + QDir *instance; // Temp + int mid; +}; + +} // namespace KJSEmbed + +#endif // KJSEMBED_QDir_H + +// Local Variables: +// c-basic-offset: 4 +// End: + + diff --git a/kjsembed/builtins/qfile_imp.cpp b/kjsembed/builtins/qfile_imp.cpp new file mode 100644 index 00000000..d404e239 --- /dev/null +++ b/kjsembed/builtins/qfile_imp.cpp @@ -0,0 +1,622 @@ + + +#include <qcstring.h> +#include <qpalette.h> +#include <qpixmap.h> +#include <qfont.h> + +#ifndef QT_ONLY +#include <klocale.h> +#include <kdebug.h> +#endif + +#include <kjs/object.h> + +#include <kjsembed/jsobjectproxy.h> +#include <kjsembed/jsopaqueproxy.h> +#include <kjsembed/jsbinding.h> +#include <kjsembed/global.h> + +#include <qfile.h> +#include "qfile_imp.h" + +/** + * Namespace containing the KJSEmbed library. + */ +namespace KJSEmbed { + +QFileImp::QFileImp( KJS::ExecState *exec, int mid, bool constructor ) + : JSProxyImp(exec), id(mid), cons(constructor) +{ +} + +QFileImp::~QFileImp() +{ +} + +void QFileImp::addBindings( KJS::ExecState *exec, KJS::Object &object ) +{ + JSProxy::MethodTable methods[] = { + + { Method_name_4, "name" }, + { Method_setName_5, "setName" }, + { Method_exists_6, "exists" }, + { Method_remove_7, "remove" }, + { Method_open_8, "open" }, + { Method_open_9, "open" }, + { Method_open_10, "open" }, + { Method_close_11, "close" }, + { Method_flush_12, "flush" }, + { Method_size_13, "size" }, + { Method_at_14, "at" }, + { Method_at_15, "at" }, + { Method_atEnd_16, "atEnd" }, + { Method_readBlock_17, "readBlock" }, + { Method_writeBlock_18, "writeBlock" }, + { Method_writeBlock_19, "writeBlock" }, + { Method_readLine_20, "readLine" }, + { Method_readLine_21, "readLine" }, + { Method_getch_22, "getch" }, + { Method_putch_23, "putch" }, + { Method_ungetch_24, "ungetch" }, + { Method_handle_25, "handle" }, + { Method_errorString_26, "errorString" }, + { Method_encodeName_27, "encodeName" }, + { Method_decodeName_28, "decodeName" }, + { Method_setEncodingFunction_29, "setEncodingFunction" }, + { Method_setDecodingFunction_30, "setDecodingFunction" }, + { Method_exists_31, "exists" }, + { Method_remove_32, "remove" }, + { 0, 0 } + }; + + int idx = 0; + QCString lastName; + + do { + if ( lastName != methods[idx].name ) { + QFileImp *meth = new QFileImp( exec, methods[idx].id ); + object.put( exec , methods[idx].name, KJS::Object(meth) ); + lastName = methods[idx].name; + } + ++idx; + } while( methods[idx].id ); + + +} + +QFile *QFileImp::toQFile( KJS::Object &self ) +{ + JSObjectProxy *ob = JSProxy::toObjectProxy( self.imp() ); + if ( ob ) { + QObject *obj = ob->object(); + if ( obj ) + return dynamic_cast<QFile *>( obj ); + } + + JSOpaqueProxy *op = JSProxy::toOpaqueProxy( self.imp() ); + if ( !op ) + return 0; + + if ( op->typeName() != "QFile" ) + return 0; + + return op->toNative<QFile>(); +} + + +KJS::Object QFileImp::construct( KJS::ExecState *exec, const KJS::List &args ) +{ + switch( id ) { + + case Constructor_QFile_1: + return QFile_1( exec, args ); + break; + + case Constructor_QFile_2: + return QFile_2( exec, args ); + break; + + default: + break; + } + + QString msg = i18n("QFileCons has no constructor with id '%1'.").arg(id); + return throwError(exec, msg,KJS::ReferenceError); +} + + +KJS::Object QFileImp::QFile_1( KJS::ExecState *exec, const KJS::List &args ) +{ + return KJS::Object(); +} + +KJS::Object QFileImp::QFile_2( KJS::ExecState *exec, const KJS::List &args ) +{ + + // TODO + QWidget *arg0 = 0L; + return KJS::Object(); + +} + +KJS::Value QFileImp::call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ) +{ + instance = QFileImp::toQFile( self ); + + switch( id ) { + + case Method_name_4: + return name_4( exec, self, args ); + break; + + case Method_setName_5: + return setName_5( exec, self, args ); + break; + + case Method_exists_6: + return exists_6( exec, self, args ); + break; + + case Method_remove_7: + return remove_7( exec, self, args ); + break; + + case Method_open_8: + return open_8( exec, self, args ); + break; + + case Method_open_9: + return open_9( exec, self, args ); + break; + + case Method_open_10: + return open_10( exec, self, args ); + break; + + case Method_close_11: + return close_11( exec, self, args ); + break; + + case Method_flush_12: + return flush_12( exec, self, args ); + break; + + case Method_size_13: + return size_13( exec, self, args ); + break; + + case Method_at_14: + return at_14( exec, self, args ); + break; + + case Method_at_15: + return at_15( exec, self, args ); + break; + + case Method_atEnd_16: + return atEnd_16( exec, self, args ); + break; + + case Method_readBlock_17: + return readBlock_17( exec, self, args ); + break; + + case Method_writeBlock_18: + return writeBlock_18( exec, self, args ); + break; + + case Method_writeBlock_19: + return writeBlock_19( exec, self, args ); + break; + + case Method_readLine_20: + return readLine_20( exec, self, args ); + break; + + case Method_readLine_21: + return readLine_21( exec, self, args ); + break; + + case Method_getch_22: + return getch_22( exec, self, args ); + break; + + case Method_putch_23: + return putch_23( exec, self, args ); + break; + + case Method_ungetch_24: + return ungetch_24( exec, self, args ); + break; + + case Method_handle_25: + return handle_25( exec, self, args ); + break; + + case Method_errorString_26: + return errorString_26( exec, self, args ); + break; + + case Method_encodeName_27: + return encodeName_27( exec, self, args ); + break; + + case Method_decodeName_28: + return decodeName_28( exec, self, args ); + break; + + case Method_setEncodingFunction_29: + return setEncodingFunction_29( exec, self, args ); + break; + + case Method_setDecodingFunction_30: + return setDecodingFunction_30( exec, self, args ); + break; + + case Method_exists_31: + return exists_31( exec, self, args ); + break; + + case Method_remove_32: + return remove_32( exec, self, args ); + break; + + default: + break; + } + + QString msg = i18n( "QFileImp has no method with id '%1'." ).arg( id ); + return throwError(exec, msg, KJS::ReferenceError ); +} + + +KJS::Value QFileImp::name_4( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->name( ); + return KJS::String( ret ); + +} + +KJS::Value QFileImp::setName_5( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + instance->setName( + arg0 ); + return KJS::Value(); // Returns void + +} + +KJS::Value QFileImp::exists_6( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool ret; + ret = instance->exists( ); + return KJS::Boolean( ret ); + +} + +KJS::Value QFileImp::remove_7( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool ret; + ret = instance->remove( ); + return KJS::Boolean( ret ); + +} + +KJS::Value QFileImp::open_8( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + bool ret; + ret = instance->open( + arg0 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QFileImp::open_9( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + // Unsupported parameter FILE * + return KJS::Value(); + + FILE * arg1; // Dummy + + bool ret; + ret = instance->open( + arg0, + arg1 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QFileImp::open_10( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + int arg1 = (args.size() >= 2) ? args[1].toInteger(exec) : -1; + + bool ret; + ret = instance->open( + arg0, + arg1 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QFileImp::close_11( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->close( ); + return KJS::Value(); // Returns void + +} + +KJS::Value QFileImp::flush_12( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->flush( ); + return KJS::Value(); // Returns void + +} + +KJS::Value QFileImp::size_13( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->size( ); + return KJS::Value(); // Returns 'Offset' + +} + +KJS::Value QFileImp::at_14( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + instance->at( ); + return KJS::Value(); // Returns 'Offset' + +} + +KJS::Value QFileImp::at_15( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QFile::Offset arg0 = 0; // TODO (hack for qfile) + + bool ret; + ret = instance->at( + arg0 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QFileImp::atEnd_16( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + bool ret; + ret = instance->atEnd( ); + return KJS::Boolean( ret ); + +} + +KJS::Value QFileImp::readBlock_17( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + // Unsupported parameter char * + return KJS::Value(); + + char * arg0; // Dummy + + // Unsupported parameter Q_ULONG + return KJS::Value(); + + Q_ULONG arg1; // Dummy + + instance->readBlock( + arg0, + arg1 ); + return KJS::Value(); // Returns 'Q_LONG' + +} + +KJS::Value QFileImp::writeBlock_18( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + const char *arg0 = (args.size() >= 1) ? args[0].toString(exec).ascii() : 0; + + // Unsupported parameter Q_ULONG + return KJS::Value(); + + Q_ULONG arg1; // Dummy + + instance->writeBlock( + arg0, + arg1 ); + return KJS::Value(); // Returns 'Q_LONG' + +} + +KJS::Value QFileImp::writeBlock_19( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QByteArray arg0; // TODO (hack for qfile) + + instance->writeBlock( + arg0 ); + return KJS::Value(); // Returns 'Q_LONG' + +} + +KJS::Value QFileImp::readLine_20( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + // Unsupported parameter char * + return KJS::Value(); + + char * arg0; // Dummy + + // Unsupported parameter Q_ULONG + return KJS::Value(); + + Q_ULONG arg1; // Dummy + + instance->readLine( + arg0, + arg1 ); + return KJS::Value(); // Returns 'Q_LONG' + +} + +KJS::Value QFileImp::readLine_21( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + // Unsupported parameter Q_ULONG + return KJS::Value(); + + Q_ULONG arg1; // Dummy + + instance->readLine( + arg0, + arg1 ); + return KJS::Value(); // Returns 'Q_LONG' + +} + +KJS::Value QFileImp::getch_22( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int ret; + ret = instance->getch( ); + return KJS::Number( ret ); + +} + +KJS::Value QFileImp::putch_23( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + int ret; + ret = instance->putch( + arg0 ); + return KJS::Number( ret ); + +} + +KJS::Value QFileImp::ungetch_24( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int arg0 = (args.size() >= 1) ? args[0].toInteger(exec) : -1; + + int ret; + ret = instance->ungetch( + arg0 ); + return KJS::Number( ret ); + +} + +KJS::Value QFileImp::handle_25( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + int ret; + ret = instance->handle( ); + return KJS::Number( ret ); + +} + +KJS::Value QFileImp::errorString_26( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString ret; + ret = instance->errorString( ); + return KJS::String( ret ); + +} + +KJS::Value QFileImp::encodeName_27( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + instance->encodeName( + arg0 ); + return KJS::Value(); // Returns 'QCString' + +} + +KJS::Value QFileImp::decodeName_28( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + const QCString arg0 = (args.size() >= 1) ? args[0].toString(exec).ascii() : 0; + + QString ret; + ret = instance->decodeName( + arg0 ); + return KJS::String( ret ); + +} + +KJS::Value QFileImp::setEncodingFunction_29( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QFile::EncoderFn arg0 = 0; // TODO (hack for qfile) + + instance->setEncodingFunction( + arg0 ); + return KJS::Value(); // Returns void + +} + +KJS::Value QFileImp::setDecodingFunction_30( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QFile::DecoderFn arg0 = 0; // TODO (hack for qfile) + + instance->setDecodingFunction( + arg0 ); + return KJS::Value(); // Returns void + +} + +KJS::Value QFileImp::exists_31( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool ret; + ret = instance->exists( + arg0 ); + return KJS::Boolean( ret ); + +} + +KJS::Value QFileImp::remove_32( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ) +{ + + QString arg0 = (args.size() >= 1) ? args[0].toString(exec).qstring() : QString::null; + + bool ret; + ret = instance->remove( + arg0 ); + return KJS::Boolean( ret ); + +} + + +} // namespace KJSEmbed + +// Local Variables: +// c-basic-offset: 4 +// End: + + diff --git a/kjsembed/builtins/qfile_imp.h b/kjsembed/builtins/qfile_imp.h new file mode 100644 index 00000000..ae88dd52 --- /dev/null +++ b/kjsembed/builtins/qfile_imp.h @@ -0,0 +1,148 @@ + + + +#ifndef KJSEMBED_QFile_H +#define KJSEMBED_QFile_H + +#include <kjs/interpreter.h> +#include <kjs/object.h> + +#include <kjsembed/jsobjectproxy_imp.h> + +class QFile; + +/** + * Namespace containing the KJSEmbed library. + */ +namespace KJSEmbed { + +/** + * Wrapper class for QFile methods. + * + * @author Richard Moore, rich@kde.org + */ +class QFileImp : public JSProxyImp +{ +public: + /** Enumerates the constructors supported by this class. */ + enum Constructors { + Constructor_QFile_1, + Constructor_QFile_2, + + LastConstuctor = -1 + }; + + /** Enumerates the methods supported by this class. */ + enum Methods { + + Method_name_4, + Method_setName_5, + Method_exists_6, + Method_remove_7, + Method_open_8, + Method_open_9, + Method_open_10, + Method_close_11, + Method_flush_12, + Method_size_13, + Method_at_14, + Method_at_15, + Method_atEnd_16, + Method_readBlock_17, + Method_writeBlock_18, + Method_writeBlock_19, + Method_readLine_20, + Method_readLine_21, + Method_getch_22, + Method_putch_23, + Method_ungetch_24, + Method_handle_25, + Method_errorString_26, + Method_encodeName_27, + Method_decodeName_28, + Method_setEncodingFunction_29, + Method_setDecodingFunction_30, + Method_exists_31, + Method_remove_32, + Method_Last = -1 + }; + + QFileImp( KJS::ExecState *exec, int id, bool constructor=false ); + ~QFileImp(); + + static void addBindings( KJS::ExecState *exec, KJS::Object &object ); + + static QFile *toQFile( KJS::Object &object ); + + // + // Constructors implemented by this class. + // + + KJS::Object QFile_1( KJS::ExecState *exec, const KJS::List &args ); + KJS::Object QFile_2( KJS::ExecState *exec, const KJS::List &args ); + + // + // Methods implemented by this class. + // + + KJS::Value name_4( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value setName_5( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value exists_6( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value remove_7( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value open_8( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value open_9( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value open_10( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value close_11( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value flush_12( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value size_13( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value at_14( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value at_15( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value atEnd_16( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value readBlock_17( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value writeBlock_18( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value writeBlock_19( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value readLine_20( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value readLine_21( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value getch_22( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value putch_23( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value ungetch_24( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value handle_25( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value errorString_26( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value encodeName_27( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value decodeName_28( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value setEncodingFunction_29( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value setDecodingFunction_30( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value exists_31( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + KJS::Value remove_32( KJS::ExecState *exec, KJS::Object &obj, const KJS::List &args ); + + // + // JS binding code. + // + + /** Returns true iff this object implements the construct function. */ + virtual bool implementsConstruct() const { return cons; } + + /** Invokes the construct function. */ + virtual KJS::Object construct( KJS::ExecState *exec, const KJS::List &args ); + + /** Returns true iff this object implements the call function. */ + virtual bool implementsCall() const { return !cons; } + + /** Invokes the call function. */ + virtual KJS::Value call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ); + +private: + QFile *instance; // Temp + int id; + bool cons; +}; + +} // namespace KJSEmbed + +#endif // KJSEMBED_QFile_H + +// Local Variables: +// c-basic-offset: 4 +// End: + + diff --git a/kjsembed/builtins/resources.cpp b/kjsembed/builtins/resources.cpp new file mode 100644 index 00000000..14912303 --- /dev/null +++ b/kjsembed/builtins/resources.cpp @@ -0,0 +1,231 @@ +/* + * Copyright (C) 2003, 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 <kstandarddirs.h> +#include <kiconloader.h> +#include <kglobal.h> +#include <kdebug.h> +#include <jsproxy.h> +#include <jsbinding.h> +#include <jsfactory.h> +#include <qdir.h> +#include <qapplication.h> +#include "resources.h" + +namespace KJSEmbed { +namespace BuiltIns { + + +StdDirsImp::StdDirsImp( KJS::ExecState *exec, uint mid ) + : JSProxyImp(exec), id(mid) +{ + +} + +StdDirsImp::~StdDirsImp() {} + +void StdDirsImp::addBindings( KJS::ExecState *exec, KJS::Object &parent ) +{ + + JSProxy::MethodTable methods[] = { + { StdDirsImp::findResource, "findResource" }, + { StdDirsImp::addResourceType, "addResourceType" }, + { StdDirsImp::kde_default, "kde_default" }, + { StdDirsImp::addResourceDir, "addResourceDir" }, + { StdDirsImp::findResourceDir, "findResourceDir" }, + { StdDirsImp::saveLocation, "saveLocation" }, + { StdDirsImp::makeDir, "makeDir" }, + { StdDirsImp::exists, "exists" }, + { StdDirsImp::realPath, "realPath" }, + { StdDirsImp::currentDirPath, "currentDirPath" }, + { StdDirsImp::homeDirPath, "homeDirPath" }, + { StdDirsImp::applicationDirPath, "applicationDirPath" }, + { 0, 0 } + }; + + int idx = 0; + do { + StdDirsImp *sdi = new StdDirsImp( exec, idx ); + parent.put( exec , methods[idx].name, KJS::Object(sdi) ); + ++idx; + } while( methods[idx].id ); + +} + +KJS::Value StdDirsImp::call( KJS::ExecState *exec, KJS::Object &/*self*/, const KJS::List &args ) +{ +// QString arg0 = extractQString(exec, args, 0); +// QString arg1 = extractQString(exec, args, 1); + + switch( id ) { + case StdDirsImp::findResource: + { + QString arg0 = extractQString(exec, args, 0); + QString arg1 = extractQString(exec, args, 1); + QString path = KGlobal::dirs ()->findResource(arg0.latin1(), arg1); + return KJS::String( path ); + } + case StdDirsImp::addResourceType: + { + QString arg0 = extractQString(exec, args, 0); + QString arg1 = extractQString(exec, args, 1); + bool isOk = KGlobal::dirs ()->addResourceType(arg0.latin1(), arg1); + return KJS::Boolean( isOk ); + } + case StdDirsImp::kde_default: + { + QString arg0 = extractQString(exec, args, 0); + QString path = KGlobal::dirs ()->kde_default(arg0.latin1()); + return KJS::String( path ); + } + case StdDirsImp::addResourceDir: + { + QString arg0 = extractQString(exec, args, 0); + QString arg1 = extractQString(exec, args, 1); + bool isOk = KGlobal::dirs ()->addResourceDir(arg0.latin1(), arg1); + return KJS::Boolean( isOk ); + } + case StdDirsImp::findResourceDir: + { + QString arg0 = extractQString(exec, args, 0); + QString arg1 = extractQString(exec, args, 1); + QString path = KGlobal::dirs ()->findResourceDir(arg0.latin1(), arg1); + return KJS::String( path ); + } + case StdDirsImp::saveLocation: + { + QString arg0 = extractQString(exec, args, 0); + QString arg1 = extractQString(exec, args, 1); + bool arg2 = (args.size() > 2) ? args[2].toBoolean(exec) : true; + QString path = KGlobal::dirs ()->saveLocation(arg0.latin1(), arg1, arg2); + return KJS::String( path ); + } + case StdDirsImp::makeDir: + { + QString arg0 = extractQString(exec, args, 0); + int arg1 = (args.size() > 1) ? args[1].toInteger(exec) : 0755; + bool isOk = KStandardDirs::makeDir(arg0, arg1); + return KJS::Boolean( isOk ); + } + case StdDirsImp::exists: + { + QString arg0 = extractQString(exec, args, 0); + bool isOk = KStandardDirs::exists(arg0); + return KJS::Boolean( isOk ); + } + case StdDirsImp::realPath: + { + QString arg0 = extractQString(exec, args, 0); + QString path = KStandardDirs::realPath(arg0); + return KJS::String( path ); + } + case StdDirsImp::currentDirPath: + return KJS::String(QDir::currentDirPath()); + case StdDirsImp::homeDirPath: + return KJS::String(QDir::homeDirPath()); + case StdDirsImp::applicationDirPath: + return KJS::String(qApp->applicationDirPath()); + default: + kdWarning() << "StdDirsImp has no method " << id << endl; + } + + kdWarning() << "StdDirsImp returning null" << endl; + + return KJS::Null(); +} + +StdIconsImp::StdIconsImp( JSFactory *fact, KJS::ExecState *exec, uint mid ) + : JSProxyImp(exec), id(mid), jsfact(fact) +{ +} + +StdIconsImp::~StdIconsImp() {} + +void StdIconsImp::addBindings( JSFactory *fact, KJS::ExecState *exec, KJS::Object &parent ) +{ + JSProxy::MethodTable methods[] = { + { StdIconsImp::BarIcon, "BarIcon" }, + { StdIconsImp::DesktopIcon, "DesktopIcon" }, + { StdIconsImp::SmallIcon, "SmallIcon" }, + { StdIconsImp::MainBarIcon, "MainBarIcon" }, + { StdIconsImp::UserIcon, "UserIcon" }, + { StdIconsImp::MimeSourceIcon, "MimeSourceIcon" }, + { 0, 0 } + }; + + int idx = 0; + do { + StdIconsImp *sdi = new StdIconsImp( fact, exec, idx ); + parent.put( exec , methods[idx].name, KJS::Object(sdi) ); + ++idx; + } while( methods[idx].id ); + +} + +KJS::Value StdIconsImp::wrapPixmap(KJS::ExecState *exec, const QPixmap &icon) +{ + return convertToValue(exec, icon); +} + +KJS::Value StdIconsImp::call( KJS::ExecState *exec, KJS::Object &/*obj*/, const KJS::List &args ) +{ + QString arg0 = extractQString(exec, args, 0); // Name + int arg1 = extractInt(exec, args, 1); // Size 0, 16, 24, 32, 48, 64, 128 + int arg2 = extractInt(exec, args, 2); + // State 0 DefaultState, 1 ActiveState, 2 DisabledState, 3 LastState + switch( id ) { + case StdIconsImp::BarIcon: + { + return wrapPixmap(exec, ::BarIcon(arg0, arg1, arg2)); + } + case StdIconsImp::DesktopIcon: + { + return wrapPixmap(exec, ::DesktopIcon(arg0, arg1, arg2)); + } + case StdIconsImp::SmallIcon: + { + return wrapPixmap(exec, ::SmallIcon(arg0, arg1, arg2)); + } + case StdIconsImp::MainBarIcon: + { + return wrapPixmap(exec, ::MainBarIcon(arg0, arg1, arg2)); + } + case StdIconsImp::UserIcon: + { + return wrapPixmap(exec, ::UserIcon(arg0, arg2)); + } + case StdIconsImp::MimeSourceIcon: + { + return wrapPixmap( exec, QPixmap::fromMimeSource(arg0)); + } + default: + kdWarning() << "StdDirsImp has no method " << id << endl; + } + + kdWarning() << "StdDirsImp returning null" << endl; + + return KJS::Null(); +} + +} // namespace KJSEmbed::BuiltIns +} // namespace KJSEmbed + +// Local Variables: +// c-basic-offset: 4 +// End: diff --git a/kjsembed/builtins/resources.h b/kjsembed/builtins/resources.h new file mode 100644 index 00000000..d83cd0b3 --- /dev/null +++ b/kjsembed/builtins/resources.h @@ -0,0 +1,99 @@ +// -*- c++ -*- + +/* + * Copyright (C) 2003, Ian Reinhart Geiser <geiseri@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. + */ + +#ifndef KJSEMBED_RESOURCES_H +#define KJSEMBED_RESOURCES_H + +#include <qpixmap.h> + +#include <kjs/interpreter.h> +#include <kjs/object.h> + +#include <kjsembed/jsobjectproxy_imp.h> + +namespace KJSEmbed { +namespace BuiltIns { + +/** + * KJS binding for KStandardDirs. + * + * @author Ian Reinhart Geiser geiseri@kde.org + */ +class StdDirsImp : public JSProxyImp +{ + +public: + /** Identifiers for the various methods. */ + enum DirMethods { + findResource, addResourceType, kde_default, + addResourceDir, findResourceDir, saveLocation, + makeDir, exists, realPath, currentDirPath, + homeDirPath, applicationDirPath }; + StdDirsImp( KJS::ExecState *exec, uint id ); + virtual ~StdDirsImp(); + + /** Adds the StdActions object to the specified parent. */ + static void addBindings( KJS::ExecState *exec, KJS::Object &parent ); + + /** Returns true iff this object implements the call function. */ + virtual bool implementsCall() const { return true; } + + /** Invokes the call function. */ + virtual KJS::Value call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ); + +private: + uint id; + JSFactory *jsfact; +}; + + +/** + * KJS binding for KIconLoader. + * + * @author Ian Reinhart Geiser geiseri@kde.org + */ +class StdIconsImp : public JSProxyImp +{ +public: + enum IconMethods { BarIcon, DesktopIcon, SmallIcon, MainBarIcon, UserIcon, MimeSourceIcon }; + StdIconsImp(JSFactory *fac, KJS::ExecState *exec, uint id ); + virtual ~StdIconsImp(); + + /** Adds the StdActions object to the specified parent. */ + static void addBindings( JSFactory *fac, KJS::ExecState *exec, KJS::Object &parent ); + + /** Returns true iff this object implements the call function. */ + virtual bool implementsCall() const { return true; } + + /** Invokes the call function. */ + virtual KJS::Value call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ); + +private: + /** wrap a QPixmap **/ + KJS::Value wrapPixmap(KJS::ExecState *exec,const QPixmap &icon); + uint id; + JSFactory *jsfact; +}; + +} // namespace BuiltIns +} // namespace KJSEmbed + +#endif // KJSEMBED_RESOURCES_H diff --git a/kjsembed/builtins/saxhandler.cpp b/kjsembed/builtins/saxhandler.cpp new file mode 100644 index 00000000..d4a6f5f3 --- /dev/null +++ b/kjsembed/builtins/saxhandler.cpp @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2003, 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 "kjsembed/jsbinding.h" +#include "saxhandler.h" + +namespace KJSEmbed { +namespace BuiltIns { + +SaxHandler::SaxHandler( KJS::ExecState *execstate ) + : QXmlDefaultHandler(), exec(execstate), error( ErrorNone ) +{ +} + +SaxHandler::~SaxHandler() +{ +} + +void SaxHandler::setHandler( const KJS::Object &handler ) +{ + jshandler = handler; +} + +bool SaxHandler::startDocument() +{ + if ( !jshandler.isValid() ) { + error = ErrorNoHandler; + return false; + } + + KJS::Identifier funName("startDocument"); + if ( !jshandler.hasProperty(exec, funName) ) + return QXmlDefaultHandler::startDocument(); + + 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 ); +} + +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 ); +} + +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 SaxHandler::endElement( const QString &ns, const QString &ln, const QString &qn ) +{ + if ( !jshandler.isValid() ) { + error = ErrorNoHandler; + return false; + } + + KJS::Identifier funName("endElement"); + if ( !jshandler.hasProperty(exec, funName) ) + return QXmlDefaultHandler::endElement( ns, ln, qn ); + + 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) ); + + KJS::Value ret = fun.call( exec, jshandler, args ); + return ret.toBoolean( exec ); +} + +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 ); +} + +QString SaxHandler::errorString() +{ + switch( error ) { + + case ErrorNoHandler: + return QString("No handler specified"); + break; + case ErrorNotCallable: + return QString("One of the callbacks of the handler is not callable"); + break; + case ErrorNone: + // This only means that no error occured in the JS dispatch, there + // could still have been an error from the parser so we fall + // though to call the baseclass. + break; + default: + break; + } + + return QXmlDefaultHandler::errorString(); +} + +} // namespace KJSEmbed::BuiltIns +} // namespace KJSEmbed + +// Local Variables: +// c-basic-offset: 4 +// End: diff --git a/kjsembed/builtins/saxhandler.h b/kjsembed/builtins/saxhandler.h new file mode 100644 index 00000000..f396dbfe --- /dev/null +++ b/kjsembed/builtins/saxhandler.h @@ -0,0 +1,80 @@ +// -*- c++ -*- + +/* + * Copyright (C) 2003, 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. + */ + +#ifndef KJSEMBED_SAXHANDLER_H +#define KJSEMBED_SAXHANDLER_H + +#include <qxml.h> +#include <kjs/object.h> + +namespace KJSEmbed { +namespace BuiltIns { + +/** + * SAX handler that calls JS methods according to the SAX API. + * + * @author Richard Moore, rich@kde.org + */ +class SaxHandler : public QXmlDefaultHandler +{ +public: + /** Defines the errors that are specific to the KJS SAX support. */ + enum SaxHandlerError { + ErrorNone, + ErrorNoHandler, + ErrorNotCallable + }; + + /** Creates a SaxHandler. */ + SaxHandler( KJS::ExecState *exec ); + /** Cleans up. */ + virtual ~SaxHandler(); + + /** + * Sets the handler object that defines the callbacks to be invoked + * according to the SAX api. + */ + void setHandler( const KJS::Object &handler ); + + virtual bool startDocument(); + virtual bool endDocument(); + + virtual bool startElement( const QString &ns, const QString &ln, const QString &qn, + const QXmlAttributes &attrs ); + virtual bool endElement( const QString &ns, const QString &ln, const QString &qn ); + virtual bool characters( const QString &chars ); + + virtual QString errorString(); + +private: + KJS::ExecState *exec; + KJS::Object jshandler; + int error; + + class SaxHandlerPrivate *d; +}; + +} // namespace KJSEmbed::BuiltIns +} // namespace KJSEmbed + +#endif // KJSEMBED_SAXHANDLER_H + + diff --git a/kjsembed/builtins/stdaction_imp.cpp b/kjsembed/builtins/stdaction_imp.cpp new file mode 100644 index 00000000..1361acf8 --- /dev/null +++ b/kjsembed/builtins/stdaction_imp.cpp @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2003, 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 <kaction.h> +#include <kdebug.h> +#include <kstdaction.h> + +#include <jsfactory.h> +#include <jsobjectproxy.h> + +#include "stdaction_imp.h" + +namespace KJSEmbed { +namespace BuiltIns { + +StdActionImp::StdActionImp( KJS::ExecState *exec, JSFactory *fact, uint actid ) + : JSProxyImp(exec), id(actid), jsfact( fact ) +{ +} + +StdActionImp::~StdActionImp() +{ +} + +static uint KSTDACTION_START = KStdAction::New; +static uint KSTDACTION_END = KStdAction::ConfigureNotifications+1; + +const char *factoryMethodNames[] = { + "START_MARKER", + "fileNew", "open", "openRecent", "save", "saveAs", "revert", "close", + "print", "printPreview", "mail", "quit", + "undo", "redo", "cut", "copy", "paste", "selectAll", "deselect", "find", "findNext", "findPrev", + "replace", + "actualSize", "fitToPage", "fitToWidth", "fitToHeight", "zoomIn", "zoomOut", + "zoom", "redisplay", + "up", "back", "forward", "home", "prior", "next", "goGoto", "gotoPage", "gotoLine", + "firstPage", "lastPage", + "addBookmark", "editBookmarks", + "spelling", + "showMenubar", "showToolbar", "showStatusbar", "saveOptions", "keyBindings", + "preferences", "configureToolbars", + "help", "helpContents", "whatsThis", "reportBug", "aboutApp", "aboutKDE", + "tipofDay", + "configureNotifications", + "END_MARKER" +}; + +void StdActionImp::addBindings( JSFactory *fact, KJS::ExecState *exec, KJS::Object &parent ) +{ + for ( uint i = KSTDACTION_START; i < KSTDACTION_END; i++ ) { + StdActionImp *sai = new StdActionImp( exec, fact, i ); + parent.put( exec, factoryMethodNames[i], KJS::Object( sai ) ); + } +} + +KJS::Value StdActionImp::call( KJS::ExecState *exec, KJS::Object &/*self*/, const KJS::List &args ) +{ + if ( ( args.size() < 3 ) || ( args.size() > 4 ) ) + return KJS::Null(); + + // recv, slot, parent, name? + QObject *recv = extractQObject( exec, args, 0); + + QString sl = extractQString( exec, args, 1 ); + const char *slc = sl.isNull() ? "" : sl.ascii(); + + QObject *parentobj = extractQObject( exec, args, 2 ); + KActionCollection *parent = parentobj ? dynamic_cast<KActionCollection *>( parentobj ) : 0; + + KStdAction::StdAction actid = static_cast<KStdAction::StdAction>(id); + const char *arg3 = (args.size() == 4) ? args[3].toString(exec).ascii() : KStdAction::name( actid ); + + // Create the object + KAction *act = KStdAction::create( actid, arg3, recv, slc, parent ); + return jsfact->createProxy( exec, act ); +} + +} // namespace KJSEmbed::BuiltIns +} // namespace KJSEmbed + +// Local Variables: +// c-basic-offset: 4 +// End: diff --git a/kjsembed/builtins/stdaction_imp.h b/kjsembed/builtins/stdaction_imp.h new file mode 100644 index 00000000..9a64174b --- /dev/null +++ b/kjsembed/builtins/stdaction_imp.h @@ -0,0 +1,68 @@ +// -*- c++ -*- + +/* + * Copyright (C) 2003, 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. + */ + +#ifndef KJSEMBED_STDACTION_IMP_H +#define KJSEMBED_STDACTION_IMP_H + +#include <kjs/interpreter.h> +#include <kjs/object.h> + +#include <kjsembed/jsobjectproxy_imp.h> + +/** + * Namespace containing the KJSEmbed library. + */ +namespace KJSEmbed { +namespace BuiltIns { + +/** + * KJS bindings to KStdAction. + * + * @author Richard Moore, rich@kde.org + */ +class StdActionImp : public JSProxyImp +{ +public: + StdActionImp( KJS::ExecState *exec, JSFactory *fact, uint id ); + virtual ~StdActionImp(); + + /** Adds the StdActions object to the specified parent. */ + static void addBindings( JSFactory *fact, KJS::ExecState *exec, KJS::Object &parent ); + + /** Returns true iff this object implements the call function. */ + virtual bool implementsCall() const { return true; } + + /** Invokes the call function. */ + virtual KJS::Value call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ); + +private: + uint id; + JSFactory *jsfact; +}; + +} // namespace KJSEmbed::BuiltIns +} // namespace KJSEmbed + +#endif // KJSEMBED_STDACTION_IMP_H + +// Local Variables: +// c-basic-offset: 4 +// End: diff --git a/kjsembed/builtins/stddialog_imp.cpp b/kjsembed/builtins/stddialog_imp.cpp new file mode 100644 index 00000000..1b45c5e0 --- /dev/null +++ b/kjsembed/builtins/stddialog_imp.cpp @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2003, 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. + */ + +#ifndef QT_ONLY + +#include <kcolordialog.h> +#include <kfiledialog.h> +#include <kpropertiesdialog.h> + +#else + +#include <qfiledialog.h> +#define KFileDialog QFileDialog + +#endif // QT_ONLY + +#include <kjsembed/jsbinding.h> +#include <kjsembed/global.h> + +#include "stddialog_imp.h" + +namespace KJSEmbed { +namespace BuiltIns { + +StdDialogImp::StdDialogImp( KJS::ExecState *exec, int mid ) + : JSProxyImp(exec), id(mid) +{ +} + +StdDialogImp::~StdDialogImp() {} + +void StdDialogImp::addBindings( KJS::ExecState *exec, KJS::Object &parent ) +{ + StdDialogImp *sdi; + + sdi = new StdDialogImp( exec, StdDialogImp::MethodGetOpenFileName ); + parent.put( exec, "getOpenFileName", KJS::Object( sdi ) ); + sdi = new StdDialogImp( exec, StdDialogImp::MethodGetSaveFileName ); + parent.put( exec, "getSaveFileName", KJS::Object( sdi ) ); + + sdi = new StdDialogImp( exec, StdDialogImp::MethodGetOpenURL ); + parent.put( exec, "getOpenURL", KJS::Object( sdi ) ); + sdi = new StdDialogImp( exec, StdDialogImp::MethodGetSaveURL ); + parent.put( exec, "getSaveURL", KJS::Object( sdi ) ); + + sdi = new StdDialogImp( exec, StdDialogImp::MethodGetExistingDirectory ); + parent.put( exec, "getExistingDirectory", KJS::Object( sdi ) ); + sdi = new StdDialogImp( exec, StdDialogImp::MethodGetExistingURL ); + parent.put( exec, "getExistingURL", KJS::Object( sdi ) ); + + sdi = new StdDialogImp( exec, StdDialogImp::MethodGetImageOpenURL ); + parent.put( exec, "getImageOpenURL", KJS::Object( sdi ) ); + + sdi = new StdDialogImp( exec, StdDialogImp::MethodGetColor ); + parent.put( exec, "getColor", KJS::Object( sdi ) ); + + sdi = new StdDialogImp( exec, StdDialogImp::MethodShowProperties ); + parent.put( exec, "showProperties", KJS::Object( sdi ) ); +} + +KJS::Value StdDialogImp::call( KJS::ExecState *exec, KJS::Object &/*self*/, const KJS::List &args ) +{ + QString arg0 = (args.size() > 0) ? args[0].toString(exec).qstring() : QString::null; + QString arg1 = (args.size() > 1) ? args[1].toString(exec).qstring() : QString::null; + + switch( id ) { + case MethodGetOpenFileName: + { + QString s = KFileDialog::getOpenFileName( arg0, arg1 ); + return KJS::String( s ); + } + case MethodGetSaveFileName: + { + QString s = KFileDialog::getSaveFileName( arg0, arg1 ); + return KJS::String( s ); + } + case MethodGetExistingDirectory: + { + QString s = KFileDialog::getExistingDirectory( arg0 ); + return KJS::String( s ); + } +#ifndef QT_ONLY + case MethodGetColor: + { + QColor col; + int res = KColorDialog::getColor( col ); + if ( res == QDialog::Accepted ) + return convertToValue( exec, QVariant(col) ); + } + case MethodGetOpenURL: + { + KURL u = KFileDialog::getOpenURL( arg0, arg1 ); + return KJS::String( u.url() ); + } + case MethodGetSaveURL: + { + KURL u = KFileDialog::getSaveURL( arg0, arg1 ); + return KJS::String( u.url() ); + } + case MethodGetExistingURL: + { + KURL u = KFileDialog::getExistingURL( arg0 ); + return KJS::String( u.url() ); + } + case MethodGetImageOpenURL: + { + KURL u = KFileDialog::getImageOpenURL( arg0 ); + return KJS::String( u.url() ); + } + case MethodShowProperties: + { + // The default args mean this dialog auto-shows + /*KPropertiesDialog *dlg =*/ new KPropertiesDialog( KURL(arg0) ); + return KJS::Null(); + } +#endif // QT_ONLY + default: + kdWarning() << "StdDialogImp has no method " << id << endl; + } + + kdWarning() << "StdDialogImp returning null" << endl; + + return KJS::Null(); +} + +} // namespace KJSEmbed::BuiltIns +} // namespace KJSEmbed + +// Local Variables: +// c-basic-offset: 4 +// End: diff --git a/kjsembed/builtins/stddialog_imp.h b/kjsembed/builtins/stddialog_imp.h new file mode 100644 index 00000000..ea70db73 --- /dev/null +++ b/kjsembed/builtins/stddialog_imp.h @@ -0,0 +1,81 @@ +// -*- c++ -*- + +/* + * Copyright (C) 2003, 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. + */ + +#ifndef KJSEMBED_STDDIALOG_IMP_H +#define KJSEMBED_STDDIALOG_IMP_H + +#include <kjs/interpreter.h> +#include <kjs/object.h> + +#include <kjsembed/jsobjectproxy_imp.h> + +/** + * Namespace containing the KJSEmbed library. + */ +namespace KJSEmbed { +namespace BuiltIns { + +/** + * KJS bindings to the standard KDE dialogs. + * + * @author Richard Moore, rich@kde.org + */ +class StdDialogImp : public JSProxyImp +{ +public: + /** Identifiers for the various methods. */ + enum MethodId { + // KFileDialog + MethodGetOpenFileName, MethodGetSaveFileName, + MethodGetOpenURL, MethodGetSaveURL, + MethodGetExistingDirectory, MethodGetExistingURL, + MethodGetImageOpenURL, + + // KColorDialog + MethodGetColor, + // KPropertiesDialog + MethodShowProperties + }; + + StdDialogImp( KJS::ExecState *exec, int id ); + ~StdDialogImp(); + + /** Adds the StdDialogs object to the specified parent. */ + static void addBindings( KJS::ExecState *exec, KJS::Object &parent ); + + /** Returns true iff this object implements the call function. */ + virtual bool implementsCall() const { return true; } + + /** Invokes the call function. */ + virtual KJS::Value call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ); + +private: + uint id; +}; + +} // namespace KJSEmbed::BuiltIns +} // namespace KJSEmbed + +#endif // KJSEMBED_STDDIALOG_IMP_H + +// Local Variables: +// c-basic-offset: 4 +// End: diff --git a/kjsembed/builtins/textstream_imp.cpp b/kjsembed/builtins/textstream_imp.cpp new file mode 100644 index 00000000..6be24dd9 --- /dev/null +++ b/kjsembed/builtins/textstream_imp.cpp @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2003, 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 <qtextstream.h> +#include <qiodevice.h> + +#include <kjsembed/global.h> +#include <kjsembed/jsbinding.h> +#include "jsopaqueproxy.h" +#include "textstream_imp.h" + +namespace KJSEmbed { +namespace BuiltIns { + +TextStreamImp::TextStreamImp( KJS::ExecState *exec, int mid, QTextStream *textstream ) + : JSProxyImp(exec), id(mid), ts(textstream) +{ +} + +TextStreamImp::~TextStreamImp() +{ +} + +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 TextStreamImp::call( KJS::ExecState *exec, KJS::Object &/*self*/, const KJS::List &args ) +{ + QString not_readable = i18n( "Attempt to read from a write-only text stream." ); + QString not_writable = i18n( "Attempt to write to a read-only text stream." ); + + QString arg0 = extractQString(exec, args, 0); + + QIODevice *dev = ts->device(); + KJS::Object err; + + switch ( id ) { + case MethodIsReadable: + return KJS::Boolean( dev->isReadable() ); + break; + case MethodIsWritable: + return KJS::Boolean( dev->isWritable() ); + break; + case MethodPrint: + if ( !dev->isWritable() ) { + return throwError(exec, not_writable.utf8()); + } + (*ts) << arg0; + break; + case MethodPrintLn: + if ( !dev->isWritable() ) { + return throwError(exec, not_writable.utf8()); + } + (*ts) << arg0 << endl; + break; + case MethodReadLine: + if ( dev->isReadable() ) { + QString line = ts->readLine(); + if ( line.isNull() ) + return KJS::Null(); + else + return KJS::String( line ); + } + else { + return throwError(exec, not_readable.utf8()); + } + break; + case MethodFlush: + if ( !dev->isWritable() ) { + return throwError(exec, not_writable.utf8()); + } + (*ts) << flush; + break; + default: + kdWarning() << "TextStreamImp has no method " << id << endl; + break; + } + + return KJS::Value(); +} + +} // namespace KJSEmbed::BuiltIns +} // namespace KJSEmbed + +// Local Variables: +// c-basic-offset: 4 +// End: diff --git a/kjsembed/builtins/textstream_imp.h b/kjsembed/builtins/textstream_imp.h new file mode 100644 index 00000000..ca46fc37 --- /dev/null +++ b/kjsembed/builtins/textstream_imp.h @@ -0,0 +1,79 @@ +// -*- c++ -*- + +/* + * Copyright (C) 2003, 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. + */ + +#ifndef KJSEMBEDTEXTSTREAMIMP_H +#define KJSEMBEDTEXTSTREAMIMP_H + +#include <kjs/object.h> +#include <kjsembed/jsbinding.h> + +#include <kjsembed/jsobjectproxy_imp.h> + +class QTextStream; + +namespace KJSEmbed { +namespace BuiltIns { + +/** + * Implements the JS methods of text stream object bindings. + * + * @author Richard Moore, rich@kde.org + * @version $Id$ + */ +class TextStreamImp : public JSProxyImp +{ +public: + /** Identifiers for the methods provided by this class. */ + enum MethodId { + MethodIsReadable, + MethodIsWritable, + MethodPrint, + MethodPrintLn, + MethodReadLine, + MethodFlush + }; + + TextStreamImp( KJS::ExecState *exec, int id, QTextStream *ts ); + ~TextStreamImp(); + + static void addBindings( KJS::ExecState *exec, KJS::Object &object ); + + /** Returns true iff this object implements the call function. */ + virtual bool implementsCall() const { return true; } + + /** Invokes the call function. */ + virtual KJS::Value call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ); + +private: + int id; + QTextStream *ts; + + class TextStreamImpPrivate *d; +}; + +} // namespace KJSEmbed::BuiltIns +} // namespace KJSEmbed + +#endif // KJSEMBEDTEXTSTREAMIMP_H + +// Local Variables: +// c-basic-offset: 4 +// End: |