summaryrefslogtreecommitdiffstats
path: root/kjsembed/bindwizard
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit90825e2392b2d70e43c7a25b8a3752299a933894 (patch)
treee33aa27f02b74604afbfd0ea4f1cfca8833d882a /kjsembed/bindwizard
downloadtdebindings-90825e2392b2d70e43c7a25b8a3752299a933894.tar.gz
tdebindings-90825e2392b2d70e43c7a25b8a3752299a933894.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebindings@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kjsembed/bindwizard')
-rw-r--r--kjsembed/bindwizard/Doxyfile.in824
-rwxr-xr-xkjsembed/bindwizard/binding_wizard.js244
-rw-r--r--kjsembed/bindwizard/binding_wizard.ui490
-rw-r--r--kjsembed/bindwizard/doxygen2imp_cpp.xsl560
-rw-r--r--kjsembed/bindwizard/doxygen2imp_h.xsl128
-rw-r--r--kjsembed/bindwizard/index_classes.xsl11
6 files changed, 2257 insertions, 0 deletions
diff --git a/kjsembed/bindwizard/Doxyfile.in b/kjsembed/bindwizard/Doxyfile.in
new file mode 100644
index 00000000..291c78cd
--- /dev/null
+++ b/kjsembed/bindwizard/Doxyfile.in
@@ -0,0 +1,824 @@
+# Doxyfile 1.2.9.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = __PLUGIN_NAME__
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
+# German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish,
+# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+
+OUTPUT_LANGUAGE = English
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these class will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = YES
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = NO
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH =
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a class diagram (in Html and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off.
+
+CLASS_DIAGRAMS = YES
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower case letters. If set to YES upper case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are adviced to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consist of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT =
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = __HEADER_DIR__
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+FILE_PATTERNS = *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = doxygen_fakes.h
+#EXCLUDE = customobject_imp.h jsfactory_imp.h jsproxy_imp.h \
+# kjsembedpart_imp.h jsbuiltin_imp.h \
+# jsobjectproxy_imp.h jsvalueproxy_imp.h \
+# doxygen_fakes.h
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS = *.moc.*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse.
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX = KJSEmbed
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = NO
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = .
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the Html help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript and frames is required (for instance Netscape 4.0+
+# or Internet explorer 4.0+).
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT =
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT =
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT =
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION =
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_XML = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED = Q_PROPERTY()=
+
+# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermedate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
+# The CGI_NAME tag should be the name of the CGI script that
+# starts the search engine (doxysearch) with the correct parameters.
+# A script with this name will be generated by doxygen.
+
+CGI_NAME =
+
+# The CGI_URL tag should be the absolute URL to the directory where the
+# cgi binaries are located. See the documentation of your http daemon for
+# details.
+
+CGI_URL =
+
+# The DOC_URL tag should be the absolute URL to the directory where the
+# documentation is located. If left blank the absolute path to the
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL =
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the
+# documentation is located. If left blank the directory on the local machine
+# will be used.
+
+DOC_ABSPATH =
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
+# is installed.
+
+BIN_ABSPATH =
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to
+# documentation generated for other projects. This allows doxysearch to search
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS =
diff --git a/kjsembed/bindwizard/binding_wizard.js b/kjsembed/bindwizard/binding_wizard.js
new file mode 100755
index 00000000..7fb35679
--- /dev/null
+++ b/kjsembed/bindwizard/binding_wizard.js
@@ -0,0 +1,244 @@
+#!/usr/bin/env kjscmd
+
+//
+// Script for automatically generating bindings to C++ classes.
+//
+
+plugin_name = '';
+header_dir = '';
+output_dir = '';
+
+wiz = Factory.loadui( 'binding_wizard.ui' );
+
+classview = wiz.child('classes');
+classes = new Array();
+page = 0;
+output = new Array();
+
+imp = new BindingWizard();
+
+function BindingWizard()
+{
+ //
+ // Update the GUI view from the classview list.
+ //
+ this.update_classes = function() {
+ classview.clear();
+ for ( var i=0 ; i < classes.length ; i++ ) {
+ classview.insertItem( 'Yes', classes[i] );
+ }
+ }
+
+ //
+ // Selects all the classes.
+ //
+ this.select_all = function() {
+ classview.selectAll( true );
+ }
+
+ //
+ // Populate list views
+ //
+ this.choose_classes = function( view, name ) {
+
+ sax = new Object();
+ sax.chars = '';
+
+ sax.endElement = function( namespace, localname, qualifiedname ) {
+ if ( localname == 'class' ) {
+ classes[ classes.length ] = this.chars;
+ }
+ this.chars = '';
+ return true;
+ }
+
+ sax.characters = function( chars ) {
+ this.chars = chars;
+ return true;
+ }
+
+ try {
+ saxLoadFile( sax, name );
+ }
+ catch( theErr )
+ {
+ println(theErr);
+ }
+ }
+
+ //
+ // Creates the binding for the named class.
+ //
+ this.bind_class = function( clazz ) {
+
+ var out = "<b>Binding Class '" + clazz + "'...</b><pre>\n";
+
+ var outfile = output_dir + '/' + clazz.toLowerCase() + '_imp.h';
+ var cmd = 'xsltproc -o ' + outfile + ' doxygen2imp_h.xsl xml/class' + clazz + '.xml';
+
+ out += cmd + '\n';
+ out += shell( cmd );
+ output[ output.length ] = outfile;
+
+ outfile = output_dir + '/' + clazz.toLowerCase() + '_imp.cpp';
+ var cmd2 = 'xsltproc -o ' + outfile + ' doxygen2imp_cpp.xsl xml/class' + clazz + '.xml';
+
+ out += cmd2 + '\n';
+ out += shell( cmd2 );
+
+ out += '</pre>';
+
+ return out;
+ }
+
+ this.create_makefile = function() {
+
+ var sources = output.join(' ');
+ sources = sources.replace( /\w*\//g, '' );
+
+ var make = System.readFile( 'plugin_Makefile.in' );
+ make = make.replace( /__PLUGIN_NAME__/g, plugin_name );
+ make = make.replace( /__PLUGIN_NAME_LC__/g, plugin_name.toLowerCase() );
+ make = make.replace( /__PLUGIN_SOURCES__/g, sources );
+
+ System.writeFile( output_dir + '/' + 'Makefile.am', make );
+ }
+
+ //
+ // Called when the wizard has all the information it needs. This method
+ // binds the classes the user specified.
+ //
+ this.invoke = function() {
+
+ wiz.child('next').enabled = false;
+ wiz.child('output').clear();
+
+ for ( var i=0 ; i < classes.length ; i++ ) {
+ wiz.child('output').append( this.bind_class( classes[i] ) );
+ }
+
+ wiz.child('next').enabled = true;
+ }
+
+ this.browse_input = function() {
+ res = StdDialog.getExistingDirectory( '.' );
+ wiz.child('header_dir').text = res;
+ }
+
+ this.browse_output = function() {
+ res = StdDialog.getExistingDirectory( '.' );
+ wiz.child('output_dir').text = res;
+ }
+
+ //
+ // Lists the classes available for binding. In future, this will let you
+ // control which classes are processed.
+ //
+ this.list_classes = function() {
+
+ wiz.child('next').enabled = false;
+
+ // Create class index
+ var clazz = shell( 'xsltproc index_classes.xsl xml/index.xml' );
+ System.writeFile( 'classes.xml', clazz );
+
+ // Offer class selection
+ var classview = wiz.child('classes');
+ classview.selectionMode = 2 // Extended mode;
+ classview.resizeMode = 2;
+
+ this.choose_classes( classview, 'classes.xml' );
+ this.update_classes();
+
+ wiz.connect( wiz.child('select_all'), 'clicked()', this, 'select_all' );
+ wiz.child('next').enabled = true;
+ }
+
+ //
+ // Create the doxygen config
+ //
+ this.analyse = function() {
+
+ wiz.child('next').enabled = false;
+
+ led = wiz.child('analyse_led');
+ led.color = 'orange';
+
+ plugin_name = wiz.child('plugin_name').text;
+ header_dir = wiz.child('header_dir').text;
+ output_dir = wiz.child('output_dir').text;
+
+ // Create Doxygen config
+ var doxy = System.readFile( 'Doxyfile.in' );
+
+ doxy = doxy.replace( /__PLUGIN_NAME__/, plugin_name );
+ doxy = doxy.replace( /__HEADER_DIR__/, header_dir );
+
+ System.writeFile( 'Doxyfile', doxy );
+
+ // Run doxygen
+ shell( 'doxygen' );
+
+ wiz.child('analyse_led').color = 'green';
+ wiz.child('analyse_status').text = 'Done';
+
+ wiz.child('next').enabled = true;
+ }
+
+ this.view_results = function() {
+
+ this.create_makefile();
+
+ var lv = wiz.child('bindings');
+
+ for ( var i=0 ; i < output.length ; i++ ) {
+ lv.insertItem( output[i] );
+ }
+
+ wiz.child('finish').enabled = true;
+ }
+
+ //
+ // Called to setup the display of the next page.
+ //
+ this.do_next = function() {
+
+ try {
+ page++;
+
+ if ( page == 1 ) {
+ this.analyse();
+ }
+ else if ( page == 2 ) {
+ this.list_classes();
+ }
+ else if ( page == 3 ) {
+ this.invoke();
+ }
+ else if ( page == 4 ) {
+ this.view_results();
+ }
+ }
+ catch(err) {
+ warn( 'Error: ' + err );
+ }
+ }
+
+ this.do_back = function() {
+
+ page--;
+
+ }
+
+ wiz.connect( wiz.child('next'), 'clicked()', this, 'do_next' );
+ wiz.connect( wiz.child('back'), 'clicked()', this, 'do_back' );
+
+ //
+ // Connnect the first page
+ //
+ wiz.connect( wiz.child('browse_header'), 'clicked()', this, 'browse_input' );
+ wiz.connect( wiz.child('browse_output' ), 'clicked()', this, 'browse_output' );
+}
+
+wiz.show();
+application.exec();
diff --git a/kjsembed/bindwizard/binding_wizard.ui b/kjsembed/bindwizard/binding_wizard.ui
new file mode 100644
index 00000000..f6697bd3
--- /dev/null
+++ b/kjsembed/bindwizard/binding_wizard.ui
@@ -0,0 +1,490 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>binding_wizard</class>
+<widget class="QWizard">
+ <property name="name">
+ <cstring>binding_wizard</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>802</width>
+ <height>564</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="caption">
+ <string>KJSEmbed Binding Wizard</string>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WizardPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Specify Target Information</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Please specify a name for your binding plugin, and the directory the header
+files of the C++ classes you want to make available to Javascript are located.</string>
+ </property>
+ </widget>
+ <spacer row="1" column="1">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="5" column="1">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>50</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Header files:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Plugin name:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Output directory:</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="2" column="2">
+ <property name="name">
+ <cstring>browse_header</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="4" column="2">
+ <property name="name">
+ <cstring>browse_output</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>header_dir</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>input</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>plugin_name</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>output_dir</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>output</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WizardPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Analysing Classes</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer row="0" column="0">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>191</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer4_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>191</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>spacer4_4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>191</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>analysing_label</cstring>
+ </property>
+ <property name="text">
+ <string>Analysing the classes available for binding...</string>
+ </property>
+ </widget>
+ <spacer row="0" column="1">
+ <property name="name">
+ <cstring>spacer4_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>191</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLed">
+ <property name="name">
+ <cstring>analyse_led</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>analyse_status</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>Box</enum>
+ </property>
+ <property name="text">
+ <string>Working</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignLeft</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WizardPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Select Classes</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Select the classes that are to be made available to scripts.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="2" column="1">
+ <property name="name">
+ <cstring>select_all</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Select &amp;All</string>
+ </property>
+ </widget>
+ <widget class="KListView" row="1" column="0" rowspan="1" colspan="2">
+ <column>
+ <property name="text">
+ <string>Scriptable</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Class Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>classes</cstring>
+ </property>
+ <property name="resizeMode">
+ <enum>LastColumn</enum>
+ </property>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>430</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WizardPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Generate Bindings</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTextEdit" row="0" column="0">
+ <property name="name">
+ <cstring>output</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <family>Courier New</family>
+ <pointsize>8</pointsize>
+ </font>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="undoRedoEnabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WizardPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Results</string>
+ </attribute>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>10</y>
+ <width>312</width>
+ <height>19</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>The following binding files have been created:</string>
+ </property>
+ </widget>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>File Name</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>bindings</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>40</y>
+ <width>700</width>
+ <height>430</height>
+ </rect>
+ </property>
+ <property name="resizeMode">
+ <enum>LastColumn</enum>
+ </property>
+ </widget>
+ </widget>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kled.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klistview.h</includehint>
+ <includehint>klistview.h</includehint>
+</includehints>
+</UI>
diff --git a/kjsembed/bindwizard/doxygen2imp_cpp.xsl b/kjsembed/bindwizard/doxygen2imp_cpp.xsl
new file mode 100644
index 00000000..c65b5650
--- /dev/null
+++ b/kjsembed/bindwizard/doxygen2imp_cpp.xsl
@@ -0,0 +1,560 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text" />
+
+<xsl:template match="/doxygen/compounddef">
+
+<!-- Find the name of the class -->
+<xsl:variable name="clazz" select="compoundname" />
+
+<!-- Find the constructors and methods -->
+<xsl:variable name="consmeth" select="sectiondef/memberdef[@kind='function' and @prot='public']" />
+
+<!-- Find the enums -->
+<xsl:variable name="enums" select="sectiondef/memberdef[@kind='enum' and @prot='public']" />
+
+#include &lt;qcstring.h>
+#include &lt;qimage.h>
+#include &lt;qpainter.h>
+#include &lt;qpalette.h>
+#include &lt;qpixmap.h>
+#include &lt;qfont.h>
+
+#include &lt;kjs/object.h>
+
+#include &lt;kjsembed/global.h>
+#include &lt;kjsembed/jsobjectproxy.h>
+#include &lt;kjsembed/jsopaqueproxy.h>
+#include &lt;kjsembed/jsbinding.h>
+
+#include &lt;<xsl:value-of select="includes" />>
+#include "<xsl:value-of select="translate($clazz,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>_imp.h"
+
+/**
+ * Namespace containing the KJSEmbed library.
+ */
+namespace KJSEmbed {
+
+<xsl:value-of select="$clazz" />Imp::<xsl:value-of select="$clazz" />Imp( KJS::ExecState *exec, int mid, bool constructor )
+ : JSProxyImp(exec), id(mid), cons(constructor)
+{
+}
+
+<xsl:value-of select="$clazz" />Imp::~<xsl:value-of select="$clazz" />Imp()
+{
+}
+
+/**
+ * Adds bindings for static methods and enum constants to the specified Object.
+ */
+void <xsl:value-of select="$clazz" />Imp::addStaticBindings( KJS::ExecState *exec, KJS::Object &amp;object )
+{
+ JSProxy::MethodTable methods[] = {
+<xsl:for-each select="consmeth">
+ <xsl:variable name="method_name"><xsl:value-of select="name" />_<xsl:value-of select="position()" /></xsl:variable>
+ <xsl:variable name="method_id">Method_<xsl:value-of select="$method_name" /></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="@static = 'yes'">
+ { <xsl:value-of select="$method_id" />, "<xsl:value-of select="name" />" },</xsl:when></xsl:choose>
+</xsl:for-each>
+ { 0, 0 }
+ };
+
+ int idx = 0;
+ QCString lastName;
+
+ while( methods[idx].name ) {
+ if ( lastName != methods[idx].name ) {
+ <xsl:value-of select="$clazz" />Imp *meth = new <xsl:value-of select="$clazz" />Imp( exec, methods[idx].id );
+ object.put( exec , methods[idx].name, KJS::Object(meth) );
+ lastName = methods[idx].name;
+ }
+ ++idx;
+ }
+
+<xsl:if test="count($enums) != 0">
+ //
+ // Define the enum constants
+ //
+ struct EnumValue {
+ const char *id;
+ int val;
+ };
+
+ EnumValue enums[] = {
+<xsl:for-each select="$enums">
+ // enum <xsl:value-of select="./name" />
+ <xsl:for-each select="./enumvalue">
+ { "<xsl:value-of select="./name" />", <xsl:value-of select="$clazz" />::<xsl:value-of select="./name" /> },</xsl:for-each>
+</xsl:for-each>
+ { 0, 0 }
+ };
+
+ int enumidx = 0;
+ while( enums[enumidx].id ) {
+ object.put( exec, enums[enumidx].id, KJS::Number(enums[enumidx].val), KJS::ReadOnly );
+ ++enumidx;
+ }
+</xsl:if>
+}
+
+/**
+ * Adds bindings for instance methods to the specified Object.
+ */
+void <xsl:value-of select="$clazz" />Imp::addBindings( KJS::ExecState *exec, KJS::Object &amp;object )
+{
+ JSProxy::MethodTable methods[] = {
+<xsl:for-each select="$consmeth">
+ <xsl:variable name="method_name"><xsl:value-of select="name" />_<xsl:value-of select="position()" /></xsl:variable>
+ <xsl:variable name="method_id">Method_<xsl:value-of select="$method_name" /></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="not( @static = 'yes'
+ or starts-with( name, 'operator' )
+ or starts-with( name, '~' )
+ or starts-with( name, $clazz ))">
+ { <xsl:value-of select="$method_id" />, "<xsl:value-of select="name" />" },</xsl:when></xsl:choose>
+</xsl:for-each>
+ { 0, 0 }
+ };
+
+ int idx = 0;
+ QCString lastName;
+
+ while( methods[idx].name ) {
+ if ( lastName != methods[idx].name ) {
+ <xsl:value-of select="$clazz" />Imp *meth = new <xsl:value-of select="$clazz" />Imp( exec, methods[idx].id );
+ object.put( exec , methods[idx].name, KJS::Object(meth) );
+ lastName = methods[idx].name;
+ }
+ ++idx;
+ }
+}
+
+/**
+ * Extract a <xsl:value-of select="$clazz" /> pointer from an Object.
+ */
+<xsl:value-of select="$clazz" /> *<xsl:value-of select="$clazz" />Imp::to<xsl:value-of select="$clazz" />( KJS::Object &amp;self )
+{
+ JSObjectProxy *ob = JSProxy::toObjectProxy( self.imp() );
+ if ( ob ) {
+ QObject *obj = ob->object();
+ if ( obj )
+ return dynamic_cast&lt;<xsl:value-of select="$clazz" /> *>( obj );
+ }
+
+ JSOpaqueProxy *op = JSProxy::toOpaqueProxy( self.imp() );
+ if ( !op )
+ return 0;
+
+ if ( op->typeName() != "<xsl:value-of select="$clazz" />" )
+ return 0;
+
+ return (<xsl:value-of select="$clazz" /> *)( op->toVoidStar() );
+}
+
+/**
+ * Select and invoke the correct constructor.
+ */
+KJS::Object <xsl:value-of select="$clazz" />Imp::construct( KJS::ExecState *exec, const KJS::List &amp;args )
+{
+ switch( id ) {
+<xsl:for-each select="$consmeth">
+ <xsl:choose>
+ <xsl:when test="name = $clazz">
+ <xsl:variable name="cons_name"><xsl:value-of select="name" />_<xsl:value-of select="position()" /></xsl:variable>
+ <xsl:variable name="cons_id">Constructor_<xsl:value-of select="$cons_name" /></xsl:variable>
+ case <xsl:value-of select="$cons_id" />:
+ return <xsl:value-of select="$cons_name" />( exec, args );
+ break;
+ </xsl:when>
+ </xsl:choose>
+</xsl:for-each>
+ default:
+ break;
+ }
+
+ QString msg = i18n("<xsl:value-of select="$clazz" />Cons has no constructor with id '%1'").arg(id);
+ KJS::Object err = KJS::Error::create( exec, KJS::ReferenceError, msg.utf8() );
+ exec->setException( err );
+ return err;
+}
+
+<!-- Implementations of the constructors. -->
+<xsl:for-each select="$consmeth">
+ <xsl:choose>
+ <xsl:when test="(name = $clazz)">
+ <xsl:variable name="cons_name"><xsl:value-of select="name" />_<xsl:value-of select="position()" /></xsl:variable>
+ <xsl:variable name="cons_id">Constructor_<xsl:value-of select="$cons_name" /></xsl:variable>
+KJS::Object <xsl:value-of select="$clazz" />Imp::<xsl:value-of select="$cons_name" />( KJS::ExecState *exec, const KJS::List &amp;args )
+{
+ <xsl:if test="($clazz = 'QCanvasItem') or ($clazz = 'QCanvasPolygonalItem')">
+#if 0 // This constructor has been disabled by the XSL template
+ </xsl:if>
+
+ <xsl:for-each select="param/type">
+
+ <xsl:variable name="idx" select="position()-1" />
+
+ <xsl:choose>
+ <xsl:when test=". = 'QString'">
+ QString arg<xsl:value-of select="$idx" /> = extractQString(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QString &amp;'">
+ QString arg<xsl:value-of select="$idx" /> = extractQString(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'QString &amp;'">
+ QString arg<xsl:value-of select="$idx" /> = extractQString(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QCString &amp;'">
+ const QCString arg<xsl:value-of select="$idx" /> = (args.size() >= <xsl:value-of select="position()" />) ? args[<xsl:value-of select="$idx" />].toString(exec).ascii() : 0;
+ </xsl:when>
+ <xsl:when test=". = 'const char *'">
+ const char *arg<xsl:value-of select="$idx" /> = (args.size() >= <xsl:value-of select="position()" />) ? args[<xsl:value-of select="$idx" />].toString(exec).ascii() : 0;
+ </xsl:when>
+ <xsl:when test=". = 'int'">
+ int arg<xsl:value-of select="$idx" /> = extractInt(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'uint'">
+ uint arg<xsl:value-of select="$idx" /> = extractUInt(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'double'">
+ double arg<xsl:value-of select="$idx" /> = extractDouble(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'bool'">
+ bool arg<xsl:value-of select="$idx" /> = extractBool(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QFont &amp;'">
+ QFont arg<xsl:value-of select="$idx" /> = extractQFont(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QPalette &amp;'">
+ QPalette arg<xsl:value-of select="$idx" /> = extractQPalette(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QStringList &amp;'">
+ QStringList arg<xsl:value-of select="$idx" /> = extractQStringList(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QStrList &amp;'">
+ QStrList arg<xsl:value-of select="$idx" /> = extractQStrList(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QPoint &amp;'">
+ QPoint arg<xsl:value-of select="$idx" /> = extractQPoint(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QRect &amp;'">
+ QRect arg<xsl:value-of select="$idx" /> = extractQRect(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QSize &amp;'">
+ QSize arg<xsl:value-of select="$idx" /> = extractQSize(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QPixmap &amp;'">
+ QPixmap arg<xsl:value-of select="$idx" /> = extractQPixmap(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QImage &amp;'">
+ QImage arg<xsl:value-of select="$idx" /> = extractQImage(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QColor &amp;'">
+ QColor arg<xsl:value-of select="$idx" /> = extractQColor(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QDate &amp;'">
+ QDate arg<xsl:value-of select="$idx" /> = extractQDate(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QTime &amp;'">
+ QTime arg<xsl:value-of select="$idx" /> = extractQTime(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QDateTime &amp;'">
+ QDateTime arg<xsl:value-of select="$idx" /> = extractQDateTime(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+
+ <xsl:when test=". = 'WFlags'">
+ Qt::WFlags arg<xsl:value-of select="$idx" />; // TODO (hack for QCanvasView)
+ </xsl:when>
+
+ <xsl:otherwise>
+ // Unsupported parameter <xsl:value-of select="." />
+ return KJS::Object();
+
+ <xsl:value-of select="." /> arg<xsl:value-of select="$idx" />; // Dummy
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+
+ // We should now create an instance of the <xsl:value-of select="$clazz" /> object
+
+ <xsl:value-of select="$clazz" /> *ret = new <xsl:value-of select="$clazz" />(
+ <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if>
+ </xsl:for-each> );
+
+ <xsl:if test="($clazz = 'QCanvasItem') or ($clazz = 'QCanvasPolygonalItem')">
+#endif // This constructor has been disabled by the XSL template
+ </xsl:if>
+}
+ </xsl:when>
+ </xsl:choose>
+</xsl:for-each>
+
+<!-- Select and invoke the correct method. -->
+KJS::Value <xsl:value-of select="$clazz" />Imp::call( KJS::ExecState *exec, KJS::Object &amp;self, const KJS::List &amp;args )
+{
+ instance = <xsl:value-of select="$clazz" />Imp::to<xsl:value-of select="$clazz" />( self );
+
+ switch( id ) {
+<xsl:for-each select="$consmeth">
+ <xsl:variable name="method_name"><xsl:value-of select="name" />_<xsl:value-of select="position()" /></xsl:variable>
+ <xsl:variable name="method_id">Method_<xsl:value-of select="$method_name" /></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="not(starts-with( name, 'operator' ) or starts-with( name, '~' ) or starts-with( name, $clazz ))">
+ case <xsl:value-of select="$method_id" />:
+ return <xsl:value-of select="$method_name" />( exec, self, args );
+ break;
+ </xsl:when>
+ </xsl:choose>
+</xsl:for-each>
+ default:
+ break;
+ }
+
+ QString msg = i18n( "<xsl:value-of select="$clazz" />Imp has no method with id '%1'" ).arg( id );
+ KJS::Object err = KJS::Error::create( exec, KJS::ReferenceError, msg.utf8() );
+ exec->setException( err );
+ return err;
+}
+
+<!-- Create the implementation for each method. -->
+<xsl:for-each select="$consmeth">
+<xsl:variable name="method">
+<xsl:value-of select="$clazz" />Imp::<xsl:value-of select="name" />_<xsl:value-of select="position()" />
+</xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="(name != $clazz) and not(starts-with(name, 'operator') or starts-with(name, '~'))">
+<!-- Binding defined for a specific method. -->
+KJS::Value <xsl:value-of select="$method" />( KJS::ExecState *exec, KJS::Object &amp;obj, const KJS::List &amp;args )
+{
+ <xsl:for-each select="param/type">
+
+ <xsl:variable name="idx" select="position()-1" />
+
+ <xsl:choose>
+ <xsl:when test=". = 'QString'">
+ QString arg<xsl:value-of select="$idx" /> = extractQString(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QString &amp;'">
+ QString arg<xsl:value-of select="$idx" /> = extractQString(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'QString &amp;'">
+ QString arg<xsl:value-of select="$idx" /> = extractQString(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QCString &amp;'">
+ const QCString arg<xsl:value-of select="$idx" /> = (args.size() >= <xsl:value-of select="position()" />) ? args[<xsl:value-of select="$idx" />].toString(exec).ascii() : 0;
+ </xsl:when>
+ <xsl:when test=". = 'const char *'">
+ const char *arg<xsl:value-of select="$idx" /> = (args.size() >= <xsl:value-of select="position()" />) ? args[<xsl:value-of select="$idx" />].toString(exec).ascii() : 0;
+ </xsl:when>
+ <xsl:when test=". = 'int'">
+ int arg<xsl:value-of select="$idx" /> = extractInt(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'uint'">
+ uint arg<xsl:value-of select="$idx" /> = extractUInt(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'double'">
+ double arg<xsl:value-of select="$idx" /> = extractDouble(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'bool'">
+ bool arg<xsl:value-of select="$idx" /> = extractBool(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QFont &amp;'">
+ QFont arg<xsl:value-of select="$idx" /> = extractQFont(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QPalette &amp;'">
+ QPalette arg<xsl:value-of select="$idx" /> = extractQPalette(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QStringList &amp;'">
+ QStringList arg<xsl:value-of select="$idx" /> = extractQStringList(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QStrList &amp;'">
+ QStrList arg<xsl:value-of select="$idx" /> = extractQStrList(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QPoint &amp;'">
+ QPoint arg<xsl:value-of select="$idx" /> = extractQPoint(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QRect &amp;'">
+ QRect arg<xsl:value-of select="$idx" /> = extractQRect(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QSize &amp;'">
+ QSize arg<xsl:value-of select="$idx" /> = extractQSize(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QPixmap &amp;'">
+ QPixmap arg<xsl:value-of select="$idx" /> = extractQPixmap(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QImage &amp;'">
+ QImage arg<xsl:value-of select="$idx" /> = extractQImage(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QColor &amp;'">
+ QColor arg<xsl:value-of select="$idx" /> = extractQColor(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QDate &amp;'">
+ QDate arg<xsl:value-of select="$idx" /> = extractQDate(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QTime &amp;'">
+ QTime arg<xsl:value-of select="$idx" /> = extractQTime(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+ <xsl:when test=". = 'const QDateTime &amp;'">
+ QDateTime arg<xsl:value-of select="$idx" /> = extractQDateTime(exec, args, <xsl:value-of select="$idx" />);
+ </xsl:when>
+
+ <!-- Hacks for enum types, this should be handled in a much cleaner way. -->
+
+ <xsl:when test=". = 'Policy'">
+ QComboBox::Policy arg<xsl:value-of select="$idx" />; // TODO (hack for combo box)
+ </xsl:when>
+ <xsl:when test=". = 'Shape'">
+ QFrame::Shape arg<xsl:value-of select="$idx" />; // TODO (hack for frame)
+ </xsl:when>
+ <xsl:when test=". = 'Shadow'">
+ QFrame::Shadow arg<xsl:value-of select="$idx" />; // TODO (hack for frame)
+ </xsl:when>
+ <xsl:when test=". = 'FILE *'">
+ FILE *arg<xsl:value-of select="$idx" />; // TODO (hack for qfile)
+ </xsl:when>
+ <xsl:when test=". = 'Offset'">
+ QFile::Offset arg<xsl:value-of select="$idx" />; // TODO (hack for qfile)
+ </xsl:when>
+ <xsl:when test=". = 'EncoderFn'">
+ QFile::EncoderFn arg<xsl:value-of select="$idx" />; // TODO (hack for qfile)
+ </xsl:when>
+ <xsl:when test=". = 'DecoderFn'">
+ QFile::DecoderFn arg<xsl:value-of select="$idx" />; // TODO (hack for qfile)
+ </xsl:when>
+ <xsl:when test=". = 'FrameAnimationType'">
+ QCanvasSprite::FrameAnimationType arg<xsl:value-of select="$idx" />; // TODO (hack for QCanvasSprite)
+ </xsl:when>
+ <xsl:when test=". = 'WFlags'">
+ Qt::WFlags arg<xsl:value-of select="$idx" />; // TODO (hack for QCanvasView)
+ </xsl:when>
+
+ <!-- Unsupported for now -->
+
+ <xsl:when test=". = 'const QByteArray &amp;'">
+ QByteArray arg<xsl:value-of select="$idx" />; // TODO (hack for qfile)
+ </xsl:when>
+ <xsl:when test=". = 'const QPointArray &amp;'">
+ QPointArray arg<xsl:value-of select="$idx" />; // TODO (hack for qcanvas)
+ </xsl:when>
+ <xsl:when test=". = 'QPainter &amp;'">
+ QPainter arg<xsl:value-of select="$idx" />; // TODO (hack for qcanvas)
+ </xsl:when>
+ <xsl:when test=". = 'const QPainter &amp;'">
+ QPainter arg<xsl:value-of select="$idx" />; // TODO (hack for qcanvas)
+ </xsl:when>
+ <xsl:when test=". = 'const QWMatrix &amp;'">
+ QWMatrix arg<xsl:value-of select="$idx" />; // TODO (hack for qcanvasview)
+ </xsl:when>
+
+ <xsl:otherwise>
+ // Unsupported parameter <xsl:value-of select="." />
+ return KJS::Value();
+
+ <xsl:value-of select="." /> arg<xsl:value-of select="$idx" />; // Dummy
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+
+ <!-- Specifies the return type -->
+ <xsl:variable name="rettype">
+ <xsl:choose>
+ <xsl:when test="starts-with(type,'virtual ')">
+ <xsl:value-of select="substring-after(type,'virtual ')" />
+ </xsl:when>
+ <xsl:otherwise><xsl:value-of select="type" /></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:choose>
+
+ <xsl:when test="$rettype = 'bool'">
+ bool ret;
+ ret = instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+ return KJS::Boolean( ret );
+ </xsl:when>
+
+ <xsl:when test="$rettype = 'int'">
+ int ret;
+ ret = instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+ return KJS::Number( ret );
+ </xsl:when>
+
+ <xsl:when test="$rettype = 'uint'">
+ uint ret;
+ ret = instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+ return KJS::Number( ret );
+ </xsl:when>
+
+ <xsl:when test="$rettype = 'double'">
+ double ret;
+ ret = instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+ return KJS::Number( ret );
+ </xsl:when>
+
+ <xsl:when test="$rettype = 'QString'">
+ QString ret;
+ ret = instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+ return KJS::String( ret );
+ </xsl:when>
+
+ <xsl:when test="$rettype = 'const char *'">
+ const char *ret;
+ ret = instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+ return KJS::String( ret );
+ </xsl:when>
+
+ <!-- Value returns -->
+
+ <xsl:when test="($rettype = 'QRect') or ($rettype = 'QSize') or ($rettype = 'QPoint')
+ or ($rettype = 'QPixmap') or ($rettype = 'QImage') or ($rettype = 'QBrush')
+ or ($rettype = 'QPen') or ($rettype = 'QDate') or ($rettype = 'QDateTime')
+ or ($rettype = 'QTime')">
+ <xsl:value-of select="$rettype"/> ret;
+ ret = instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+
+ return convertToValue( exec, ret );
+ </xsl:when>
+ <xsl:when test="$rettype = 'QStringList'">
+ QStringList ret;
+ ret = instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+
+ return convertToValue( exec, ret );
+ </xsl:when>
+
+ <!-- Special returns -->
+
+ <xsl:when test="$rettype = 'void'">
+ instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+ return KJS::Value(); // Returns void
+ </xsl:when>
+
+ <xsl:otherwise>
+ instance-><xsl:value-of select="name" />( <xsl:for-each select="param">
+ arg<xsl:value-of select="position()-1" /><xsl:if test="position() != count(../param)">,</xsl:if></xsl:for-each> );
+ return KJS::Value(); // Returns '<xsl:value-of select="$rettype" />'
+ </xsl:otherwise>
+ </xsl:choose>
+}
+ </xsl:when>
+ </xsl:choose>
+</xsl:for-each>
+
+} // namespace KJSEmbed
+
+// Local Variables:
+// c-basic-offset: 4
+// End:
+
+</xsl:template>
+</xsl:stylesheet>
diff --git a/kjsembed/bindwizard/doxygen2imp_h.xsl b/kjsembed/bindwizard/doxygen2imp_h.xsl
new file mode 100644
index 00000000..d5aaa8d2
--- /dev/null
+++ b/kjsembed/bindwizard/doxygen2imp_h.xsl
@@ -0,0 +1,128 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text" />
+
+<xsl:template match="/doxygen/compounddef">
+
+<xsl:variable name="clazz" select="compoundname" />
+<xsl:variable name="consmeth" select="sectiondef/memberdef[@kind='function' and @prot='public']" />
+
+#ifndef KJSEMBED_<xsl:value-of select="$clazz" />_H
+#define KJSEMBED_<xsl:value-of select="$clazz" />_H
+
+#include &lt;kjs/interpreter.h&gt;
+#include &lt;kjs/object.h&gt;
+
+#include &lt;kjsembed/jsobjectproxy_imp.h&gt;
+
+class <xsl:value-of select="$clazz" />;
+
+/**
+ * Namespace containing the KJSEmbed library.
+ */
+namespace KJSEmbed {
+
+/**
+ * Wrapper class for <xsl:value-of select="$clazz" /> methods.
+ *
+ * @author Richard Moore, rich@kde.org
+ */
+class <xsl:value-of select="$clazz" />Imp : public JSProxyImp
+{
+public:
+ /** Enumerates the constructors supported by this class. */
+ enum Constructors {
+<xsl:for-each select="$consmeth">
+ <xsl:choose>
+ <xsl:when test="name = $clazz">
+ <xsl:variable name="cons_name"><xsl:value-of select="name" />_<xsl:value-of select="position()" /></xsl:variable>
+ <xsl:variable name="cons_id">Constructor_<xsl:value-of select="$cons_name" /></xsl:variable>
+ <xsl:text> </xsl:text><xsl:value-of select="$cons_id" />,
+</xsl:when>
+ </xsl:choose>
+</xsl:for-each>
+ LastConstuctor = -1
+ };
+
+ /** Enumerates the methods supported by this class. */
+ enum Methods {
+<xsl:for-each select="$consmeth">
+ <xsl:variable name="method_name"><xsl:value-of select="name" />_<xsl:value-of select="position()" /></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="not(starts-with( name, 'operator' ) or starts-with( name, '~' ) or starts-with( name, $clazz ))">
+ Method_<xsl:value-of select="$method_name" />,</xsl:when>
+ </xsl:choose>
+</xsl:for-each>
+ Method_Last = -1
+ };
+
+ <xsl:value-of select="$clazz" />Imp( KJS::ExecState *exec, int id, bool constructor=false );
+ ~<xsl:value-of select="$clazz" />Imp();
+
+ /**
+ * Adds the static bindings for this class to the specified Object. The
+ * static bindings are the static methods and the enums of this class.
+ */
+ static void addStaticBindings( KJS::ExecState *exec, KJS::Object &amp;object );
+
+ /**
+ * Adds the bindings for this class to the specified Object. The bindings
+ * added are the instance methods of this class.
+ */
+ static void addBindings( KJS::ExecState *exec, KJS::Object &amp;object );
+
+ static <xsl:value-of select="$clazz" /> *to<xsl:value-of select="$clazz" />( KJS::Object &amp;object );
+
+ //
+ // Constructors implemented by this class.
+ //
+<xsl:for-each select="$consmeth">
+ <xsl:variable name="cons_name"><xsl:value-of select="name" />_<xsl:value-of select="position()" /></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="name = $clazz">
+ KJS::Object <xsl:value-of select="$cons_name" />( KJS::ExecState *exec, const KJS::List &amp;args );</xsl:when>
+ </xsl:choose>
+</xsl:for-each>
+
+ //
+ // Methods implemented by this class.
+ //
+<xsl:for-each select="$consmeth">
+ <xsl:variable name="method_name"><xsl:value-of select="name" />_<xsl:value-of select="position()" /></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="not(starts-with( name, 'operator' ) or starts-with( name, '~' ) or starts-with( name, $clazz ))">
+ KJS::Value <xsl:value-of select="$method_name" />( KJS::ExecState *exec, KJS::Object &amp;obj, const KJS::List &amp;args );</xsl:when>
+ </xsl:choose>
+</xsl:for-each>
+
+ //
+ // 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 &amp;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 &amp;self, const KJS::List &amp;args );
+
+private:
+ <xsl:value-of select="$clazz" /> *instance; // Temp
+ int id;
+ bool cons;
+};
+
+} // namespace KJSEmbed
+
+#endif // KJSEMBED_<xsl:value-of select="compoundname" />_H
+
+// Local Variables:
+// c-basic-offset: 4
+// End:
+
+</xsl:template>
+</xsl:stylesheet>
diff --git a/kjsembed/bindwizard/index_classes.xsl b/kjsembed/bindwizard/index_classes.xsl
new file mode 100644
index 00000000..88309be6
--- /dev/null
+++ b/kjsembed/bindwizard/index_classes.xsl
@@ -0,0 +1,11 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="xml" />
+
+<xsl:template match="/doxygen">
+<classes>
+ <xsl:for-each select="compound[@kind='class']">
+ <class><xsl:value-of select="name/text()" /></class>
+ </xsl:for-each>
+</classes>
+</xsl:template>
+</xsl:stylesheet>