summaryrefslogtreecommitdiff
path: root/scripting/workben
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/workben')
-rw-r--r--scripting/workben/bindings/EditDebug.xdl36
-rw-r--r--scripting/workben/bindings/EventsBinding.xdl61
-rw-r--r--scripting/workben/bindings/HelpBinding.xdl30
-rw-r--r--scripting/workben/bindings/Highlight.xdl14
-rw-r--r--scripting/workben/bindings/KeyBinding.xdl59
-rw-r--r--scripting/workben/bindings/MacroEditor.xdl10
-rw-r--r--scripting/workben/bindings/MenuBinding.xdl65
-rw-r--r--scripting/workben/bindings/ScriptBinding.xba2093
-rw-r--r--scripting/workben/bindings/calckeybinding.xml94
-rw-r--r--scripting/workben/bindings/calcmenubar.xml319
-rw-r--r--scripting/workben/bindings/dialog.xlb6
-rw-r--r--scripting/workben/bindings/drawkeybinding.xml58
-rw-r--r--scripting/workben/bindings/drawmenubar.xml354
-rw-r--r--scripting/workben/bindings/eventbindings.xml4
-rw-r--r--scripting/workben/bindings/impresskeybinding.xml62
-rw-r--r--scripting/workben/bindings/impressmenubar.xml328
-rw-r--r--scripting/workben/bindings/manifest.xml14
-rw-r--r--scripting/workben/bindings/script.xlb4
-rw-r--r--scripting/workben/bindings/writerkeybinding.xml101
-rw-r--r--scripting/workben/bindings/writermenubar.xml281
-rwxr-xr-xscripting/workben/build.xml397
-rw-r--r--scripting/workben/data/ExampleSpreadSheetLatest.sxcbin0 -> 14635 bytes
-rw-r--r--scripting/workben/data/doc_with_beanshell_scripts.sxwbin0 -> 7044 bytes
-rw-r--r--scripting/workben/data/doc_with_one_script.sxwbin0 -> 6286 bytes
-rw-r--r--scripting/workben/data/doc_with_two_scripts.sxwbin0 -> 6308 bytes
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.protocolhandler.Dispatch.csv5
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.Function.csv1
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.FunctionProvider.csv1
-rwxr-xr-xscripting/workben/data/objdsc/drafts.com.sun.star.script.framework.runtime.ScriptRuntimeManager.csv2
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptInfo.csv8
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorage.csv4
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorageManager.csv6
-rw-r--r--scripting/workben/data/script_in_class_file.sxwbin0 -> 6976 bytes
-rw-r--r--scripting/workben/data/script_in_jar_file.sxwbin0 -> 8081 bytes
-rw-r--r--scripting/workben/data/share_scripts.zipbin0 -> 2248 bytes
-rw-r--r--scripting/workben/data/testdata/Function.csv4
-rw-r--r--scripting/workben/data/testdata/FunctionProvider.csv1
-rw-r--r--scripting/workben/data/testdata/ScriptInfo.csv8
-rw-r--r--scripting/workben/data/testdata/ScriptRuntimeManager.csv8
-rw-r--r--scripting/workben/data/testdata/ScriptStorage.csv4
-rw-r--r--scripting/workben/data/testdata/ScriptStorageManager.csv18
-rw-r--r--scripting/workben/data/user_scripts.zipbin0 -> 6890 bytes
-rw-r--r--scripting/workben/data/xscriptcontext_test_document.sxwbin0 -> 6580 bytes
-rw-r--r--scripting/workben/ifc/scripting/ScriptingUtils.java124
-rw-r--r--scripting/workben/ifc/scripting/SecurityDialogUtil.java176
-rw-r--r--scripting/workben/ifc/scripting/_XFunction.java169
-rw-r--r--scripting/workben/ifc/scripting/_XFunctionProvider.java101
-rw-r--r--scripting/workben/ifc/scripting/_XScriptInfo.java331
-rw-r--r--scripting/workben/ifc/scripting/_XScriptInfoAccess.java228
-rw-r--r--scripting/workben/ifc/scripting/_XScriptInvocation.java232
-rw-r--r--scripting/workben/ifc/scripting/_XScriptNameResolver.java186
-rw-r--r--scripting/workben/ifc/scripting/_XScriptSecurity.java409
-rw-r--r--scripting/workben/ifc/scripting/_XScriptStorageManager.java267
-rw-r--r--scripting/workben/ifc/scripting/_XScriptStorageRefresh.java90
-rw-r--r--scripting/workben/ifc/scripting/makefile.mk40
-rw-r--r--scripting/workben/installer/Banner.java30
-rw-r--r--scripting/workben/installer/ExceptionTraceHelper.java64
-rw-r--r--scripting/workben/installer/ExecCmd.java100
-rw-r--r--scripting/workben/installer/FileUpdater.java232
-rw-r--r--scripting/workben/installer/Final.java136
-rw-r--r--scripting/workben/installer/IdeFinal.java125
-rw-r--r--scripting/workben/installer/IdeUpdater.java172
-rw-r--r--scripting/workben/installer/IdeVersion.java349
-rw-r--r--scripting/workben/installer/IdeWelcome.java79
-rw-r--r--scripting/workben/installer/InstUtil.java463
-rw-r--r--scripting/workben/installer/InstallListener.java6
-rw-r--r--scripting/workben/installer/InstallWizard.java389
-rw-r--r--scripting/workben/installer/InstallationEvent.java22
-rw-r--r--scripting/workben/installer/LogStream.java54
-rw-r--r--scripting/workben/installer/NavPanel.java113
-rw-r--r--scripting/workben/installer/Navigation.java58
-rw-r--r--scripting/workben/installer/ProtocolHandler.xcu10
-rw-r--r--scripting/workben/installer/Register.java144
-rw-r--r--scripting/workben/installer/Scripting.BeanShell.xcu11
-rwxr-xr-xscripting/workben/installer/Scripting.JavaScript.xcu11
-rw-r--r--scripting/workben/installer/Scripting.xcs57
-rw-r--r--scripting/workben/installer/Version.java339
-rw-r--r--scripting/workben/installer/Welcome.java156
-rw-r--r--scripting/workben/installer/XmlUpdater.java427
-rw-r--r--scripting/workben/installer/ZipData.java103
-rw-r--r--scripting/workben/installer/sidebar.jpgbin0 -> 8393 bytes
-rwxr-xr-xscripting/workben/makefile.mk35
-rw-r--r--scripting/workben/mod/_scripting/Dispatch.java108
-rw-r--r--scripting/workben/mod/_scripting/Function.java95
-rw-r--r--scripting/workben/mod/_scripting/FunctionProvider.java82
-rw-r--r--scripting/workben/mod/_scripting/ScriptInfo.java108
-rw-r--r--scripting/workben/mod/_scripting/ScriptRuntimeManager.java65
-rw-r--r--scripting/workben/mod/_scripting/ScriptStorage.java103
-rw-r--r--scripting/workben/mod/_scripting/ScriptStorageManager.java82
-rw-r--r--scripting/workben/mod/_scripting/TestDataLoader.java123
-rw-r--r--scripting/workben/mod/_scripting/makefile.mk40
91 files changed, 11304 insertions, 0 deletions
diff --git a/scripting/workben/bindings/EditDebug.xdl b/scripting/workben/bindings/EditDebug.xdl
new file mode 100644
index 000000000000..226104b2d746
--- /dev/null
+++ b/scripting/workben/bindings/EditDebug.xdl
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
+<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="EditDebugDialog" dlg:left="64" dlg:top="89" dlg:width="179" dlg:height="151" dlg:closeable="true" dlg:moveable="true" dlg:title="Edit/Debug Scripts">
+ <dlg:bulletinboard>
+ <dlg:combobox dlg:id="LocationCombo" dlg:tab-index="0" dlg:left="64" dlg:top="17" dlg:width="110" dlg:height="13" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireLangLocComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:combobox dlg:id="LanguageCombo" dlg:tab-index="1" dlg:left="64" dlg:top="33" dlg:width="110" dlg:height="13" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireLangLocComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:checkbox dlg:id="detail" dlg:tab-index="2" dlg:left="12" dlg:top="70" dlg:width="45" dlg:height="10" dlg:value="Detailed view" dlg:checked="false">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ </dlg:checkbox>
+ <dlg:menulist dlg:id="ScriptList" dlg:tab-index="3" dlg:left="64" dlg:top="50" dlg:width="110" dlg:height="44"/>
+ <dlg:button dlg:id="OK" dlg:tab-index="5" dlg:left="58" dlg:top="131" dlg:width="36" dlg:height="14" dlg:value="OK">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.DoEdit" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="Cancel" dlg:tab-index="6" dlg:left="97" dlg:top="131" dlg:width="36" dlg:height="14" dlg:value="Cancel">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuCancelButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="Help" dlg:tab-index="7" dlg:left="138" dlg:top="131" dlg:width="36" dlg:height="14" dlg:value="Help">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuHelpButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:fixedline dlg:id="FixedLine1" dlg:tab-index="8" dlg:left="42" dlg:top="6" dlg:width="131" dlg:height="7"/>
+ <dlg:text dlg:id="Label1" dlg:tab-index="9" dlg:left="5" dlg:top="6" dlg:width="36" dlg:height="9" dlg:value="Select script"/>
+ <dlg:text dlg:id="Label7" dlg:tab-index="10" dlg:left="12" dlg:top="18" dlg:width="29" dlg:height="11" dlg:value="Location"/>
+ <dlg:text dlg:id="Label8" dlg:tab-index="11" dlg:left="12" dlg:top="31" dlg:width="35" dlg:height="9" dlg:value="Language"/>
+ <dlg:text dlg:id="Label9" dlg:tab-index="12" dlg:left="12" dlg:top="53" dlg:width="24" dlg:height="14" dlg:value="Script"/>
+ <dlg:fixedline dlg:id="FixedLine2" dlg:tab-index="13" dlg:left="7" dlg:top="120" dlg:width="167" dlg:height="7"/>
+ <dlg:button dlg:id="Browse" dlg:tab-index="4" dlg:disabled="true" dlg:left="136" dlg:top="101" dlg:width="36" dlg:height="14" dlg:value="Browse...">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.DoBrowseAndEdit" script:language="StarBasic"/>
+ </dlg:button>
+ </dlg:bulletinboard>
+</dlg:window> \ No newline at end of file
diff --git a/scripting/workben/bindings/EventsBinding.xdl b/scripting/workben/bindings/EventsBinding.xdl
new file mode 100644
index 000000000000..fe980b5ddfdb
--- /dev/null
+++ b/scripting/workben/bindings/EventsBinding.xdl
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
+<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="EventBindingDialog" dlg:left="64" dlg:top="99" dlg:width="179" dlg:height="209" dlg:closeable="true" dlg:moveable="true" dlg:title="Assign Script To Event">
+ <dlg:styles>
+ <dlg:style dlg:style-id="0" dlg:font-height="7"/>
+ </dlg:styles>
+ <dlg:bulletinboard>
+ <dlg:combobox dlg:id="LocationCombo" dlg:tab-index="0" dlg:left="63" dlg:top="19" dlg:width="108" dlg:height="12" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireLangLocComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:combobox dlg:id="LanguageCombo" dlg:tab-index="1" dlg:left="63" dlg:top="31" dlg:width="108" dlg:height="12" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireLangLocComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:checkbox dlg:id="detail" dlg:tab-index="2" dlg:left="17" dlg:top="57" dlg:width="44" dlg:height="10" dlg:value="Detailed view" dlg:checked="false">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ </dlg:checkbox>
+ <dlg:menulist dlg:id="ScriptList" dlg:tab-index="3" dlg:left="63" dlg:top="48" dlg:width="108" dlg:height="44"/>
+ <dlg:button dlg:id="Browse" dlg:tab-index="4" dlg:disabled="true" dlg:left="17" dlg:top="71" dlg:width="36" dlg:height="14" dlg:value="Browse...">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.BrowseButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:radiogroup>
+ <dlg:radio dlg:id="AllAppsOption" dlg:tab-index="5" dlg:left="12" dlg:top="107" dlg:width="51" dlg:height="10" dlg:value="All Applications">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.AppDocEventListener" script:language="StarBasic"/>
+ </dlg:radio>
+ <dlg:radio dlg:id="DocumentOption" dlg:tab-index="6" dlg:left="12" dlg:top="119" dlg:width="46" dlg:height="10" dlg:value="Document" dlg:checked="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.AppDocEventListener" script:language="StarBasic"/>
+ </dlg:radio>
+ </dlg:radiogroup>
+ <dlg:menulist dlg:id="EventList" dlg:tab-index="7" dlg:left="64" dlg:top="109" dlg:width="108" dlg:height="64">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.EventListListener" script:language="StarBasic"/>
+ </dlg:menulist>
+ <dlg:button dlg:id="Delete" dlg:tab-index="8" dlg:left="17" dlg:top="131" dlg:width="36" dlg:height="13" dlg:value="Delete">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.EventDeleteButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="NewButton" dlg:tab-index="9" dlg:left="17" dlg:top="159" dlg:width="36" dlg:height="13" dlg:value="Assign">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.EventNewButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="OK" dlg:tab-index="10" dlg:left="57" dlg:top="192" dlg:width="36" dlg:height="13" dlg:value="OK">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.EventOKButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="Cancel" dlg:tab-index="11" dlg:left="96" dlg:top="192" dlg:width="36" dlg:height="13" dlg:value="Cancel">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuCancelButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="Help" dlg:tab-index="12" dlg:left="136" dlg:top="192" dlg:width="36" dlg:height="13" dlg:value="Help">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuHelpButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:fixedline dlg:id="FixedLine2" dlg:tab-index="13" dlg:left="9" dlg:top="182" dlg:width="167" dlg:height="6"/>
+ <dlg:fixedline dlg:id="FixedLine4" dlg:tab-index="14" dlg:left="76" dlg:top="99" dlg:width="98" dlg:height="5"/>
+ <dlg:text dlg:id="Label4" dlg:tab-index="15" dlg:left="5" dlg:top="97" dlg:width="71" dlg:height="8" dlg:value="Choose Event to assign to"/>
+ <dlg:fixedline dlg:id="FixedLine1" dlg:tab-index="16" dlg:left="42" dlg:top="7" dlg:width="132" dlg:height="6"/>
+ <dlg:text dlg:id="Label1" dlg:tab-index="17" dlg:left="5" dlg:top="7" dlg:width="36" dlg:height="8" dlg:value="Select script"/>
+ <dlg:text dlg:id="Label7" dlg:tab-index="18" dlg:left="12" dlg:top="17" dlg:width="28" dlg:height="7" dlg:value="Location"/>
+ <dlg:text dlg:id="Label8" dlg:tab-index="19" dlg:left="12" dlg:top="32" dlg:width="35" dlg:height="9" dlg:value="Language"/>
+ <dlg:text dlg:id="Label9" dlg:tab-index="20" dlg:left="12" dlg:top="49" dlg:width="23" dlg:height="8" dlg:value="Script"/>
+ <dlg:text dlg:id="Label10" dlg:tab-index="21" dlg:left="103" dlg:top="-19" dlg:width="3" dlg:height="0" dlg:value="Label10"/>
+ <dlg:text dlg:style-id="0" dlg:id="AddOn" dlg:tab-index="22" dlg:disabled="true" dlg:left="17" dlg:top="144" dlg:width="38" dlg:height="10" dlg:value="[Add-on&apos;s only]"/>
+ <dlg:text dlg:id="fsonly" dlg:tab-index="23" dlg:disabled="true" dlg:left="13" dlg:top="86" dlg:width="45" dlg:height="8" dlg:value="[Filesystem only]"/>
+ </dlg:bulletinboard>
+</dlg:window> \ No newline at end of file
diff --git a/scripting/workben/bindings/HelpBinding.xdl b/scripting/workben/bindings/HelpBinding.xdl
new file mode 100644
index 000000000000..7d39670097ec
--- /dev/null
+++ b/scripting/workben/bindings/HelpBinding.xdl
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
+<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="HelpBinding" dlg:left="100" dlg:top="8" dlg:width="213" dlg:height="388" dlg:closeable="true" dlg:moveable="true" dlg:title="Office Help - Help about the Assign Script Dialogs">
+ <dlg:styles>
+ <dlg:style dlg:style-id="0" dlg:text-color="0xff"/>
+ <dlg:style dlg:style-id="1" dlg:font-height="10"/>
+ </dlg:styles>
+ <dlg:bulletinboard>
+ <dlg:text dlg:id="Label2" dlg:tab-index="0" dlg:left="14" dlg:top="6" dlg:width="179" dlg:height="12" dlg:value="Integrated Help For Scripting Framework is not currently available." dlg:multiline="true"/>
+ <dlg:text dlg:id="Label1" dlg:tab-index="1" dlg:left="14" dlg:top="24" dlg:width="185" dlg:height="34" dlg:value="Assign Script Dialogs for Menus, Keys and Events allow you to bind a script written in a supported language (currently Java and BeanShell) to a menu item, key combo, Office event or document event." dlg:multiline="true"/>
+ <dlg:text dlg:id="Label3" dlg:tab-index="2" dlg:left="14" dlg:top="66" dlg:width="185" dlg:height="26" dlg:value="The location combo box will be populated with User, Share or Document. The default value will be User which will display all scripts (with the selected language type) in the User area.&#x0a;" dlg:multiline="true"/>
+ <dlg:titledbox dlg:id="FrameControl1" dlg:tab-index="3" dlg:left="9" dlg:top="20" dlg:width="196" dlg:height="346"/>
+ <dlg:text dlg:id="Label4" dlg:tab-index="4" dlg:left="14" dlg:top="92" dlg:width="185" dlg:height="18" dlg:value="The language combo box is populated with the list of supported languages. The default language is set to Java." dlg:multiline="true"/>
+ <dlg:button dlg:id="HelpOKButton" dlg:tab-index="5" dlg:left="167" dlg:top="371" dlg:width="36" dlg:height="13" dlg:value="OK">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.HelpOKButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:text dlg:id="Label5" dlg:tab-index="6" dlg:left="14" dlg:top="144" dlg:width="185" dlg:height="34" dlg:value="In the Script combo box the script&apos;s display name will always be visible, if two or more scripts have the same display name (or if the Detailed View check box is selected) the script will be displayed as follows: display name [function name]" dlg:multiline="true"/>
+ <dlg:text dlg:id="Label6" dlg:tab-index="7" dlg:left="14" dlg:top="342" dlg:width="185" dlg:height="10" dlg:value="For further information see the User Guide at:" dlg:multiline="true"/>
+ <dlg:text dlg:style-id="0" dlg:id="Label7" dlg:tab-index="8" dlg:left="14" dlg:top="351" dlg:width="185" dlg:height="10" dlg:value="http://framework.openoffice.org/scripting/user-guide.html" dlg:multiline="true"/>
+ <dlg:text dlg:style-id="1" dlg:id="Label8" dlg:tab-index="9" dlg:left="14" dlg:top="55" dlg:width="185" dlg:height="11" dlg:value="Information common to all dialogs" dlg:multiline="true"/>
+ <dlg:text dlg:style-id="1" dlg:id="Label9" dlg:tab-index="10" dlg:left="14" dlg:top="198" dlg:width="185" dlg:height="18" dlg:value="Assign Script to Menu Dialog" dlg:multiline="true"/>
+ <dlg:text dlg:style-id="1" dlg:id="Label10" dlg:tab-index="11" dlg:left="14" dlg:top="247" dlg:width="185" dlg:height="16" dlg:value="Assign Script to Key Dialog" dlg:multiline="true"/>
+ <dlg:text dlg:style-id="1" dlg:id="Label11" dlg:tab-index="12" dlg:left="14" dlg:top="285" dlg:width="185" dlg:height="12" dlg:value="Assign Script to Event Dialog" dlg:multiline="true"/>
+ <dlg:text dlg:id="Label12" dlg:tab-index="13" dlg:left="14" dlg:top="211" dlg:width="185" dlg:height="36" dlg:value="To assign, select the Top-Level menu and Sub-Menu under which you wish to add the new script menu. Enter the script menu name and click New. To delete a script menu, select the script menu and click Delete." dlg:multiline="true"/>
+ <dlg:text dlg:id="Label13" dlg:tab-index="14" dlg:left="14" dlg:top="259" dlg:width="185" dlg:height="26" dlg:value="To assign, select the Key group and the Shortcut key, then click Assign. To delete, select the Shortcut to which the script is assigned and click Delete." dlg:multiline="true"/>
+ <dlg:text dlg:id="Label14" dlg:tab-index="15" dlg:left="14" dlg:top="297" dlg:width="185" dlg:height="42" dlg:value="To assign scripts to an event, select the Event then click Assign. Scripts can be assigned to application wide events or to the current document by selecting the appropriate application or document radio button. To delete, select the Event to which the script is assigned and click Delete." dlg:multiline="true"/>
+ <dlg:text dlg:id="Label16" dlg:tab-index="16" dlg:left="14" dlg:top="177" dlg:width="185" dlg:height="22" dlg:value="To assign a script, first you must select the script from the Script combo box, then follow the appropriate instructions below. " dlg:multiline="true"/>
+ <dlg:text dlg:id="Label15" dlg:tab-index="17" dlg:left="14" dlg:top="110" dlg:width="185" dlg:height="34" dlg:value="When the location is set to &quot;filesystem&quot;, and the language is set to something other than &quot;Java&quot;, the &quot;Browse&quot; button is enabled. This allows open a filechooser and populate the Script combo box with scripts located on the filesystem." dlg:multiline="true"/>
+ </dlg:bulletinboard>
+</dlg:window> \ No newline at end of file
diff --git a/scripting/workben/bindings/Highlight.xdl b/scripting/workben/bindings/Highlight.xdl
new file mode 100644
index 000000000000..2d65de42283e
--- /dev/null
+++ b/scripting/workben/bindings/Highlight.xdl
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
+<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="Highlight" dlg:left="68" dlg:top="23" dlg:width="135" dlg:height="48" dlg:closeable="true" dlg:moveable="true">
+ <dlg:bulletinboard>
+ <dlg:text dlg:id="Label1" dlg:tab-index="2" dlg:left="3" dlg:top="8" dlg:width="33" dlg:height="9" dlg:value="Find What:"/>
+ <dlg:textfield dlg:id="HighlightTextField" dlg:tab-index="3" dlg:left="39" dlg:top="6" dlg:width="93" dlg:height="12"/>
+ <dlg:button dlg:id="HighlightButton" dlg:tab-index="0" dlg:left="20" dlg:top="24" dlg:width="46" dlg:height="18" dlg:value="Highlight">
+ <script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Highlight.ButtonPressHandler.bsh?language=BeanShell&amp;location=share" script:language="Script"/>
+ </dlg:button>
+ <dlg:button dlg:id="ExitButton" dlg:tab-index="1" dlg:left="72" dlg:top="24" dlg:width="46" dlg:height="18" dlg:value="Exit">
+ <script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Highlight.ButtonPressHandler.bsh?language=BeanShell&amp;location=share" script:language="Script"/>
+ </dlg:button>
+ </dlg:bulletinboard>
+</dlg:window>
diff --git a/scripting/workben/bindings/KeyBinding.xdl b/scripting/workben/bindings/KeyBinding.xdl
new file mode 100644
index 000000000000..107adf2f1dd4
--- /dev/null
+++ b/scripting/workben/bindings/KeyBinding.xdl
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
+<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="MenuBindingDialog" dlg:left="64" dlg:top="89" dlg:width="179" dlg:height="217" dlg:closeable="true" dlg:moveable="true" dlg:title="Assign Script To Key">
+ <dlg:styles>
+ <dlg:style dlg:style-id="0" dlg:font-height="7"/>
+ </dlg:styles>
+ <dlg:bulletinboard>
+ <dlg:combobox dlg:id="LocationCombo" dlg:tab-index="0" dlg:left="64" dlg:top="18" dlg:width="108" dlg:height="12" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireLangLocComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:combobox dlg:id="LanguageCombo" dlg:tab-index="1" dlg:left="64" dlg:top="34" dlg:width="108" dlg:height="12" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireLangLocComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:checkbox dlg:id="detail" dlg:tab-index="2" dlg:left="17" dlg:top="57" dlg:width="44" dlg:height="10" dlg:value="Detailed view" dlg:checked="false">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ </dlg:checkbox>
+ <dlg:menulist dlg:id="ScriptList" dlg:tab-index="3" dlg:left="63" dlg:top="49" dlg:width="108" dlg:height="44"/>
+ <dlg:button dlg:id="Browse" dlg:tab-index="4" dlg:disabled="true" dlg:left="17" dlg:top="71" dlg:width="36" dlg:height="14" dlg:value="Browse...">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.BrowseButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:combobox dlg:id="KeyCombo" dlg:tab-index="5" dlg:left="63" dlg:top="110" dlg:width="108" dlg:height="12" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.KeyComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireKeyComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:menulist dlg:id="KeyList" dlg:tab-index="6" dlg:left="63" dlg:top="125" dlg:width="108" dlg:height="59">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.KeyListListener" script:language="StarBasic"/>
+ </dlg:menulist>
+ <dlg:button dlg:id="Delete" dlg:tab-index="7" dlg:left="17" dlg:top="141" dlg:width="38" dlg:height="13" dlg:value="Delete">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.KeyDeleteButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="NewButton" dlg:tab-index="8" dlg:left="17" dlg:top="171" dlg:width="38" dlg:height="13" dlg:value="Assign">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.KeyNewButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="OK" dlg:tab-index="9" dlg:left="57" dlg:top="200" dlg:width="36" dlg:height="13" dlg:value="OK">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuOKButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="Cancel" dlg:tab-index="10" dlg:left="96" dlg:top="200" dlg:width="36" dlg:height="13" dlg:value="Cancel">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuCancelButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="Help" dlg:tab-index="11" dlg:left="136" dlg:top="200" dlg:width="36" dlg:height="13" dlg:value="Help">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuHelpButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:fixedline dlg:id="FixedLine2" dlg:tab-index="12" dlg:left="9" dlg:top="190" dlg:width="167" dlg:height="6"/>
+ <dlg:fixedline dlg:id="FixedLine4" dlg:tab-index="13" dlg:left="94" dlg:top="99" dlg:width="81" dlg:height="5"/>
+ <dlg:text dlg:id="Label4" dlg:tab-index="14" dlg:left="5" dlg:top="97" dlg:width="90" dlg:height="8" dlg:value="Choose shortcut key to assign to"/>
+ <dlg:text dlg:id="Label5" dlg:tab-index="15" dlg:left="12" dlg:top="112" dlg:width="40" dlg:height="10" dlg:value="Key Group"/>
+ <dlg:text dlg:id="Label6" dlg:tab-index="16" dlg:left="12" dlg:top="127" dlg:width="40" dlg:height="10" dlg:value="Shortcut Key"/>
+ <dlg:fixedline dlg:id="FixedLine1" dlg:tab-index="17" dlg:left="43" dlg:top="7" dlg:width="132" dlg:height="6"/>
+ <dlg:text dlg:id="Label1" dlg:tab-index="18" dlg:left="5" dlg:top="7" dlg:width="36" dlg:height="8" dlg:value="Select script"/>
+ <dlg:text dlg:id="Label7" dlg:tab-index="19" dlg:left="12" dlg:top="17" dlg:width="28" dlg:height="7" dlg:value="Location"/>
+ <dlg:text dlg:id="Label8" dlg:tab-index="20" dlg:left="12" dlg:top="32" dlg:width="35" dlg:height="9" dlg:value="Language"/>
+ <dlg:text dlg:id="Label9" dlg:tab-index="21" dlg:left="12" dlg:top="49" dlg:width="23" dlg:height="8" dlg:value="Script"/>
+ <dlg:text dlg:id="Label10" dlg:tab-index="22" dlg:left="103" dlg:top="-9" dlg:width="3" dlg:height="0" dlg:value="Label10"/>
+ <dlg:text dlg:style-id="0" dlg:id="AddOn" dlg:tab-index="23" dlg:disabled="true" dlg:left="17" dlg:top="154" dlg:width="38" dlg:height="10" dlg:value="[Add-on&apos;s only]"/>
+ <dlg:text dlg:id="fsonly" dlg:tab-index="24" dlg:disabled="true" dlg:left="13" dlg:top="86" dlg:width="45" dlg:height="8" dlg:value="[Filesystem only]"/>
+ </dlg:bulletinboard>
+</dlg:window> \ No newline at end of file
diff --git a/scripting/workben/bindings/MacroEditor.xdl b/scripting/workben/bindings/MacroEditor.xdl
new file mode 100644
index 000000000000..b724bbb64add
--- /dev/null
+++ b/scripting/workben/bindings/MacroEditor.xdl
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
+<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="MacroEditor" dlg:left="105" dlg:top="117" dlg:width="240" dlg:height="320" dlg:closeable="true" dlg:moveable="true" dlg:title="Python Macro Editor">
+ <dlg:bulletinboard>
+ <dlg:button dlg:id="RunButton" dlg:tab-index="0" dlg:left="57" dlg:top="300" dlg:width="40" dlg:height="14" dlg:value="Run"/>
+ <dlg:button dlg:id="SaveButton" dlg:tab-index="1" dlg:left="100" dlg:top="300" dlg:width="40" dlg:height="14" dlg:value="Save"/>
+ <dlg:button dlg:id="CloseButton" dlg:tab-index="2" dlg:left="143" dlg:top="300" dlg:width="40" dlg:height="14" dlg:value="Close" dlg:button-type="cancel"/>
+ <dlg:textfield dlg:id="EditorTextField" dlg:tab-index="3" dlg:left="6" dlg:top="6" dlg:width="228" dlg:height="288" dlg:hscroll="true" dlg:vscroll="true" dlg:multiline="true"/>
+ </dlg:bulletinboard>
+</dlg:window>
diff --git a/scripting/workben/bindings/MenuBinding.xdl b/scripting/workben/bindings/MenuBinding.xdl
new file mode 100644
index 000000000000..b4e0b0e753de
--- /dev/null
+++ b/scripting/workben/bindings/MenuBinding.xdl
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
+<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="MenuBindingDialog" dlg:left="64" dlg:top="89" dlg:width="179" dlg:height="236" dlg:closeable="true" dlg:moveable="true" dlg:title="Assign Script To Menu">
+ <dlg:styles>
+ <dlg:style dlg:style-id="0" dlg:font-height="7"/>
+ </dlg:styles>
+ <dlg:bulletinboard>
+ <dlg:combobox dlg:id="LocationCombo" dlg:tab-index="0" dlg:left="63" dlg:top="17" dlg:width="108" dlg:height="13" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireLangLocComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:combobox dlg:id="LanguageCombo" dlg:tab-index="1" dlg:left="63" dlg:top="32" dlg:width="108" dlg:height="13" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireLangLocComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:checkbox dlg:id="detail" dlg:tab-index="2" dlg:left="17" dlg:top="57" dlg:width="44" dlg:height="10" dlg:value="Detailed view" dlg:checked="false">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.LangLocComboListener" script:language="StarBasic"/>
+ </dlg:checkbox>
+ <dlg:menulist dlg:id="ScriptList" dlg:tab-index="3" dlg:left="63" dlg:top="49" dlg:width="108" dlg:height="44"/>
+ <dlg:button dlg:id="Browse" dlg:tab-index="4" dlg:disabled="true" dlg:left="17" dlg:top="71" dlg:width="36" dlg:height="14" dlg:value="Browse...">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.BrowseButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:combobox dlg:id="MenuCombo" dlg:tab-index="5" dlg:left="63" dlg:top="109" dlg:width="108" dlg:height="13" dlg:spin="true">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuComboListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.fireMenuComboListernerOnRet" script:language="StarBasic"/>
+ </dlg:combobox>
+ <dlg:menulist dlg:id="SubMenuList" dlg:tab-index="6" dlg:left="63" dlg:top="125" dlg:width="108" dlg:height="44">
+ <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.SubMenuListListener" script:language="StarBasic"/>
+ </dlg:menulist>
+ <dlg:button dlg:id="Delete" dlg:tab-index="7" dlg:left="17" dlg:top="142" dlg:width="36" dlg:height="14" dlg:value="Delete">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuDeleteButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="NewButton" dlg:tab-index="8" dlg:left="17" dlg:top="186" dlg:width="36" dlg:height="14" dlg:value="New">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuNewButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:textfield dlg:id="MenuLabelBox" dlg:tab-index="9" dlg:left="63" dlg:top="187" dlg:width="108" dlg:height="13">
+ <script:event script:event-name="on-blur" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuLabelBoxListener" script:language="StarBasic"/>
+ <script:event script:event-name="on-keydown" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuLabelBoxListener" script:language="StarBasic"/>
+ </dlg:textfield>
+ <dlg:button dlg:id="OK" dlg:tab-index="10" dlg:left="57" dlg:top="216" dlg:width="36" dlg:height="14" dlg:value="OK">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuOKButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="Cancel" dlg:tab-index="11" dlg:left="96" dlg:top="216" dlg:width="36" dlg:height="14" dlg:value="Cancel">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuCancelButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:button dlg:id="Help" dlg:tab-index="12" dlg:left="136" dlg:top="216" dlg:width="36" dlg:height="14" dlg:value="Help">
+ <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ScriptBindingLibrary.ScriptBinding.MenuHelpButton" script:language="StarBasic"/>
+ </dlg:button>
+ <dlg:fixedline dlg:id="FixedLine2" dlg:tab-index="13" dlg:left="8" dlg:top="206" dlg:width="167" dlg:height="7"/>
+ <dlg:fixedline dlg:id="FixedLine3" dlg:tab-index="14" dlg:left="73" dlg:top="174" dlg:width="102" dlg:height="6"/>
+ <dlg:text dlg:id="Label2" dlg:tab-index="15" dlg:left="5" dlg:top="172" dlg:width="73" dlg:height="9" dlg:value="Assign script to new menu"/>
+ <dlg:fixedline dlg:id="FixedLine4" dlg:tab-index="16" dlg:left="75" dlg:top="99" dlg:width="100" dlg:height="6"/>
+ <dlg:text dlg:id="Label4" dlg:tab-index="17" dlg:left="5" dlg:top="97" dlg:width="75" dlg:height="8" dlg:value="Choose menu to insert after"/>
+ <dlg:text dlg:id="Label5" dlg:tab-index="18" dlg:left="12" dlg:top="111" dlg:width="40" dlg:height="11" dlg:value="Toplevel Menu"/>
+ <dlg:text dlg:id="Label6" dlg:tab-index="19" dlg:left="12" dlg:top="127" dlg:width="40" dlg:height="11" dlg:value="Sub Menu"/>
+ <dlg:fixedline dlg:id="FixedLine1" dlg:tab-index="20" dlg:left="42" dlg:top="6" dlg:width="132" dlg:height="7"/>
+ <dlg:text dlg:id="Label1" dlg:tab-index="21" dlg:left="5" dlg:top="6" dlg:width="36" dlg:height="9" dlg:value="Select script"/>
+ <dlg:text dlg:id="Label7" dlg:tab-index="22" dlg:left="12" dlg:top="17" dlg:width="28" dlg:height="7" dlg:value="Location"/>
+ <dlg:text dlg:id="Label8" dlg:tab-index="23" dlg:left="12" dlg:top="32" dlg:width="35" dlg:height="9" dlg:value="Language"/>
+ <dlg:text dlg:id="Label9" dlg:tab-index="24" dlg:left="12" dlg:top="49" dlg:width="23" dlg:height="8" dlg:value="Script"/>
+ <dlg:text dlg:style-id="0" dlg:id="AddOn" dlg:tab-index="25" dlg:disabled="true" dlg:left="17" dlg:top="156" dlg:width="38" dlg:height="11" dlg:value="[Add-on&apos;s only]"/>
+ <dlg:text dlg:id="Label10" dlg:tab-index="27" dlg:left="9" dlg:top="89" dlg:width="0" dlg:height="0" dlg:value="Label10"/>
+ <dlg:text dlg:id="fsonly" dlg:tab-index="26" dlg:disabled="true" dlg:left="13" dlg:top="86" dlg:width="45" dlg:height="8" dlg:value="[Filesystem only]"/>
+ </dlg:bulletinboard>
+</dlg:window> \ No newline at end of file
diff --git a/scripting/workben/bindings/ScriptBinding.xba b/scripting/workben/bindings/ScriptBinding.xba
new file mode 100644
index 000000000000..7f689d34f797
--- /dev/null
+++ b/scripting/workben/bindings/ScriptBinding.xba
@@ -0,0 +1,2093 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
+<script:module xmlns:script="http://openoffice.org/2000/script" script:name="ScriptBinding" script:language="StarBasic">REM ***** BASIC *****
+
+REM ----- Global Variables -----
+
+&apos;bindingDialog can refer to either KeyBinding or MenuBinding dialog
+private languages() as String
+private extensions() as Object
+private locations() as String
+private filesysScripts() as String
+private filesysCount as integer
+private bindingDialog as object
+private helpDialog as object
+&apos;Couldn&apos;t get redim to work, so scriptDisplayList is and array of arrays
+&apos;where the one and only array in scriptDisplayList is an array
+&apos;of com.sun.star.beans.PropertyValue, where Name = [logicalName][FunctionName]
+&apos;and value is ScriptStorage object
+private scriptDisplayList(0)
+private testArray() as String
+&apos;Array to store lines from the xml file
+private xmlFile() as string
+&apos;Name of the xml file [writer/calc][menubar/keybindings].xml
+private xmlFileName as string
+&apos;Number of lines in the xml file
+private numberOfLines as integer
+
+&apos;Parallel arrays to store all top-level menu names and line positions
+private menuItems() as string
+private menuItemLinePosition() as integer
+&apos;Counter for the number of top-level menus
+private menuCount as integer
+
+&apos;Parallel arrays to store all sub-menu names and line positions for a particular top-level menu
+private subMenuItems() as string
+private subMenuItemLinePosition() as integer
+&apos;Counter for the number of sub-menus
+private subMenuCount as integer
+
+&apos;Parallel arrays to store all script names and line positions
+private scriptNames() as string
+private scriptLinePosition() as integer
+&apos;Counter for the number of scripts
+private scriptCount as integer
+
+&apos;Array to store all combinations of key bindings
+private allKeyBindings() as string
+
+&apos;Array of Arrays
+&apos;KeyBindArrayOfArrays(0) contains array of &quot;SHIFT + CONTROL + F Keys&quot; data
+&apos;Similarly
+&apos;KeyBindArrayOfArrays(1) contains SHIFT + CONTROL + digits
+&apos;KeyBindArrayOfArrays(2) contains SHIFT + CONTROL + letters
+&apos;KeyBindArrayOfArrays(3) contains CONTROL + F keys
+&apos;KeyBindArrayOfArrays(4) contains CONTROL + digits
+&apos;KeyBindArrayOfArrays(5) contains CONTROL + letters
+&apos;KeyBindArrayOfArrays(6) contains SHIFT + F keys
+private KeyBindArrayOfArrays(6)
+
+&apos;Each PropertyValue represents a key, Name member contains the script (if a binding exists)
+&apos; the Value contains and integer
+&apos; 0 means no script bound
+&apos; 1 script is bound to an office function
+&apos; &gt;1 line number of entry in xmlfile array
+private keyAllocationMap(6,25) as new com.sun.star.beans.PropertyValue
+&apos;array to store key group descriptions
+private AllKeyGroupsArray(6) as String
+
+
+&apos;Array of props to store all event bindings for the Applications
+private allEventTypesApp( 14 ) as new com.sun.star.beans.PropertyValue
+&apos;Array of props to store all event bindings for the Document
+private allEventTypesDoc( 14 ) as new com.sun.star.beans.PropertyValue
+&apos;Array of props to store all event types (Name) and textual description (Value)
+private allEventTypes( 14 ) as new com.sun.star.beans.PropertyValue
+
+
+private dialogName as String
+REM ------ Storage Refresh Function ------
+
+
+sub RefreshUserScripts()
+&apos; TDB - change Menu bindings to allow user to refresh all, user, share or document script
+ RefreshAppScripts( &quot;USER&quot; )
+end sub
+
+sub RefreshAllScripts()
+ RefreshAppScripts( &quot;USER&quot; )
+ RefreshAppScripts( &quot;SHARE&quot; )
+ RefreshDocumentScripts
+end sub
+
+sub RefreshAppScripts( appName as String )
+ On Error Goto ErrorHandler
+ smgr = getProcessServiceManager()
+ context = smgr.getPropertyValue( &quot;DefaultContext&quot; )
+ scriptstoragemgr = context.getValueByName( &quot;/singletons/drafts.com.sun.star.script.framework.storage.theScriptStorageManager&quot; )
+
+ scriptstoragemgr.refreshScriptStorage( appName )
+
+ Exit sub
+
+ ErrorHandler:
+ reset
+ MsgBox (&quot;Error: Unable to refresh Java (scripts)&quot; + chr$(10) + chr$(10)+ &quot;Detail: &quot; &amp; error$ + chr$(10) + chr$(10)+ &quot;Action: Please restart Office&quot;,0,&quot;Error&quot; )
+
+end sub
+
+sub RefreshDocumentScripts()
+ On Error Goto ErrorHandler
+ smgr = getProcessServiceManager()
+ context = smgr.getPropertyValue( &quot;DefaultContext&quot; )
+ scriptstoragemgr = context.getValueByName( &quot;/singletons/drafts.com.sun.star.script.framework.storage.theScriptStorageManager&quot; )
+
+ oDocURL = ThisComponent.GetCurrentController.getModel.getURL
+
+ On Error Goto ErrorHandlerDoc
+ scriptstoragemgr.refreshScriptStorage( oDocURL )
+
+ Exit sub
+
+ ErrorHandlerDoc:
+ reset
+ &apos; Ignore document script errors as it will happen when refreshing an unsaved doc
+ Exit sub
+
+ ErrorHandler:
+ reset
+ MsgBox (&quot;Error: Unable to refresh Java (scripts)&quot; + chr$(10) + chr$(10)+ &quot;Detail: &quot; &amp; error$ + chr$(10) + chr$(10)+ &quot;Action: Please restart Office&quot;,0,&quot;Error&quot; )
+
+end sub
+
+
+REM ----- Launch Functions -----
+
+Sub createAndPopulateKeyArrays()
+ &apos;Create SHIFT + CONTROL + F keys array
+ &apos;Dim keyGroupProp as new com.sun.star.beans.PropertyValue
+
+ Dim SCFKey( 11 )
+ for FKey = 1 to 12
+ SCFKey( FKey - 1 ) = &quot;SHIFT + CONTROL + F&quot; + FKey
+ next FKey
+
+ KeyBindArrayOfArrays(0) = SCFKey()
+
+ &apos;Create SHIFT + CONTROL + digits
+ Dim SCDKey( 9 )
+ for Digit = 0 to 9
+ SCDKey( Digit ) = &quot;SHIFT + CONTROL + &quot; + Digit
+ next Digit
+ KeyBindArrayOfArrays(1) = SCDKey()
+
+ &apos;Create SHIFT + CONTROL + letters
+
+ Dim SCLKey( 25 )
+ for Alpha = 65 to 90
+ SCLKey( Alpha - 65 ) = &quot;SHIFT + CONTROL + &quot; + chr$( Alpha )
+ next Alpha
+ KeyBindArrayOfArrays(2) = SCLKey()
+
+ &apos;Create CONTROL + F keys
+ Dim CFKey( 11 )
+ for FKey = 1 to 12
+ CFKey( Fkey - 1 ) = &quot;CONTROL + F&quot; + FKey
+ next FKey
+ KeyBindArrayOfArrays(3) = CFKey()
+
+ &apos;Create CONTROL + digits
+ Dim CDKey( 9 )
+ for Digit = 0 to 9
+ CDKey( Digit ) = &quot;CONTROL + &quot; + Digit
+ next Digit
+ KeyBindArrayOfArrays(4) = CDKey()
+
+ &apos;Create CONTROL + letters
+ Dim CLKey( 25 )
+ for Alpha = 65 to 90
+ CLKey( Alpha - 65 ) = &quot;CONTROL + &quot; + chr$( Alpha )
+ next Alpha
+ KeyBindArrayOfArrays(5) = CLKey()
+
+ &apos;Create SHIFT + F Keys
+ Dim SFKey( 11 )
+ for FKey = 1 to 12
+ SFKey( Fkey - 1 ) = &quot;SHIFT + F&quot; + FKey
+ next FKey
+ KeyBindArrayOfArrays(6) = SFKey()
+
+End Sub
+
+Sub updateMapWithDisabledKeys()
+ &apos;disable CONTROL + F1 &amp;
+ keyAllocationMap( 3, 0 ).Value = 1
+ keyAllocationMap( 3, 0 ).Name = &quot;&quot;
+ &apos;disable CONTROL + F4 &amp;
+ keyAllocationMap( 3, 3 ).Value = 1
+ keyAllocationMap( 3, 3 ).Name = &quot;&quot;
+ &apos;disable CONTROL + F6
+ keyAllocationMap( 3, 5 ).Value = 1
+ keyAllocationMap( 3, 5 ).Name = &quot;&quot;
+
+
+ &apos;disable SHIFT + F1 &amp;
+ keyAllocationMap( 6, 0 ).Value = 1
+ keyAllocationMap( 6, 0 ).Name = &quot;&quot;
+ &apos;disable SHIFT + F2 &amp;
+ keyAllocationMap( 6, 1 ).Value = 1
+ keyAllocationMap( 6, 1 ).Name = &quot;&quot;
+ &apos;disable SHIFT + F6 &amp;
+ keyAllocationMap( 6, 5 ).Value = 1
+ keyAllocationMap( 6, 5 ).Name = &quot;&quot;
+
+End Sub
+
+Sub initialiseFileExtensions()
+ ReDim extensions(ubound(languages())+1) as Object
+ oConfigProvider = CreateUnoService( &quot;com.sun.star.configuration.ConfigurationProvider&quot; )
+ Dim configArgs(1) as new com.sun.star.beans.PropertyValue
+ configargs(0).Name = &quot;nodepath&quot;
+ configArgs(0).Value = &quot;org.openoffice.Office.Scripting/ScriptRuntimes&quot;
+ configargs(1).Name = &quot;lazywrite&quot;
+ configArgs(1).Value = false
+ oConfigAccess = oConfigProvider.createInstanceWithArguments(&quot;com.sun.star.configuration.ConfigurationAccess&quot;, configArgs())
+ for index = 0 to ubound(languages())
+ if(languages(index) &lt;&gt; &quot;Java&quot;) then
+ xPropSet = oConfigAccess.getByName(languages(index))
+ extns() = xPropSet.getPropertyValue(&quot;SupportedFileExtensions&quot;)
+ extensions(index) = extns()
+ endif
+ next index
+end sub
+
+Sub ExecuteEditDebug()
+
+ locations = Array ( &quot;User&quot;, &quot;Share&quot;, &quot;Document&quot;, &quot;Filesystem&quot; )
+ languages = Array ( &quot;BeanShell&quot;, &quot;JavaScript&quot; )
+ dialogName = &quot;EditDebug&quot;
+ initialiseFileExtensions()
+ bindingDialog = LoadDialog( &quot;ScriptBindingLibrary&quot;, &quot;EditDebug&quot; )
+
+ PopulateLanguageCombo()
+ PopulateLocationCombo()
+ PopulateScriptList( languages(0), locations(0) )
+
+ bindingDialog.execute()
+End Sub
+
+Sub ExecuteKeyBinding()
+ dialogName = &quot;Key&quot;
+ createAndPopulateKeyArrays()
+ updateMapWithDisabledKeys()
+ xmlFileName = GetDocumentType( &quot;Key&quot; )
+
+ if not (ReadXMLToArray( &quot;Key&quot; )) then
+ Exit Sub
+ endif
+
+ bindingDialog = LoadDialog( &quot;ScriptBindingLibrary&quot;, &quot;KeyBinding&quot; )
+ PopulateKeyBindingList(0)
+ initialiseNavigationComboArrays()
+ PopulateLanguageCombo()
+ PopulateLocationCombo()
+ PopulateScriptList( languages(0), locations(0) )
+ PopulateTopLevelKeyBindingList()
+ bindingDialog.execute()
+end Sub
+
+
+Sub initialiseNavigationComboArrays()
+ locations = Array ( &quot;User&quot;, &quot;Share&quot;, &quot;Document&quot;, &quot;Filesystem&quot; )
+ ReDim languages(0) as String
+ ReDim extensions(0) as Object
+ languages(0) = &quot;Java&quot;
+ REM extensions(0) = &quot;&quot;
+
+ &apos; Setup languages array for all supported languages
+ oServiceManager = GetProcessServiceManager()
+ svrArray = oServiceManager.getAvailableServiceNames
+
+ langCount = 1
+ for index = 0 to ubound(svrArray)
+ iPos = inStr(svrArray(index), &quot;ScriptProviderFor&quot;)
+
+ if (iPos &gt; 0) then
+ lang = Mid(svrArray(index), iPos + Len(&quot;ScriptProviderFor&quot;)
+
+ if not (lang = &quot;Java&quot;) then
+ &apos;Add to language vector
+ ReDim Preserve languages(langCount) as String
+ languages(langCount) = lang
+ langCount = langCount + 1
+ endif
+ endif
+ next index
+ initialiseFileExtensions()
+End Sub
+
+
+Sub ExecuteEventBinding
+ dialogName = &quot;Event&quot;
+ createAllEventTypes()
+ createAllEventBindings()
+
+ &apos;Populate application event bindings array (from config xml file)
+ if not (ReadXMLToArray( &quot;Event&quot; )) then
+ Exit Sub
+ endif
+ &apos;Populate document event bindings array (using Office API calls)
+ ReadEventsFromDoc()
+
+ bindingDialog = LoadDialog( &quot;ScriptBindingLibrary&quot;, &quot;EventsBinding&quot; )
+ initialiseNavigationComboArrays()
+ PopulateLanguageCombo()
+ PopulateLocationCombo()
+ PopulateScriptList( languages(0), locations(0) )
+ populateEventList( 0 )
+ EventListListener()
+ bindingDialog.execute()
+End Sub
+
+Sub ExecuteMenuBinding()
+ dialogName = &quot;Menu&quot;
+ xmlFileName = GetDocumentType( &quot;Menu&quot; )
+ if not (ReadXMLToArray( &quot;Menu&quot; )) then
+ Exit Sub
+ endif
+
+ bindingDialog = LoadDialog( &quot;ScriptBindingLibrary&quot;, &quot;MenuBinding&quot; )
+ initialiseNavigationComboArrays()
+ PopulateLanguageCombo()
+ PopulateLocationCombo()
+ PopulateScriptList( languages(0), locations(0) )
+ PopulateMenuCombo()
+ PopulateSubMenuList( 1 )
+
+ subMenuList = bindingDialog.getControl(&quot;SubMenuList&quot;)
+
+ subMenuList.selectItemPos( 0, true )
+
+ bindingDialog.execute()
+end Sub
+
+
+REM ----- Initialising functions -----
+
+
+function LoadDialog( libName as string, dialogName as string ) as object
+ dim library as object
+ dim libDialog as object
+ dim runtimeDialog as object
+ libContainer = DialogLibraries
+ libContainer.LoadLibrary( libName )
+ library = libContainer.getByName( libname )
+ libDialog = library.getByName( dialogName )
+ runtimeDialog = CreateUnoDialog( libDialog )
+ LoadDialog() = runtimeDialog
+
+end function
+
+
+function GetDocumentType( bindingType as string ) as string
+ document = StarDesktop.ActiveFrame.Controller.Model
+ Dim errornumber As Integer
+ errornumber = 111
+ Error errornumber
+ if document.SupportsService(&quot;com.sun.star.sheet.SpreadsheetDocument&quot;) then
+ if bindingType = &quot;Key&quot; then
+ GetDocumentType() = &quot;calckeybinding.xml&quot;
+ else
+ if bindingType = &quot;Menu&quot; then
+ GetDocumentType() = &quot;calcmenubar.xml&quot;
+ end if
+ end if
+ elseif document.SupportsService(&quot;com.sun.star.text.TextDocument&quot;) then
+ if bindingType = &quot;Key&quot; then
+ GetDocumentType() = &quot;writerkeybinding.xml&quot;
+ else
+ if bindingType = &quot;Menu&quot; then
+ GetDocumentType() = &quot;writermenubar.xml&quot;
+ end if
+ end if
+ elseif document.SupportsService(&quot;com.sun.star.presentation.PresentationDocument&quot;) then
+ if bindingType = &quot;Key&quot; then
+ GetDocumentType() = &quot;impresskeybinding.xml&quot;
+ else
+ if bindingType = &quot;Menu&quot; then
+ GetDocumentType() = &quot;impressmenubar.xml&quot;
+ end if
+ end if
+ elseif document.SupportsService(&quot;com.sun.star.presentation.PresentationDocument&quot;) then
+ if bindingType = &quot;Key&quot; then
+ GetDocumentType() = &quot;impresskeybinding.xml&quot;
+ else
+ if bindingType = &quot;Menu&quot; then
+ GetDocumentType() = &quot;impressmenubar.xml&quot;
+ end if
+ end if
+ elseif document.SupportsService(&quot;com.sun.star.drawing.DrawingDocument&quot;) then
+ if bindingType = &quot;Key&quot; then
+ GetDocumentType() = &quot;drawkeybinding.xml&quot;
+ else
+ if bindingType = &quot;Menu&quot; then
+ GetDocumentType() = &quot;drawmenubar.xml&quot;
+ end if
+ end if
+ else
+ MsgBox (&quot;Error: Couldn&apos;t determine configuration file type&quot; + chr$(10) + chr$(10) + &quot;Action: Please reinstall Scripting Framework&quot;,0,&quot;Error&quot; )
+ end if
+end function
+
+function lastIndexOf( targetStr as String, substr as String ) as Integer
+ copyStr = targetStr
+ while instr(copyStr, substr) &gt; 0
+ pos = instr(copyStr, substr)
+ tpos = tpos + pos
+ copyStr = mid(copyStr, pos+1, len(copyStr)-pos )
+ wend
+ lastIndexOf() = tpos
+end function
+
+function getScriptURI( selectedScript as String ) as String
+ combo = bindingDialog.getControl( &quot;LocationCombo&quot; )
+ location = combo.text
+ if ( location = &quot;User&quot; ) then
+ location = &quot;user&quot;
+ elseif ( location = &quot;Share&quot; ) then
+ location = &quot;share&quot;
+ elseif ( location = &quot;Filesystem&quot; ) then
+ location = &quot;filesystem&quot;
+ else
+ location = &quot;document&quot;
+ end if
+
+
+
+ if ( location = &quot;filesystem&quot; ) then
+ REM need to build URI here - dcf
+ combo = bindingDialog.getControl( &quot;LanguageCombo&quot; )
+ language = combo.text
+ url = selectedscript
+ pos = lastIndexOf( url, &quot;/&quot; )
+ locationPath = mid( url, 1, pos)
+ url = mid( url, pos+1, len( url ) - pos )
+ functionName = url
+ pos = lastIndexOf( url, &quot;.&quot; )
+ logicalName = mid( url, 1, pos - 1 )
+ getScriptURI() = &quot;script://&quot; + logicalName + &quot;?language=&quot; _
+ + language + &quot;&amp;amp;function=&quot; + functionName _
+ + &quot;&amp;amp;location=filesystem:&quot; + locationPath
+ else
+ Dim scriptInfo as Object
+ scripts() = scriptDisplayList(0)
+ for n = LBOUND( scripts() ) to UBOUND( scripts() )
+
+ if ( scripts( n ).Name = selectedScript ) then
+ scriptInfo = scripts( n ).Value
+ exit for
+ end if
+ next n
+ getScriptURI() = &quot;script://&quot; + scriptInfo.getLogicalName + &quot;?language=&quot; _
+ + scriptInfo.getLanguage() + &quot;&amp;amp;function=&quot; + _
+ scriptInfo.getFunctionName() + &quot;&amp;amp;location=&quot; + location
+ end if
+
+end function
+
+function GetOfficePath() as string
+ REM Error check and prompt user to manually input Office Path
+ settings = CreateUnoService( &quot;com.sun.star.frame.Settings&quot; )
+ path = settings.getByName( &quot;PathSettings&quot; )
+ unformattedOfficePath = path.getPropertyValue( &quot;UserPath&quot; )
+
+ dim officePath as string
+ const removeFromEnd = &quot;/user&quot;
+ const removeFromEndWindows = &quot;\user&quot;
+
+ REM If Solaris or Linux
+ if not ( instr( unformattedOfficePath, removeFromEnd ) = 0 ) then
+ endPosition = instr( unformattedOfficePath, removeFromEnd )
+ officePath = mid( unformattedOfficePath, 1, endPosition )
+ REM If Windows
+ else if not ( instr( unformattedOfficePath, removeFromEndWindows ) = 0 ) then
+ endPosition = instr( unformattedOfficePath, removeFromEndWindows )
+ officePath = mid( unformattedOfficePath, 1, endPosition )
+ while instr( officePath, &quot;\&quot; ) &gt; 0
+ backSlash = instr( officePath, &quot;\&quot; )
+ startPath = mid( officePath, 1, backSlash - 1 )
+ endPath = mid( officePath, backslash + 1, len( officePath ) - backSlash )
+ officePath = startPath + &quot;/&quot; + endPath
+ wend
+ else
+ MsgBox (&quot;Error: Office path not found&quot; + chr$(10) + chr$(10) + &quot;Action: Please reinstall Scripting Framework&quot;,0,&quot;Error&quot; )
+ REM Prompt user
+ end if
+ end if
+
+ GetOfficePath() = officePath
+end function
+
+
+
+REM ----- File I/O functions -----
+
+
+function ReadXMLToArray( bindingType as string ) as boolean
+ On Error Goto ErrorHandler
+ if ( bindingType = &quot;Event&quot; ) then
+ xmlfilename = &quot;eventbindings.xml&quot;
+ endif
+
+ simplefileaccess = CreateUnoService( &quot;com.sun.star.ucb.SimpleFileAccess&quot; )
+ filestream = simplefileaccess.openFileRead( &quot;file://&quot; + GetOfficePath() + &quot;user/config/soffice.cfg/&quot; + xmlFileName )
+
+ textin = CreateUnoService( &quot;com.sun.star.io.TextInputStream&quot; )
+ textin.setInputStream( filestream )
+
+ redim xmlFile( 400 ) as String
+ redim menuItems( 30 ) as String
+ redim menuItemLinePosition( 30 ) as Integer
+ redim scriptNames( 120 ) as string
+ redim scriptLinePosition( 120) as integer
+
+ lineCount = 1
+ menuCount = 1
+ scriptCount = 1
+
+ do while not textin.isEOF()
+ xmlline = textin.readLine()
+ xmlFile( lineCount ) = xmlline
+
+ const menuItemWhiteSpace = 2
+ const menuXMLTag = &quot;&lt;menu:menu&quot;
+
+ if bindingType = &quot;Menu&quot; then
+ evaluateForMenu( xmlline, lineCount )
+ elseif bindingType = &quot;Key&quot; then
+ processKeyXMLLine( lineCount, xmlline )
+ elseif bindingType = &quot;Event&quot; then
+ evaluateForEvent( xmlline, lineCount )
+ else
+ MsgBox (&quot;Error: Couldn&apos;t determine file type&quot; + chr$(10) + chr$(10) + &quot;Action: Please reinstall Scripting Framework&quot;,0,&quot;Error&quot; )
+ end if
+ lineCount = lineCount + 1
+ loop
+
+ &apos;Set global variable numberOfLines (lineCount is one too many at end of the loop)
+ numberOfLines = lineCount - 1
+ &apos;Set global variable menuCount (it is one too many at end of the loop)
+ menuCount = menuCount - 1
+
+ filestream.closeInput()
+ ReadXMLToArray( ) = true
+ Exit function
+
+ ErrorHandler:
+ reset
+ MsgBox (&quot;Error: Unable to read Star Office configuration file - &quot; + xmlFileName + chr$(10) + chr$(10) + &quot;Action: Please reinstall Scripting Framework&quot;,0,&quot;Error&quot; )
+ ReadXMLToArray( ) = false
+end function
+
+
+
+sub evaluateForMenu( xmlline as string, lineCount as integer )
+ const menuItemWhiteSpace = 2
+ const menuXMLTag = &quot;&lt;menu:menu&quot;
+ &apos;If the xml line is a top-level menu
+ if instr( xmlline, menuXMLTag ) = menuItemWhiteSpace then
+ menuLabel = ExtractLabelFromXMLLine( xmlline )
+ menuItems( menuCount ) = menuLabel
+ menuItemLinePosition( menuCount ) = lineCount
+ menuCount = menuCount + 1
+ end if
+end sub
+
+sub evaluateForEvent( xmlline as string, lineCount as integer )
+ dim eventName as String
+ &apos;if the xml line identifies a script or SB macro
+ dim scriptName as string
+ dim lineNumber as integer
+ if instr( xmlline, &quot;event:language=&quot; + chr$(34) + &quot;Script&quot; ) &gt; 0 then
+ eventName = ExtractEventNameFromXMLLine( xmlline )
+ scriptName = ExtractEventScriptFromXMLLine( xmlline )
+ lineNumber = lineCount
+ elseif instr( xmlline, &quot;event:language=&quot; + chr$(34) + &quot;StarBasic&quot; ) &gt; 0 then
+ eventName = ExtractEventNameFromXMLLine( xmlline )
+ scriptName = &quot;Allocated to Office function&quot;
+ lineNumber = 1
+ end if
+
+ &apos;Need to sequence to find the corresponding index for the event type
+ for n = 0 to ubound( allEventTypesApp() )
+ if ( eventName = allEventTypes( n ).Name ) then
+ allEventTypesApp( n ).Name = scriptName
+ allEventTypesApp( n ).Value = lineNumber
+ end if
+ next n
+end sub
+
+
+function isOKscriptProps( props() as Object, eventName as string ) as Boolean
+ On Error Goto ErrorHandler
+ props = ThisComponent.getEvents().getByName( eventName )
+ test = ubound( props() )
+ isOKscriptProps() = true
+ exit function
+
+ ErrorHandler:
+ isOKscriptProps() = false
+end function
+
+sub ReadEventsFromDoc()
+ On Error Goto ErrorHandler
+
+ eventSupplier = ThisComponent
+ for n = 0 to ubound( allEventTypes() )
+ Dim scriptProps() as Object
+ if (isOKscriptProps( scriptProps(), allEventTypes( n ).Name) ) then
+ if ( ubound( scriptProps ) &gt; 0 ) then
+ if ( scriptProps(0).Value = &quot;Script&quot; ) then
+ &apos;Script binding
+ allEventTypesDoc(n).Name = scriptProps(1).Value
+ allEventTypesDoc(n).value = 2
+ elseif( scriptProps(0).Value = &quot;StarBasic&quot; ) then
+ &apos;StarBasic macro
+ allEventTypesDoc(n).Name = &quot;Allocated to Office function&quot;
+ allEventTypesDoc(n).value = 1
+ end if
+ end if
+ end if
+ next n
+
+ exit sub
+
+ &apos; eventProps is undefined if there are no event bindings in the doc
+ ErrorHandler:
+ reset
+end sub
+
+
+sub WriteEventsToDoc()
+ On Error Goto ErrorHandler
+
+ eventSupplier = ThisComponent
+ for n = 0 to ubound( allEventTypes() )
+ scriptName = allEventTypesDoc( n ).Name
+ eventName = allEventTypes( n ).Name
+ if( allEventTypesDoc( n ).Value &gt; 1 ) then &apos;script
+ &apos;add to doc
+ AddEventToDocViaAPI( scriptName, eventName )
+ elseif( allEventTypesDoc( n ).Value = 0 ) then &apos;blank (this will &quot;remove&quot; already blank entries)
+ &apos;remove from doc
+ RemoveEventFromDocViaAPI( eventName )
+ endif
+ &apos;Otherwise it is a StarBasic binding - leave alone
+ next n
+ &apos;Mark document as modified ( should happen automatically as a result of calling the API )
+ ThisComponent.CurrentController.getModel().setModified( True )
+ exit sub
+
+ ErrorHandler:
+ reset
+ msgbox( &quot;Error calling UNO API for writing event bindings to the document&quot; )
+end sub
+
+
+sub RemoveEventFromDocViaAPI( event as string )
+ dim document as object
+ dim dispatcher as object
+ dim parser as object
+ dim url as new com.sun.star.util.URL
+
+ document = ThisComponent.CurrentController.Frame
+ parser = createUnoService(&quot;com.sun.star.util.URLTransformer&quot;)
+ dim args(0) as new com.sun.star.beans.PropertyValue
+ args(0).Name = &quot;&quot;
+ args(0).Value = event
+
+ url.Complete = &quot;script://_$ScriptFrmwrkHelper.removeEvent?&quot; _
+ + &quot;language=Java&amp;function=ScriptFrmwrkHelper.removeEvent&quot; _
+ + &quot;&amp;location=share&quot;
+
+ parser.parseStrict(url)
+ disp = document.queryDispatch(url,&quot;&quot;,0)
+ disp.dispatch(url,args())
+end sub
+
+
+sub AddEventToDocViaAPI( scriptName as string, eventName as string )
+ dim properties( 1 ) as new com.sun.star.beans.PropertyValue
+ properties( 0 ).Name = &quot;EventType&quot;
+ properties( 0 ).Value = &quot;Script&quot;
+ properties( 1 ).Name = &quot;Script&quot;
+ properties( 1 ).Value = scriptName
+
+ eventSupplier = ThisComponent
+ nameReplace = eventSupplier.getEvents()
+ nameReplace.replaceByName( eventName, properties() )
+end sub
+
+
+&apos; returns 0 for Fkey
+&apos; 1 for digit
+&apos; 2 for letter
+
+function getKeyTypeOffset( key as String ) as integer
+ length = Len( key )
+ if ( length &gt; 1 ) then
+ getKeyTypeOffset() = 0
+
+ elseif ( key &gt;= &quot;0&quot; AND key &lt;= &quot;9&quot; ) then
+ getKeyTypeOffset() = 1
+ else
+ getKeyTypeOffset() = 2
+ end if
+end function
+
+function getKeyGroupIndex( key as String, offset as Integer ) as Integer
+ &apos; Keys we are interested in are A - Z, F2 - F12, 0 - 9 anything else should
+ &apos; ensure -1 is returned
+ cutKey = mid( key,2 )
+
+ if ( cutKey &lt;&gt; &quot;&quot; ) then
+ acode = asc ( mid( cutKey,1,1) )
+ if ( acode &gt; 57 ) then
+ getKeyGroupIndex() = -1
+ exit function
+ end if
+ end if
+
+ select case offset
+ case 0:
+ num = cint( cutKey )
+ getKeyGroupIndex() = num - 1
+ exit function
+ case 1:
+ num = asc( key ) - 48
+ getKeyGroupIndex() = num
+ exit function
+ case 2:
+ num = asc( key ) - 65
+ getKeyGroupIndex() = num
+ exit function
+ end select
+ getKeyGroupIndex() = -1
+end function
+
+Sub processKeyXMLLine( lineCount as Integer, xmlline as String )
+
+ if instr( xmlline, &quot;&lt;accel:item&quot; ) &gt; 0 then
+ shift = false
+ control = false
+ if instr( xmlline, &quot;accel:shift=&quot;+chr$(34)+&quot;true&quot;+chr$(34) ) &gt; 0 then
+ shift = true
+ end if
+ if instr( xmlFile( lineCount ), &quot;accel:mod1=&quot;+chr$(34)+&quot;true&quot;+chr$(34) ) &gt; 0 then
+ control = true
+ end if
+ offsetIntoArrayOfArrays = -1 &apos;default unknown
+ if ( control AND shift ) then
+ offsetIntoArrayOfArrays = 0
+ elseif ( control ) then
+ offsetIntoArrayOfArrays = 3
+ elseif ( shift ) then
+ offsetIntoArrayOfArrays = 6
+ endif
+ &apos; Calculate which of the 7 key group arrays we need to point to
+ key = ExtractKeyCodeFromXMLLine( xmlline )
+ keyTypeOffset = getKeyTypeOffset( key )
+ offsetIntoArrayOfArrays = offsetIntoArrayOfArrays + keyTypeOffset
+
+ &apos; Calculate from the key the offset into key group array we need to point to
+ KeyGroupIndex = getKeyGroupIndex( key, keyTypeOffset )
+ if ( offsetIntoArrayOfArrays = -1 ) then
+ &apos;Unknown key group, no processing necessary
+ Exit Sub
+ end if
+ if ( KeyGroupIndex &gt; -1 ) then
+
+ &apos; Determine if a script framework binding is present or not
+ if instr( xmlline, &quot;script://&quot; ) &gt; 0 then
+ &apos; its one of ours so update its details
+ scriptName = ExtractScriptIdFromXMLLine( xmlline )
+
+ keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value = lineCount
+ keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Name = scriptName
+ else
+ keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value = 1
+ keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Name = &quot;&quot;
+
+ end if
+ end if
+ end if
+End Sub
+
+Sub WriteXMLFromArray()
+ On Error Goto ErrorHandler
+ cfgFile = GetOfficePath() + &quot;user/config/soffice.cfg/&quot; + xmlFileName
+ updateCfgFile( cfgFile )
+ &apos;if ( false ) then&apos; config stuff not in build yet
+ if ( true ) then
+ updateConfig( xmlFileName )
+ else
+ msgbox (&quot;Office must be restarted before your changes will take effect.&quot;+ chr$(10)+&quot;Also close the Office QuickStarter (Windows and Linux)&quot;, 48, &quot;Assign Script (Java) To Menu&quot; )
+ endif
+ Exit Sub
+
+ ErrorHandler:
+ reset
+ MsgBox (&quot;Error: Unable to write to Star Office configuration file&quot; + chr$(10) + &quot;/&quot; + GetOfficePath() + &quot;user/config/soffice.cfg/&quot; +xmlFileName + chr$(10) + chr$(10) + &quot;Action: Please make sure you have write access to this file&quot;,0,&quot;Error&quot; )
+end Sub
+
+
+Sub UpdateCfgFile ( fileName as String )
+ dim ScriptProvider as Object
+ dim Script as Object
+ dim args(1)
+ dim displayDialogFlag as boolean
+ displayDialogFlag = false
+ args(0) = ThisComponent
+ args(1) = displayDialogFlag
+
+ ScriptProvider = createUnoService(&quot;drafts.com.sun.star.script.framework.provider.MasterScriptProvider&quot;)
+ ScriptProvider.initialize( args() )
+ Script = ScriptProvider.getScript(&quot;script://_$ScriptFrmwrkHelper.updateCfgFile?&quot; _
+ + &quot;language=Java&amp;function=ScriptFrmwrkHelper.updateCfgFile&amp;location=share&quot;)
+ Dim inArgs(2)
+ Dim outArgs()
+ Dim outIndex()
+ dim localNumLines as integer
+
+ inArgs(0) = xmlFile()
+ inArgs(1) = fileName
+ inArgs(2) = numberOfLines
+ Script.invoke( inArgs(), outIndex(), outArgs() )
+End Sub
+
+sub UpdateConfig( a$ )
+ dim document as object
+ dim dispatcher as object
+ dim parser as object
+ dim disp as object
+ dim url as new com.sun.star.util.URL
+ document = ThisComponent.CurrentController.Frame
+ parser = createUnoService(&quot;com.sun.star.util.URLTransformer&quot;)
+ dim args1(0) as new com.sun.star.beans.PropertyValue
+ args1(0).Name = &quot;StreamName&quot;
+ args1(0).Value = a$
+ url.Complete = &quot;.uno:UpdateConfiguration&quot;
+ parser.parseStrict(url)
+ disp = document.queryDispatch(url,&quot;&quot;,0)
+ disp.dispatch(url,args1())
+
+End Sub
+
+
+sub AddNewEventBinding( scriptName as string, eventPosition as integer, isApp as boolean )
+ event = allEventTypes( eventPosition ).Name
+ &apos;dim scriptProp as new com.sun.star.beans.PropertyValue
+ if isApp then
+ &apos;scriptProp.Name = scriptName
+ &apos;scriptProp.Value = numberOfLines
+ allEventTypesApp( eventPosition ).Name = scriptName
+ allEventTypesApp( eventPosition ).Value = numberOfLines
+
+ newline = &quot; &lt;event:event event:name=&quot; + chr$(34) + event + chr$(34)
+ newline = newline + &quot; event:language=&quot; + chr$(34) + &quot;Script&quot; + chr$(34) + &quot; xlink:href=&quot; + chr$(34)
+ newline = newline + scriptName + chr$(34) + &quot; xlink:type=&quot; + chr$(34) + &quot;simple&quot; + chr$(34) + &quot;/&gt;&quot;
+ xmlFile( numberOfLines ) = newline
+ xmlFile( numberOfLines + 1 ) = &quot;&lt;/event:events&gt;&quot;
+ numberOfLines = numberOfLines + 1
+ else
+ &apos;scriptProp.Name = scriptName
+ &apos;scriptProp.Value = 2
+ allEventTypesDoc( eventPosition ).Name = scriptName
+ allEventTypesDoc( eventPosition ).Value = 2
+ end if
+end sub
+
+REM ----- Array update functions -----
+
+
+sub AddNewMenuBinding( newScript as string, newMenuLabel as string, newLinePosition as integer )
+ dim newXmlFile( 400 ) as string
+ dim newLineInserted as boolean
+ dim lineCounter as integer
+ lineCounter = 1
+
+ do while lineCounter &lt;= numberOfLines
+ if not newLineInserted then
+ REM If the line number is the position at which to insert the new line
+ if lineCounter = newLinePosition then
+ if( instr( xmlFile( lineCounter ), &quot;&lt;menu:menupopup&gt;&quot; ) &gt; 0 ) then
+ indent = GetMenuWhiteSpace( xmlFile( newLinePosition + 1 ) )
+ newXmlFile( lineCounter ) = xmlFile( lineCounter )
+ newXmlFile( lineCounter + 1 ) = ( indent + &quot;&lt;menu:menuitem menu:id=&quot;+chr$(34) + newScript + chr$(34)+&quot; menu:helpid=&quot;+chr$(34)+&quot;1929&quot;+chr$(34)+&quot; menu:label=&quot;+chr$(34)+ newMenuLabel + chr$(34)+&quot;/&gt;&quot; )
+ else
+ indent = GetMenuWhiteSpace( xmlFile( newLinePosition - 1 ) )
+ newXmlFile( lineCounter ) = ( indent + &quot;&lt;menu:menuitem menu:id=&quot;+chr$(34) + newScript + chr$(34)+&quot; menu:helpid=&quot;+chr$(34)+&quot;1929&quot;+chr$(34)+&quot; menu:label=&quot;+chr$(34)+ newMenuLabel + chr$(34)+&quot;/&gt;&quot; )
+ newXmlFile( lineCounter + 1 ) = xmlFile( lineCounter )
+ end if
+ REM added -1 for debug --&gt;
+ &apos; indent = GetMenuWhiteSpace( xmlFile( newLinePosition ) )
+ &apos; newXmlFile( lineCounter ) = ( indent + &quot;&lt;menu:menuitem menu:id=&quot;+chr$(34)+&quot;script://&quot; + newScript + chr$(34)+&quot; menu:helpid=&quot;+chr$(34)+&quot;1929&quot;+chr$(34)+&quot; menu:label=&quot;+chr$(34)+ newMenuLabel + chr$(34)+&quot;/&gt;&quot; )
+ &apos; newXmlFile( lineCounter + 1 ) = xmlFile( lineCounter )
+ newLineInserted = true
+ else
+ newXmlFile( lineCounter ) = xmlFile( lineCounter )
+ end if
+ else
+ REM if the new line has been inserted the read from one position behind
+ newXmlFile( lineCounter + 1 ) = xmlFile( lineCounter )
+ end if
+ lineCounter = lineCounter + 1
+ loop
+
+ numberOfLines = numberOfLines + 1
+
+ REM read the new file into the global array
+ for n = 1 to numberOfLines
+ xmlFile( n ) = newXmlFile( n )
+ next n
+
+end sub
+
+
+sub AddNewKeyBinding( scriptName as string, shift as boolean, control as boolean, key as string )
+
+ dim keyCombo as string
+ newLine = &quot; &lt;accel:item accel:code=&quot;+chr$(34)+&quot;KEY_&quot; + key +chr$(34)
+ if shift then
+ keyCombo = &quot;SHIFT + &quot;
+ newLine = newLine + &quot; accel:shift=&quot;+chr$(34)+&quot;true&quot;+chr$(34)
+ end if
+ if control then
+ keyCombo = keyCombo + &quot;CONTROL + &quot;
+ newLine = newLine + &quot; accel:mod1=&quot;+chr$(34)+&quot;true&quot;+chr$(34)
+ end if
+ keyCombo = keyCombo + key
+ newLine = newLine + &quot; xlink:href=&quot;+chr$(34)+ scriptName +chr$(34) +&quot;/&gt;&quot;
+
+ if ( control AND shift ) then
+ offsetIntoArrayOfArrays = 0
+ elseif ( control ) then
+ offsetIntoArrayOfArrays = 3
+ elseif ( shift ) then
+ offsetIntoArrayOfArrays = 6
+ endif
+
+ keyTypeOffset = getKeyTypeOffset( key )
+ offsetIntoArrayOfArrays = offsetIntoArrayOfArrays + keyTypeOffset
+ &apos; Calculate from the key the offset into key group array we need to point to
+ KeyGroupIndex = getKeyGroupIndex( key, keyTypeOffset )
+
+ &apos; if key is allready allocated to a script then just reallocate
+ if ( keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value &gt; 1 ) then
+
+ keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Name = scriptName
+ &apos;replace line in xml file
+ xmlFile( keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value ) = newLine
+ else
+ &apos; this is a new binding, create a new line in xml file
+ for n = 1 to numberOfLines
+ if n = numberOfLines then
+ xmlFile( n ) = newLine
+ xmlFile( n + 1 ) = &quot;&lt;/accel:acceleratorlist&gt;&quot;
+ exit for
+ else
+ xmlFile( n ) = xmlFile( n )
+ end if
+ next n
+
+ keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value = n
+ keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Name = scriptName
+ numberOfLines = numberOfLines + 1
+ endif
+
+end sub
+
+
+Sub RemoveBinding( lineToRemove as Integer )
+ xmlFile( lineToRemove ) = &quot;&quot;
+end Sub
+
+REM Adds or removes the starting xml line positions for each top-level menu after the menu with the added script
+sub UpdateTopLevelMenus( topLevelMenuPosition as integer, addLine as boolean )
+ for n = topLevelMenuPosition to 8
+ if addLine then
+ menuItemLinePosition( n ) = menuItemLinePosition( n ) + 1
+
+ end if
+ next n
+end sub
+
+
+REM Remove scriptNames and scriptLinePosition entries
+sub RemoveScriptNameAndPosition( keyComboPosition )
+ dim updatedScriptNames( 120 ) as string
+ dim updatedScriptLinePosition( 120 ) as integer
+ dim removedScript as boolean
+ removedScript = false
+
+ for n = 1 to scriptCount
+ if not removedScript then
+ if not( n = keyComboPosition ) then
+ updatedScriptNames( n ) = scriptNames( n )
+ else
+ removedScript = true
+ end if
+ else
+ updatedScriptNames( n - 1 ) = scriptNames( n )
+ end if
+ next n
+ scriptCount = scriptCount - 1
+
+ for n = 1 to scriptCount
+ scriptNames( n ) = updatedScriptNames( n )
+ next n
+end sub
+
+
+
+REM ----- Populating Dialog Controls -----
+
+Sub PopulateLanguageCombo()
+ langCombo = bindingDialog.getControl( &quot;LanguageCombo&quot; )
+ langCombo.removeItems( 0, langCombo.getItemCount() )
+ for n = LBOUND( languages() ) to UBOUND ( languages() )
+ langCombo.addItem( languages( n ), n )
+ next n
+ langCombo.setDropDownLineCount( n )
+ langCombo.text = langCombo.getItem( 0 )
+End Sub
+
+Sub PopulateLocationCombo()
+ dim ScriptProvider as Object
+ dim args(1)
+ dim displayDialogFlag as boolean
+ displayDialogFlag = false
+ args(0) = ThisComponent
+ args(1) = displayDialogFlag
+
+ ScriptProvider = createUnoService(&quot;drafts.com.sun.star.script.framework.provider.MasterScriptProvider&quot;)
+ ScriptProvider.initialize( args() )
+
+ locCombo = bindingDialog.getControl( &quot;LocationCombo&quot; )
+ locCombo.removeItems( 0, locCombo.getItemCount() )
+ for n = LBOUND( locations() ) to UBOUND ( locations() )
+ locCombo.addItem( locations( n ), n )
+ next n
+ locCombo.setDropDownLineCount( n )
+ locCombo.text = locCombo.getItem( 0 )
+End Sub
+
+sub PopulateScriptList( lang as String, loc as String )
+ Dim detailedView as boolean
+ detailedView = bindingDialog.Model.detail.state
+ scriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ scriptList.removeItems( 0, scriptList.getItemCount() )
+
+ smgr = getProcessServiceManager()
+ context = smgr.getPropertyValue( &quot;DefaultContext&quot; )
+ scriptstoragemgr = context.getValueByName( &quot;/singletons/drafts.com.sun.star.script.framework.storage.theScriptStorageManager&quot; )
+ scriptLocationURI = &quot;USER&quot;
+ if ( loc = &quot;Share&quot; ) then
+ scriptLocationURI = &quot;SHARE&quot;
+ elseif ( loc = &quot;Document&quot; )then
+ document = StarDesktop.ActiveFrame.Controller.Model
+ scriptLocationURI = document.getURL()
+ elseif ( loc = &quot;Filesystem&quot; ) then
+ REM populate the list from the filesysScripts list
+ if(lang = &quot;Java&quot; ) then
+ exit sub
+ endif
+ length = UBOUND( filesysScripts() )
+ if(length = -1) then
+ exit sub
+ endif
+ for langIndex = lbound(languages()) to ubound(languages())
+ if ( lang = languages(langIndex)) then
+ extns = extensions(langIndex)
+ exit for
+ endif
+ next langIndex
+ dim locnDisplayList( length ) as new com.sun.star.beans.PropertyValue
+ for index = lbound(filesysScripts()) to ubound(filesysScripts())
+ scriptextn = filesysScripts( index )
+ pos = lastIndexOf( scriptextn, &quot;.&quot; )
+ scriptextn = mid( scriptextn, pos + 1, len( scriptextn ) - pos )
+
+ for extnsIndex = lbound(extns()) to ubound(extns())
+ extn = extns(extnsIndex)
+ if ( scriptextn = extn ) then
+ if ( detailedView ) then
+ locnDisplayList( index ).Name = filesysScripts( index )
+ locnDisplayList( index ).Value = filesysScripts( index )
+ else
+ REM replace name with simplified view
+ locnDisplayList( index ).Name = filesysScripts( index )
+ locnDisplayList( index ).Value = filesysScripts( index )
+ end if
+ scriptList.addItem( locnDisplayList( index ).Name, index )
+ exit for
+ end if
+ next extnsIndex
+ next index
+ ScriptDisplayList(0) = locnDisplayList()
+ scriptList.selectItemPos( 0, true )
+
+ REM !!!!At this point we exit the sub!!!!
+ exit sub
+
+ endif
+
+ scriptStorageID = scriptstoragemgr.getScriptStorageID( scriptLocationURI )
+ dim resultList() as Object
+ if ( scriptStorageID &gt; -1 ) then
+ storage = scriptstoragemgr.getScriptStorage( scriptStorageID )
+ implementations() = storage.getAllImplementations()
+ length = UBOUND( implementations() )
+ reservedScriptTag = &quot;_$&quot;
+ if ( length &gt; -1 ) then
+ dim tempDisplayList( length ) as new com.sun.star.beans.PropertyValue
+ for n = LBOUND( implementations() ) to UBOUND( implementations() )
+ logicalName = implementations( n ).getLogicalName()
+ firstTwoChars = LEFT( logicalName, 2 )
+ &apos;Only display scripts whose logicalnames don&apos;t begin with &quot;_$&quot;
+ if ( firstTwoChars &lt;&gt; reservedScriptTag ) then
+ if ( lang = implementations( n ).getLanguage() ) then
+ if ( detailedView ) then
+ tempDisplayList( n ).Name = logicalName _
+ + &quot; [&quot; + implementations( n ).getFunctionName() + &quot;]&quot;
+ tempDisplayList( n ).Value = implementations( n )
+ else
+ tempDisplayList( n ).Name = logicalName
+ tempDisplayList( n ).Value = implementations( n )
+ endif
+ scriptList.addItem( tempDisplayList( n ).Name, n )
+ endif
+ endif
+ next n
+ resultList = tempDisplayList()
+ endif
+ ScriptDisplayList(0) = resultList()
+ endif
+ scriptList.selectItemPos( 0, true )
+
+end sub
+
+sub PopulateMenuCombo()
+ menuComboBox = bindingDialog.getControl( &quot;MenuCombo&quot; )
+ menuComboBox.removeItems( 0, menuComboBox.getItemCount() )
+ for n = 1 to menuCount
+ menuComboBox.addItem( menuItems( n ), n - 1 )
+ next n
+ menuComboBox.setDropDownLineCount( 8 )
+ menuComboBox.text = menuComboBox.getItem( 0 )
+end sub
+
+
+sub PopulateSubMenuList( menuItemPosition as integer )
+ redim subMenuItems( 100 ) as string
+ redim subMenuItemLinePosition( 100 ) as integer
+ dim lineNumber as integer
+ const menuItemWhiteSpace = 4
+ const menuXMLTag = &quot;&lt;menu:menu&quot;
+ subMenuCount = 1
+
+ REM xmlStartLine and xmlEndLine refer to the first and last lines
+ &apos; menuItemPosition of a top-level menu ( 1=File to 8=Help ) add one line
+ xmlStartLine = menuItemLinePosition( menuItemPosition ) + 1
+
+ REM If last menu item is chosen
+ if menuItemPosition = menuCount then
+ xmlEndLine = numberOfLines
+ else
+ REM Other wise get the line before the next top-level menu begins
+ xmlEndLine = menuItemLinePosition( menuItemPosition + 1 ) - 1
+ end if
+
+ for lineNumber = xmlStartLine to xmlEndLine
+ REM Insert all sub-menus and sub-popupmenus
+ if not( instr( xmlFile( lineNumber ), menuXMLTag ) = 0 ) and instr( xmlFile( lineNumber ), &quot;menupopup&quot;) = 0 then
+ subMenuIndent = GetMenuWhiteSpace( xmlFile( lineNumber ) )
+ if subMenuIndent = &quot; &quot; then
+ subMenuIndent = &quot;&quot;
+ else
+ subMenuIndent = subMenuIndent + subMenuIndent
+ end if
+ if not( instr( xmlFile( lineNumber ), &quot;menuseparator&quot; ) = 0 ) then
+ subMenuItems( subMenuCount ) = subMenuIndent + &quot;----------------&quot;
+ else
+ subMenuName = ExtractLabelFromXMLLine( xmlFile( lineNumber ) )
+ REM Add script Name if there is one bound to menu item
+ if instr( xmlFile( lineNumber ), &quot;script://&quot; ) &gt; 0 then
+ script = ExtractScriptIdFromXMLLine( xmlFile( lineNumber ) )
+ subMenuItems( subMenuCount ) = ( subMenuIndent + subMenuName + &quot; [&quot; + script + &quot;]&quot; )
+ else
+ subMenuItems( subMenuCount ) = subMenuIndent + subMenuName
+ end if
+ end if
+ subMenuItemLinePosition( subMenuCount ) = lineNumber
+ subMenuCount = subMenuCount + 1
+ end if
+ next lineNumber
+
+ subMenuList = bindingDialog.getControl( &quot;SubMenuList&quot; )
+
+ currentPosition = subMenuList.getSelectedItemPos()
+
+ subMenuList.removeItems( 0, subMenuList.getItemCount() )
+ &apos;If there are no sub-menus i.e. a dynamically generated menu like Format
+ &apos;if subMenuCount = 1 then
+ if menuItems( menuItemPosition ) = &quot;Format&quot; then
+ subMenuList.addItem( &quot;Unable to Assign Scripts to this menu&quot;, 0 )
+ else
+ for n = 1 to subMenuCount - 1
+ subMenuList.addItem( subMenuItems( n ), n - 1 )
+ next n
+ end if
+
+ subMenuList.selectItemPos( currentPosition, true )
+
+ SubMenuListListener()
+ MenuLabelBoxListener()
+end sub
+
+
+
+sub PopulateTopLevelKeyBindingList()
+
+ allKeyGroupsArray(0) = &quot;SHIFT + CONTROL + F keys&quot;
+ allKeyGroupsArray(1) = &quot;SHIFT + CONTROL + digits&quot; &apos; CURRENTLY DISABLED
+ allKeyGroupsArray(2) = &quot;SHIFT + CONTROL + letters&quot;
+ allKeyGroupsArray(3) = &quot;CONTROL + F keys&quot;
+ allKeyGroupsArray(4) = &quot;CONTROL + digits&quot;
+ allKeyGroupsArray(5) = &quot;CONTROL + letters&quot;
+ allKeyGroupsArray(6) = &quot;SHIFT + F keys&quot;
+
+ keyCombo = bindingDialog.getControl( &quot;KeyCombo&quot; )
+ keyCombo.removeItems( 0, keyCombo.getItemCount() )
+ pos = 0
+ for n = LBOUND( allKeyGroupsArray() ) to UBOUND( allKeyGroupsArray() )
+ &apos; SHIFT + CONTROL + digits group is disabled at the moment, so skip
+ &apos; it
+ if ( n &lt;&gt; 1 ) then
+ keyCombo.addItem( allKeyGroupsArray( n ), pos )
+ pos = pos +1
+ endif
+ next n
+ keyCombo.text = keyCombo.getItem( 0 )
+end sub
+
+sub PopulateKeyBindingList( keyGroupIndex as Integer )
+ keyList = bindingDialog.getControl( &quot;KeyList&quot; )
+ selectedPos = keyList.getSelectedItemPos()
+ keyList.removeItems( 0, keyList.getItemCount() )
+
+ ShortCutKeyArray() = KeyBindArrayOfArrays( keyGroupIndex )
+
+ Dim keyProp as new com.sun.star.beans.PropertyValue
+ for n = lbound( ShortCutKeyArray() ) to ubound( ShortCutKeyArray() )
+ keyName = ShortCutKeyArray( n )
+ if ( keyAllocationMap( keyGroupIndex, n ).Value = 1 ) then
+ keyName = keyName + &quot; [Allocated to Office function]&quot;
+
+ elseif ( keyAllocationMap( keyGroupIndex, n ).Value &gt; 1 ) then
+ keyName = keyName + &quot; &quot; + keyAllocationMap( keyGroupIndex, n ).Name
+ endif
+ keyList.addItem( keyName, n )
+ next n
+
+ if ( selectedPos &lt;&gt; -1 )then
+ keyList.selectItemPos( selectedPos, true )
+ else
+ keyList.selectItemPos( 0, true )
+ end if
+ KeyListListener()
+end sub
+
+sub populateEventList( focusPosition as integer )
+ allApps = bindingDialog.getControl( &quot;AllAppsOption&quot; )
+ eventList = bindingDialog.getControl( &quot;EventList&quot; )
+ eventList.removeItems( 0, eventList.getItemCount() )
+
+ dim isApp as boolean
+ if allApps.state = true then &apos; Application event
+ isApp = true
+ else
+ isApp = false
+ end if
+
+ &apos; use allEventTypes() to fill list box
+ &apos; for each element compare with allEventTypesApp
+ dim scriptName as string
+ dim lineNumber as integer
+ for n = 0 to ubound( allEventTypes() )
+ &apos; If the line number is 1 then SB macro
+ &apos; more than 1 it is the line number of the script
+ if isApp and n &gt; 12 then
+ exit for
+ endif
+ if isApp then
+ lineNumber = allEventTypesApp( n ).Value
+ scriptName = allEventTypesApp( n ).Name
+ else
+ lineNumber = allEventTypesDoc( n ).Value
+ scriptName = allEventTypesDoc( n ).Name
+ end if
+ stringToAdd = &quot;&quot;
+ if ( lineNumber &gt;= 1 ) then
+ stringToAdd = &quot; [&quot; + scriptName + &quot;]&quot;
+ end if
+ eventList.addItem( allEventTypes( n ).Value + &quot; &quot; + stringToAdd, n )
+ next n
+
+ eventList.selectItemPos( focusPosition, true )
+end sub
+
+
+
+sub CreateAllKeyBindings()
+ reDim allKeyBindings( 105 ) as string
+ keyBindingPosition = 1
+
+ for FKey = 2 to 12
+ allKeyBindings( keyBindingPosition ) = &quot;SHIFT + CONTROL + F&quot; + FKey
+ keyBindingPosition = keyBindingPosition + 1
+ next FKey
+ for Digit = 0 to 9
+ allKeyBindings( keyBindingPosition ) = &quot;SHIFT + CONTROL + &quot; + Digit
+ keyBindingPosition = keyBindingPosition + 1
+ next Digit
+ for Alpha = 65 to 90
+ allKeyBindings( keyBindingPosition ) = &quot;SHIFT + CONTROL + &quot; + chr$( Alpha )
+ keyBindingPosition = keyBindingPosition + 1
+ next Alpha
+
+ for FKey = 2 to 12
+ allKeyBindings( keyBindingPosition ) = &quot;CONTROL + F&quot; + FKey
+ keyBindingPosition = keyBindingPosition + 1
+ next FKey
+ for Digit = 0 to 9
+ allKeyBindings( keyBindingPosition ) = &quot;CONTROL + &quot; + Digit
+ keyBindingPosition = keyBindingPosition + 1
+ next Digit
+ for Alpha = 65 to 90
+ allKeyBindings( keyBindingPosition ) = &quot;CONTROL + &quot; + chr$( Alpha )
+ keyBindingPosition = keyBindingPosition + 1
+ next Alpha
+
+ for FKey = 2 to 12
+ allKeyBindings( keyBindingPosition ) = &quot;SHIFT + F&quot; + FKey
+ keyBindingPosition = keyBindingPosition + 1
+ next FKey
+end sub
+
+
+sub createAllEventTypes()
+ allEventTypes( 0 ).Name = &quot;OnStartApp&quot;
+ allEventTypes( 0 ).Value = &quot;Start Application&quot;
+ allEventTypes( 1 ).Name = &quot;OnCloseApp&quot;
+ allEventTypes( 1 ).Value = &quot;Close Application&quot;
+ allEventTypes( 2 ).Name = &quot;OnNew&quot;
+ allEventTypes( 2 ).Value = &quot;Create Document&quot;
+ allEventTypes( 3 ).Name = &quot;OnLoad&quot;
+ allEventTypes( 3 ).Value = &quot;Open Document&quot;
+ allEventTypes( 4 ).Name = &quot;OnSaveAs&quot;
+ allEventTypes( 4 ).Value = &quot;Save Document As&quot;
+ allEventTypes( 5 ).Name = &quot;OnSaveAsDone&quot;
+ allEventTypes( 5 ).Value = &quot;Document has been saved as&quot;
+ allEventTypes( 6 ).Name = &quot;OnSave&quot;
+ allEventTypes( 6 ).Value = &quot;Save Document&quot;
+ allEventTypes( 7 ).Name = &quot;OnSaveDone&quot;
+ allEventTypes( 7 ).Value = &quot;Document has been saved&quot;
+ allEventTypes( 8 ).Name = &quot;OnPrepareUnload&quot;
+ allEventTypes( 8 ).Value = &quot;Close Document&quot;
+ allEventTypes( 9 ).Name = &quot;OnUnload&quot;
+ allEventTypes( 9 ).Value = &quot;Close Document&quot;
+ allEventTypes( 10 ).Name = &quot;OnFocus&quot;
+ allEventTypes( 10 ).Value = &quot;Activate document&quot;
+ allEventTypes( 11 ).Name = &quot;OnUnfocus&quot;
+ allEventTypes( 11 ).Value = &quot;DeActivate document&quot;
+ allEventTypes( 12 ).Name = &quot;OnPrint&quot;
+ allEventTypes( 12 ).Value = &quot;Print Document&quot;
+ REM The following are document-only events
+ allEventTypes( 13 ).Name = &quot;OnMailMerge&quot;
+ allEventTypes( 13 ).Value = &quot;Print form letters&quot;
+ allEventTypes( 14 ).Name = &quot;OnPageCountChange&quot;
+ allEventTypes( 14 ).Value = &quot;Changing the page count&quot;
+end sub
+
+
+sub createAllEventBindings()
+ &apos;dim props as new com.sun.star.beans.PropertyValue
+ &apos;props.Name = &quot;&quot; &apos;Name = script name
+ &apos;props.Value = 0 &apos;Value = 0 for empty, 1 for macro, linenumber for script
+
+ &apos; Creates all types of event bindings for both Application and Document
+ &apos; Initially both arrays have no bindings allocated to the events
+ &apos; The value for Doc is only Script/macro name (no need for line number)
+ for n = 0 to ubound( allEventTypes() )
+ allEventTypesApp( n ).Name = &quot;&quot;
+ allEventTypesApp( n ).Value = 0
+ allEventTypesDoc( n ).Name = &quot;&quot;
+ allEventTypesDoc( n ).Value = 0
+ next n
+end sub
+
+
+REM ----- Text Handling Functions -----
+
+
+function ExtractLabelFromXMLLine( XMLLine as string ) as string
+ labelStart = instr( XMLLine, &quot;label=&quot;+chr$(34)) + 7
+ labelEnd = instr( XMLLine, chr$(34)+&quot;&gt;&quot; )
+ if labelEnd = 0 then
+ labelEnd = instr( XMLLine, chr$(34)+&quot;/&gt;&quot; )
+ end if
+ labelLength = labelEnd - labelStart
+
+ menuLabelUnformatted = mid( XMLLine, labelStart, labelLength )
+ tildePosition = instr( menuLabelUnformatted, &quot;~&quot; )
+ select case tildePosition
+ case 0
+ menuLabel = menuLabelUnformatted
+ case 1
+ menuLabel = right( menuLabelUnformatted, labelLength - 1 )
+ case else
+ menuLabelLeft = left( menuLabelUnformatted, tildePosition - 1 )
+ menuLabelRight = right( menuLabelUnformatted, labelLength - tildePosition )
+ menuLabel = menuLabelLeft + menuLabelRight
+ end select
+
+ ExtractLabelFromXMLLine() = menuLabel
+end function
+
+
+function ExtractScriptIdFromXMLLine( XMLLine as string ) as string
+ idStart = instr( XMLLine, &quot;script://&quot;) + 9
+ if instr( XMLLine, chr$(34)+&quot; menu:helpid=&quot; ) = 0 then
+ idEnd = instr( XMLLIne, &quot;?location=&quot; )
+ else
+ idEnd = instr( XMLLine, &quot;&quot;+chr$(34)+&quot; menu:helpid=&quot; )
+ end if
+ idLength = idEnd - idStart
+ scriptId = mid( XMLLine, idStart, idLength )
+
+ ExtractScriptIdFromXMLLine() = scriptId
+end function
+
+function ExtractEventScriptFromXMLLine( xmlline as string )
+ if instr( xmlline, &quot;script://&quot; ) &gt; 0 then
+ idStart = instr( xmlline, &quot;script://&quot;) + 9
+ idEnd = instr( xmlline, chr$(34)+&quot; xlink:type=&quot; )
+ idLength = idEnd - idStart
+ scriptId = mid( xmlline, idStart, idLength )
+ end if
+ ExtractEventScriptFromXMLLine() = scriptId
+end function
+
+
+function ExtractEventNameFromXMLLine( xmlline as string )
+ idStart = instr( xmlline, &quot;event:name=&quot; + chr$(34) ) + 12
+ idEnd = instr( xmlline, chr$(34)+&quot; event:language&quot; )
+ idLength = idEnd - idStart
+ event = mid( xmlline, idStart, idLength )
+
+ ExtractEventNameFromXMLLine() = event
+end function
+
+function ExtractKeyCodeFromXMLLine( XMLLine as string ) as string
+ keyStart = instr( XMLLine, &quot;code=&quot;+chr$(34)+&quot;KEY_&quot;) + 10
+ keyCode = mid( XMLLine, keyStart, ( len( XMLLine ) - keyStart ) )
+ keyEnd = instr( keyCode, chr$(34) )
+ keyCode = mid( keyCode, 1, keyEnd - 1 )
+
+ ExtractKeyCodeFromXMLLine() = keyCode
+end function
+
+
+function GetMenuWhiteSpace( MenuXMLLine as string ) as string
+ whiteSpace = &quot;&quot;
+ numberOfSpaces = instr( MenuXMLLine, &quot;&lt;&quot; ) - 1
+ for i = 1 to numberOfSpaces
+ whiteSpace = whiteSpace + &quot; &quot;
+ next i
+
+ GetMenuWhiteSpace() = whiteSpace
+end function
+
+function IsAllocatedMenuItem( script as string ) as boolean
+ foundMenuItem = false
+ Allocated = false
+ count = 0
+ do
+ count = count + 1
+ if strcomp( script, subMenuItems( count ) ) = 0 then
+ foundMenuItem = true
+ end if
+ loop while not( foundMenuItem ) and count &lt; subMenuCount
+
+ linePosition = subMenuItemLinePosition( count )
+
+ if not( instr( xmlFile( linePosition ), &quot;script://&quot; ) = 0 ) then
+ Allocated = true
+ end if
+
+ isAllocatedMenuItem() = Allocated
+end Function
+
+
+function HasShiftKey( keyCombo ) as boolean
+ if instr( keyCombo, &quot;SHIFT&quot; ) = 0 then
+ hasShift = false
+ else
+ hasShift = true
+ end if
+
+ HasShiftKey = hasShift
+end function
+
+
+function HasControlKey( keyCombo ) as boolean
+ if instr( keyCombo, &quot;CONTROL&quot; ) = 0 then
+ hasControl = false
+ else
+ hasControl = true
+ end if
+
+ HasControlKey = hasControl
+end function
+
+
+function ExtractKeyFromCombo( keyString as string ) as string
+ while not( instr( keyString, &quot;+&quot; ) = 0 )
+ removeTo = instr( keyString, &quot;+ &quot; ) + 2
+ keyString = mid( keyString, removeTo, ( len( keyString ) - removeTo ) + 1 )
+ wend
+ ExtractKeyFromCombo() = keyString
+end function
+
+
+
+REM ------ Event Handling Functions (Listeners) ------
+
+
+sub KeyListListener()
+ keyShortCutList = bindingDialog.getControl( &quot;KeyList&quot; )
+ selectedShortCut = keyShortCutList.getSelectedItem()
+ combo = bindingDialog.getControl( &quot;KeyCombo&quot; )
+
+ menuScriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ selectedScript = menuScriptList.getSelectedItem()
+
+ keyGroup = combo.text
+ dim keyGroupIndex as Integer
+ dim selectedKeyIndex as Integer
+ for n = lbound ( allKeyGroupsArray() ) to ubound ( allKeyGroupsArray() )
+ if ( allKeyGroupsArray( n ) = keyGroup )then
+ keyGroupIndex = n
+ exit for
+ end if
+ next n
+ selectedKeyIndex = keyShortCutList.getSelectedItemPos()
+
+ if keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Value &gt; 1 then
+ bindingDialog.Model.Delete.enabled = true
+ bindingDialog.Model.AddOn.enabled = true
+ if selectedScript &lt;&gt; &quot;&quot; then
+ bindingDialog.Model.NewButton.enabled = true
+ endif
+
+ else
+
+ if keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Value = 1 then
+ bindingDialog.Model.Delete.enabled = false
+ bindingDialog.Model.AddOn.enabled = false
+ bindingDialog.Model.NewButton.enabled = false
+ else
+ bindingDialog.Model.Delete.enabled = false
+ bindingDialog.Model.AddOn.enabled = false
+ if selectedScript &lt;&gt; &quot;&quot; then
+ bindingDialog.Model.NewButton.enabled = true
+ end if
+ end if
+ end if
+end sub
+
+
+sub SubMenuListListener()
+ scriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ subMenuList = bindingDialog.getControl( &quot;SubMenuList&quot; )
+ selectedMenuItem = subMenuList.getSelectedItem()
+ if IsAllocatedMenuItem( selectedMenuItem ) then
+ bindingDialog.Model.Delete.enabled = true
+ bindingDialog.Model.AddOn.enabled = true
+ else
+ bindingDialog.Model.Delete.enabled = false
+ bindingDialog.Model.AddOn.enabled = false
+ end if
+end sub
+
+REM a keypress listener that in turn fires the MenuCL on a return key even only
+sub fireMenuComboListernerOnRet( eventobj as object )
+ if (eventobj.KeyCode = 1280 ) then
+ MenuComboListener()
+ endif
+end sub
+
+&apos;Populates the SubMenuList with the appropriate menu items from the Top-level menu selected from the combo box
+sub MenuComboListener()
+ combo = bindingDialog.getControl( &quot;MenuCombo&quot; )
+ newToplevelMenu = combo.text
+ counter = 0
+ do
+ counter = counter + 1
+ loop while not( newToplevelMenu = menuItems( counter ) )
+
+ PopulateSubMenuList( counter )
+end sub
+
+REM a keypress listener that in turn fires the LLCL on a return key even only
+sub fireLangLocComboListernerOnRet( eventobj as object )
+ if (eventobj.KeyCode = 1280 ) then
+ LangLocComboListener()
+ endif
+end sub
+
+sub LangLocComboListener()
+
+ combo = bindingDialog.getControl( &quot;LanguageCombo&quot; )
+ language = combo.text
+ combo = bindingDialog.getControl( &quot;LocationCombo&quot; )
+ location = combo.text
+
+ PopulateScriptList( language,location )
+
+ &apos;Enable/disable Assign button
+ scriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ if not (dialogName = &quot;EditDebug&quot;) then
+ if scriptList.getSelectedItem() = &quot;&quot; then
+ bindingDialog.Model.NewButton.enabled = false
+ end if
+ end if
+
+ if ( location = &quot;Filesystem&quot; ) and ( language &lt;&gt; &quot;Java&quot; ) then
+ bindingDialog.Model.Browse.enabled = true
+ if not (dialogName = &quot;EditDebug&quot;) then
+ bindingDialog.Model.fsonly.enabled = true
+ end if
+ else
+ bindingDialog.Model.Browse.enabled = false
+ if not (dialogName = &quot;EditDebug&quot;) then
+ bindingDialog.Model.fsonly.enabled = false
+ end if
+ endif
+
+ &apos; extra dialog dependant processing
+ if dialogName = &quot;Menu&quot; then
+ &apos; will set New button to false if no text in LableBox
+ MenuLabelBoxListener()
+ elseif dialogName = &quot;Key&quot; then
+ &apos; will set Assigne button to false if appropriate
+ KeyListListener()
+ elseif dialogName = &quot;Event&quot; then
+ EventListListener()
+ end if
+
+end sub
+
+REM a keypress listener that in turn fires the KeyCL on a return key even only
+sub fireKeyComboListernerOnRet( eventobj as object )
+ if (eventobj.KeyCode = 1280 ) then
+ KeyComboListener()
+ endif
+end sub
+
+&apos;Populates the KeyList with the appropriate key combos from the Top-level key group selected from the combo box
+sub KeyComboListener()
+ combo = bindingDialog.getControl( &quot;KeyCombo&quot; )
+ keyGroup = combo.text
+ for n = lbound ( allKeyGroupsArray() ) to ubound ( allKeyGroupsArray() )
+ if ( allKeyGroupsArray( n ) = keyGroup )then
+ keyGroupIndex = n
+ exit for
+ end if
+ next n
+ PopulateKeyBindingList( keyGroupIndex )
+end sub
+
+
+sub MenuLabelBoxListener()
+ menuScriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ selectedScript = menuScriptList.getSelectedItem()
+ &apos;if the SubMenuList is from a dynamically created menu (e.g. Format)
+ &apos;or if the Menu Label text box is empty
+ subMenuList = bindingDialog.getControl( &quot;SubMenuList&quot; )
+ firstItem = subMenuList.getItem( 0 )
+ if bindingDialog.Model.MenuLabelBox.text = &quot;&quot; OR firstItem = &quot;Unable to Assign Scripts to this menu&quot; OR selectedScript = &quot;&quot; then
+ bindingDialog.Model.NewButton.enabled = false
+ else
+ bindingDialog.Model.NewButton.enabled = true
+ end if
+end sub
+
+sub AppDocEventListener()
+ populateEventList( 0 )
+ EventListListener()
+end sub
+
+
+sub EventListListener()
+ on error goto ErrorHandler
+
+ eventList = bindingDialog.getControl( &quot;EventList&quot; )
+ eventPos = eventList.getSelectedItemPos()
+
+ allApps = bindingDialog.getControl( &quot;AllAppsOption&quot; )
+
+ menuScriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ selectedScript = menuScriptList.getSelectedItem()
+
+ dim binding as integer
+ if allApps.state = true then
+ binding = allEventTypesApp( eventPos ).Value
+ else
+ binding = allEventTypesDoc( eventPos ).Value
+ endif
+
+ if ( binding &gt; 1 ) then
+ bindingDialog.Model.Delete.enabled = true
+ else
+ bindingDialog.Model.Delete.enabled = false
+ end if
+
+ if ( binding = 1 ) then
+ &apos; staroffice binding, can&apos;t assign
+ bindingDialog.Model.NewButton.enabled = false
+ elseif ( selectedScript &lt;&gt; &quot;&quot; ) then
+ bindingDialog.Model.NewButton.enabled = true
+ end if
+ exit sub
+
+ ErrorHandler:
+ reset
+ bindingDialog.Model.Delete.enabled = false
+
+end sub
+
+
+REM ------ Event Handling Functions (Buttons) ------
+
+function getFilePicker() as Object
+ REM file dialog
+ oFilePicker = CreateUnoService( &quot;com.sun.star.ui.dialogs.FilePicker&quot; )
+
+ combo = bindingDialog.getControl( &quot;LanguageCombo&quot; )
+ language = combo.text
+ currentFilter = &quot;&quot;
+
+ for langIndex = 0 to ubound(languages())
+ if( languages(langIndex) &lt;&gt; &quot;Java&quot; ) then
+ filterName = languages(langIndex) + &quot; (&quot;
+ filterVal=&quot;&quot;
+ extns = extensions(langIndex)
+ for extnIndex = lbound(extns()) to ubound(extns())
+ filterName = filterName + &quot;*.&quot; + extns(extnIndex) + &quot;,&quot;
+ filterVal = filterVal + &quot;*.&quot; + extns(extnIndex) + &quot;,&quot;
+ next extnIndex
+ filterName = left(filterName, len(filterName) -1) + &quot;)&quot;
+ filterVal = left(filterVal, len(filterVal) -1)
+ if(instr(filterName,language) = 1 ) then
+ currentFilter = filterName
+ end if
+ oFilePicker.AppendFilter(filterName, filterVal)
+ end if
+ next langIndex
+ if(len(currentFilter) &gt; 0 ) then
+ oFilePicker.SetCurrentFilter( currentFilter )
+ end if
+
+ If sFileURL = &quot;&quot; Then
+ oSettings = CreateUnoService( &quot;com.sun.star.frame.Settings&quot; )
+ oPathSettings = oSettings.getByName( &quot;PathSettings&quot; )
+ sFileURL = oPathSettings.getPropertyValue( &quot;Work&quot; )
+ End If
+
+ REM set display directory
+ oSimpleFileAccess = CreateUnoService( &quot;com.sun.star.ucb.SimpleFileAccess&quot; )
+
+ If oSimpleFileAccess.exists( sFileURL ) And oSimpleFileAccess.isFolder( sFileURL ) Then
+ oFilePicker.setDisplayDirectory( sFileURL )
+ End If
+ getFilePicker() = oFilePicker
+end function
+
+Sub DoBrowseAndEdit()
+ Dim oFilePicker As Object, oSimpleFileAccess As Object
+ Dim oSettings As Object, oPathSettings As Object
+ Dim sFileURL As String
+ Dim sFiles As Variant
+
+ oFilePicker = getFilePicker()
+ REM execute file dialog
+ If oFilePicker.execute() Then
+ sFiles = oFilePicker.getFiles()
+
+ sFileURL = sFiles(0)
+ oSimpleFileAccess = CreateUnoService( &quot;com.sun.star.ucb.SimpleFileAccess&quot; )
+ If oSimpleFileAccess.exists( sFileURL ) Then
+ for langIndex = 0 to ubound(languages())
+ If (instr(oFilePicker.GetCurrentFilter, languages(langIndex)) = 1 ) then
+ RunDebugger(languages(langIndex), sFileURL, &quot;&quot;)
+ End If
+ next langIndex
+ End If
+ bindingDialog.endExecute()
+ End If
+End Sub
+
+Sub RunDebugger(lang as String, uri as String, filename as String)
+ dim document as object
+ dim dispatcher as object
+ dim parser as object
+ dim url as new com.sun.star.util.URL
+
+ document = ThisComponent.CurrentController.Frame
+ parser = createUnoService(&quot;com.sun.star.util.URLTransformer&quot;)
+ dim args(2) as new com.sun.star.beans.PropertyValue
+ args(0).Name = &quot;language&quot;
+ args(0).Value = lang
+ args(1).Name = &quot;uri&quot;
+ args(1).Value = uri
+ args(2).Name = &quot;filename&quot;
+ args(2).Value = filename
+
+ url.Complete = &quot;script://_$DebugRunner.Debug?&quot; _
+ + &quot;language=Java&amp;function=DebugRunner.go&quot; _
+ + &quot;&amp;location=share&quot;
+
+ parser.parseStrict(url)
+ disp = document.queryDispatch(url,&quot;&quot;,0)
+ disp.dispatch(url, args())
+End Sub
+
+sub DoEdit()
+ Dim scriptInfo as Object
+
+ menuScriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ selectedScript = menuScriptList.getSelectedItem()
+
+ if not (selectedScript = &quot;&quot;) then
+ scripts() = scriptDisplayList(0)
+ for n = LBOUND( scripts() ) to UBOUND( scripts() )
+ if ( scripts( n ).Name = selectedScript ) then
+ scriptInfo = scripts( n ).Value
+ exit for
+ end if
+ next n
+
+ RunDebugger(scriptInfo.getLanguage, scriptInfo.getParcelURI, scriptInfo.getFunctionName)
+ bindingDialog.endExecute()
+ end if
+end sub
+
+sub MenuOKButton()
+ WriteXMLFromArray()
+ bindingDialog.endExecute()
+end sub
+
+
+sub MenuCancelButton()
+ bindingDialog.endExecute()
+end sub
+
+
+sub MenuHelpButton()
+ helpDialog = LoadDialog( &quot;ScriptBindingLibrary&quot;, &quot;HelpBinding&quot; )
+ helpDialog.execute()
+end sub
+
+
+sub MenuDeleteButton()
+ subMenuList = bindingDialog.getControl( &quot;SubMenuList&quot; )
+ linePos = subMenuItemLinePosition( subMenuList.getSelectedItemPos() + 1 )
+
+ RemoveBinding( linePos )
+
+ REM Update the top-level menu&apos;s line positions
+ combo = bindingDialog.getControl( &quot;MenuCombo&quot; )
+ newToplevelMenu = combo.text
+ counter = 0
+ do
+ counter = counter + 1
+ loop while not( newToplevelMenu = menuItems( counter ) )
+ UpdateTopLevelMenus( counter + 1, false )
+
+ MenuComboListener()
+
+ subMenuList.selectItemPos( subMenuList.getSelectedItemPos(), true )
+end sub
+
+
+sub MenuNewButton()
+ menuScriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ selectedScript = menuScriptList.getSelectedItem()
+ scriptURI = getScriptURI( selectedScript )
+ newMenuLabel = bindingDialog.Model.MenuLabelBox.text
+
+ subMenuList = bindingDialog.getControl( &quot;SubMenuList&quot; )
+
+ REM Update the top-level menu&apos;s line positions
+ combo = bindingDialog.getControl( &quot;MenuCombo&quot; )
+ newToplevelMenu = combo.text
+ counter = 0
+ do
+ counter = counter + 1
+ loop while not( newToplevelMenu = menuItems( counter ) )
+ UpdateTopLevelMenus( counter + 1, true )
+
+ REM New line position is one ahead of the selected sub menu item
+ linePos = subMenuItemLinePosition( subMenuList.getSelectedItemPos() + 1 ) + 1
+
+ AddNewMenuBinding( scriptURI, newMenuLabel, linePos )
+
+ MenuComboListener()
+ subMenuList.selectItemPos( subMenuList.getSelectedItemPos() + 1, true )
+ SubMenuListListener()
+end sub
+
+sub BrowseButton()
+ Dim oFilePicker As Object, oSimpleFileAccess As Object
+ Dim oSettings As Object, oPathSettings As Object
+ Dim sFileURL As String
+ Dim sFiles As Variant
+
+ oFilePicker = getFilePicker()
+
+ REM execute file dialog
+ If oFilePicker.execute() Then
+ sFiles = oFilePicker.getFiles()
+ sFileURL = sFiles(0)
+ oSimpleFileAccess = CreateUnoService( &quot;com.sun.star.ucb.SimpleFileAccess&quot; )
+ If oSimpleFileAccess.exists( sFileURL ) Then
+ REM add sFileURL to the list
+ ReDim preserve filesysScripts(filesysCount) as String
+ filesysScripts( filesysCount ) = sFileURL
+ filesysCount=filesysCount+1
+ &apos; if user changed filter in file picker then populate
+ &apos; language with language associated with that in file picker
+ sFilter = oFilePicker.getCurrentFilter()
+ langCombo = bindingDialog.getControl( &quot;LanguageCombo&quot; )
+ dim items() as String
+ items() = langCombo.getItems()
+ for index = lbound(items()) to ubound(items())
+ iPos = inStr(sFilter,&quot; &quot;)
+ Dim theLanguage as String
+ if( iPos &gt; 0 ) then
+ theLanguage = Left( sFilter, iPos - 1)
+ if ( theLanguage = items( index ) ) then
+ langCombo.text = items( index )
+ exit for
+ end if
+ end if
+ next index
+ End If
+ End If
+ LangLocComboListener()
+End Sub
+
+sub KeyOKButton()
+ WriteXMLFromArray()
+ bindingDialog.endExecute()
+end sub
+
+
+sub KeyCancelButton()
+ bindingDialog.endExecute()
+end sub
+
+
+sub KeyHelpButton()
+ helpDialog = LoadDialog( &quot;ScriptBindingLibrary&quot;, &quot;HelpBinding&quot; )
+ helpDialog.execute()
+end sub
+
+
+sub KeyNewButton()
+ combo = bindingDialog.getControl( &quot;KeyCombo&quot; )
+ keyGroup = combo.text
+ for n = lbound ( allKeyGroupsArray() ) to ubound ( allKeyGroupsArray() )
+ if ( allKeyGroupsArray( n ) = keyGroup )then
+ keyGroupIndex = n
+ exit for
+ end if
+ next n
+ menuScriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ script = menuScriptList.getSelectedItem()
+ scriptURI = getScriptURI( script )
+
+ keyList = bindingDialog.getControl( &quot;KeyList&quot; )
+ keyIndex = keyList.getSelectedItemPos()
+ ShortCutKeyArray() = KeyBindArrayOfArrays( keyGroupIndex )
+ keyText = ShortCutKeyArray( keyIndex )
+
+ AddNewKeyBinding( scriptURI, HasShiftKey( keyText ), HasControlKey( keyText ), ExtractKeyFromCombo( keyText ) )
+
+ KeyComboListener()
+end sub
+
+
+sub KeyDeleteButton()
+
+ keyShortCutList = bindingDialog.getControl( &quot;KeyList&quot; )
+ selectedShortCut = keyShortCutList.getSelectedItem()
+ combo = bindingDialog.getControl( &quot;KeyCombo&quot; )
+
+ keyGroup = combo.text
+ dim keyGroupIndex as Integer
+ dim selectedKeyIndex as Integer
+ for n = lbound ( allKeyGroupsArray() ) to ubound ( allKeyGroupsArray() )
+ if ( allKeyGroupsArray( n ) = keyGroup )then
+ keyGroupIndex = n
+ exit for
+ end if
+ next n
+ selectedKeyIndex = keyShortCutList.getSelectedItemPos()
+ linePosition = keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Value
+ keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Value = 0
+ keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Name = &quot;&quot;
+ RemoveBinding( linePosition )
+ KeyComboListener()
+end sub
+
+
+sub EventNewButton()
+ eventScriptList = bindingDialog.getControl( &quot;ScriptList&quot; )
+ selectedScript = eventScriptList.getSelectedItem()
+ scriptURI = getScriptURI( selectedScript )
+ eventList = bindingDialog.getControl( &quot;EventList&quot; )
+ eventPosition = eventList.getSelectedItemPos()
+
+ allApps = bindingDialog.getControl( &quot;AllAppsOption&quot; )
+ dim isApp as boolean
+ if allApps.state = true then &apos;Application
+ isApp = true
+ else &apos;Document
+ isApp = false
+ end if
+ AddNewEventBinding( scriptURI, eventPosition, isApp )
+
+ populateEventList( eventPosition )
+ EventListListener()
+end sub
+
+
+sub EventDeleteButton()
+ eventList = bindingDialog.getControl( &quot;EventList&quot; )
+ REM Check that combo is a script
+ eventPosition = eventList.getSelectedItemPos()
+
+ allApps = bindingDialog.getControl( &quot;AllAppsOption&quot; )
+ if allApps.state = true then &apos;Application
+ linePosition = allEventTypesApp( eventPosition ).Value
+ &apos;dim eventProp as new com.sun.star.beans.PropertyValue
+ &apos;eventProp.Name = &quot;&quot;
+ &apos;eventProp.Value = 0
+ allEventTypesApp( eventPosition ).Name = &quot;&quot;
+ allEventTypesApp( eventPosition ).Value = 0
+ RemoveBinding( linePosition )
+ else &apos;Document
+ &apos;DeleteEvent( allEventTypes( eventPosition ) )
+ allEventTypesDoc( eventPosition ).Name = &quot;&quot;
+ allEventTypesDoc( eventPosition ).Value = 0
+ end if
+
+ PopulateEventList( eventPosition )
+ EventListListener()
+end sub
+
+
+sub EventOKButton
+ WriteEventsToDoc()
+ WriteXMLFromArray()
+ bindingDialog.endExecute()
+end sub
+
+
+sub HelpOKButton()
+ helpDialog.endExecute()
+end sub
+</script:module>
diff --git a/scripting/workben/bindings/calckeybinding.xml b/scripting/workben/bindings/calckeybinding.xml
new file mode 100644
index 000000000000..3e9b7ef48689
--- /dev/null
+++ b/scripting/workben/bindings/calckeybinding.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE accel:acceleratorlist PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "accelerator.dtd">
+<accel:acceleratorlist xmlns:accel="http://openoffice.org/2001/accel" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <accel:item accel:code="KEY_END" accel:shift="true" accel:mod1="true" xlink:href="slot:26532"/>
+ <accel:item accel:code="KEY_HOME" accel:shift="true" accel:mod1="true" xlink:href="slot:26531"/>
+ <accel:item accel:code="KEY_RIGHT" accel:shift="true" accel:mod1="true" xlink:href="slot:26542"/>
+ <accel:item accel:code="KEY_LEFT" accel:shift="true" accel:mod1="true" xlink:href="slot:26541"/>
+ <accel:item accel:code="KEY_UP" accel:shift="true" accel:mod1="true" xlink:href="slot:26539"/>
+ <accel:item accel:code="KEY_DOWN" accel:shift="true" accel:mod1="true" xlink:href="slot:26540"/>
+ <accel:item accel:code="KEY_F9" accel:shift="true" accel:mod1="true" xlink:href="slot:26318"/>
+ <accel:item accel:code="KEY_F5" accel:shift="true" accel:mod1="true" xlink:href="slot:26645"/>
+ <accel:item accel:code="KEY_F2" accel:shift="true" accel:mod1="true" xlink:href="slot:26089"/>
+ <accel:item accel:code="KEY_T" accel:shift="true" accel:mod1="true" xlink:href="slot:26645"/>
+ <accel:item accel:code="KEY_R" accel:shift="true" accel:mod1="true" xlink:href="slot:26012"/>
+ <accel:item accel:code="KEY_P" accel:shift="true" accel:mod1="true" xlink:href="slot:10294"/>
+ <accel:item accel:code="KEY_F" accel:shift="true" accel:mod1="true" xlink:href="slot:26612"/>
+ <accel:item accel:code="KEY_B" accel:shift="true" accel:mod1="true" xlink:href="slot:10295"/>
+ <accel:item accel:code="KEY_6" accel:shift="true" accel:mod1="true" xlink:href="slot:26052"/>
+ <accel:item accel:code="KEY_5" accel:shift="true" accel:mod1="true" xlink:href="slot:26046"/>
+ <accel:item accel:code="KEY_4" accel:shift="true" accel:mod1="true" xlink:href="slot:26045"/>
+ <accel:item accel:code="KEY_3" accel:shift="true" accel:mod1="true" xlink:href="slot:26053"/>
+ <accel:item accel:code="KEY_2" accel:shift="true" accel:mod1="true" xlink:href="slot:26055"/>
+ <accel:item accel:code="KEY_1" accel:shift="true" accel:mod1="true" xlink:href="slot:26054"/>
+ <accel:item accel:code="KEY_DIVIDE" accel:mod1="true" xlink:href="slot:26560"/>
+ <accel:item accel:code="KEY_MULTIPLY" accel:mod1="true" xlink:href="slot:26551"/>
+ <accel:item accel:code="KEY_BACKSPACE" accel:mod1="true" xlink:href="slot:26550"/>
+ <accel:item accel:code="KEY_SPACE" accel:mod1="true" xlink:href="slot:26547"/>
+ <accel:item accel:code="KEY_PAGEDOWN" accel:mod1="true" xlink:href="slot:26543"/>
+ <accel:item accel:code="KEY_PAGEUP" accel:mod1="true" xlink:href="slot:26544"/>
+ <accel:item accel:code="KEY_END" accel:mod1="true" xlink:href="slot:5741"/>
+ <accel:item accel:code="KEY_HOME" accel:mod1="true" xlink:href="slot:5742"/>
+ <accel:item accel:code="KEY_RIGHT" accel:mod1="true" xlink:href="slot:26538"/>
+ <accel:item accel:code="KEY_LEFT" accel:mod1="true" xlink:href="slot:26537"/>
+ <accel:item accel:code="KEY_UP" accel:mod1="true" xlink:href="slot:26535"/>
+ <accel:item accel:code="KEY_DOWN" accel:mod1="true" xlink:href="slot:26536"/>
+ <accel:item accel:code="KEY_F12" accel:mod1="true" xlink:href="slot:26332"/>
+ <accel:item accel:code="KEY_F11" accel:mod1="true" xlink:href="slot:5573"/>
+ <accel:item accel:code="KEY_F8" accel:mod1="true" xlink:href="slot:26245"/>
+ <accel:item accel:code="KEY_F7" accel:mod1="true" xlink:href="slot:10245"/>
+ <accel:item accel:code="KEY_F3" accel:mod1="true" xlink:href="slot:26271"/>
+ <accel:item accel:code="KEY_F2" accel:mod1="true" xlink:href="slot:26152"/>
+ <accel:item accel:code="KEY_Z" accel:mod1="true" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_Y" accel:mod1="true" xlink:href="slot:5700"/>
+ <accel:item accel:code="KEY_U" accel:mod1="true" xlink:href="slot:10014"/>
+ <accel:item accel:code="KEY_R" accel:mod1="true" xlink:href="slot:26372"/>
+ <accel:item accel:code="KEY_L" accel:mod1="true" xlink:href="slot:26371"/>
+ <accel:item accel:code="KEY_J" accel:mod1="true" xlink:href="slot:26374"/>
+ <accel:item accel:code="KEY_I" accel:mod1="true" xlink:href="slot:10008"/>
+ <accel:item accel:code="KEY_E" accel:mod1="true" xlink:href="slot:26373"/>
+ <accel:item accel:code="KEY_D" accel:mod1="true" xlink:href="slot:26610"/>
+ <accel:item accel:code="KEY_B" accel:mod1="true" xlink:href="slot:10009"/>
+ <accel:item accel:code="KEY_5" accel:mod1="true" xlink:href="slot:10035"/>
+ <accel:item accel:code="KEY_2" accel:mod1="true" xlink:href="slot:10036"/>
+ <accel:item accel:code="KEY_1" accel:mod1="true" xlink:href="slot:10034"/>
+ <accel:item accel:code="KEY_BACKSPACE" accel:shift="true" xlink:href="slot:26549"/>
+ <accel:item accel:code="KEY_SPACE" accel:shift="true" xlink:href="slot:26548"/>
+ <accel:item accel:code="KEY_PAGEDOWN" accel:shift="true" xlink:href="slot:26525"/>
+ <accel:item accel:code="KEY_PAGEUP" accel:shift="true" xlink:href="slot:26526"/>
+ <accel:item accel:code="KEY_END" accel:shift="true" xlink:href="slot:26534"/>
+ <accel:item accel:code="KEY_HOME" accel:shift="true" xlink:href="slot:26533"/>
+ <accel:item accel:code="KEY_RIGHT" accel:shift="true" xlink:href="slot:26524"/>
+ <accel:item accel:code="KEY_LEFT" accel:shift="true" xlink:href="slot:26523"/>
+ <accel:item accel:code="KEY_UP" accel:shift="true" xlink:href="slot:26522"/>
+ <accel:item accel:code="KEY_DOWN" accel:shift="true" xlink:href="slot:26521"/>
+ <accel:item accel:code="KEY_F11" accel:shift="true" xlink:href="slot:5538"/>
+ <accel:item accel:code="KEY_F8" accel:shift="true" xlink:href="slot:26122"/>
+ <accel:item accel:code="KEY_F7" accel:shift="true" xlink:href="slot:26456"/>
+ <accel:item accel:code="KEY_F5" accel:shift="true" xlink:href="slot:26458"/>
+ <accel:item accel:code="KEY_F4" accel:shift="true" xlink:href="slot:26609"/>
+ <accel:item accel:code="KEY_REPEAT" xlink:href="slot:5702"/>
+ <accel:item accel:code="KEY_UNDO" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_INSERT" xlink:href="slot:26265"/>
+ <accel:item accel:code="KEY_BACKSPACE" xlink:href="slot:26553"/>
+ <accel:item accel:code="KEY_ESCAPE" xlink:href="slot:26557"/>
+ <accel:item accel:code="KEY_PAGEDOWN" xlink:href="slot:5735"/>
+ <accel:item accel:code="KEY_PAGEUP" xlink:href="slot:5736"/>
+ <accel:item accel:code="KEY_END" xlink:href="slot:5746"/>
+ <accel:item accel:code="KEY_HOME" xlink:href="slot:5745"/>
+ <accel:item accel:code="KEY_RIGHT" xlink:href="slot:5734"/>
+ <accel:item accel:code="KEY_LEFT" xlink:href="slot:5733"/>
+ <accel:item accel:code="KEY_UP" xlink:href="slot:5732"/>
+ <accel:item accel:code="KEY_DOWN" xlink:href="slot:5731"/>
+ <accel:item accel:code="KEY_F12" xlink:href="slot:26331"/>
+ <accel:item accel:code="KEY_F11" xlink:href="slot:5539"/>
+ <accel:item accel:code="KEY_F9" xlink:href="slot:26304"/>
+ <accel:item accel:code="KEY_F8" xlink:href="slot:26123"/>
+ <accel:item accel:code="KEY_F7" xlink:href="slot:10243"/>
+ <accel:item accel:code="KEY_F5" xlink:href="slot:10366"/>
+ <accel:item accel:code="KEY_F4" xlink:href="slot:6660"/>
+ <accel:item accel:code="KEY_F2" xlink:href="slot:26552"/>
+ <accel:item accel:code="KEY_BACKSPACE" accel:mod2="true" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_TAB" xlink:href="slot:26545"/>
+ <accel:item accel:code="KEY_TAB" accel:shift="true" xlink:href="slot:26546"/>
+</accel:acceleratorlist> \ No newline at end of file
diff --git a/scripting/workben/bindings/calcmenubar.xml b/scripting/workben/bindings/calcmenubar.xml
new file mode 100644
index 000000000000..21f6404c13a5
--- /dev/null
+++ b/scripting/workben/bindings/calcmenubar.xml
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE menu:menubar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "menubar.dtd">
+<menu:menubar xmlns:menu="http://openoffice.org/2001/menu" menu:id="menubar">
+ <menu:menu menu:id="slot:5510" menu:label="~File">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5537" menu:helpid="5537" menu:label="~New"/>
+ <menu:menuitem menu:id="slot:5501" menu:helpid="5501" menu:label="~Open..."/>
+ <menu:menuitem menu:id="slot:6381" menu:helpid="6381" menu:label="A~utoPilot"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5503" menu:helpid="5503" menu:label="~Close"/>
+ <menu:menuitem menu:id="slot:5505" menu:helpid="5505" menu:label="~Save"/>
+ <menu:menuitem menu:id="slot:5502" menu:helpid="5502" menu:label="Save ~As..."/>
+ <menu:menuitem menu:id="slot:5309" menu:helpid="5309" menu:label="Sa~ve All"/>
+ <menu:menuitem menu:id="slot:5508" menu:helpid="5508" menu:label="Reload"/>
+ <menu:menuitem menu:id="slot:6583" menu:helpid="6583" menu:label="Versions..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5829" menu:helpid="5829" menu:label="Expor~t..."/>
+ <menu:menuitem menu:id="slot:6673" menu:helpid="6673" menu:label="Expor~t as PDF..."/>
+ <menu:menu menu:id="slot:36" menu:label="Sen~d">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5331" menu:helpid="5331" menu:label="Document as ~E-mail..."/>
+ <menu:menuitem menu:id="slot:6672" menu:helpid="6672" menu:label="Document as P~DF Attachment..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5535" menu:helpid="5535" menu:label="Propert~ies..."/>
+ <menu:menu menu:id="slot:39" menu:label="~Templates">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5540" menu:helpid="5540" menu:label="~Organize..."/>
+ <menu:menuitem menu:id="slot:6655" menu:helpid="6655" menu:label="~Address Book Source..."/>
+ <menu:menuitem menu:id="slot:5538" menu:helpid="5538" menu:label="~Save..."/>
+ <menu:menuitem menu:id="slot:5594" menu:helpid="5594" menu:label="~Edit..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5325" menu:helpid="5325" menu:label="Pa~ge Preview"/>
+ <menu:menuitem menu:id="slot:5504" menu:helpid="5504" menu:label="~Print..."/>
+ <menu:menuitem menu:id="slot:5302" menu:helpid="5302" menu:label="P~rinter Settings..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5300" menu:helpid="5300" menu:label="E~xit"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:2" menu:label="~Edit">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5701" menu:helpid="5701" menu:label="Can&apos;t Undo"/>
+ <menu:menuitem menu:id="slot:5700" menu:helpid="5700" menu:label="Can&apos;t Restore"/>
+ <menu:menuitem menu:id="slot:5702" menu:helpid="5702" menu:label="~Repeat"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5710" menu:helpid="5710" menu:label="Cu~t"/>
+ <menu:menuitem menu:id="slot:5711" menu:helpid="5711" menu:label="~Copy"/>
+ <menu:menuitem menu:id="slot:5712" menu:helpid="5712" menu:label="~Paste"/>
+ <menu:menuitem menu:id="slot:26220" menu:helpid="26220" menu:label="Paste ~Special..."/>
+ <menu:menuitem menu:id="slot:5723" menu:helpid="5723" menu:label="Select ~All"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:37" menu:label="Chan~ges">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26238" menu:helpid="26238" menu:label="~Record"/>
+ <menu:menuitem menu:id="slot:26084" menu:helpid="26084" menu:label="~Protect Records..."/>
+ <menu:menuitem menu:id="slot:26239" menu:helpid="26239" menu:label="Sho~w..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26258" menu:helpid="26258" menu:label="~Accept or Reject..."/>
+ <menu:menuitem menu:id="slot:26259" menu:helpid="26259" menu:label="~Comments..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6587" menu:helpid="6587" menu:label="~Merge Document..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:6586" menu:helpid="6586" menu:label="Co~mpare Document..."/>
+ <menu:menuitem menu:id="slot:5961" menu:helpid="5961" menu:label="~Find &amp; Replace..."/>
+ <menu:menuitem menu:id="slot:10366" menu:helpid="10366" menu:label="~Navigator"/>
+ <menu:menuitem menu:id="slot:26235" menu:helpid="26235" menu:label="~Headers &amp; Footers..."/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:3" menu:label="Fill">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26224" menu:helpid="26224" menu:label="~Down"/>
+ <menu:menuitem menu:id="slot:26225" menu:helpid="26225" menu:label="~Right"/>
+ <menu:menuitem menu:id="slot:26226" menu:helpid="26226" menu:label="~Up"/>
+ <menu:menuitem menu:id="slot:26227" menu:helpid="26227" menu:label="~Left"/>
+ <menu:menuitem menu:id="slot:26228" menu:helpid="26228" menu:label="~Sheet..."/>
+ <menu:menuitem menu:id="slot:26229" menu:helpid="26229" menu:label="S~eries..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:5713" menu:helpid="5713" menu:label="Delete C~ontents..."/>
+ <menu:menuitem menu:id="slot:26222" menu:helpid="26222" menu:label="Delete C~ells..."/>
+ <menu:menu menu:id="slot:38" menu:label="Shee~t">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26348" menu:helpid="26348" menu:label="~Move/Copy..."/>
+ <menu:menuitem menu:id="slot:26090" menu:helpid="26090" menu:label="~Select..."/>
+ <menu:menuitem menu:id="slot:26223" menu:helpid="26223" menu:label="~Delete..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:4" menu:label="Delete Manual Break">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26263" menu:helpid="26263" menu:label="~Row Break"/>
+ <menu:menuitem menu:id="slot:26264" menu:helpid="26264" menu:label="~Column Break"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26060" menu:helpid="26060" menu:label="Lin~ks..."/>
+ <menu:menuitem menu:id="slot:6314" menu:helpid="6314" menu:label="P~lug-in"/>
+ <menu:menuitem menu:id="slot:10371" menu:helpid="10371" menu:label="ImageMap"/>
+ <menu:menuitem menu:id="slot:5575" menu:helpid="5575" menu:label="~Object"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5" menu:label="~View">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10000" menu:helpid="10000" menu:label="~Zoom..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6660" menu:helpid="6660" menu:label="~Data Sources"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:29" menu:label="~Toolbars">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5910" menu:helpid="5910" menu:label="~Function Bar"/>
+ <menu:menuitem menu:id="slot:5905" menu:helpid="5905" menu:label="~Object Bar"/>
+ <menu:menuitem menu:id="slot:5909" menu:helpid="5909" menu:label="Main ~Toolbar"/>
+ <menu:menuitem menu:id="slot:10360" menu:helpid="10360" menu:label="~Hyperlink Bar"/>
+ <menu:menuitem menu:id="slot:26241" menu:helpid="26241" menu:label="For~mula Bar"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5908" menu:helpid="5908" menu:label="Customi~ze..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:5920" menu:helpid="5920" menu:label="~Status Bar"/>
+ <menu:menuitem menu:id="slot:6680" menu:helpid="6680" menu:label="~Input Method Status"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26242" menu:helpid="26242" menu:label="C~olumn &amp; Row Headers"/>
+ <menu:menuitem menu:id="slot:26245" menu:helpid="26245" menu:label="~Value Highlighting"/>
+ <menu:menuitem menu:id="slot:26247" menu:helpid="26247" menu:label="~Page Break Preview"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5627" menu:helpid="5627" menu:label="F~ull Screen"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:6" menu:label="~Insert">
+ <menu:menupopup>
+ <menu:menu menu:id="slot:7" menu:label="~Manual Break">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26261" menu:helpid="26261" menu:label="~Row Break"/>
+ <menu:menuitem menu:id="slot:26262" menu:helpid="26262" menu:label="~Column Break"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:26266" menu:helpid="26266" menu:label="~Cells..."/>
+ <menu:menuitem menu:id="slot:26267" menu:helpid="26267" menu:label="~Rows"/>
+ <menu:menuitem menu:id="slot:26268" menu:helpid="26268" menu:label="Co~lumns"/>
+ <menu:menuitem menu:id="slot:26269" menu:helpid="26269" menu:label="~Sheet..."/>
+ <menu:menuitem menu:id="slot:26085" menu:helpid="26085" menu:label="E~xternal Data..."/>
+ <menu:menuitem menu:id="slot:10503" menu:helpid="10503" menu:label="S~pecial Character..."/>
+ <menu:menuitem menu:id="slot:5678" menu:helpid="5678" menu:label="~Hyperlink"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26152" menu:helpid="26152" menu:label="~Function..."/>
+ <menu:menuitem menu:id="slot:26248" menu:helpid="26248" menu:label="F~unction List"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:8" menu:label="~Names">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26271" menu:helpid="26271" menu:label="~Define..."/>
+ <menu:menuitem menu:id="slot:26272" menu:helpid="26272" menu:label="~Insert..."/>
+ <menu:menuitem menu:id="slot:26273" menu:helpid="26273" menu:label="~Create..."/>
+ <menu:menuitem menu:id="slot:26629" menu:helpid="26629" menu:label="~Labels..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:26276" menu:helpid="26276" menu:label="Not~e"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:30" menu:label="~Graphics">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10241" menu:helpid="10241" menu:label="From ~File..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:1" menu:label="~Object">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5561" menu:helpid="5561" menu:label="~OLE Object..."/>
+ <menu:menuitem menu:id="slot:5672" menu:helpid="5672" menu:label="~Plug-in..."/>
+ <menu:menuitem menu:id="slot:5676" menu:helpid="5676" menu:label="~Sound..."/>
+ <menu:menuitem menu:id="slot:5677" menu:helpid="5677" menu:label="~Video..."/>
+ <menu:menuitem menu:id="slot:5673" menu:helpid="5673" menu:label="~Applet..."/>
+ <menu:menuitem menu:id="slot:26063" menu:helpid="26063" menu:label="~Formula..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:26155" menu:helpid="26155" menu:label="Ch~art..."/>
+ <menu:menuitem menu:id="slot:5563" menu:helpid="5563" menu:label="Float~ing Frame"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5780" menu:label="F~ormat">
+ <menu:menupopup/>
+ </menu:menu>
+ <menu:menu menu:id="slot:6677" menu:label="~Tools">
+ <menu:menupopup>
+ <menu:menu menu:id="slot:31" menu:label="~Spellcheck">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10243" menu:helpid="10243" menu:label="~Check..."/>
+ <menu:menuitem menu:id="slot:12021" menu:helpid="12021" menu:label="~AutoSpellcheck"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10245" menu:helpid="10245" menu:label="~Thesaurus..."/>
+ <menu:menuitem menu:id="slot:26087" menu:helpid="26087" menu:label="~Hyphenation..."/>
+ <menu:menu menu:id="slot:15" menu:label="~Detective">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26456" menu:helpid="26456" menu:label="Trace ~Precedents"/>
+ <menu:menuitem menu:id="slot:26457" menu:helpid="26457" menu:label="~Remove Precedents"/>
+ <menu:menuitem menu:id="slot:26458" menu:helpid="26458" menu:label="~Trace Dependents"/>
+ <menu:menuitem menu:id="slot:26459" menu:helpid="26459" menu:label="Remove ~Dependents"/>
+ <menu:menuitem menu:id="slot:26461" menu:helpid="26461" menu:label="Remove ~All Traces"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26460" menu:helpid="26460" menu:label="Trace ~Error"/>
+ <menu:menuitem menu:id="slot:26469" menu:helpid="26469" menu:label="~Mark Invalid Data"/>
+ <menu:menuitem menu:id="slot:26470" menu:helpid="26470" menu:label="Refresh Tra~ces"/>
+ <menu:menuitem menu:id="slot:26471" menu:helpid="26471" menu:label="A~utoRefresh"/>
+ <menu:menuitem menu:id="slot:26462" menu:helpid="26462" menu:label="~Fill Mode"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10424" menu:helpid="10424" menu:label="~AutoCorrect..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26153" menu:helpid="26153" menu:label="~Goal Seek..."/>
+ <menu:menuitem menu:id="slot:26312" menu:helpid="26312" menu:label="Sc~enarios..."/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:16" menu:label="~Protect Document">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26306" menu:helpid="26306" menu:label="~Sheet..."/>
+ <menu:menuitem menu:id="slot:26307" menu:helpid="26307" menu:label="~Document..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:32" menu:label="Cell Co~ntents">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26304" menu:helpid="26304" menu:label="~Recalculate"/>
+ <menu:menuitem menu:id="slot:26303" menu:helpid="26303" menu:label="Auto~Calculate"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26319" menu:helpid="26319" menu:label="~AutoInput"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5960" menu:helpid="5960" menu:label="~Gallery"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10882" menu:helpid="10882" menu:label="~Data Sources..."/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:1" menu:label="~Macros">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:6669" menu:helpid="6669" menu:label="Record Macro"/>
+ <menu:menuitem menu:id="slot:5959" menu:helpid="5959" menu:label="~Macro..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10958" menu:helpid="10958" menu:label="~XML Filter Settings..."/>
+ <menu:menuitem menu:id="slot:5904" menu:helpid="5904" menu:label="~Configure..."/>
+ <menu:menu menu:id="slot:4" menu:label="Scripting Add-ons">
+ <menu:menupopup>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteMenuBinding()" menu:label="Assign Script to ~Menu..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteKeyBinding" menu:label="Assign Script to ~Key..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteEventBinding()" menu:label="Assign Script to ~Event..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteEditDebug" menu:label="Edit/De~bug Scripts..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.RefreshAllScripts()" menu:label="~Refresh All Scripts"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:31630" menu:helpid="31630" menu:label="~Options..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:10" menu:label="~Data">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26320" menu:helpid="26320" menu:label="~Define Range..."/>
+ <menu:menuitem menu:id="slot:26321" menu:helpid="26321" menu:label="Select ~Range..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26322" menu:helpid="26322" menu:label="~Sort..."/>
+ <menu:menu menu:id="slot:11" menu:label="~Filter">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26325" menu:helpid="26325" menu:label="Auto~Filter"/>
+ <menu:menuitem menu:id="slot:26323" menu:helpid="26323" menu:label="~Standard Filter..."/>
+ <menu:menuitem menu:id="slot:26324" menu:helpid="26324" menu:label="~Advanced Filter..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26326" menu:helpid="26326" menu:label="~Remove Filter"/>
+ <menu:menuitem menu:id="slot:26341" menu:helpid="26341" menu:label="~Hide AutoFilter"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:26328" menu:helpid="26328" menu:label="Sub~totals..."/>
+ <menu:menuitem menu:id="slot:26625" menu:helpid="26625" menu:label="~Validity..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26154" menu:helpid="26154" menu:label="~Multiple Operations..."/>
+ <menu:menuitem menu:id="slot:26150" menu:helpid="26150" menu:label="~Consolidate..."/>
+ <menu:menu menu:id="slot:12" menu:label="~Outline">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26329" menu:helpid="26329" menu:label="~Hide Details"/>
+ <menu:menuitem menu:id="slot:26330" menu:helpid="26330" menu:label="~Show Details"/>
+ <menu:menuitem menu:id="slot:26331" menu:helpid="26331" menu:label="~Group..."/>
+ <menu:menuitem menu:id="slot:26332" menu:helpid="26332" menu:label="~Ungroup..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26333" menu:helpid="26333" menu:label="~AutoOutline"/>
+ <menu:menuitem menu:id="slot:10234" menu:helpid="10234" menu:label="~Remove"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:13" menu:label="Data~Pilot">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:26151" menu:helpid="26151" menu:label="~Start..."/>
+ <menu:menuitem menu:id="slot:26314" menu:helpid="26314" menu:label="~Refresh"/>
+ <menu:menuitem menu:id="slot:26315" menu:helpid="26315" menu:label="~Delete"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26643" menu:helpid="26643" menu:label="R~efresh Range"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5610" menu:label="~Window">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5620" menu:helpid="5620" menu:label="~New Window"/>
+ <menu:menuitem menu:id="slot:5621" menu:helpid="5621" menu:label="Close Window"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:26069" menu:helpid="26069" menu:label="~Split"/>
+ <menu:menuitem menu:id="slot:26070" menu:helpid="26070" menu:label="~Freeze"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5410" menu:label="~Help">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5401" menu:helpid="5401" menu:label="~Contents"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5962" menu:helpid="5962" menu:label="Help ~Agent"/>
+ <menu:menuitem menu:id="slot:5404" menu:helpid="5404" menu:label="~Tips"/>
+ <menu:menuitem menu:id="slot:5403" menu:helpid="5403" menu:label="~Extended Tips"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6683" menu:helpid="6683" menu:label="~Support"/>
+ <menu:menuitem menu:id="slot:6537" menu:helpid="6537" menu:label="~Registration..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5301" menu:helpid="5301" menu:label="A~bout OpenOffice.org..."/>
+ </menu:menupopup>
+ </menu:menu>
+</menu:menubar>
diff --git a/scripting/workben/bindings/dialog.xlb b/scripting/workben/bindings/dialog.xlb
new file mode 100644
index 000000000000..1445c98b8cab
--- /dev/null
+++ b/scripting/workben/bindings/dialog.xlb
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
+<library:library xmlns:library="http://openoffice.org/2000/library" library:name="ScriptBindingLibrary" library:readonly="false" library:passwordprotected="false">
+ <library:element library:name="Highlight"/>
+ <library:element library:name="MacroEditor"/>
+</library:library>
diff --git a/scripting/workben/bindings/drawkeybinding.xml b/scripting/workben/bindings/drawkeybinding.xml
new file mode 100644
index 000000000000..e7d0bbf73176
--- /dev/null
+++ b/scripting/workben/bindings/drawkeybinding.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE accel:acceleratorlist PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "accelerator.dtd">
+<accel:acceleratorlist xmlns:accel="http://openoffice.org/2001/accel" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <accel:item accel:code="KEY_F8" accel:shift="true" accel:mod1="true" xlink:href="slot:10367"/>
+ <accel:item accel:code="KEY_P" accel:shift="true" accel:mod1="true" xlink:href="slot:10294"/>
+ <accel:item accel:code="KEY_N" accel:shift="true" accel:mod1="true" xlink:href="slot:5500"/>
+ <accel:item accel:code="KEY_K" accel:shift="true" accel:mod1="true" xlink:href="slot:27026"/>
+ <accel:item accel:code="KEY_G" accel:shift="true" accel:mod1="true" xlink:href="slot:10454"/>
+ <accel:item accel:code="KEY_B" accel:shift="true" accel:mod1="true" xlink:href="slot:10295"/>
+ <accel:item accel:code="KEY_SUBTRACT" accel:mod1="true" xlink:href="slot:27032"/>
+ <accel:item accel:code="KEY_ADD" accel:mod1="true" xlink:href="slot:27031"/>
+ <accel:item accel:code="KEY_INSERT" accel:mod1="true" xlink:href="slot:5711"/>
+ <accel:item accel:code="KEY_F11" accel:mod1="true" xlink:href="slot:5573"/>
+ <accel:item accel:code="KEY_F7" accel:mod1="true" xlink:href="slot:10245"/>
+ <accel:item accel:code="KEY_F3" accel:mod1="true" xlink:href="slot:27097"/>
+ <accel:item accel:code="KEY_Z" accel:mod1="true" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_Y" accel:mod1="true" xlink:href="slot:5700"/>
+ <accel:item accel:code="KEY_X" accel:mod1="true" xlink:href="slot:5710"/>
+ <accel:item accel:code="KEY_V" accel:mod1="true" xlink:href="slot:5712"/>
+ <accel:item accel:code="KEY_U" accel:mod1="true" xlink:href="slot:10014"/>
+ <accel:item accel:code="KEY_S" accel:mod1="true" xlink:href="slot:5505"/>
+ <accel:item accel:code="KEY_R" accel:mod1="true" xlink:href="slot:10029"/>
+ <accel:item accel:code="KEY_Q" accel:mod1="true" xlink:href="slot:5300"/>
+ <accel:item accel:code="KEY_P" accel:mod1="true" xlink:href="slot:5504"/>
+ <accel:item accel:code="KEY_O" accel:mod1="true" xlink:href="slot:5501"/>
+ <accel:item accel:code="KEY_L" accel:mod1="true" xlink:href="slot:10028"/>
+ <accel:item accel:code="KEY_J" accel:mod1="true" xlink:href="slot:10031"/>
+ <accel:item accel:code="KEY_I" accel:mod1="true" xlink:href="slot:10008"/>
+ <accel:item accel:code="KEY_E" accel:mod1="true" xlink:href="slot:10030"/>
+ <accel:item accel:code="KEY_C" accel:mod1="true" xlink:href="slot:5711"/>
+ <accel:item accel:code="KEY_B" accel:mod1="true" xlink:href="slot:10009"/>
+ <accel:item accel:code="KEY_5" accel:mod1="true" xlink:href="slot:10035"/>
+ <accel:item accel:code="KEY_2" accel:mod1="true" xlink:href="slot:10036"/>
+ <accel:item accel:code="KEY_1" accel:mod1="true" xlink:href="slot:10034"/>
+ <accel:item accel:code="KEY_DELETE" accel:shift="true" xlink:href="slot:5710"/>
+ <accel:item accel:code="KEY_INSERT" accel:shift="true" xlink:href="slot:5712"/>
+ <accel:item accel:code="KEY_F3" accel:shift="true" xlink:href="slot:27004"/>
+ <accel:item accel:code="KEY_REPEAT" xlink:href="slot:5702"/>
+ <accel:item accel:code="KEY_UNDO" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_PASTE" xlink:href="slot:5712"/>
+ <accel:item accel:code="KEY_COPY" xlink:href="slot:5711"/>
+ <accel:item accel:code="KEY_CUT" xlink:href="slot:5710"/>
+ <accel:item accel:code="KEY_OPEN" xlink:href="slot:5501"/>
+ <accel:item accel:code="KEY_DELETE" xlink:href="slot:5713"/>
+ <accel:item accel:code="KEY_F11" xlink:href="slot:5539"/>
+ <accel:item accel:code="KEY_F8" xlink:href="slot:10126"/>
+ <accel:item accel:code="KEY_F7" xlink:href="slot:10243"/>
+ <accel:item accel:code="KEY_F5" xlink:href="slot:10366"/>
+ <accel:item accel:code="KEY_F4" xlink:href="slot:10087"/>
+ <accel:item accel:code="KEY_F3" xlink:href="slot:27096"/>
+ <accel:item accel:code="KEY_F2" xlink:href="slot:10006"/>
+ <accel:item accel:code="KEY_BACKSPACE" accel:mod2="true" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_ADD" accel:shift="true" accel:mod1="true" xlink:href="slot:10286"/>
+ <accel:item accel:code="KEY_SUBTRACT" accel:shift="true" accel:mod1="true" xlink:href="slot:10287"/>
+ <accel:item accel:code="KEY_G" accel:shift="true" accel:mod1="true" accel:mod2="true" xlink:href="slot:10455"/>
+ <accel:item accel:code="KEY_9" accel:shift="true" accel:mod1="true" accel:mod2="true" xlink:href="slot:10703"/>
+ <accel:item accel:code="KEY_K" accel:shift="true" accel:mod1="true" accel:mod2="true" xlink:href="slot:27082"/>
+</accel:acceleratorlist> \ No newline at end of file
diff --git a/scripting/workben/bindings/drawmenubar.xml b/scripting/workben/bindings/drawmenubar.xml
new file mode 100644
index 000000000000..c1c644fe8374
--- /dev/null
+++ b/scripting/workben/bindings/drawmenubar.xml
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE menu:menubar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "menubar.dtd">
+<menu:menubar xmlns:menu="http://openoffice.org/2001/menu" menu:id="menubar">
+ <menu:menu menu:id="slot:5510" menu:label="~File">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5537" menu:helpid="5537" menu:label="~New"/>
+ <menu:menuitem menu:id="slot:5501" menu:helpid="5501" menu:label="~Open..."/>
+ <menu:menuitem menu:id="slot:6381" menu:helpid="6381" menu:label="A~utoPilot"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5503" menu:helpid="5503" menu:label="~Close"/>
+ <menu:menuitem menu:id="slot:5505" menu:helpid="5505" menu:label="~Save"/>
+ <menu:menuitem menu:id="slot:5502" menu:helpid="5502" menu:label="Save ~As..."/>
+ <menu:menuitem menu:id="slot:5309" menu:helpid="5309" menu:label="Sa~ve All"/>
+ <menu:menuitem menu:id="slot:5508" menu:helpid="5508" menu:label="Reload"/>
+ <menu:menuitem menu:id="slot:6583" menu:helpid="6583" menu:label="Versions..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5829" menu:helpid="5829" menu:label="~Export..."/>
+ <menu:menuitem menu:id="slot:6673" menu:helpid="6673" menu:label="Export as PDF..."/>
+ <menu:menu menu:id="slot:98" menu:label="Sen~d">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5331" menu:helpid="5331" menu:label="Document as ~E-mail..."/>
+ <menu:menuitem menu:id="slot:6672" menu:helpid="6672" menu:label="Document as P~DF Attachment..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5535" menu:helpid="5535" menu:label="Propert~ies..."/>
+ <menu:menu menu:id="slot:103" menu:label="~Templates">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5540" menu:helpid="5540" menu:label="~Organize..."/>
+ <menu:menuitem menu:id="slot:6655" menu:helpid="6655" menu:label="~Address Book Source..."/>
+ <menu:menuitem menu:id="slot:5538" menu:helpid="5538" menu:label="~Save..."/>
+ <menu:menuitem menu:id="slot:5594" menu:helpid="5594" menu:label="~Edit..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5504" menu:helpid="5504" menu:label="~Print..."/>
+ <menu:menuitem menu:id="slot:5302" menu:helpid="5302" menu:label="P~rinter Settings..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5300" menu:helpid="5300" menu:label="E~xit"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:20" menu:label="~Edit">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5701" menu:helpid="5701" menu:label="Can&apos;t Undo"/>
+ <menu:menuitem menu:id="slot:5700" menu:helpid="5700" menu:label="Can&apos;t Restore"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5710" menu:helpid="5710" menu:label="Cu~t"/>
+ <menu:menuitem menu:id="slot:5711" menu:helpid="5711" menu:label="~Copy"/>
+ <menu:menuitem menu:id="slot:5712" menu:helpid="5712" menu:label="~Paste"/>
+ <menu:menuitem menu:id="slot:27003" menu:helpid="27003" menu:label="Paste ~Special..."/>
+ <menu:menuitem menu:id="slot:5723" menu:helpid="5723" menu:label="Select ~All"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5961" menu:helpid="5961" menu:label="~Find &amp; Replace..."/>
+ <menu:menuitem menu:id="slot:10366" menu:helpid="10366" menu:label="Na~vigator"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27004" menu:helpid="27004" menu:label="Duplicat~e..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10126" menu:helpid="10126" menu:label="Poi~nts"/>
+ <menu:menuitem menu:id="slot:27301" menu:helpid="27301" menu:label="~Glue Points"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27319" menu:helpid="27319" menu:label="Cross-fading..."/>
+ <menu:menuitem menu:id="slot:27362" menu:helpid="27362" menu:label="F~ields..."/>
+ <menu:menuitem menu:id="slot:27080" menu:helpid="27080" menu:label="D~elete Slide..."/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:340" menu:label="La~yer">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27043" menu:helpid="27043" menu:label="~Insert"/>
+ <menu:menuitem menu:id="slot:27048" menu:helpid="27048" menu:label="~Modify"/>
+ <menu:menuitem menu:id="slot:27081" menu:helpid="27081" menu:label="Delete"/>
+ <menu:menuitem menu:id="slot:27269" menu:helpid="27269" menu:label="~Rename"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27005" menu:helpid="27005" menu:label="Lin~ks..."/>
+ <menu:menuitem menu:id="slot:6314" menu:helpid="6314" menu:label="P~lug-in"/>
+ <menu:menuitem menu:id="slot:10371" menu:helpid="10371" menu:label="ImageMap"/>
+ <menu:menuitem menu:id="slot:5575" menu:helpid="5575" menu:label="~Object"/>
+ <menu:menuitem menu:id="slot:27382" menu:helpid="27382" menu:label="H~yperlink..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:23" menu:label="~View">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10000" menu:helpid="10000" menu:label="~Zoom..."/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:92" menu:label="~Toolbars">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5910" menu:helpid="5910" menu:label="~Function Bar"/>
+ <menu:menuitem menu:id="slot:5905" menu:helpid="5905" menu:label="~Object Bar"/>
+ <menu:menuitem menu:id="slot:5909" menu:helpid="5909" menu:label="Main ~Toolbar"/>
+ <menu:menuitem menu:id="slot:10360" menu:helpid="10360" menu:label="~Hyperlink Bar"/>
+ <menu:menuitem menu:id="slot:5911" menu:helpid="5911" menu:label="Optio~n Bar"/>
+ <menu:menuitem menu:id="slot:10417" menu:helpid="10417" menu:label="~Color Bar"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5908" menu:helpid="5908" menu:label="Customi~ze..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:27040" menu:helpid="27040" menu:label="~Rulers"/>
+ <menu:menuitem menu:id="slot:5920" menu:helpid="5920" menu:label="~Status Bar"/>
+ <menu:menuitem menu:id="slot:6680" menu:helpid="6680" menu:label="~Input Method Status"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:100" menu:label="~Display Quality">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27366" menu:helpid="27366" menu:label="~Color"/>
+ <menu:menuitem menu:id="slot:27367" menu:helpid="27367" menu:label="~Grayscale"/>
+ <menu:menuitem menu:id="slot:27368" menu:helpid="27368" menu:label="~Black and White"/>
+ <menu:menuitem menu:id="slot:27400" menu:helpid="27400" menu:label="~High Contrast"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:27327" menu:helpid="27327" menu:label="~Preview"/>
+ <menu:menu menu:id="slot:101" menu:label="Pre~view Mode">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27369" menu:helpid="27369" menu:label="~Color"/>
+ <menu:menuitem menu:id="slot:27370" menu:helpid="27370" menu:label="~Grayscale"/>
+ <menu:menuitem menu:id="slot:27371" menu:helpid="27371" menu:label="~Black and White"/>
+ <menu:menuitem menu:id="slot:27401" menu:helpid="27401" menu:label="~High Contrast"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27049" menu:helpid="27049" menu:label="S~lide"/>
+ <menu:menuitem menu:id="slot:27050" menu:helpid="27050" menu:label="La~yer"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:338" menu:label="~Grid">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27322" menu:helpid="27322" menu:label="~Visible Grid"/>
+ <menu:menuitem menu:id="slot:27154" menu:helpid="27154" menu:label="Snap to Grid"/>
+ <menu:menuitem menu:id="slot:27323" menu:helpid="27323" menu:label="Grid to ~Front"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:339" menu:label="~Snap Lines">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27324" menu:helpid="27324" menu:label="~Snap Lines Visible"/>
+ <menu:menuitem menu:id="slot:27152" menu:helpid="27152" menu:label="Snap to Snap Lines"/>
+ <menu:menuitem menu:id="slot:27325" menu:helpid="27325" menu:label="Snap Lines to Front"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5627" menu:helpid="5627" menu:label="F~ull Screen"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:21" menu:label="~Insert">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27014" menu:helpid="27014" menu:label="Slid~e"/>
+ <menu:menuitem menu:id="slot:27342" menu:helpid="27342" menu:label="D~uplicate Slide"/>
+ <menu:menuitem menu:id="slot:27043" menu:helpid="27043" menu:label="~Layer..."/>
+ <menu:menuitem menu:id="slot:27038" menu:helpid="27038" menu:label="~Insert Snap Point/Line..."/>
+ <menu:menu menu:id="slot:99" menu:label="Fiel~ds">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27358" menu:helpid="27358" menu:label="~Date (fixed)"/>
+ <menu:menuitem menu:id="slot:27357" menu:helpid="27357" menu:label="Dat~e (variable)"/>
+ <menu:menuitem menu:id="slot:27360" menu:helpid="27360" menu:label="~Time (fixed)"/>
+ <menu:menuitem menu:id="slot:27359" menu:helpid="27359" menu:label="T~ime (variable)"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27364" menu:helpid="27364" menu:label="~Author"/>
+ <menu:menuitem menu:id="slot:27361" menu:helpid="27361" menu:label="~Page Number"/>
+ <menu:menuitem menu:id="slot:27363" menu:helpid="27363" menu:label="~File Name"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:27019" menu:helpid="27019" menu:label="S~pecial Character..."/>
+ <menu:menuitem menu:id="slot:5678" menu:helpid="5678" menu:label="~Hyperlink"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:1" menu:label="Scan">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10331" menu:helpid="10331" menu:label="~Select Source..."/>
+ <menu:menuitem menu:id="slot:10332" menu:helpid="10332" menu:label="~Request..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10217" menu:helpid="10217" menu:label="Sp~readsheet"/>
+ <menu:menuitem menu:id="slot:10241" menu:helpid="10241" menu:label="~Graphics..."/>
+ <menu:menu menu:id="slot:2" menu:label="~Object">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5561" menu:helpid="5561" menu:label="~OLE Object..."/>
+ <menu:menuitem menu:id="slot:5672" menu:helpid="5672" menu:label="~Plug-in..."/>
+ <menu:menuitem menu:id="slot:5676" menu:helpid="5676" menu:label="~Sound..."/>
+ <menu:menuitem menu:id="slot:5677" menu:helpid="5677" menu:label="~Video..."/>
+ <menu:menuitem menu:id="slot:5673" menu:helpid="5673" menu:label="~Applet..."/>
+ <menu:menuitem menu:id="slot:27106" menu:helpid="27106" menu:label="~Formula..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10140" menu:helpid="10140" menu:label="Chart"/>
+ <menu:menuitem menu:id="slot:5563" menu:helpid="5563" menu:label="Float~ing Frame..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27015" menu:helpid="27015" menu:label="~File..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:22" menu:label="F~ormat">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10456" menu:helpid="10456" menu:label="~Default"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10143" menu:helpid="10143" menu:label="L~ine..."/>
+ <menu:menuitem menu:id="slot:10142" menu:helpid="10142" menu:label="A~rea..."/>
+ <menu:menuitem menu:id="slot:27281" menu:helpid="27281" menu:label="Te~xt..."/>
+ <menu:menuitem menu:id="slot:10087" menu:helpid="10087" menu:label="Position and Si~ze..."/>
+ <menu:menuitem menu:id="slot:10613" menu:helpid="10613" menu:label="Con~trol..."/>
+ <menu:menuitem menu:id="slot:10614" menu:helpid="10614" menu:label="For~m..."/>
+ <menu:menuitem menu:id="slot:27320" menu:helpid="27320" menu:label="Dimen~sions..."/>
+ <menu:menuitem menu:id="slot:27338" menu:helpid="27338" menu:label="~Connector..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10296" menu:helpid="10296" menu:label="C~haracter..."/>
+ <menu:menuitem menu:id="slot:10156" menu:helpid="10156" menu:label="~Numbering/Bullets..."/>
+ <menu:menu menu:id="slot:1" menu:label="Case/Characters">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10912" menu:helpid="10912" menu:label="~Uppercase"/>
+ <menu:menuitem menu:id="slot:10913" menu:helpid="10913" menu:label="~Lowercase"/>
+ <menu:menuitem menu:id="slot:10914" menu:helpid="10914" menu:label="H~alf-width"/>
+ <menu:menuitem menu:id="slot:10915" menu:helpid="10915" menu:label="Full-width"/>
+ <menu:menuitem menu:id="slot:10916" menu:helpid="10916" menu:label="~Hiragana"/>
+ <menu:menuitem menu:id="slot:10917" menu:helpid="10917" menu:label="~Katakana"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10297" menu:helpid="10297" menu:label="P~aragraph..."/>
+ <menu:menuitem menu:id="slot:27002" menu:helpid="27002" menu:label="~Page..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27048" menu:helpid="27048" menu:label="~Layer..."/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:95" menu:label="Styl~es">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5573" menu:helpid="5573" menu:label="~Catalog..."/>
+ <menu:menuitem menu:id="slot:27064" menu:helpid="27064" menu:label="~Slide Design..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:5539" menu:helpid="5539" menu:label="St~ylist"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10256" menu:helpid="10256" menu:label="F~ontwork"/>
+ <menu:menuitem menu:id="slot:10644" menu:helpid="10644" menu:label="~3D Effects"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:6677" menu:label="~Tools">
+ <menu:menupopup>
+ <menu:menu menu:id="slot:94" menu:label="~Spellcheck">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10243" menu:helpid="10243" menu:label="~Check..."/>
+ <menu:menuitem menu:id="slot:12021" menu:helpid="12021" menu:label="~AutoSpellcheck"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10245" menu:helpid="10245" menu:label="~Thesaurus..."/>
+ <menu:menuitem menu:id="slot:27340" menu:helpid="27340" menu:label="~Hyphenation"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10424" menu:helpid="10424" menu:label="~AutoCorrect..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5960" menu:helpid="5960" menu:label="~Gallery"/>
+ <menu:menuitem menu:id="slot:10350" menu:helpid="10350" menu:label="~Eyedropper"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:1" menu:label="~Macros">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:6669" menu:helpid="6669" menu:label="Record Macro"/>
+ <menu:menuitem menu:id="slot:5959" menu:helpid="5959" menu:label="~Macro..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10958" menu:helpid="10958" menu:label="~XML Filter Settings..."/>
+ <menu:menuitem menu:id="slot:5904" menu:helpid="5904" menu:label="~Configure..."/>
+ <menu:menu menu:id="slot:4" menu:label="Scripting Add-ons">
+ <menu:menupopup>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteMenuBinding()" menu:label="Assign Script to ~Menu..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteKeyBinding" menu:label="Assign Script to ~Key..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteEventBinding()" menu:label="Assign Script to ~Event..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteEditDebug" menu:label="Edit/De~bug Scripts..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.RefreshAllScripts()" menu:label="~Refresh All Scripts"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:31630" menu:helpid="31630" menu:label="~Options..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:24" menu:label="~Modify">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10129" menu:helpid="10129" menu:label="~Rotate"/>
+ <menu:menu menu:id="slot:1" menu:label="~Flip">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27034" menu:helpid="27034" menu:label="~Vertically"/>
+ <menu:menuitem menu:id="slot:27035" menu:helpid="27035" menu:label="~Horizontally"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:2" menu:label="~Convert">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27036" menu:helpid="27036" menu:label="To ~Curve"/>
+ <menu:menuitem menu:id="slot:27037" menu:helpid="27037" menu:label="To ~Polygon"/>
+ <menu:menuitem menu:id="slot:27381" menu:helpid="27381" menu:label="To C~ontour"/>
+ <menu:menuitem menu:id="slot:10648" menu:helpid="10648" menu:label="To 3~D"/>
+ <menu:menuitem menu:id="slot:10649" menu:helpid="10649" menu:label="To 3D ~Rotation Object"/>
+ <menu:menuitem menu:id="slot:27378" menu:helpid="27378" menu:label="To ~Bitmap"/>
+ <menu:menuitem menu:id="slot:27379" menu:helpid="27379" menu:label="To ~Metafile"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:96" menu:label="~Arrange">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10286" menu:helpid="10286" menu:label="~Bring to Front"/>
+ <menu:menuitem menu:id="slot:27031" menu:helpid="27031" menu:label="Bring ~Forward"/>
+ <menu:menuitem menu:id="slot:27032" menu:helpid="27032" menu:label="Send Back~ward"/>
+ <menu:menuitem menu:id="slot:10287" menu:helpid="10287" menu:label="~Send to Back"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27326" menu:helpid="27326" menu:label="In Front of ~Object"/>
+ <menu:menuitem menu:id="slot:27116" menu:helpid="27116" menu:label="Be~hind Object"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27117" menu:helpid="27117" menu:label="~Reverse"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:3" menu:label="A~lignment">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10131" menu:helpid="10131" menu:label="~Left"/>
+ <menu:menuitem menu:id="slot:10132" menu:helpid="10132" menu:label="~Centered"/>
+ <menu:menuitem menu:id="slot:10133" menu:helpid="10133" menu:label="~Right"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10134" menu:helpid="10134" menu:label="~Top"/>
+ <menu:menuitem menu:id="slot:10135" menu:helpid="10135" menu:label="C~enter"/>
+ <menu:menuitem menu:id="slot:10136" menu:helpid="10136" menu:label="~Bottom"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:5683" menu:helpid="5683" menu:label="~Distribution..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27027" menu:helpid="27027" menu:label="~Name Object..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10454" menu:helpid="10454" menu:label="~Group"/>
+ <menu:menuitem menu:id="slot:10455" menu:helpid="10455" menu:label="~Ungroup"/>
+ <menu:menuitem menu:id="slot:27096" menu:helpid="27096" menu:label="~Enter Group"/>
+ <menu:menuitem menu:id="slot:27097" menu:helpid="27097" menu:label="E~xit Group"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27026" menu:helpid="27026" menu:label="Comb~ine"/>
+ <menu:menuitem menu:id="slot:27082" menu:helpid="27082" menu:label="~Split"/>
+ <menu:menu menu:id="slot:4" menu:label="~Shapes">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5679" menu:helpid="5679" menu:label="~Merge"/>
+ <menu:menuitem menu:id="slot:5680" menu:helpid="5680" menu:label="~Subtract"/>
+ <menu:menuitem menu:id="slot:5681" menu:helpid="5681" menu:label="I~ntersect"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27093" menu:helpid="27093" menu:label="C~onnect"/>
+ <menu:menuitem menu:id="slot:27094" menu:helpid="27094" menu:label="~Break"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5610" menu:label="~Window">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5620" menu:helpid="5620" menu:label="~New Window"/>
+ <menu:menuitem menu:id="slot:5621" menu:helpid="5621" menu:label="Close Window"/>
+ <menu:menuseparator/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5410" menu:label="~Help">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5401" menu:helpid="5401" menu:label="~Contents"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5962" menu:helpid="5962" menu:label="Help ~Agent"/>
+ <menu:menuitem menu:id="slot:5404" menu:helpid="5404" menu:label="~Tips"/>
+ <menu:menuitem menu:id="slot:5403" menu:helpid="5403" menu:label="~Extended Tips"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6683" menu:helpid="6683" menu:label="~Support"/>
+ <menu:menuitem menu:id="slot:6537" menu:helpid="6537" menu:label="~Registration..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5301" menu:helpid="5301" menu:label="A~bout OpenOffice.org..."/>
+ </menu:menupopup>
+ </menu:menu>
+</menu:menubar>
diff --git a/scripting/workben/bindings/eventbindings.xml b/scripting/workben/bindings/eventbindings.xml
new file mode 100644
index 000000000000..96a5ddfeaa5c
--- /dev/null
+++ b/scripting/workben/bindings/eventbindings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE event:events PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "event.dtd">
+<event:events xmlns:event="http://openoffice.org/2001/event" xmlns:xlink="http://www.w3.org/1999/xlink">
+</event:events>
diff --git a/scripting/workben/bindings/impresskeybinding.xml b/scripting/workben/bindings/impresskeybinding.xml
new file mode 100644
index 000000000000..25430801fc77
--- /dev/null
+++ b/scripting/workben/bindings/impresskeybinding.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE accel:acceleratorlist PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "accelerator.dtd">
+<accel:acceleratorlist xmlns:accel="http://openoffice.org/2001/accel" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <accel:item accel:code="KEY_F8" accel:shift="true" accel:mod1="true" xlink:href="slot:10367"/>
+ <accel:item accel:code="KEY_P" accel:shift="true" accel:mod1="true" xlink:href="slot:10294"/>
+ <accel:item accel:code="KEY_N" accel:shift="true" accel:mod1="true" xlink:href="slot:5500"/>
+ <accel:item accel:code="KEY_K" accel:shift="true" accel:mod1="true" xlink:href="slot:27026"/>
+ <accel:item accel:code="KEY_G" accel:shift="true" accel:mod1="true" xlink:href="slot:10454"/>
+ <accel:item accel:code="KEY_B" accel:shift="true" accel:mod1="true" xlink:href="slot:10295"/>
+ <accel:item accel:code="KEY_SUBTRACT" accel:mod1="true" xlink:href="slot:27032"/>
+ <accel:item accel:code="KEY_ADD" accel:mod1="true" xlink:href="slot:27031"/>
+ <accel:item accel:code="KEY_INSERT" accel:mod1="true" xlink:href="slot:5711"/>
+ <accel:item accel:code="KEY_F12" accel:mod1="true" xlink:href="slot:27009"/>
+ <accel:item accel:code="KEY_F11" accel:mod1="true" xlink:href="slot:5573"/>
+ <accel:item accel:code="KEY_F7" accel:mod1="true" xlink:href="slot:10245"/>
+ <accel:item accel:code="KEY_F3" accel:mod1="true" xlink:href="slot:27097"/>
+ <accel:item accel:code="KEY_F2" accel:mod1="true" xlink:href="slot:10157"/>
+ <accel:item accel:code="KEY_Z" accel:mod1="true" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_Y" accel:mod1="true" xlink:href="slot:5700"/>
+ <accel:item accel:code="KEY_X" accel:mod1="true" xlink:href="slot:5710"/>
+ <accel:item accel:code="KEY_V" accel:mod1="true" xlink:href="slot:5712"/>
+ <accel:item accel:code="KEY_U" accel:mod1="true" xlink:href="slot:10014"/>
+ <accel:item accel:code="KEY_S" accel:mod1="true" xlink:href="slot:5505"/>
+ <accel:item accel:code="KEY_R" accel:mod1="true" xlink:href="slot:10029"/>
+ <accel:item accel:code="KEY_Q" accel:mod1="true" xlink:href="slot:5300"/>
+ <accel:item accel:code="KEY_P" accel:mod1="true" xlink:href="slot:5504"/>
+ <accel:item accel:code="KEY_O" accel:mod1="true" xlink:href="slot:5501"/>
+ <accel:item accel:code="KEY_L" accel:mod1="true" xlink:href="slot:10028"/>
+ <accel:item accel:code="KEY_J" accel:mod1="true" xlink:href="slot:10031"/>
+ <accel:item accel:code="KEY_I" accel:mod1="true" xlink:href="slot:10008"/>
+ <accel:item accel:code="KEY_E" accel:mod1="true" xlink:href="slot:10030"/>
+ <accel:item accel:code="KEY_C" accel:mod1="true" xlink:href="slot:5711"/>
+ <accel:item accel:code="KEY_B" accel:mod1="true" xlink:href="slot:10009"/>
+ <accel:item accel:code="KEY_5" accel:mod1="true" xlink:href="slot:10035"/>
+ <accel:item accel:code="KEY_2" accel:mod1="true" xlink:href="slot:10036"/>
+ <accel:item accel:code="KEY_1" accel:mod1="true" xlink:href="slot:10034"/>
+ <accel:item accel:code="KEY_DELETE" accel:shift="true" xlink:href="slot:5710"/>
+ <accel:item accel:code="KEY_INSERT" accel:shift="true" xlink:href="slot:5712"/>
+ <accel:item accel:code="KEY_F3" accel:shift="true" xlink:href="slot:27004"/>
+ <accel:item accel:code="KEY_REPEAT" xlink:href="slot:5702"/>
+ <accel:item accel:code="KEY_UNDO" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_PASTE" xlink:href="slot:5712"/>
+ <accel:item accel:code="KEY_COPY" xlink:href="slot:5711"/>
+ <accel:item accel:code="KEY_CUT" xlink:href="slot:5710"/>
+ <accel:item accel:code="KEY_OPEN" xlink:href="slot:5501"/>
+ <accel:item accel:code="KEY_DELETE" xlink:href="slot:5713"/>
+ <accel:item accel:code="KEY_F12" xlink:href="slot:27010"/>
+ <accel:item accel:code="KEY_F11" xlink:href="slot:5539"/>
+ <accel:item accel:code="KEY_F9" xlink:href="slot:10157"/>
+ <accel:item accel:code="KEY_F8" xlink:href="slot:10126"/>
+ <accel:item accel:code="KEY_F7" xlink:href="slot:10243"/>
+ <accel:item accel:code="KEY_F5" xlink:href="slot:10366"/>
+ <accel:item accel:code="KEY_F4" xlink:href="slot:10087"/>
+ <accel:item accel:code="KEY_F3" xlink:href="slot:27096"/>
+ <accel:item accel:code="KEY_F2" xlink:href="slot:10006"/>
+ <accel:item accel:code="KEY_BACKSPACE" accel:mod2="true" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_ADD" accel:shift="true" accel:mod1="true" xlink:href="slot:10286"/>
+ <accel:item accel:code="KEY_SUBTRACT" accel:shift="true" accel:mod1="true" xlink:href="slot:10287"/>
+ <accel:item accel:code="KEY_G" accel:shift="true" accel:mod1="true" accel:mod2="true" xlink:href="slot:10455"/>
+ <accel:item accel:code="KEY_9" accel:shift="true" accel:mod1="true" accel:mod2="true" xlink:href="slot:10703"/>
+ <accel:item accel:code="KEY_K" accel:shift="true" accel:mod1="true" accel:mod2="true" xlink:href="slot:27082"/>
+</accel:acceleratorlist> \ No newline at end of file
diff --git a/scripting/workben/bindings/impressmenubar.xml b/scripting/workben/bindings/impressmenubar.xml
new file mode 100644
index 000000000000..ec51390d0411
--- /dev/null
+++ b/scripting/workben/bindings/impressmenubar.xml
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE menu:menubar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "menubar.dtd">
+<menu:menubar xmlns:menu="http://openoffice.org/2001/menu" menu:id="menubar">
+ <menu:menu menu:id="slot:5510" menu:label="~File">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5537" menu:helpid="5537" menu:label="~New"/>
+ <menu:menuitem menu:id="slot:5501" menu:helpid="5501" menu:label="~Open..."/>
+ <menu:menuitem menu:id="slot:6381" menu:helpid="6381" menu:label="A~utoPilot"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5503" menu:helpid="5503" menu:label="~Close"/>
+ <menu:menuitem menu:id="slot:5505" menu:helpid="5505" menu:label="~Save"/>
+ <menu:menuitem menu:id="slot:5502" menu:helpid="5502" menu:label="Save ~As..."/>
+ <menu:menuitem menu:id="slot:5309" menu:helpid="5309" menu:label="Sa~ve All"/>
+ <menu:menuitem menu:id="slot:5508" menu:helpid="5508" menu:label="Reload"/>
+ <menu:menuitem menu:id="slot:6583" menu:helpid="6583" menu:label="Versions..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5829" menu:helpid="5829" menu:label="~Export..."/>
+ <menu:menuitem menu:id="slot:6673" menu:helpid="6673" menu:label="Export as PDF..."/>
+ <menu:menu menu:id="slot:98" menu:label="Sen~d">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5331" menu:helpid="5331" menu:label="Document as ~E-mail..."/>
+ <menu:menuitem menu:id="slot:6672" menu:helpid="6672" menu:label="Document as P~DF Attachment..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5535" menu:helpid="5535" menu:label="Propert~ies..."/>
+ <menu:menu menu:id="slot:103" menu:label="~Templates">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5540" menu:helpid="5540" menu:label="~Organize..."/>
+ <menu:menuitem menu:id="slot:6655" menu:helpid="6655" menu:label="~Address Book Source..."/>
+ <menu:menuitem menu:id="slot:5538" menu:helpid="5538" menu:label="~Save..."/>
+ <menu:menuitem menu:id="slot:5594" menu:helpid="5594" menu:label="~Edit..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5504" menu:helpid="5504" menu:label="~Print..."/>
+ <menu:menuitem menu:id="slot:5302" menu:helpid="5302" menu:label="P~rinter Settings..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5300" menu:helpid="5300" menu:label="E~xit"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:20" menu:label="~Edit">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5701" menu:helpid="5701" menu:label="Can&apos;t Undo"/>
+ <menu:menuitem menu:id="slot:5700" menu:helpid="5700" menu:label="Can&apos;t Restore"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5710" menu:helpid="5710" menu:label="Cu~t"/>
+ <menu:menuitem menu:id="slot:5711" menu:helpid="5711" menu:label="~Copy"/>
+ <menu:menuitem menu:id="slot:5712" menu:helpid="5712" menu:label="~Paste"/>
+ <menu:menuitem menu:id="slot:27003" menu:helpid="27003" menu:label="Paste ~Special..."/>
+ <menu:menuitem menu:id="slot:5723" menu:helpid="5723" menu:label="Select ~All"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5961" menu:helpid="5961" menu:label="~Find &amp; Replace..."/>
+ <menu:menuitem menu:id="slot:10366" menu:helpid="10366" menu:label="Na~vigator"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27004" menu:helpid="27004" menu:label="Duplicat~e..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10126" menu:helpid="10126" menu:label="Poi~nts"/>
+ <menu:menuitem menu:id="slot:27301" menu:helpid="27301" menu:label="~Glue Points"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27362" menu:helpid="27362" menu:label="F~ields..."/>
+ <menu:menuitem menu:id="slot:27080" menu:helpid="27080" menu:label="D~elete Slide..."/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:340" menu:label="La~yer">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27043" menu:helpid="27043" menu:label="~Insert"/>
+ <menu:menuitem menu:id="slot:27048" menu:helpid="27048" menu:label="~Modify"/>
+ <menu:menuitem menu:id="slot:27081" menu:helpid="27081" menu:label="Delete"/>
+ <menu:menuitem menu:id="slot:27269" menu:helpid="27269" menu:label="~Rename"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27005" menu:helpid="27005" menu:label="Lin~ks..."/>
+ <menu:menuitem menu:id="slot:6314" menu:helpid="6314" menu:label="P~lug-in"/>
+ <menu:menuitem menu:id="slot:10371" menu:helpid="10371" menu:label="ImageMap"/>
+ <menu:menuitem menu:id="slot:5575" menu:helpid="5575" menu:label="~Object"/>
+ <menu:menuitem menu:id="slot:27382" menu:helpid="27382" menu:label="H~yperlink..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:23" menu:label="~View">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10000" menu:helpid="10000" menu:label="~Zoom..."/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:92" menu:label="~Toolbars">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5910" menu:helpid="5910" menu:label="~Function Bar"/>
+ <menu:menuitem menu:id="slot:5905" menu:helpid="5905" menu:label="~Object Bar"/>
+ <menu:menuitem menu:id="slot:5909" menu:helpid="5909" menu:label="Main ~Toolbar"/>
+ <menu:menuitem menu:id="slot:10360" menu:helpid="10360" menu:label="~Hyperlink Bar"/>
+ <menu:menuitem menu:id="slot:5911" menu:helpid="5911" menu:label="Optio~n Bar"/>
+ <menu:menuitem menu:id="slot:5928" menu:helpid="5928" menu:label="~Presentation"/>
+ <menu:menuitem menu:id="slot:10417" menu:helpid="10417" menu:label="~Color Bar"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5908" menu:helpid="5908" menu:label="Customi~ze..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:27040" menu:helpid="27040" menu:label="~Rulers"/>
+ <menu:menuitem menu:id="slot:5920" menu:helpid="5920" menu:label="~Status Bar"/>
+ <menu:menuitem menu:id="slot:6680" menu:helpid="6680" menu:label="~Input Method Status"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:91" menu:label="Wor~kspace">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27009" menu:helpid="27009" menu:label="~Drawing View"/>
+ <menu:menuitem menu:id="slot:27010" menu:helpid="27010" menu:label="~Outline View"/>
+ <menu:menuitem menu:id="slot:27011" menu:helpid="27011" menu:label="~Slides View"/>
+ <menu:menuitem menu:id="slot:27069" menu:helpid="27069" menu:label="~Notes View"/>
+ <menu:menuitem menu:id="slot:27070" menu:helpid="27070" menu:label="~Handout View"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:100" menu:label="~Display Quality">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27366" menu:helpid="27366" menu:label="~Color"/>
+ <menu:menuitem menu:id="slot:27367" menu:helpid="27367" menu:label="~Grayscale"/>
+ <menu:menuitem menu:id="slot:27368" menu:helpid="27368" menu:label="~Black and White"/>
+ <menu:menuitem menu:id="slot:27400" menu:helpid="27400" menu:label="~High Contrast"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27327" menu:helpid="27327" menu:label="~Preview"/>
+ <menu:menu menu:id="slot:101" menu:label="Pre~view Mode">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27369" menu:helpid="27369" menu:label="~Color"/>
+ <menu:menuitem menu:id="slot:27370" menu:helpid="27370" menu:label="~Grayscale"/>
+ <menu:menuitem menu:id="slot:27371" menu:helpid="27371" menu:label="~Black and White"/>
+ <menu:menuitem menu:id="slot:27401" menu:helpid="27401" menu:label="~High Contrast"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27049" menu:helpid="27049" menu:label="S~lide"/>
+ <menu:menu menu:id="slot:97" menu:label="~Master">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27348" menu:helpid="27348" menu:label="~Drawing"/>
+ <menu:menuitem menu:id="slot:27351" menu:helpid="27351" menu:label="~Title"/>
+ <menu:menuitem menu:id="slot:27350" menu:helpid="27350" menu:label="~Notes"/>
+ <menu:menuitem menu:id="slot:27349" menu:helpid="27349" menu:label="~Handout"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:27050" menu:helpid="27050" menu:label="La~yer"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:338" menu:label="~Grid">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27322" menu:helpid="27322" menu:label="~Visible Grid"/>
+ <menu:menuitem menu:id="slot:27154" menu:helpid="27154" menu:label="Snap to Grid"/>
+ <menu:menuitem menu:id="slot:27323" menu:helpid="27323" menu:label="Grid to ~Front"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:339" menu:label="~Snap Lines">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27324" menu:helpid="27324" menu:label="~Snap Lines Visible"/>
+ <menu:menuitem menu:id="slot:27152" menu:helpid="27152" menu:label="Snap to Snap Lines"/>
+ <menu:menuitem menu:id="slot:27325" menu:helpid="27325" menu:label="Snap Lines to Front"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5627" menu:helpid="5627" menu:label="F~ull Screen"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:21" menu:label="~Insert">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27014" menu:helpid="27014" menu:label="Slid~e..."/>
+ <menu:menuitem menu:id="slot:27342" menu:helpid="27342" menu:label="D~uplicate Slide"/>
+ <menu:menuitem menu:id="slot:27343" menu:helpid="27343" menu:label="E~xpand Slide"/>
+ <menu:menuitem menu:id="slot:27344" menu:helpid="27344" menu:label="Su~mmary Slide"/>
+ <menu:menu menu:id="slot:99" menu:label="Fiel~ds">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:27358" menu:helpid="27358" menu:label="~Date (fixed)"/>
+ <menu:menuitem menu:id="slot:27357" menu:helpid="27357" menu:label="Dat~e (variable)"/>
+ <menu:menuitem menu:id="slot:27360" menu:helpid="27360" menu:label="~Time (fixed)"/>
+ <menu:menuitem menu:id="slot:27359" menu:helpid="27359" menu:label="T~ime (variable)"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27364" menu:helpid="27364" menu:label="~Author"/>
+ <menu:menuitem menu:id="slot:27361" menu:helpid="27361" menu:label="~Page Number"/>
+ <menu:menuitem menu:id="slot:27363" menu:helpid="27363" menu:label="~File Name"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:27019" menu:helpid="27019" menu:label="S~pecial Character..."/>
+ <menu:menuitem menu:id="slot:5678" menu:helpid="5678" menu:label="~Hyperlink"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:1" menu:label="Scan">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10331" menu:helpid="10331" menu:label="~Select Source..."/>
+ <menu:menuitem menu:id="slot:10332" menu:helpid="10332" menu:label="~Request..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10217" menu:helpid="10217" menu:label="Sp~readsheet"/>
+ <menu:menuitem menu:id="slot:10241" menu:helpid="10241" menu:label="~Graphics..."/>
+ <menu:menu menu:id="slot:2" menu:label="~Object">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5561" menu:helpid="5561" menu:label="~OLE Object..."/>
+ <menu:menuitem menu:id="slot:5672" menu:helpid="5672" menu:label="~Plug-in..."/>
+ <menu:menuitem menu:id="slot:5676" menu:helpid="5676" menu:label="~Sound..."/>
+ <menu:menuitem menu:id="slot:5677" menu:helpid="5677" menu:label="~Video..."/>
+ <menu:menuitem menu:id="slot:5673" menu:helpid="5673" menu:label="~Applet..."/>
+ <menu:menuitem menu:id="slot:27106" menu:helpid="27106" menu:label="~Formula..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10140" menu:helpid="10140" menu:label="Chart"/>
+ <menu:menuitem menu:id="slot:5563" menu:helpid="5563" menu:label="Float~ing Frame..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27015" menu:helpid="27015" menu:label="~File..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:22" menu:label="F~ormat">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10456" menu:helpid="10456" menu:label="~Default"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10143" menu:helpid="10143" menu:label="L~ine..."/>
+ <menu:menuitem menu:id="slot:10142" menu:helpid="10142" menu:label="A~rea..."/>
+ <menu:menuitem menu:id="slot:27281" menu:helpid="27281" menu:label="Te~xt..."/>
+ <menu:menuitem menu:id="slot:10087" menu:helpid="10087" menu:label="Position and Si~ze..."/>
+ <menu:menuitem menu:id="slot:10613" menu:helpid="10613" menu:label="Con~trol..."/>
+ <menu:menuitem menu:id="slot:10614" menu:helpid="10614" menu:label="For~m..."/>
+ <menu:menuitem menu:id="slot:27320" menu:helpid="27320" menu:label="Dimen~sions..."/>
+ <menu:menuitem menu:id="slot:27338" menu:helpid="27338" menu:label="~Connector..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10296" menu:helpid="10296" menu:label="C~haracter..."/>
+ <menu:menuitem menu:id="slot:10156" menu:helpid="10156" menu:label="~Numbering/Bullets..."/>
+ <menu:menu menu:id="slot:1" menu:label="Case/Characters">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10912" menu:helpid="10912" menu:label="~Uppercase"/>
+ <menu:menuitem menu:id="slot:10913" menu:helpid="10913" menu:label="~Lowercase"/>
+ <menu:menuitem menu:id="slot:10914" menu:helpid="10914" menu:label="H~alf-width"/>
+ <menu:menuitem menu:id="slot:10915" menu:helpid="10915" menu:label="Full-width"/>
+ <menu:menuitem menu:id="slot:10916" menu:helpid="10916" menu:label="~Hiragana"/>
+ <menu:menuitem menu:id="slot:10917" menu:helpid="10917" menu:label="~Katakana"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10297" menu:helpid="10297" menu:label="P~aragraph..."/>
+ <menu:menuitem menu:id="slot:27002" menu:helpid="27002" menu:label="~Page..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27046" menu:helpid="27046" menu:label="Modify ~Layout..."/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:95" menu:label="Styl~es">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5573" menu:helpid="5573" menu:label="~Catalog..."/>
+ <menu:menuitem menu:id="slot:27064" menu:helpid="27064" menu:label="~Slide Design..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:5539" menu:helpid="5539" menu:label="St~ylist"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10256" menu:helpid="10256" menu:label="F~ontwork"/>
+ <menu:menuitem menu:id="slot:10644" menu:helpid="10644" menu:label="~3D Effects"/>
+ <menu:menu menu:id="slot:102" menu:label="~Group">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10454" menu:helpid="10454" menu:label="~Group"/>
+ <menu:menuitem menu:id="slot:10455" menu:helpid="10455" menu:label="~Ungroup"/>
+ <menu:menuitem menu:id="slot:27096" menu:helpid="27096" menu:label="~Edit Group"/>
+ <menu:menuitem menu:id="slot:27097" menu:helpid="27097" menu:label="E~xit group"/>
+ </menu:menupopup>
+ </menu:menu>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:6677" menu:label="~Tools">
+ <menu:menupopup>
+ <menu:menu menu:id="slot:94" menu:label="~Spellcheck">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10243" menu:helpid="10243" menu:label="~Check..."/>
+ <menu:menuitem menu:id="slot:12021" menu:helpid="12021" menu:label="~AutoSpellcheck"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10245" menu:helpid="10245" menu:label="~Thesaurus..."/>
+ <menu:menuitem menu:id="slot:27340" menu:helpid="27340" menu:label="~Hyphenation"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10424" menu:helpid="10424" menu:label="~AutoCorrect..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5960" menu:helpid="5960" menu:label="~Gallery"/>
+ <menu:menuitem menu:id="slot:10350" menu:helpid="10350" menu:label="~Eyedropper"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:1" menu:label="~Macros">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:6669" menu:helpid="6669" menu:label="Record Macro"/>
+ <menu:menuitem menu:id="slot:5959" menu:helpid="5959" menu:label="~Macro..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10958" menu:helpid="10958" menu:label="~XML Filter Settings..."/>
+ <menu:menuitem menu:id="slot:5904" menu:helpid="5904" menu:label="~Configure..."/>
+ <menu:menu menu:id="slot:4" menu:label="Scripting Add-ons">
+ <menu:menupopup>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteMenuBinding()" menu:label="Assign Script to ~Menu..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteKeyBinding" menu:label="Assign Script to ~Key..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteEventBinding()" menu:label="Assign Script to ~Event..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteEditDebug" menu:label="Edit/De~bug Scripts..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.RefreshAllScripts()" menu:label="~Refresh All Scripts"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:31630" menu:helpid="31630" menu:label="~Options..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:26" menu:label="~Slide Show">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10157" menu:helpid="10157" menu:label="Slide Sho~w"/>
+ <menu:menuitem menu:id="slot:10159" menu:helpid="10159" menu:label="~Rehearse Timings"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27339" menu:helpid="27339" menu:label="~Slide Show Settings..."/>
+ <menu:menuitem menu:id="slot:27365" menu:helpid="27365" menu:label="~Custom Slide Show..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27334" menu:helpid="27334" menu:label="Slide ~Transition"/>
+ <menu:menuitem menu:id="slot:10161" menu:helpid="10161" menu:label="~Show/Hide Slide"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:27062" menu:helpid="27062" menu:label="~Animation"/>
+ <menu:menuitem menu:id="slot:27328" menu:helpid="27328" menu:label="~Effects"/>
+ <menu:menuitem menu:id="slot:27063" menu:helpid="27063" menu:label="~Interaction..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5610" menu:label="~Window">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5620" menu:helpid="5620" menu:label="~New Window"/>
+ <menu:menuitem menu:id="slot:5621" menu:helpid="5621" menu:label="Close Window"/>
+ <menu:menuseparator/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5410" menu:label="~Help">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5401" menu:helpid="5401" menu:label="~Contents"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5962" menu:helpid="5962" menu:label="Help ~Agent"/>
+ <menu:menuitem menu:id="slot:5404" menu:helpid="5404" menu:label="~Tips"/>
+ <menu:menuitem menu:id="slot:5403" menu:helpid="5403" menu:label="~Extended Tips"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6683" menu:helpid="6683" menu:label="~Support"/>
+ <menu:menuitem menu:id="slot:6537" menu:helpid="6537" menu:label="~Registration..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5301" menu:helpid="5301" menu:label="A~bout OpenOffice.org..."/>
+ </menu:menupopup>
+ </menu:menu>
+</menu:menubar>
diff --git a/scripting/workben/bindings/manifest.xml b/scripting/workben/bindings/manifest.xml
new file mode 100644
index 000000000000..093d19ff37a8
--- /dev/null
+++ b/scripting/workben/bindings/manifest.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
+<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
+ <manifest:file-entry manifest:media-type="" manifest:full-path="/"/>
+ <manifest:file-entry manifest:media-type="" manifest:full-path="writermenubar.xml"/>
+ <manifest:file-entry manifest:media-type="" manifest:full-path="writerkeybinding.xml"/>
+ <manifest:file-entry manifest:media-type="" manifest:full-path="calcmenubar.xml"/>
+ <manifest:file-entry manifest:media-type="" manifest:full-path="calckeybinding.xml"/>
+ <manifest:file-entry manifest:media-type="" manifest:full-path="impressmenubar.xml"/>
+ <manifest:file-entry manifest:media-type="" manifest:full-path="impresskeybinding.xml"/>
+ <manifest:file-entry manifest:media-type="" manifest:full-path="drawmenubar.xml"/>
+ <manifest:file-entry manifest:media-type="" manifest:full-path="drawkeybinding.xml"/>
+ <manifest:file-entry manifest:media-type="" manifest:full-path="eventbindings.xml"/>
+</manifest:manifest> \ No newline at end of file
diff --git a/scripting/workben/bindings/script.xlb b/scripting/workben/bindings/script.xlb
new file mode 100644
index 000000000000..33eb114b5b64
--- /dev/null
+++ b/scripting/workben/bindings/script.xlb
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
+<library:library xmlns:library="http://openoffice.org/2000/library" library:name="ScriptBindingLibrary" library:readonly="false" library:passwordprotected="false">
+</library:library>
diff --git a/scripting/workben/bindings/writerkeybinding.xml b/scripting/workben/bindings/writerkeybinding.xml
new file mode 100644
index 000000000000..65c7ceef42e7
--- /dev/null
+++ b/scripting/workben/bindings/writerkeybinding.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE accel:acceleratorlist PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "accelerator.dtd">
+<accel:acceleratorlist xmlns:accel="http://openoffice.org/2001/accel" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <accel:item accel:code="KEY_DELETE" accel:shift="true" accel:mod1="true" xlink:href="slot:20927"/>
+ <accel:item accel:code="KEY_BACKSPACE" accel:shift="true" accel:mod1="true" xlink:href="slot:20928"/>
+ <accel:item accel:code="KEY_RETURN" accel:shift="true" accel:mod1="true" xlink:href="slot:20305"/>
+ <accel:item accel:code="KEY_PAGEDOWN" accel:shift="true" accel:mod1="true" xlink:href="slot:20963"/>
+ <accel:item accel:code="KEY_END" accel:shift="true" accel:mod1="true" xlink:href="slot:20808"/>
+ <accel:item accel:code="KEY_HOME" accel:shift="true" accel:mod1="true" xlink:href="slot:20807"/>
+ <accel:item accel:code="KEY_RIGHT" accel:shift="true" accel:mod1="true" xlink:href="slot:20821"/>
+ <accel:item accel:code="KEY_LEFT" accel:shift="true" accel:mod1="true" xlink:href="slot:20822"/>
+ <accel:item accel:code="KEY_UP" accel:shift="true" accel:mod1="true" xlink:href="slot:20947"/>
+ <accel:item accel:code="KEY_DOWN" accel:shift="true" accel:mod1="true" xlink:href="slot:20948"/>
+ <accel:item accel:code="KEY_F12" accel:shift="true" accel:mod1="true" xlink:href="slot:20137"/>
+ <accel:item accel:code="KEY_F11" accel:shift="true" accel:mod1="true" xlink:href="slot:5556"/>
+ <accel:item accel:code="KEY_F9" accel:shift="true" accel:mod1="true" xlink:href="slot:20143"/>
+ <accel:item accel:code="KEY_F5" accel:shift="true" accel:mod1="true" xlink:href="slot:20659"/>
+ <accel:item accel:code="KEY_T" accel:shift="true" accel:mod1="true" xlink:href="slot:20559"/>
+ <accel:item accel:code="KEY_R" accel:shift="true" accel:mod1="true" xlink:href="slot:20201"/>
+ <accel:item accel:code="KEY_P" accel:shift="true" accel:mod1="true" xlink:href="slot:20411"/>
+ <accel:item accel:code="KEY_I" accel:shift="true" accel:mod1="true" xlink:href="slot:20989"/>
+ <accel:item accel:code="KEY_F" accel:shift="true" accel:mod1="true" xlink:href="slot:20150"/>
+ <accel:item accel:code="KEY_D" accel:shift="true" accel:mod1="true" xlink:href="slot:10951"/>
+ <accel:item accel:code="KEY_B" accel:shift="true" accel:mod1="true" xlink:href="slot:20412"/>
+ <accel:item accel:code="KEY_A" accel:shift="true" accel:mod1="true" xlink:href="slot:10950"/>
+ <accel:item accel:code="KEY_MULTIPLY" accel:mod1="true" xlink:href="slot:20127"/>
+ <accel:item accel:code="KEY_SUBTRACT" accel:mod1="true" xlink:href="slot:20343"/>
+ <accel:item accel:code="KEY_ADD" accel:mod1="true" xlink:href="slot:20615"/>
+ <accel:item accel:code="KEY_DELETE" accel:mod1="true" xlink:href="slot:20929"/>
+ <accel:item accel:code="KEY_BACKSPACE" accel:mod1="true" xlink:href="slot:20930"/>
+ <accel:item accel:code="KEY_SPACE" accel:mod1="true" xlink:href="slot:20344"/>
+ <accel:item accel:code="KEY_RETURN" accel:mod1="true" xlink:href="slot:20323"/>
+ <accel:item accel:code="KEY_PAGEDOWN" accel:mod1="true" xlink:href="slot:20961"/>
+ <accel:item accel:code="KEY_PAGEUP" accel:mod1="true" xlink:href="slot:20960"/>
+ <accel:item accel:code="KEY_END" accel:mod1="true" xlink:href="slot:20908"/>
+ <accel:item accel:code="KEY_HOME" accel:mod1="true" xlink:href="slot:20907"/>
+ <accel:item accel:code="KEY_RIGHT" accel:mod1="true" xlink:href="slot:20921"/>
+ <accel:item accel:code="KEY_LEFT" accel:mod1="true" xlink:href="slot:20922"/>
+ <accel:item accel:code="KEY_F12" accel:mod1="true" xlink:href="slot:20330"/>
+ <accel:item accel:code="KEY_F11" accel:mod1="true" xlink:href="slot:5573"/>
+ <accel:item accel:code="KEY_F10" accel:mod1="true" xlink:href="slot:20224"/>
+ <accel:item accel:code="KEY_F9" accel:mod1="true" xlink:href="slot:20226"/>
+ <accel:item accel:code="KEY_F8" accel:mod1="true" xlink:href="slot:20225"/>
+ <accel:item accel:code="KEY_F7" accel:mod1="true" xlink:href="slot:20603"/>
+ <accel:item accel:code="KEY_F3" accel:mod1="true" xlink:href="slot:20620"/>
+ <accel:item accel:code="KEY_F2" accel:mod1="true" xlink:href="slot:20308"/>
+ <accel:item accel:code="KEY_Z" accel:mod1="true" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_Y" accel:mod1="true" xlink:href="slot:5700"/>
+ <accel:item accel:code="KEY_U" accel:mod1="true" xlink:href="slot:10014"/>
+ <accel:item accel:code="KEY_R" accel:mod1="true" xlink:href="slot:10029"/>
+ <accel:item accel:code="KEY_L" accel:mod1="true" xlink:href="slot:10028"/>
+ <accel:item accel:code="KEY_J" accel:mod1="true" xlink:href="slot:10031"/>
+ <accel:item accel:code="KEY_I" accel:mod1="true" xlink:href="slot:10008"/>
+ <accel:item accel:code="KEY_E" accel:mod1="true" xlink:href="slot:10030"/>
+ <accel:item accel:code="KEY_D" accel:mod1="true" xlink:href="slot:20405"/>
+ <accel:item accel:code="KEY_B" accel:mod1="true" xlink:href="slot:10009"/>
+ <accel:item accel:code="KEY_5" accel:mod1="true" xlink:href="slot:10035"/>
+ <accel:item accel:code="KEY_2" accel:mod1="true" xlink:href="slot:10036"/>
+ <accel:item accel:code="KEY_1" accel:mod1="true" xlink:href="slot:10034"/>
+ <accel:item accel:code="KEY_BACKSPACE" accel:shift="true" xlink:href="slot:20942"/>
+ <accel:item accel:code="KEY_RETURN" accel:shift="true" xlink:href="slot:20318"/>
+ <accel:item accel:code="KEY_PAGEDOWN" accel:shift="true" xlink:href="slot:20830"/>
+ <accel:item accel:code="KEY_PAGEUP" accel:shift="true" xlink:href="slot:20829"/>
+ <accel:item accel:code="KEY_END" accel:shift="true" xlink:href="slot:20806"/>
+ <accel:item accel:code="KEY_HOME" accel:shift="true" xlink:href="slot:20805"/>
+ <accel:item accel:code="KEY_RIGHT" accel:shift="true" xlink:href="slot:20802"/>
+ <accel:item accel:code="KEY_LEFT" accel:shift="true" xlink:href="slot:20801"/>
+ <accel:item accel:code="KEY_UP" accel:shift="true" xlink:href="slot:20803"/>
+ <accel:item accel:code="KEY_DOWN" accel:shift="true" xlink:href="slot:20804"/>
+ <accel:item accel:code="KEY_F12" accel:shift="true" xlink:href="slot:20138"/>
+ <accel:item accel:code="KEY_F11" accel:shift="true" xlink:href="slot:5555"/>
+ <accel:item accel:code="KEY_F9" accel:shift="true" xlink:href="slot:20129"/>
+ <accel:item accel:code="KEY_F8" accel:shift="true" xlink:href="slot:20939"/>
+ <accel:item accel:code="KEY_F5" accel:shift="true" xlink:href="slot:20958"/>
+ <accel:item accel:code="KEY_REPEAT" xlink:href="slot:5702"/>
+ <accel:item accel:code="KEY_UNDO" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_INSERT" xlink:href="slot:10221"/>
+ <accel:item accel:code="KEY_BACKSPACE" xlink:href="slot:20926"/>
+ <accel:item accel:code="KEY_ESCAPE" xlink:href="slot:20941"/>
+ <accel:item accel:code="KEY_RETURN" xlink:href="slot:20303"/>
+ <accel:item accel:code="KEY_PAGEDOWN" xlink:href="slot:20938"/>
+ <accel:item accel:code="KEY_PAGEUP" xlink:href="slot:20937"/>
+ <accel:item accel:code="KEY_END" xlink:href="slot:20906"/>
+ <accel:item accel:code="KEY_HOME" xlink:href="slot:20905"/>
+ <accel:item accel:code="KEY_RIGHT" xlink:href="slot:20902"/>
+ <accel:item accel:code="KEY_LEFT" xlink:href="slot:20901"/>
+ <accel:item accel:code="KEY_UP" xlink:href="slot:20903"/>
+ <accel:item accel:code="KEY_DOWN" xlink:href="slot:20904"/>
+ <accel:item accel:code="KEY_F12" xlink:href="slot:20144"/>
+ <accel:item accel:code="KEY_F11" xlink:href="slot:5539"/>
+ <accel:item accel:code="KEY_F9" xlink:href="slot:20126"/>
+ <accel:item accel:code="KEY_F8" xlink:href="slot:20940"/>
+ <accel:item accel:code="KEY_F7" xlink:href="slot:20622"/>
+ <accel:item accel:code="KEY_F5" xlink:href="slot:10366"/>
+ <accel:item accel:code="KEY_F3" xlink:href="slot:20628"/>
+ <accel:item accel:code="KEY_F2" xlink:href="slot:20128"/>
+ <accel:item accel:code="KEY_BACKSPACE" accel:mod2="true" xlink:href="slot:5701"/>
+ <accel:item accel:code="KEY_UP" accel:mod1="true" accel:mod2="true" xlink:href="slot:20134"/>
+ <accel:item accel:code="KEY_DOWN" accel:mod1="true" accel:mod2="true" xlink:href="slot:20135"/>
+ <accel:item accel:code="KEY_SUBTRACT" accel:shift="true" accel:mod1="true" xlink:href="slot:20385"/>
+</accel:acceleratorlist> \ No newline at end of file
diff --git a/scripting/workben/bindings/writermenubar.xml b/scripting/workben/bindings/writermenubar.xml
new file mode 100644
index 000000000000..086520486271
--- /dev/null
+++ b/scripting/workben/bindings/writermenubar.xml
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE menu:menubar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "menubar.dtd">
+<menu:menubar xmlns:menu="http://openoffice.org/2001/menu" menu:id="menubar">
+ <menu:menu menu:id="slot:5510" menu:label="~File">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5537" menu:helpid="5537" menu:label="~New"/>
+ <menu:menuitem menu:id="slot:5501" menu:helpid="5501" menu:label="~Open..."/>
+ <menu:menuitem menu:id="slot:6381" menu:helpid="6381" menu:label="A~utoPilot"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5503" menu:helpid="5503" menu:label="~Close"/>
+ <menu:menuitem menu:id="slot:5505" menu:helpid="5505" menu:label="~Save"/>
+ <menu:menuitem menu:id="slot:5502" menu:helpid="5502" menu:label="Save ~As..."/>
+ <menu:menuitem menu:id="slot:5309" menu:helpid="5309" menu:label="Sa~ve All"/>
+ <menu:menuitem menu:id="slot:5508" menu:helpid="5508" menu:label="Re~load"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6583" menu:helpid="6583" menu:label="V~ersions..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5829" menu:helpid="5829" menu:label="Expor~t..."/>
+ <menu:menuitem menu:id="slot:6673" menu:helpid="6673" menu:label="Expor~t as PDF..."/>
+ <menu:menu menu:id="slot:1" menu:label="Sen~d">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5331" menu:helpid="5331" menu:label="Document as ~E-mail..."/>
+ <menu:menuitem menu:id="slot:6672" menu:helpid="6672" menu:label="Document as P~DF Attachment..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20004" menu:helpid="20004" menu:label="Create Master ~Document"/>
+ <menu:menuitem menu:id="slot:20040" menu:helpid="20040" menu:label="Create ~HTML Document"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20036" menu:helpid="20036" menu:label="Outline to ~Presentation"/>
+ <menu:menuitem menu:id="slot:20037" menu:helpid="20037" menu:label="Outline to ~Clipboard"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:21612" menu:helpid="21612" menu:label="Create A~utoAbstract..."/>
+ <menu:menuitem menu:id="slot:21613" menu:helpid="21613" menu:label="AutoAbst~ract to Presentation..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5535" menu:helpid="5535" menu:label="Propert~ies..."/>
+ <menu:menu menu:id="slot:2" menu:label="~Templates">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5540" menu:helpid="5540" menu:label="~Organize..."/>
+ <menu:menuitem menu:id="slot:6655" menu:helpid="6655" menu:label="~Address Book Source..."/>
+ <menu:menuitem menu:id="slot:5538" menu:helpid="5538" menu:label="~Save..."/>
+ <menu:menuitem menu:id="slot:5594" menu:helpid="5594" menu:label="~Edit..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5325" menu:helpid="5325" menu:label="Pa~ge Preview"/>
+ <menu:menuitem menu:id="slot:5504" menu:helpid="5504" menu:label="~Print..."/>
+ <menu:menuitem menu:id="slot:5302" menu:helpid="5302" menu:label="P~rinter Settings..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5300" menu:helpid="5300" menu:label="E~xit"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:1" menu:label="~Edit">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5701" menu:helpid="5701" menu:label="Can&apos;t ~Undo"/>
+ <menu:menuitem menu:id="slot:5700" menu:helpid="5700" menu:label="~Can&apos;t Restore"/>
+ <menu:menuitem menu:id="slot:5702" menu:helpid="5702" menu:label="~Repeat"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5710" menu:helpid="5710" menu:label="Cu~t"/>
+ <menu:menuitem menu:id="slot:5711" menu:helpid="5711" menu:label="~Copy"/>
+ <menu:menuitem menu:id="slot:5712" menu:helpid="5712" menu:label="~Paste"/>
+ <menu:menuitem menu:id="slot:20114" menu:helpid="20114" menu:label="Paste ~Special..."/>
+ <menu:menuitem menu:id="slot:20989" menu:helpid="20989" menu:label="~Select Text"/>
+ <menu:menuitem menu:id="slot:5723" menu:helpid="5723" menu:label="Select ~All"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:1" menu:label="Chan~ges">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:21825" menu:helpid="21825" menu:label="~Record"/>
+ <menu:menuitem menu:id="slot:21823" menu:helpid="21823" menu:label="~Protect Records..."/>
+ <menu:menuitem menu:id="slot:21826" menu:helpid="21826" menu:label="~Show"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:21829" menu:helpid="21829" menu:label="~Accept or Reject..."/>
+ <menu:menuitem menu:id="slot:21827" menu:helpid="21827" menu:label="~Comment..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6587" menu:helpid="6587" menu:label="~Merge Document..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:6586" menu:helpid="6586" menu:label="Compar~e Document..."/>
+ <menu:menuitem menu:id="slot:5961" menu:helpid="5961" menu:label="~Find &amp; Replace..."/>
+ <menu:menuitem menu:id="slot:10366" menu:helpid="10366" menu:label="~Navigator"/>
+ <menu:menuitem menu:id="slot:20620" menu:helpid="20620" menu:label="AutoTe~xt..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20309" menu:helpid="20309" menu:label="Exc~hange Database..."/>
+ <menu:menuitem menu:id="slot:20104" menu:helpid="20104" menu:label="F~ields..."/>
+ <menu:menuitem menu:id="slot:20162" menu:helpid="20162" menu:label="Footnote~..."/>
+ <menu:menuitem menu:id="slot:20123" menu:helpid="20123" menu:label="Index Entr~y..."/>
+ <menu:menuitem menu:id="slot:21833" menu:helpid="21833" menu:label="~Bibliography Entry..."/>
+ <menu:menuitem menu:id="slot:21835" menu:helpid="21835" menu:label="H~yperlink"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20109" menu:helpid="20109" menu:label="Lin~ks..."/>
+ <menu:menuitem menu:id="slot:6314" menu:helpid="6314" menu:label="P~lug-in"/>
+ <menu:menuitem menu:id="slot:10371" menu:helpid="10371" menu:label="I~mageMap"/>
+ <menu:menuitem menu:id="slot:5575" menu:helpid="5575" menu:label="~Object"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:2" menu:label="~View">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10000" menu:helpid="10000" menu:label="~Zoom..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6660" menu:helpid="6660" menu:label="~Data Sources"/>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:1" menu:label="~Toolbars">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5910" menu:helpid="5910" menu:label="~Function Bar"/>
+ <menu:menuitem menu:id="slot:5905" menu:helpid="5905" menu:label="~Object Bar"/>
+ <menu:menuitem menu:id="slot:5909" menu:helpid="5909" menu:label="Main ~Toolbar"/>
+ <menu:menuitem menu:id="slot:10360" menu:helpid="10360" menu:label="~Hyperlink Bar"/>
+ <menu:menuitem menu:id="slot:20128" menu:helpid="20128" menu:label="Fo~rmula Bar"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5908" menu:helpid="5908" menu:label="Customi~ze..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:20211" menu:helpid="20211" menu:label="~Ruler"/>
+ <menu:menuitem menu:id="slot:5920" menu:helpid="5920" menu:label="~Status Bar"/>
+ <menu:menuitem menu:id="slot:6680" menu:helpid="6680" menu:label="~Input Method Status"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20214" menu:helpid="20214" menu:label="Te~xt Boundaries"/>
+ <menu:menuitem menu:id="slot:20225" menu:helpid="20225" menu:label="Fie~ld Shadings"/>
+ <menu:menuitem menu:id="slot:20226" menu:helpid="20226" menu:label="~Fields"/>
+ <menu:menuitem menu:id="slot:20224" menu:helpid="20224" menu:label="~Nonprinting Characters"/>
+ <menu:menuitem menu:id="slot:20242" menu:helpid="20242" menu:label="~Hidden Paragraphs"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6313" menu:helpid="6313" menu:label="~Online Layout"/>
+ <menu:menuitem menu:id="slot:5627" menu:helpid="5627" menu:label="F~ull Screen"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:3" menu:label="~Insert">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:20304" menu:helpid="20304" menu:label="Manual ~Break..."/>
+ <menu:menu menu:id="slot:1" menu:label="Fiel~ds">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:20392" menu:helpid="20392" menu:label="~Date"/>
+ <menu:menuitem menu:id="slot:20393" menu:helpid="20393" menu:label="~Time"/>
+ <menu:menuitem menu:id="slot:20394" menu:helpid="20394" menu:label="~Page Number"/>
+ <menu:menuitem menu:id="slot:20395" menu:helpid="20395" menu:label="Page ~Count"/>
+ <menu:menuitem menu:id="slot:20396" menu:helpid="20396" menu:label="~Subject"/>
+ <menu:menuitem menu:id="slot:20397" menu:helpid="20397" menu:label="~Title"/>
+ <menu:menuitem menu:id="slot:20398" menu:helpid="20398" menu:label="~Author"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20308" menu:helpid="20308" menu:label="~Other..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:20328" menu:helpid="20328" menu:label="S~pecial Character..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20345" menu:helpid="20345" menu:label="~Section..."/>
+ <menu:menuitem menu:id="slot:5678" menu:helpid="5678" menu:label="~Hyperlink"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:21413" menu:helpid="21413" menu:label="He~ader"/>
+ <menu:menuitem menu:id="slot:21414" menu:helpid="21414" menu:label="Foote~r"/>
+ <menu:menuitem menu:id="slot:20312" menu:helpid="20312" menu:label="Footnote~..."/>
+ <menu:menuitem menu:id="slot:20310" menu:helpid="20310" menu:label="Captio~n..."/>
+ <menu:menuitem menu:id="slot:20302" menu:helpid="20302" menu:label="Bookmar~k..."/>
+ <menu:menuitem menu:id="slot:20313" menu:helpid="20313" menu:label="~Cross-reference..."/>
+ <menu:menuitem menu:id="slot:20329" menu:helpid="20329" menu:label="Not~e..."/>
+ <menu:menuitem menu:id="slot:21410" menu:helpid="21410" menu:label="S~cript..."/>
+ <menu:menu menu:id="slot:2" menu:label="Inde~xes and Tables">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:20335" menu:helpid="20335" menu:label="~Entry..."/>
+ <menu:menuitem menu:id="slot:21420" menu:helpid="21420" menu:label="~Indexes and Tables..."/>
+ <menu:menuitem menu:id="slot:21421" menu:helpid="21421" menu:label="~Bibliography Entry..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:21050" menu:helpid="21050" menu:label="En~velope..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20334" menu:helpid="20334" menu:label="Fra~me..."/>
+ <menu:menuitem menu:id="slot:20330" menu:helpid="20330" menu:label="~Table..."/>
+ <menu:menuitem menu:id="slot:21411" menu:helpid="21411" menu:label="Hori~zontal Ruler..."/>
+ <menu:menu menu:id="slot:3" menu:label="~Graphics">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10241" menu:helpid="10241" menu:label="From ~File..."/>
+ <menu:menu menu:id="slot:1" menu:label="Scan">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:10331" menu:helpid="10331" menu:label="~Select Source..."/>
+ <menu:menuitem menu:id="slot:10332" menu:helpid="10332" menu:label="~Request..."/>
+ </menu:menupopup>
+ </menu:menu>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:4" menu:label="~Object">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5561" menu:helpid="5561" menu:label="~OLE Object..."/>
+ <menu:menuitem menu:id="slot:5672" menu:helpid="5672" menu:label="~Plug-in..."/>
+ <menu:menuitem menu:id="slot:5676" menu:helpid="5676" menu:label="~Sound..."/>
+ <menu:menuitem menu:id="slot:5677" menu:helpid="5677" menu:label="~Video..."/>
+ <menu:menuitem menu:id="slot:5673" menu:helpid="5673" menu:label="~Applet..."/>
+ <menu:menuitem menu:id="slot:20369" menu:helpid="20369" menu:label="~Formula"/>
+ <menu:menuitem menu:id="slot:10140" menu:helpid="10140" menu:label="~Chart..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:5563" menu:helpid="5563" menu:label="Float~ing Frame"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5532" menu:helpid="5532" menu:label="~File..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5780" menu:label="F~ormat">
+ <menu:menupopup/>
+ </menu:menu>
+ <menu:menu menu:id="slot:6677" menu:label="~Tools">
+ <menu:menupopup>
+ <menu:menu menu:id="slot:1" menu:label="~Spellcheck">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:20622" menu:helpid="20622" menu:label="~Check..."/>
+ <menu:menuitem menu:id="slot:12021" menu:helpid="12021" menu:label="~AutoSpellcheck"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10959" menu:helpid="10959" menu:label="Hangul/Han~ja Conversion"/>
+ <menu:menuitem menu:id="slot:20603" menu:helpid="20603" menu:label="~Thesaurus..."/>
+ <menu:menuitem menu:id="slot:20605" menu:helpid="20605" menu:label="~Hyphenation..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10424" menu:helpid="10424" menu:label="~AutoCorrect/AutoFormat..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20612" menu:helpid="20612" menu:label="Outline ~Numbering..."/>
+ <menu:menuitem menu:id="slot:20602" menu:helpid="20602" menu:label="~Line Numbering..."/>
+ <menu:menuitem menu:id="slot:20468" menu:helpid="20468" menu:label="~Footnotes..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5960" menu:helpid="5960" menu:label="~Gallery"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:10880" menu:helpid="10880" menu:label="~Bibliography Database"/>
+ <menu:menuitem menu:id="slot:10882" menu:helpid="10882" menu:label="~Data Sources..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20364" menu:helpid="20364" menu:label="~Mail Merge..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20500" menu:helpid="20500" menu:label="Te~xt &lt;-&gt; Table..."/>
+ <menu:menuitem menu:id="slot:20614" menu:helpid="20614" menu:label="So~rt..."/>
+ <menu:menuitem menu:id="slot:20615" menu:helpid="20615" menu:label="Calculat~e"/>
+ <menu:menu menu:id="slot:2" menu:label="~Update">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:21828" menu:helpid="21828" menu:label="~Update All"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:20126" menu:helpid="20126" menu:label="~Fields"/>
+ <menu:menuitem menu:id="slot:21824" menu:helpid="21824" menu:label="~Links"/>
+ <menu:menuitem menu:id="slot:21834" menu:helpid="21834" menu:label="All ~Charts"/>
+ <menu:menuitem menu:id="slot:20654" menu:helpid="20654" menu:label="Current ~Index"/>
+ <menu:menuitem menu:id="slot:20653" menu:helpid="20653" menu:label="~All Indexes and Tables"/>
+ <menu:menuitem menu:id="slot:20161" menu:helpid="20161" menu:label="Page Formatting"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuseparator/>
+ <menu:menu menu:id="slot:3" menu:label="~Macros">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:6669" menu:helpid="6669" menu:label="Record Macro"/>
+ <menu:menuitem menu:id="slot:5959" menu:helpid="5959" menu:label="~Macro..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:10958" menu:helpid="10958" menu:label="~XML Filter Settings..."/>
+ <menu:menuitem menu:id="slot:5904" menu:helpid="5904" menu:label="~Configure..."/>
+ <menu:menu menu:id="slot:4" menu:label="Scripting Add-ons">
+ <menu:menupopup>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteMenuBinding()" menu:label="Assign Script to ~Menu..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteKeyBinding" menu:label="Assign Script to ~Key..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteEventBinding()" menu:label="Assign Script to ~Event..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.ExecuteEditDebug" menu:label="Edit/De~bug Scripts..."/>
+ <menu:menuitem menu:id="macro:///ScriptBindingLibrary.ScriptBinding.RefreshAllScripts()" menu:label="~Refresh All Scripts"/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menuitem menu:id="slot:31630" menu:helpid="31630" menu:label="~Options..."/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5610" menu:label="~Window">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5620" menu:helpid="5620" menu:label="~New Window"/>
+ <menu:menuitem menu:id="slot:5621" menu:helpid="5621" menu:label="~Close Window"/>
+ <menu:menuseparator/>
+ </menu:menupopup>
+ </menu:menu>
+ <menu:menu menu:id="slot:5410" menu:label="~Help">
+ <menu:menupopup>
+ <menu:menuitem menu:id="slot:5401" menu:helpid="5401" menu:label="~Contents"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5962" menu:helpid="5962" menu:label="Help ~Agent"/>
+ <menu:menuitem menu:id="slot:5404" menu:helpid="5404" menu:label="~Tips"/>
+ <menu:menuitem menu:id="slot:5403" menu:helpid="5403" menu:label="~Extended Tips"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:6683" menu:helpid="6683" menu:label="~Support"/>
+ <menu:menuitem menu:id="slot:6537" menu:helpid="6537" menu:label="~Registration..."/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id="slot:5301" menu:helpid="5301" menu:label="A~bout OpenOffice.org..."/>
+ </menu:menupopup>
+ </menu:menu>
+</menu:menubar>
diff --git a/scripting/workben/build.xml b/scripting/workben/build.xml
new file mode 100755
index 000000000000..fa36ad4869c7
--- /dev/null
+++ b/scripting/workben/build.xml
@@ -0,0 +1,397 @@
+<!--
+
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org 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 Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+-->
+<project name="Scipting Framework Installer" default="jar" basedir=".">
+
+ <!-- =================== Environmental Properties ======================= -->
+
+ <property name="prj" value=".."/>
+ <property file="${prj}/java/build.env"/>
+ <property name="build.compiler" value="classic"/>
+ <property name="optimize" value="on"/>
+ <property name="debug" value="on"/>
+ <property name="installerclasses" value="${out}/class/sframeworkinstall"/>
+ <property name="jardir" value="${out}/class"/>
+ <property name="bindir" value="${out}/bin"/>
+ <property name="sfversion" value="0.3"/>
+ <property name="installerjarname" value="SFrameworkInstall.jar"/>
+ <property environment="env"/>
+
+ <!-- ==================== classpath setting ============================ -->
+ <path id="idlclasspath">
+ <pathelement location="${solar.jar}/unoil.jar"/>
+ <!-- <pathelement location="${prj}/../unoil/${inpath}/class/unoil.jar"/> -->
+ <pathelement location="${solar.jar}/jurt.jar"/>
+ <pathelement location="${solar.jar}/juh.jar"/>
+ <pathelement location="${solar.jar}/java_uno.jar"/>
+ <pathelement location="${solar.jar}/ridl.jar"/>
+ </path>
+ <path id="scriptexampleclasspath">
+ <pathelement location="${solar.jar}/unoil.jar"/>
+ <!-- pathelement location="${prj}/../unoil/${inpath}/class/unoil.jar"/ -->
+ <pathelement location="${solar.jar}/jurt.jar"/>
+ <pathelement location="${solar.jar}/juh.jar"/>
+ <pathelement location="${solar.jar}/java_uno.jar"/>
+ <pathelement location="${solar.jar}/ridl.jar"/>
+ <pathelement location="${out}/class/ScriptRuntimeForJava.jar"/>
+ </path>
+
+ <path id="debuggerclasspath">
+ <pathelement location="${out}/class/ScriptRuntimeForJava.jar"/>
+ <pathelement location="${solar.jar}/ridl.jar"/>
+ <pathelement location="${solar.jar}/unoil.jar"/>
+ <pathelement location="${out}/class/jsruntime/skip_registration/js.jar"/>
+ <pathelement location="${install.dir}/bsh-1.2b7.jar"/>
+ </path>
+ <!-- ===================== Set up build conditionals ========================= -->
+ <target name="product.test">
+ <condition property="noproext">
+ <equals arg1="$${env.PROEXT}" arg2="${env.PROEXT}"/>
+ </condition>
+ </target>
+ <target name="nonproduct.set" if="noproext">
+ <echo message="non-product build"/>
+ <property name="proext" value=""/>
+ </target>
+ <target name="product.set" unless="noproext">
+ <echo message="product build"/>
+ <property name="proext" value="${env.PROEXT}"/>
+ </target>
+ <target name="build.conditions" depends="product.test,nonproduct.set,product.set">
+ <condition property="win9.build">
+ <available file="${prj}/wntmsci9${proext}"/>
+ </condition>
+ <condition property="win8.build">
+ <available file="${prj}/wntmsci8${proext}"/>
+ </condition>
+ <condition property="win7.build">
+ <available file="${prj}/wntmsci7${proext}"/>
+ </condition>
+ <condition property="linx86.build">
+ <available file="${prj}/unxlngi5${proext}"/>
+ </condition>
+ <condition property="solsparc.build">
+ <available file="${prj}/unxsols4${proext}"/>
+ </condition>
+ <!-- <condition property="openoffice.build">
+ </condition> -->
+ </target>
+ <!-- ===================== Build the examples ========================= -->
+ <target name="buildexamples">
+
+ <mkdir dir="${out}/class/examples/java/debugger"/>
+ <javac srcdir="${prj}/examples/java/debugger"
+ destdir="${out}/class/examples/java/debugger"
+ includes="*.java"
+ classpathref="debuggerclasspath"
+ debug="${debug}" optimize="${optimize}" deprecation="on"/>
+
+ <copy todir="${out}/class/examples/java/debugger">
+ <fileset dir="${prj}/examples/java/debugger">
+ <include name="**/*.java"/>
+ <include name="*.xml"/>
+ </fileset>
+ </copy>
+
+ <jar jarfile="${out}/class/examples/java/debugger/debugger.jar"
+ basedir="${out}/class/examples/java/debugger" includes="*.class">
+ <manifest>
+ <attribute name="Built-By" value="Sun Microsystems"/>
+ <attribute name="ScriptFramework-Version" value="${sfversion}"/>
+ </manifest>
+ </jar>
+
+ <delete>
+ <fileset dir="${out}/class/examples/java/debugger" includes="*.class"/>
+ </delete>
+
+ <mkdir dir="${out}/class/examples/java/Highlight"/>
+ <javac srcdir="${prj}/examples/java/" destdir="${out}/class/examples/java/Highlight/"
+ includes="**/Highlight*.java" classpathref="idlclasspath"
+ debug="${debug}" optimize="${optimize}" deprecation="on"/>
+ <copy todir="${out}/class/examples/java/Highlight/">
+ <fileset dir="${prj}/examples/java/">
+ <include name="**/Highlight*.java"/>
+ </fileset>
+ </copy>
+ <copy file="${prj}/examples/java/HighlightTextParcel.xml" tofile="${out}/class/examples/java/Highlight/parcel-descriptor.xml"/>
+ <jar jarfile="${out}/class/examples/java/Highlight/Highlight.jar"
+ basedir="${out}/class/examples/java/Highlight"
+ includes="**/*.java,**/*.class,**/*.xml"
+ excludes="${out}/class/examples/java/Highlight/Highlight.jar">
+ <manifest>
+ <attribute name="Built-By" value="Sun Microsystems"/>
+ <attribute name="ScriptFramework-Version" value="${sfversion}"/>
+ </manifest>
+ </jar>
+ <mkdir dir="${out}/class/examples/java/MemoryUsage"/>
+ <javac srcdir="${prj}/examples/java/" destdir="${out}/class/examples/java/MemoryUsage/"
+ includes="**/MemoryUsage.java" classpathref="idlclasspath"
+ debug="${debug}" optimize="${optimize}" deprecation="on"/>
+ <copy file="${prj}/examples/java/MemoryUsage.java" todir="${out}/class/examples/java/MemoryUsage/"/>
+ <copy file="${prj}/examples/java/MemoryUsageParcel.xml" tofile="${out}/class/examples/java/MemoryUsage/parcel-descriptor.xml"/>
+ <copy file="${prj}/examples/java/MemoryUsage.java" todir="${out}/class/examples/java/MemoryUsage/"/>
+ <copy file="${prj}/examples/java/ExampleSpreadSheet.sxc" todir="${out}/class/examples/java/MemoryUsage/"/>
+
+ <mkdir dir="${out}/class/examples/java/ScriptFrmwrkHelper"/>
+ <javac srcdir="${prj}/examples/java/" destdir="${out}/class/examples/java/ScriptFrmwrkHelper/"
+ includes="**/ScriptFrmwrkHelper.java" classpathref="scriptexampleclasspath"
+ debug="${debug}" optimize="${optimize}" deprecation="on"/>
+ <copy todir="${out}/class/examples/java/ScriptFrmwrkHelper/">
+ <fileset dir="${prj}/examples/java/">
+ <include name="**/ScriptFrmwrkHelper.java"/>
+ </fileset>
+ </copy>
+ <copy file="${prj}/examples/java/ScriptFrameWkHelperParcel.xml" tofile="${out}/class/examples/java/ScriptFrmwrkHelper/parcel-descriptor.xml"/>
+ <jar jarfile="${out}/class/examples/java/ScriptFrmwrkHelper/ScriptFrmwrkHelper.jar"
+ basedir="${out}/class/examples/java/ScriptFrmwrkHelper"
+ includes="**/*.java,**/*.class,**/*.xml"
+ excludes="${out}/class/examples/java/ScriptFrmwrkHelper/ScriptFrmwrkHelper.jar">
+ <manifest>
+ <attribute name="Built-By" value="Sun Microsystems"/>
+ <attribute name="ScriptFramework-Version" value="${sfversion}"/>
+ </manifest>
+ </jar>
+ <mkdir dir="${out}/class/examples/beanshell"/>
+ <copy todir="${out}/class/examples/beanshell">
+ <fileset dir="${prj}/examples/beanshell" includes="**"/>
+ </copy>
+ <mkdir dir="${out}/class/examples/javascript"/>
+ <copy todir="${out}/class/examples/javascript">
+ <fileset dir="${prj}/examples/javascript" includes="**"/>
+ </copy>
+ </target>
+
+ <!-- ===================== Build UNO package ========================= -->
+ <target name="buildunopackage_win9" depends="build.conditions" if="win9.build">
+ <mkdir dir="${out}/class/sframeworkinstall/sframework"/>
+ <mkdir dir="${out}/class/sframework"/>
+ <copy file="${solar.bin}/ScriptFramework.rdb"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptRuntimeForJava.jar"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptFramework.jar"
+ todir="${out}/class/sframework/"/>
+ <mkdir dir="${out}/class/sframework/windows.plt"/>
+ <copy todir="${out}/class/sframework/windows.plt">
+ <fileset dir="${prj}/wntmsci9${proext}/bin/">
+ <include name="**/*.dll"/>
+ </fileset>
+ </copy>
+ <mkdir dir="${out}/class/sframework/skip_registration"/>
+ <copy file="${solar.jar}/unoil.jar"
+ todir="${out}/class/sframework/skip_registration"/>
+ </target>
+ <target name="buildunopackage_win8" depends="build.conditions" if="win8.build">
+ <mkdir dir="${out}/class/sframeworkinstall/sframework"/>
+ <mkdir dir="${out}/class/sframework"/>
+ <copy file="${solar.bin}/ScriptFramework.rdb"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptRuntimeForJava.jar"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptFramework.jar"
+ todir="${out}/class/sframework/"/>
+ <mkdir dir="${out}/class/sframework/windows.plt"/>
+ <copy todir="${out}/class/sframework/windows.plt">
+ <fileset dir="${prj}/wntmsci8${proext}/bin/">
+ <include name="**/*.dll"/>
+ </fileset>
+ </copy>
+ <mkdir dir="${out}/class/sframework/skip_registration"/>
+ <copy file="${solar.jar}/unoil.jar"
+ todir="${out}/class/sframework/skip_registration"/>
+ </target>
+<!-- <target name="buildunopackage_win7" depends="build.conditions" if="win7.build">
+ <mkdir dir="${out}/class/sframeworkinstall/sframework"/>
+ <mkdir dir="${out}/class/sframework"/>
+ <copy file="${solar.bin}/ScriptFramework.rdb"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptRuntimeForJava.jar"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptFramework.jar"
+ todir="${out}/class/sframework/"/>
+ <mkdir dir="${out}/class/sframework/windows.plt"/>
+ <copy todir="${out}/class/sframework/windows.plt">
+ <fileset dir="${prj}/wntmsci7${proext}/bin/">
+ <include name="**/*.dll"/>
+ </fileset>
+ </copy>
+ <mkdir dir="${out}/class/sframework/skip_registration"/>
+ <copy file="${solar.jar}/unoil.jar"
+ todir="${out}/class/sframework/skip_registration"/>
+ </target> -->
+ <target name="buildunopackage_linux" depends="build.conditions" if="linx86.build">
+ <mkdir dir="${out}/class/sframeworkinstall/sframework"/>
+ <mkdir dir="${out}/class/sframework"/>
+ <copy file="${solar.bin}/ScriptFramework.rdb"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptRuntimeForJava.jar"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptFramework.jar"
+ todir="${out}/class/sframework/"/>
+ <mkdir dir="${out}/class/sframework/linux_x86.plt"/>
+ <copy todir="${out}/class/sframework/linux_x86.plt">
+ <fileset dir="${prj}/unxlngi5${proext}/lib/">
+ <include name="**/lib*.so"/>
+ </fileset>
+ </copy>
+ <mkdir dir="${out}/class/sframework/skip_registration"/>
+ <copy file="${solar.jar}/unoil.jar"
+ todir="${out}/class/sframework/skip_registration"/>
+ </target>
+ <target name="buildunopackage_solaris" depends="build.conditions" if="solsparc.build">
+ <mkdir dir="${out}/class/sframeworkinstall/sframework"/>
+ <mkdir dir="${out}/class/sframework"/>
+ <copy file="${solar.bin}/ScriptFramework.rdb"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptRuntimeForJava.jar"
+ todir="${out}/class/sframework/"/>
+ <copy file="${out}/class/ScriptFramework.jar"
+ todir="${out}/class/sframework/"/>
+ <mkdir dir="${out}/class/sframework/solaris_sparc.plt"/>
+ <copy todir="${out}/class/sframework/solaris_sparc.plt">
+ <fileset dir="${prj}/unxsols4${proext}/lib/">
+ <include name="**/lib*.so"/>
+ </fileset>
+ </copy>
+ <mkdir dir="${out}/class/sframework/skip_registration"/>
+ <copy file="${solar.jar}/unoil.jar"
+ todir="${out}/class/sframework/skip_registration"/>
+ </target>
+ <target name="buildunopackage" depends="buildunopackage_win8,buildunopackage_linux,buildunopackage_solaris">
+ <!-- <target name="buildunopackage" depends="buildunopackage_win9,buildunopackage_win7,buildunopackage_linux,buildunopackage_solaris"> -->
+ <copy file="installer/ProtocolHandler.xcu"
+ todir="${out}/class/sframework/"/>
+ <zip zipfile="${out}/class/sframeworkinstall/sframework/ooscriptframe.zip"
+ basedir="${out}/class/sframework">
+ </zip>
+ </target>
+
+ <!-- ================== Build JavaScript UNO package ===================== -->
+ <target name="buildjsuno">
+ <mkdir dir="${out}/class/sframeworkinstall/sframework"/>
+
+ <mkdir dir="${out}/class/jsruntime"/>
+ <mkdir dir="${out}/class/jsruntime/skip_registration"/>
+ <mkdir dir="${out}/class/jsruntimetmp"/>
+
+ <copy file="${out}/class/ScriptRuntimeForJavaScript.jar"
+ todir="${out}/class/jsruntime/"/>
+ <copy file="installer/Scripting.JavaScript.xcu"
+ tofile="${out}/class/jsruntime/Scripting.xcu"/>
+
+ <unzip src="${install.dir}/js.jar"
+ dest="${out}/class/jsruntimetmp"/>
+
+ <javac srcdir="${prj}/examples/java/debugger"
+ destdir="${out}/class/jsruntimetmp"
+ includes="rhino/Main.java" classpathref="debuggerclasspath"
+ debug="${debug}" optimize="${optimize}" deprecation="on"/>
+
+ <zip destfile="${out}/class/jsruntime/skip_registration/js.jar"
+ basedir="${out}/class/jsruntimetmp" includes="**"/>
+
+ <zip zipfile="${out}/class/sframeworkinstall/sframework/jsruntime.zip"
+ basedir="${out}/class/jsruntime">
+ </zip>
+ </target>
+
+ <!-- =================== Build BeanShell UNO package ===================== -->
+ <target name="buildbshuno">
+ <mkdir dir="${out}/class/bshruntime"/>
+ <copy file="${out}/class/ScriptRuntimeForBeanShell.jar"
+ todir="${out}/class/bshruntime/"/>
+ <copy file="installer/Scripting.BeanShell.xcu"
+ tofile="${out}/class/bshruntime/Scripting.xcu"/>
+ <mkdir dir="${out}/class/bshruntime/skip_registration"/>
+ <copy file="${install.dir}/bsh-1.2b7.jar"
+ todir="${out}/class/bshruntime/skip_registration"/>
+ <zip zipfile="${out}/class/sframeworkinstall/sframework/bshruntime.zip"
+ basedir="${out}/class/bshruntime">
+ </zip>
+ </target>
+
+ <!-- ========= Package schema, scripts, dialogs & examples =========== -->
+ <target name="packagedialogsandexamples" depends="buildexamples">
+ <mkdir dir="${out}/class/sframeworkinstall/schema"/>
+ <copy file="installer/Scripting.xcs"
+ todir="${out}/class/sframeworkinstall/schema/"/>
+ <mkdir dir="${out}/class/sframeworkinstall/bindingdialog"/>
+ <copy todir="${out}/class/sframeworkinstall/bindingdialog">
+ <fileset dir="bindings/">
+ <include name="**/*.x*"/>
+ </fileset>
+ </copy>
+ <mkdir dir="${out}/class/sframeworkinstall/examples"/>
+ <copy todir="${out}/class/sframeworkinstall/examples">
+ <fileset dir="${out}/class/examples/"/>
+ </copy>
+ </target>
+
+ <!-- ===================== Package IDEs ================================== -->
+ <target name="packageide">
+ <mkdir dir="${out}/class/sframeworkinstall/ide"/>
+ <copy todir="${out}/class/sframeworkinstall/ide">
+ <fileset dir="${out}/class/">
+ <include name="idesupport.jar"/>
+ <include name="office.jar"/>
+ </fileset>
+ </copy>
+ </target>
+
+ <!-- ======================== Compile Classes ========================== -->
+ <target name="compileinstaller">
+ <mkdir dir="${installerclasses}"/>
+ <javac srcdir="installer/" destdir="${installerclasses}"
+ includes="**/*.java" classpathref="idlclasspath"
+ debug="${debug}" optimize="${optimize}" deprecation="on"/>
+ <copy file="installer/sidebar.jpg" todir="${out}/class/sframeworkinstall/installer"/>
+ </target>
+
+ <!-- ===================== jar ========================= -->
+ <target name="jar" depends="buildunopackage,buildbshuno,buildjsuno,compileinstaller,packagedialogsandexamples,packageide">
+ <jar jarfile="${jardir}/${installerjarname}"
+ basedir="${installerclasses}">
+ <manifest>
+ <attribute name="Built-By" value="Sun Microsystems"/>
+ <attribute name="ScriptFramework-Version" value="${sfversion}"/>
+ <attribute name="Main-Class" value="installer.InstallWizard"/>
+ </manifest>
+ </jar>
+ </target>
+
+ <!-- ====================== Clean Generated Files ===================== -->
+ <target name="clean">
+ <delete dir="${scriptingclasses}"/>
+ <delete dir="${storageclasses}"/>
+ <delete dir="${jardir}/${scriptingjarname}"/>
+ </target>
+
+ <!-- ========================= All In One Build ======================= -->
+ <target name="all" depends="clean,jar"/>
+
+
+</project>
diff --git a/scripting/workben/data/ExampleSpreadSheetLatest.sxc b/scripting/workben/data/ExampleSpreadSheetLatest.sxc
new file mode 100644
index 000000000000..7be6c0d4be05
--- /dev/null
+++ b/scripting/workben/data/ExampleSpreadSheetLatest.sxc
Binary files differ
diff --git a/scripting/workben/data/doc_with_beanshell_scripts.sxw b/scripting/workben/data/doc_with_beanshell_scripts.sxw
new file mode 100644
index 000000000000..f0066610d577
--- /dev/null
+++ b/scripting/workben/data/doc_with_beanshell_scripts.sxw
Binary files differ
diff --git a/scripting/workben/data/doc_with_one_script.sxw b/scripting/workben/data/doc_with_one_script.sxw
new file mode 100644
index 000000000000..7445f4afca47
--- /dev/null
+++ b/scripting/workben/data/doc_with_one_script.sxw
Binary files differ
diff --git a/scripting/workben/data/doc_with_two_scripts.sxw b/scripting/workben/data/doc_with_two_scripts.sxw
new file mode 100644
index 000000000000..23a12ac9f86a
--- /dev/null
+++ b/scripting/workben/data/doc_with_two_scripts.sxw
Binary files differ
diff --git a/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.protocolhandler.Dispatch.csv b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.protocolhandler.Dispatch.csv
new file mode 100644
index 000000000000..614260db95c3
--- /dev/null
+++ b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.protocolhandler.Dispatch.csv
@@ -0,0 +1,5 @@
+"Dispatch";"drafts::com::sun::star::frame::XDispatchProvider";"queryDispatch()"
+"Dispatch";"drafts::com::sun::star::frame::XDispatchProvider";"queryDispatches()"
+"Dispatch";"drafts::com::sun::star::frame::XDispatch";"dispatch()"
+"Dispatch";"drafts::com::sun::star::frame::XDispatch";"addStatusListener()"
+"Dispatch";"drafts::com::sun::star::frame::XDispatch";"removeStatusListener()"
diff --git a/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.Function.csv b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.Function.csv
new file mode 100644
index 000000000000..87327525908a
--- /dev/null
+++ b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.Function.csv
@@ -0,0 +1 @@
+"Function";"drafts::com::sun::star::script::framework::provider::XFunction";"invoke()"
diff --git a/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.FunctionProvider.csv b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.FunctionProvider.csv
new file mode 100644
index 000000000000..0f1c41772cfb
--- /dev/null
+++ b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.FunctionProvider.csv
@@ -0,0 +1 @@
+"FunctionProvider";"drafts::com::sun::star::script::framework::provider::XFunctionProvider";"getFunction()"
diff --git a/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.runtime.ScriptRuntimeManager.csv b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.runtime.ScriptRuntimeManager.csv
new file mode 100755
index 000000000000..0bff1a1a89b7
--- /dev/null
+++ b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.runtime.ScriptRuntimeManager.csv
@@ -0,0 +1,2 @@
+"ScriptRuntimeManager";"drafts::com::sun::star::script::framework::runtime::XScriptNameResolver";"resolve()"
+"ScriptRuntimeManager";"drafts::com::sun::star::script::framework::runtime::XScriptInvocation";"invoke()"
diff --git a/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptInfo.csv b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptInfo.csv
new file mode 100644
index 000000000000..79e8c91e19c1
--- /dev/null
+++ b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptInfo.csv
@@ -0,0 +1,8 @@
+"ScriptInfo";"drafts::com::sun::star::script::framework::storage::XScriptInfo";"getLogicalName()"
+"ScriptInfo";"drafts::com::sun::star::script::framework::storage::XScriptInfo";"getParcelURI()"
+"ScriptInfo";"drafts::com::sun::star::script::framework::storage::XScriptInfo";"getLanguage()"
+"ScriptInfo";"drafts::com::sun::star::script::framework::storage::XScriptInfo";"getFunctionName()"
+"ScriptInfo";"drafts::com::sun::star::script::framework::storage::XScriptInfo";"getLanguageProperties()"
+"ScriptInfo";"drafts::com::sun::star::script::framework::storage::XScriptInfo";"getFileSetNames()"
+"ScriptInfo";"drafts::com::sun::star::script::framework::storage::XScriptInfo";"getFilesInFileSet()"
+"ScriptInfo";"drafts::com::sun::star::script::framework::storage::XScriptInfo";"getDescription()"
diff --git a/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorage.csv b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorage.csv
new file mode 100644
index 000000000000..69628462fedb
--- /dev/null
+++ b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorage.csv
@@ -0,0 +1,4 @@
+"ScriptStorage";"drafts::com::sun::star::script::framework::storage::XScriptInfoAccess";"getScriptLogicalNames()"
+"ScriptStorage";"drafts::com::sun::star::script::framework::storage::XScriptInfoAccess";"getImplementations()"
+"ScriptStorage";"drafts::com::sun::star::script::framework::storage::XScriptInfoAccess";"getAllImplementations()"
+"ScriptStorage";"drafts::com::sun::star::script::framework::storage::XScriptStorageRefresh";"refresh()"
diff --git a/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorageManager.csv b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorageManager.csv
new file mode 100644
index 000000000000..6e255c869f67
--- /dev/null
+++ b/scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorageManager.csv
@@ -0,0 +1,6 @@
+"ScriptStorageManager";"drafts::com::sun::star::script::framework::storage::XScriptStorageManager";"createScriptStorage()"
+"ScriptStorageManager";"drafts::com::sun::star::script::framework::storage::XScriptStorageManager";"createScriptStorageWithURI()"
+"ScriptStorageManager";"drafts::com::sun::star::script::framework::storage::XScriptStorageManager";"getScriptStorage()"
+"ScriptStorageManager";"drafts::com::sun::star::script::framework::storage::XScriptStorageManager";"refreshScriptStorage()"
+"ScriptStorageManager";"drafts::com::sun::star::script::framework::security::XScriptSecurity";"checkPermission()"
+"ScriptStorageManager";"::com::sun::star::lang::XEventListener";"disposing()"
diff --git a/scripting/workben/data/script_in_class_file.sxw b/scripting/workben/data/script_in_class_file.sxw
new file mode 100644
index 000000000000..ddb44c14d2d3
--- /dev/null
+++ b/scripting/workben/data/script_in_class_file.sxw
Binary files differ
diff --git a/scripting/workben/data/script_in_jar_file.sxw b/scripting/workben/data/script_in_jar_file.sxw
new file mode 100644
index 000000000000..93b10494d266
--- /dev/null
+++ b/scripting/workben/data/script_in_jar_file.sxw
Binary files differ
diff --git a/scripting/workben/data/share_scripts.zip b/scripting/workben/data/share_scripts.zip
new file mode 100644
index 000000000000..7c7fec622930
--- /dev/null
+++ b/scripting/workben/data/share_scripts.zip
Binary files differ
diff --git a/scripting/workben/data/testdata/Function.csv b/scripting/workben/data/testdata/Function.csv
new file mode 100644
index 000000000000..b924c86f4bd6
--- /dev/null
+++ b/scripting/workben/data/testdata/Function.csv
@@ -0,0 +1,4 @@
+_invoke;description=Try to find and invoke a valid user level XFunction;logicalname=script://HighlightText.showForm;expected=success
+_invoke;description=Try to invoke a valid beanshell XFunction that returns an Integer;logicalname=script://returns-Integer;returntype=java.lang.Integer;expected=success
+_invoke;description=Try to invoke a valid beanshell XFunction that returns a String;logicalname=script://returns-String;returntype=java.lang.String;returnvalue=testing;expected=success
+_invoke;description=Try to invoke a valid beanshell XFunction that returns a Frame;logicalname=script://returns-Frame;expected=com.sun.star.uno.RuntimeException
diff --git a/scripting/workben/data/testdata/FunctionProvider.csv b/scripting/workben/data/testdata/FunctionProvider.csv
new file mode 100644
index 000000000000..88dcfae118e3
--- /dev/null
+++ b/scripting/workben/data/testdata/FunctionProvider.csv
@@ -0,0 +1 @@
+_getFunction;description=Try to get a valid XFunction;logicalname=script://MemoryUtils.MemUsage;expected=XFunction.class
diff --git a/scripting/workben/data/testdata/ScriptInfo.csv b/scripting/workben/data/testdata/ScriptInfo.csv
new file mode 100644
index 000000000000..a5fab2ad5d16
--- /dev/null
+++ b/scripting/workben/data/testdata/ScriptInfo.csv
@@ -0,0 +1,8 @@
+_getLogicalName;description=Try to get a logical name;expected=MemoryUtils.MemUsage
+_getParcelURI;description=Try to get a parcel URI;expected=ExampleSpreadSheetLatest.sxc/Scripts/java/MemoryUsage
+_getLanguage;description=Try to get language;expected=Java
+_getFunctionName;description=Try to get a function name;expected=MemoryUsage.updateMemoryUsage
+_getLanguageProperties;description=Try to get language properties;expected=MemUsage.jar
+_getFileSetNames;description=Try to get fileset names;expected=delivered
+_getFilesInFileSet;description=Try to get files in fileset;expected=google.jar
+_getDescription;description=Try to get description;expected=Show JVM memory usage stats
diff --git a/scripting/workben/data/testdata/ScriptRuntimeManager.csv b/scripting/workben/data/testdata/ScriptRuntimeManager.csv
new file mode 100644
index 000000000000..b5d049b5f425
--- /dev/null
+++ b/scripting/workben/data/testdata/ScriptRuntimeManager.csv
@@ -0,0 +1,8 @@
+_resolve;description=Try to resolve a valid document URI;location=script_in_class_file.sxw;logicalname=script://doc.jsuite.testMethod;expected=XScriptInfo.class
+_resolve;description=Try to resolve a valid user URI;location=user;logicalname=script://user.jsuite.test;expected=XScriptInfo.class
+_resolve;description=Try to resolve a valid share URI;location=share;logicalname=script://share.jsuite.test;expected=XScriptInfo.class
+_resolve;description=Try to resolve an invalid URI;location=user;logicalname=scrpit://user.jsuite.test;expected=com.sun.star.lang.IllegalArgumentException
+_resolve;description=Try to resolve a valid but non existent URI;location=user;logicalname=script://non.existent.test;expected=null
+_invoke;description=Try to invoke a valid user level URI;location=user;context=null;logicalname=script://user.jsuite.test;expected=success
+_invoke;description=Try to invoke a valid user level URI with a valid context;location=user;context=xscriptcontext_test_document.sxw;logicalname=script://xscriptcontext.jsuite.test;expected=success
+_invoke;description=Try to invoke a valid user level script in a jar file;location=user;context=null;logicalname=script://jarscript.jsuite.test;expected=success
diff --git a/scripting/workben/data/testdata/ScriptStorage.csv b/scripting/workben/data/testdata/ScriptStorage.csv
new file mode 100644
index 000000000000..a5b4589e6f64
--- /dev/null
+++ b/scripting/workben/data/testdata/ScriptStorage.csv
@@ -0,0 +1,4 @@
+_getScriptLogicalNames;description=Try to get logical names;expected=MemoryUtils.MemUsage
+_getImplementations;description=Try to get a valid implementation;logicalname=script://MemoryUtils.MemUsage?location=document;expected=MemoryUtils.MemUsage
+_getAllImplementations;description=Try to get all valid implementations;location=doc_with_beanshell_scripts.sxw;expected=returns-Integer,returns-String,returns-Frame
+_refresh;description=Try calling refresh;expected=success
diff --git a/scripting/workben/data/testdata/ScriptStorageManager.csv b/scripting/workben/data/testdata/ScriptStorageManager.csv
new file mode 100644
index 000000000000..9dc2a9b67bf2
--- /dev/null
+++ b/scripting/workben/data/testdata/ScriptStorageManager.csv
@@ -0,0 +1,18 @@
+_createScriptStorage;description=Try to create a ScriptStorage;expected=success
+_createScriptStorageWithURI;description=Try to create a document ScriptStorage;location=script_in_class_file.sxw;expected=XScriptInfoAccess.class
+_getScriptStorage;description=Try to get application share ScriptStorage;location=share;expected=XScriptInfoAccess.class
+_getScriptStorage;description=Try to get application user ScriptStorage;location=user;expected=XScriptInfoAccess.class
+_refreshScriptStorage;description=Try to refresh non-existent ScriptStorage;location=non-existent;expected=success
+_refreshScriptStorage;description=Try to refresh valid document ScriptStorage;location=script_in_class_file.sxw;expected=success
+_checkPermission;description=Try to get permssion when run macro is set to never;location=check_perms_file1.sxw;runmacro=never;pathlist=false;confirm=false;warning=false;dialog=false;checkbox=false;buttonName=Run;checkpath=false;expected=com.sun.star.security.AccessControlException
+_checkPermission;description=Try to get permssion when run macro is set to always, and no warning dialog;location=check_perms_file2.sxw;runmacro=always;pathlist=false;confirm=false;warning=false;dialog=false;checkbox=false;buttonName=Run;checkpath=false;expected=true
+_checkPermission;description=Try to get permssion when run macro is set to always, warning dialog, and run button pressed;location=check_perms_file3.sxw;runmacro=always;pathlist=false;confirm=false;warning=true;dialog=true;checkbox=false;buttonName=Run;checkpath=false;expected=true
+_checkPermission;description=Try to get permssion when run macro is set to always, warning dialog, and do not run button pressed;location=check_perms_file4.sxw;runmacro=always;pathlist=false;confirm=false;warning=true;dialog=true;checkbox=false;buttonName=Do Not Run;checkpath=false;expected=com.sun.star.security.AccessControlException
+_checkPermission;description=Try to get permssion when run macro is set to according to path list, doc in path, no warning dialog, and no confirmation;location=check_perms_file5.sxw;runmacro=pathlist;pathlist=true;confirm=false;warning=false;dialog=false;checkbox=false;buttonName=Do Not Run;checkpath=false;expected=true
+_checkPermission;description=Try to get permssion when run macro is set to according to path list, doc not in path, no warning dialog, and no confirmation;location=check_perms_file6.sxw;runmacro=pathlist;pathlist=false;confirm=false;warning=false;dialog=false;checkbox=false;buttonName=Do Not Run;checkpath=false;expected=com.sun.star.security.AccessControlException
+_checkPermission;description=Try to get permssion when run macro is set to according to path list, doc in path, warning dialog, run button pressed;location=check_perms_file7.sxw;runmacro=pathlist;pathlist=true;confirm=false;warning=true;dialog=true;checkbox=false;buttonName=Run;checkpath=false;expected=true
+_checkPermission;description=Try to get permssion when run macro is set to according to path list, doc in path, warning dialog, do not run button pressed;location=check_perms_file8.sxw;runmacro=pathlist;pathlist=true;confirm=false;warning=true;dialog=true;checkbox=false;buttonName=Do Not Run;checkpath=false;expected=com.sun.star.security.AccessControlException
+_checkPermission;description=Try to get permssion when run macro is set to according to path list, doc not in path, warning dialog, confirm dialog, checkbox not checked, run button pressed;location=check_perms_file9.sxw;runmacro=pathlist;pathlist=false;confirm=true;warning=true;dialog=true;checkbox=false;buttonName=Run;checkpath=true;expected=true
+_checkPermission;description=Try to get permssion when run macro is set to according to path list, doc not in path, warning dialog, confirm dialog, checkbox checked, run button pressed;location=check_perms_file10.sxw;runmacro=pathlist;pathlist=true;confirm=true;warning=true;dialog=true;checkbox=true;buttonName=Run;checkpath=true;expected=true
+_checkPermission;description=Try to get permssion when run macro is set to according to path list, doc not in path, warning dialog, confirm dialog, checkbox not checked, do not run button pressed;location=check_perms_file11.sxw;runmacro=pathlist;pathlist=false;confirm=true;warning=true;dialog=true;checkbox=false;buttonName=Do Not Run;checkpath=true;expected=com.sun.star.security.AccessControlException
+_checkPermission;description=Try to get permssion when run macro is set to according to path list, doc not in path, warning dialog, confirm dialog, checkbox checked, do not run button pressed;location=check_perms_file12.sxw;runmacro=pathlist;pathlist=false;confirm=true;warning=true;dialog=true;checkbox=true;buttonName=Do Not Run;checkpath=true;expected=com.sun.star.security.AccessControlException
diff --git a/scripting/workben/data/user_scripts.zip b/scripting/workben/data/user_scripts.zip
new file mode 100644
index 000000000000..f5eed7657365
--- /dev/null
+++ b/scripting/workben/data/user_scripts.zip
Binary files differ
diff --git a/scripting/workben/data/xscriptcontext_test_document.sxw b/scripting/workben/data/xscriptcontext_test_document.sxw
new file mode 100644
index 000000000000..da6dafb0b805
--- /dev/null
+++ b/scripting/workben/data/xscriptcontext_test_document.sxw
Binary files differ
diff --git a/scripting/workben/ifc/scripting/ScriptingUtils.java b/scripting/workben/ifc/scripting/ScriptingUtils.java
new file mode 100644
index 000000000000..3ccdab02e2c9
--- /dev/null
+++ b/scripting/workben/ifc/scripting/ScriptingUtils.java
@@ -0,0 +1,124 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework;
+
+import java.io.File;
+import drafts.com.sun.star.script.framework.storage.XScriptStorageManager;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.XInterface;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.uno.XComponentContext;
+
+public class ScriptingUtils {
+ private XScriptStorageManager storageManager;
+ private static ScriptingUtils utils;
+
+ private ScriptingUtils() {
+ }
+
+ public static ScriptingUtils getDefault() {
+ if (utils == null) {
+ synchronized (ScriptingUtils.class) {
+ if (utils == null)
+ utils = new ScriptingUtils();
+ }
+ }
+ return utils;
+ }
+
+ public static void cleanUserDir() {
+ }
+
+ public static void cleanShareDir() {
+ }
+
+ public Object getScriptStorage(XMultiServiceFactory xMSF, String location) {
+ int id = getStorageId(xMSF, location);
+ return storageManager.getScriptStorage(id);
+ }
+
+ public int getStorageId(XMultiServiceFactory xMSF, String location) {
+
+ if (location.equals("share"))
+ return 0;
+
+ if (location.equals("user"))
+ return 1;
+
+ XSimpleFileAccess access = null;
+ String uri = util.utils.getFullTestURL(location);
+
+ if (storageManager == null) {
+ try {
+ XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, xMSF);
+
+ XComponentContext xContext = (XComponentContext)
+ UnoRuntime.queryInterface(XComponentContext.class,
+ xProp.getPropertyValue("DefaultContext"));
+
+ XInterface ifc = (XInterface)
+ xContext.getValueByName("/singletons/drafts.com.sun.star." +
+ "script.framework.storage.theScriptStorageManager");
+
+ storageManager = (XScriptStorageManager)
+ UnoRuntime.queryInterface(XScriptStorageManager.class, ifc);
+ }
+ catch( Exception e ) {
+ return -1;
+ }
+ }
+
+ access = getXSimpleFileAccess(xMSF);
+ if (access == null)
+ return -1;
+
+ int id = storageManager.createScriptStorageWithURI(access, uri);
+
+ return id;
+ }
+
+ public XSimpleFileAccess getXSimpleFileAccess(XMultiServiceFactory xMSF) {
+ XSimpleFileAccess access = null;
+
+ try {
+ Object fa =
+ xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess");
+
+ access = (XSimpleFileAccess)
+ UnoRuntime.queryInterface(XSimpleFileAccess.class, fa);
+ }
+ catch (com.sun.star.uno.Exception e) {
+ return null;
+ }
+ return access;
+ }
+}
diff --git a/scripting/workben/ifc/scripting/SecurityDialogUtil.java b/scripting/workben/ifc/scripting/SecurityDialogUtil.java
new file mode 100644
index 000000000000..ae7adb4bf696
--- /dev/null
+++ b/scripting/workben/ifc/scripting/SecurityDialogUtil.java
@@ -0,0 +1,176 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+package ifc.script.framework;
+
+import com.sun.star.awt.*;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XInterface;
+
+import drafts.com.sun.star.accessibility.*;
+import drafts.com.sun.star.awt.XExtendedToolkit;
+
+// Jsuite classes
+import util.AccessibilityTools;
+import util.dbg;
+/**
+* Thread that pushes the buttons or checkbox
+* on the message box that is on top.
+*/
+public class SecurityDialogUtil extends Thread {
+
+private XMultiServiceFactory xMSF = null;
+private String errorMsg;
+private boolean errorHappened;
+private String btnName;
+private boolean checkBox;
+
+/**
+ * Constructor.
+ * @param xMSF A MultiServiceFactory.
+ * @param log The log writer.
+ */
+public SecurityDialogUtil(XMultiServiceFactory xMSF, String btnName, boolean checkBox )
+{
+ this.xMSF = xMSF;
+ this.btnName = btnName;
+ this.checkBox = checkBox;
+ errorMsg = "";
+ errorHappened=false;
+}
+
+/**
+ * Returns the error message that occured while
+ * accessing and pressing the button.
+ * @return Error message.
+ */
+public String getErrorMessage()
+{
+ return errorMsg;
+}
+
+/**
+ * Is there an error message available?
+ * @return true, if an error happened
+ */
+public boolean hasErrorMessage()
+{
+ return !errorMsg.equals("");
+}
+
+/**
+ * Press the named button in the currently visible dialog box.
+ */
+public void run()
+{
+ // wait for the message box to appear
+ try
+ {
+ Thread.currentThread().sleep(4000) ;
+ }
+ catch (InterruptedException e)
+ {
+ System.err.println("While waiting :" + e.getMessage()) ;
+ }
+
+ // access the message box
+
+ XAccessibleContext xCon = null;
+ try
+ {
+ XInterface x = (XInterface) xMSF.createInstance(
+ "com.sun.star.awt.Toolkit") ;
+ XExtendedToolkit tk =
+ (XExtendedToolkit)UnoRuntime.queryInterface(
+ XExtendedToolkit.class,x);
+ AccessibilityTools at = new AccessibilityTools();
+ XWindow xWindow = (XWindow)UnoRuntime.queryInterface(
+ XWindow.class,tk.getActiveTopWindow());
+ XAccessible xRoot = at.getAccessibleObject(xWindow);
+ xCon = xRoot.getAccessibleContext();
+ }
+ catch (Exception e)
+ {
+ errorMsg="Exception while using Accessibility\n"+
+ e.getMessage();
+ return;
+ }
+ // get the button
+ XInterface oObj = null;
+ try
+ {
+ /* System.err.println("Name of the AccessibleContext:\n\t"+
+ xCon.getAccessibleName()); */
+ int count = xCon.getAccessibleChildCount();
+ // System.err.println("Number of children: "+count);
+ for (int i=0; i<count; i++) {
+ XAccessible xAcc = xCon.getAccessibleChild(i);
+ String name =
+ xAcc.getAccessibleContext().getAccessibleName();
+ // System.out.println("Child "+i+": "+ name);
+ // check for button
+ if ( name.equals( btnName ) && ( UnoRuntime.queryInterface(
+ XButton.class, xAcc ) != null ) )
+ {
+ // System.out.println("Child "+i+": "+ name);
+ oObj = xAcc.getAccessibleContext();
+ }
+ // check for checkbox
+ if ( checkBox && ( UnoRuntime.queryInterface( XCheckBox.class, xAcc ) != null ) )
+ {
+ // want to do this action now
+ // probably equates to toggle cb
+ XAccessibleAction xAction =
+ (XAccessibleAction)UnoRuntime.queryInterface(
+ XAccessibleAction.class, xAcc.getAccessibleContext());
+ xAction.doAccessibleAction(0);
+
+ // might be worth using oObj2 to double check the new state??
+ }
+ }
+ if (oObj == null) {
+ errorMsg="No button has been found:\n"+
+ "No action is triggered.";
+ return;
+ }
+ // press button
+ XAccessibleAction xAction =
+ (XAccessibleAction)UnoRuntime.queryInterface(
+ XAccessibleAction.class, oObj);
+ xAction.doAccessibleAction(0);
+ }
+ catch(com.sun.star.lang.IndexOutOfBoundsException e) {
+ errorMsg="Exception\n"+
+ e.getMessage();
+ }
+}
+
+}
+
+
+
+
diff --git a/scripting/workben/ifc/scripting/_XFunction.java b/scripting/workben/ifc/scripting/_XFunction.java
new file mode 100644
index 000000000000..3981f42d1956
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XFunction.java
@@ -0,0 +1,169 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.provider;
+
+import drafts.com.sun.star.script.framework.provider.XFunction;
+import drafts.com.sun.star.script.framework.provider.XFunctionProvider;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.XInterface;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.uno.Exception;
+import com.sun.star.beans.XPropertySet;
+
+import java.io.PrintWriter;
+import lib.MultiMethodTest;
+import lib.StatusException;
+import lib.Parameters;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+public class _XFunction extends MultiMethodTest {
+
+ public XFunction oObj = null;
+ public XFunctionProvider oProvider = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ log.println("getting provider");
+ oProvider = (XFunctionProvider) tEnv.getObjRelation("provider");
+ if (oProvider == null)
+ log.println("it's null");
+ else
+ log.println("it's not null");
+ }
+
+ public void _invoke() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_invoke");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ result &= runInvokeTest((Parameters)tests.next());
+ }
+ }
+ else {
+ result = false;
+ }
+
+ tRes.tested("invoke()", result);
+ }
+
+ private boolean runInvokeTest(Parameters testdata) {
+ String description = testdata.get("description");
+ String logicalname = testdata.get("logicalname");
+
+ String expreturntype = testdata.get("returntype");
+ String expreturnvalue = testdata.get("returnvalue");
+ String gotreturntype = "null";
+ String gotreturnvalue = "null";
+
+ String location = testdata.get("location");
+
+ String expected = testdata.get("expected");
+ String output = "";
+ boolean result = true;
+
+ log.println(testdata.get("description"));
+
+ try{
+ Object[] aParams = new Object[0];
+ short[][] aOutParamIndex = new short[1][];
+ aOutParamIndex[0] = new short[0];
+ Object[][] aOutParam = new Object[1][];
+ aOutParam[0] = new Object[0];
+
+ XFunction func = oProvider.getFunction(logicalname);
+ if (func == null) {
+ log.println("Couldn't get XFunction for:" + logicalname);
+ return false;
+ }
+
+ Object ret = func.invoke( aParams, aOutParamIndex, aOutParam );
+
+ if (ret != null) {
+ gotreturntype = ret.getClass().getName();
+ gotreturnvalue = ret.toString();
+ }
+
+ output = "success";
+ }
+ catch (com.sun.star.lang.IllegalArgumentException iae) {
+ log.println("Couldn't invoke script:" + iae);
+ output = "com.sun.star.lang.IllegalArgumentException";
+ }
+ catch (com.sun.star.script.CannotConvertException cce) {
+ log.println("Couldn't invoke script:" + cce);
+ output = "com.sun.star.script.CannotConvertException";
+ }
+ catch (com.sun.star.reflection.InvocationTargetException ite) {
+ log.println("Couldn't invoke script:" + ite);
+ output = "com.sun.star.reflection.InvocationTargetException";
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("Couldn't invoke script:" + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+ catch(java.lang.Exception e){
+ log.println("Couldn't invoke script:" + e);
+ output = "java.lang.Exception";
+ }
+
+ if (expreturntype != null) {
+ log.println("expected return type: " + expreturntype +
+ ", got return type: " + gotreturntype);
+
+ if (!gotreturntype.equals(expreturntype))
+ result = false;
+ }
+
+ if (expreturnvalue != null) {
+ log.println("expected return value: " + expreturnvalue +
+ ", got return value: " + gotreturnvalue);
+
+ if (!gotreturnvalue.equals(expreturnvalue))
+ result = false;
+ }
+
+ log.println("expected: " + expected + ", output: " + output);
+ if (!output.equals(expected))
+ result = false;
+
+ return result;
+ }
+}
diff --git a/scripting/workben/ifc/scripting/_XFunctionProvider.java b/scripting/workben/ifc/scripting/_XFunctionProvider.java
new file mode 100644
index 000000000000..0baad7ef9d33
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XFunctionProvider.java
@@ -0,0 +1,101 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.provider;
+
+import drafts.com.sun.star.script.framework.provider.XFunctionProvider;
+import drafts.com.sun.star.script.framework.provider.XFunction;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.XInterface;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.uno.Exception;
+import com.sun.star.beans.XPropertySet;
+
+import java.io.PrintWriter;
+import lib.MultiMethodTest;
+import lib.StatusException;
+import lib.Parameters;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+public class _XFunctionProvider extends MultiMethodTest {
+
+ public XFunctionProvider oObj = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ }
+
+ public void _getFunction() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getFunction");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ result &= runGetFunctionTest((Parameters)tests.next());
+ }
+ }
+ else {
+ result = false;
+ }
+
+ tRes.tested("getFunction()", result);
+ }
+
+ private boolean runGetFunctionTest(Parameters testdata) {
+ String description = testdata.get("description");
+ String logicalname = testdata.get("logicalname");
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ XFunction function = oObj.getFunction(logicalname);
+
+ if (function == null)
+ output = "null";
+ else
+ output = "XFunction.class";
+
+ log.println("expected: " + expected + ", output: " + output);
+ if (output.equals(expected))
+ return true;
+ else
+ return false;
+ }
+}
diff --git a/scripting/workben/ifc/scripting/_XScriptInfo.java b/scripting/workben/ifc/scripting/_XScriptInfo.java
new file mode 100644
index 000000000000..9ab7b46fd1ef
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XScriptInfo.java
@@ -0,0 +1,331 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.storage;
+
+import drafts.com.sun.star.script.framework.storage.XScriptStorageManager;
+import drafts.com.sun.star.script.framework.storage.XScriptInfoAccess;
+import drafts.com.sun.star.script.framework.storage.XScriptInfo;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.XInterface;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.uno.Exception;
+import com.sun.star.beans.XPropertySet;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import java.io.PrintWriter;
+import lib.Parameters;
+import lib.MultiMethodTest;
+import lib.StatusException;
+
+public class _XScriptInfo extends MultiMethodTest {
+
+ public XScriptInfo oObj = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ }
+
+ public void _getLogicalName() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getLogicalName");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ output = oObj.getLogicalName();
+
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ }
+ else {
+ result = false;
+ }
+
+ tRes.tested("getLogicalName()", result);
+ }
+
+ public void _getParcelURI() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getParcelURI");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ output = oObj.getParcelURI();
+
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.endsWith(expected);
+ }
+ }
+ else {
+ result = false;
+ }
+ tRes.tested("getParcelURI()", result);
+ }
+
+ public void _getLanguage() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getLanguage");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ output = oObj.getLanguage();
+
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ }
+ else {
+ result = false;
+ }
+ tRes.tested("getLanguage()", result);
+ }
+
+ public void _getFunctionName() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getFunctionName");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ output = oObj.getFunctionName();
+
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ }
+ else {
+ result = false;
+ }
+ tRes.tested("getFunctionName()", result);
+ }
+
+ public void _getLanguageProperties() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getLanguageProperties");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ try {
+ XPropertySet langProps = oObj.getLanguageProperties();
+ output = (String)langProps.getPropertyValue("classpath");
+
+ if (output == null)
+ output = "null";
+ }
+ catch( com.sun.star.uno.Exception e) {
+ log.println("caught UNO Exception:" + e);
+ output = "com.sun.star.uno.Exception";
+ }
+
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ }
+ else {
+ result = false;
+ }
+ tRes.tested("getLanguageProperties()", true);
+ }
+
+ public void _getFileSetNames() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getFileSetNames");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ String[] fileSets = oObj.getFileSetNames();
+
+ if (fileSets == null)
+ output = "null";
+ else if (fileSets.length != 1)
+ output = "WrongNumberOfFileSets";
+ else
+ output = fileSets[0];
+
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ }
+ else {
+ result = false;
+ }
+ tRes.tested("getFileSetNames()", result);
+ }
+
+ public void _getFilesInFileSet() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getFilesInFileSet");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ String[] filesInFileSet =
+ oObj.getFilesInFileSet(oObj.getFileSetNames()[0]);
+
+ if (filesInFileSet == null)
+ output = "null";
+ else if (filesInFileSet.length != 1)
+ output = "WrongNumberOfFilesInFileSet";
+ else
+ output = filesInFileSet[0];
+
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ }
+ else {
+ result = false;
+ }
+ tRes.tested("getFilesInFileSet()", result);
+ }
+
+ public void _getDescription() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getDescription");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ output = oObj.getDescription();
+
+ if (output == null)
+ output = "null";
+ else if (output.length() == 0)
+ output = "empty";
+
+ log.println("expected: [" + expected + "], output: [" +
+ output + "]");
+ result &= output.equals(expected);
+ }
+ }
+ else {
+ result = false;
+ }
+
+ tRes.tested("getDescription()", result);
+ }
+}
diff --git a/scripting/workben/ifc/scripting/_XScriptInfoAccess.java b/scripting/workben/ifc/scripting/_XScriptInfoAccess.java
new file mode 100644
index 000000000000..bb26d5110dd0
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XScriptInfoAccess.java
@@ -0,0 +1,228 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.storage;
+
+import ifc.script.framework.ScriptingUtils;
+
+import drafts.com.sun.star.script.framework.storage.XScriptInfoAccess;
+import drafts.com.sun.star.script.framework.storage.XScriptInfo;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.XInterface;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.uno.Exception;
+import com.sun.star.beans.XPropertySet;
+
+import java.io.PrintWriter;
+import lib.MultiMethodTest;
+import lib.StatusException;
+import lib.Parameters;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+public class _XScriptInfoAccess extends MultiMethodTest {
+
+ public XScriptInfoAccess oObj = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ }
+
+ public void _getScriptLogicalNames() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getScriptLogicalNames");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ result &= runGetScriptLogicalNamesTest((Parameters)tests.next());
+ }
+ }
+ else {
+ result = false;
+ }
+
+ tRes.tested("getScriptLogicalNames()", result);
+ }
+
+ private boolean runGetScriptLogicalNamesTest(Parameters testdata) {
+ String description = testdata.get("description");
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ // try {
+ log.println("In _XScriptInfoAccess.getScriptLogicalNames()");
+ String[] logicalNames = oObj.getScriptLogicalNames();
+
+ if (logicalNames == null)
+ output = "null";
+ else if (logicalNames.length == 0)
+ output = "empty";
+ else {
+ for (int i = 0; i < logicalNames.length; i++) {
+ if (logicalNames[i].equals(expected)) {
+ output = logicalNames[i];
+ break;
+ }
+ }
+ }
+ // }
+ // catch (com.sun.star.uno.Exception e) {
+ // log.println("Caught UNO Exception :" + e);
+ // output = "com.sun.star.uno.Exception";
+ // }
+
+ log.println("expected: " + expected + ", output: " + output);
+ if (output.equals(expected))
+ return true;
+ else
+ return false;
+ }
+
+ public void _getImplementations() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getImplementations");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ result &= runGetImplementationsTest((Parameters)tests.next());
+ }
+ }
+ else {
+ result = false;
+ }
+
+ tRes.tested("getImplementations()", result);
+ }
+
+ private boolean runGetImplementationsTest(Parameters testdata) {
+ String description = testdata.get("description");
+ String logicalname = testdata.get("logicalname");
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ // performs a basic check to see if 1 match (XScriptInfo) is returned
+ // the XScriptInfo object is tested more completely in _XScriptInfo
+ // which is drive from ScriptInfo
+
+ try {
+ XScriptInfo[] impls = oObj.getImplementations(logicalname);
+
+ // should only be one match
+ if (impls == null)
+ output = "null";
+ else if (impls.length == 0)
+ output = "empty";
+ else
+ output = impls[0].getLogicalName();
+ }
+ catch (com.sun.star.uno.Exception e) {
+ log.println("Caught UNO Exception:" + e);
+ output = "com.sun.star.uno.Exception";
+ }
+
+ log.println("expected: " + expected + ", output: " + output);
+ if (output.equals(expected))
+ return true;
+ else
+ return false;
+ }
+
+ public void _getAllImplementations() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getAllImplementations");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ result &= runGetAllImplementationsTest((Parameters)tests.next());
+ }
+ }
+ else {
+ result = false;
+ }
+
+ tRes.tested("getAllImplementations()", result);
+ }
+
+ private boolean runGetAllImplementationsTest(Parameters testdata) {
+ String description = testdata.get("description");
+ String location = testdata.get("location");
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ Object obj = ScriptingUtils.getDefault().getScriptStorage(
+ tParam.getMSF(), location);
+
+ XScriptInfoAccess access = (XScriptInfoAccess)
+ UnoRuntime.queryInterface(XScriptInfoAccess.class, obj);
+
+ XScriptInfo[] impls = access.getAllImplementations();
+
+ if (impls == null || impls.length == 0) {
+ output = "empty";
+ }
+ else {
+ for (int i = 0; i < impls.length - 1; i++)
+ output += impls[i].getLogicalName() + ",";
+ output += impls[impls.length - 1].getLogicalName();
+ }
+
+ log.println("expected: " + expected + ", output: " + output);
+ if (output.equals(expected))
+ return true;
+ else
+ return false;
+ }
+}
diff --git a/scripting/workben/ifc/scripting/_XScriptInvocation.java b/scripting/workben/ifc/scripting/_XScriptInvocation.java
new file mode 100644
index 000000000000..a35a153f0e48
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XScriptInvocation.java
@@ -0,0 +1,232 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.runtime;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Collection;
+
+import drafts.com.sun.star.script.framework.runtime.XScriptInvocation;
+import drafts.com.sun.star.script.framework.storage.XScriptStorageManager;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XInterface;
+import com.sun.star.frame.XModel;
+
+import lib.MultiMethodTest;
+import lib.StatusException;
+import lib.Parameters;
+import util.SOfficeFactory;
+
+public class _XScriptInvocation extends MultiMethodTest {
+
+ public XScriptInvocation oObj = null;
+ private XScriptStorageManager storageManager = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ }
+
+ public void after() throws StatusException {
+ }
+
+ public void _invoke() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_invoke");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ result &= runInvokeTest((Parameters)tests.next());
+ }
+ }
+ else {
+ result = false;
+ }
+
+ tRes.tested("invoke()", result);
+ }
+
+ private boolean runInvokeTest(Parameters testdata) {
+ String description = testdata.get("description");
+ String logicalname = testdata.get("logicalname");
+ String context = testdata.get("context");
+ String location = testdata.get("location");
+ String expected = testdata.get("expected");
+ String output = "";
+
+ int storageId = getStorageId(location);
+
+ XModel ctx = null;
+ if (!context.equals("null"))
+ ctx = loadDocument(context);
+
+ HashMap map = new HashMap();
+ map.put("SCRIPTING_DOC_STORAGE_ID", new Integer(storageId));
+ map.put("SCRIPTING_DOC_URI", "hahaha");
+ if (ctx != null)
+ map.put("SCRIPTING_DOC_REF", ctx);
+
+ Parameters params = new Parameters(map);
+ Object[] args = new Object[0];
+
+ Object[][] result = new Object[1][0];
+ result[0] = new Object[0];
+
+ short[][] num = new short[1][0];
+ num[0] = new short[0];
+
+ log.println(description + ": " + logicalname);
+
+ try {
+ Object ret = oObj.invoke(logicalname, params, args, num, result);
+ log.println("return type is: " + ret.getClass().getName() +
+ ", value is: " + ret.toString());
+ output = "success";
+ }
+ catch (com.sun.star.lang.IllegalArgumentException iae) {
+ log.println("Couldn't invoke script:" + iae);
+ output = "com.sun.star.lang.IllegalArgumentException";
+ }
+ catch (com.sun.star.script.CannotConvertException cce) {
+ log.println("Couldn't invoke script:" + cce);
+ output = "com.sun.star.script.CannotConvertException";
+ }
+ catch (com.sun.star.reflection.InvocationTargetException ite) {
+ log.println("Couldn't invoke script:" + ite);
+ output = "com.sun.star.reflection.InvocationTargetException";
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("Couldn't invoke script:" + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+
+ if (ctx != null)
+ ctx.dispose();
+
+ log.println("expected: " + expected + ", output: " + output);
+ if (output.equals(expected))
+ return true;
+ else
+ return false;
+ }
+
+ private int getStorageId(String location) {
+
+ if (location.equals("share"))
+ return 0;
+
+ if (location.equals("user"))
+ return 1;
+
+ XSimpleFileAccess access = null;
+ String uri = util.utils.getFullTestURL(location);
+
+ if (storageManager == null) {
+ try {
+ XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, tParam.getMSF());
+
+ XComponentContext xContext = (XComponentContext)
+ UnoRuntime.queryInterface(XComponentContext.class,
+ xProp.getPropertyValue("DefaultContext"));
+
+ XInterface ifc = (XInterface)
+ xContext.getValueByName("/singletons/drafts.com.sun.star." +
+ "script.framework.storage.theScriptStorageManager");
+
+ storageManager = (XScriptStorageManager)
+ UnoRuntime.queryInterface(XScriptStorageManager.class, ifc);
+ }
+ catch( Exception e ) {
+ return -1;
+ }
+ }
+
+ access = getXSimpleFileAccess();
+ if (access == null)
+ return -1;
+
+ int id = storageManager.createScriptStorageWithURI(access, uri);
+
+ return id;
+ }
+
+ private XSimpleFileAccess getXSimpleFileAccess() {
+ XSimpleFileAccess access = null;
+
+ try {
+ Object fa = tParam.getMSF().createInstance(
+ "com.sun.star.ucb.SimpleFileAccess");
+
+ access = (XSimpleFileAccess)
+ UnoRuntime.queryInterface(XSimpleFileAccess.class, fa);
+ }
+ catch (com.sun.star.uno.Exception e) {
+ return null;
+ }
+ return access;
+ }
+
+ private XModel loadDocument(String name) {
+ XModel model = null;
+ SOfficeFactory factory = SOfficeFactory.getFactory(tParam.getMSF());
+
+ String fullname = util.utils.getFullTestURL(name);
+
+ try {
+ Object obj = factory.loadDocument(fullname);
+ model = (XModel) UnoRuntime.queryInterface(XModel.class, obj);
+ }
+ catch (com.sun.star.lang.IllegalArgumentException iae) {
+ return null;
+ }
+ catch (Exception e) {
+ return null;
+ }
+
+ try {
+ Thread.sleep(5000);
+ }
+ catch (InterruptedException ie) {
+ }
+
+ return model;
+ }
+}
diff --git a/scripting/workben/ifc/scripting/_XScriptNameResolver.java b/scripting/workben/ifc/scripting/_XScriptNameResolver.java
new file mode 100644
index 000000000000..1f31448af1b3
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XScriptNameResolver.java
@@ -0,0 +1,186 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.runtime;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Collection;
+
+import drafts.com.sun.star.script.framework.runtime.XScriptNameResolver;
+import drafts.com.sun.star.script.framework.storage.XScriptInfo;
+import drafts.com.sun.star.script.framework.storage.XScriptStorageManager;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XInterface;
+
+import lib.MultiMethodTest;
+import lib.StatusException;
+import lib.Parameters;
+
+public class _XScriptNameResolver extends MultiMethodTest {
+
+ public XScriptNameResolver oObj = null;
+ private XScriptStorageManager storageManager = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ }
+
+ public void _resolve() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_resolve");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ result &= runResolveTest((Parameters)tests.next());
+ }
+ }
+ else {
+ result = false;
+ }
+
+ tRes.tested("resolve()", result);
+ }
+
+ private boolean runResolveTest(Parameters data) {
+ String description = data.get("description");
+ String location = data.get("location");
+ String logicalname = data.get("logicalname");
+ String expected = data.get("expected");
+ String output = "";
+
+ int storageId = getStorageId(location);
+
+ log.println(description + ": " + logicalname);
+
+ HashMap map = new HashMap();
+ map.put("SCRIPTING_DOC_STORAGE_ID", new Integer(storageId));
+ map.put("SCRIPTING_DOC_URI", util.utils.getFullTestURL(location));
+
+ Parameters params = new Parameters(map);
+ Object[] args = new Object[] {params};
+
+ try {
+ XInterface ifc = (XInterface) oObj.resolve(logicalname, args);
+
+ if (ifc == null)
+ output = "null";
+ else if (UnoRuntime.queryInterface(XScriptInfo.class, ifc) == null)
+ output = "null";
+ else
+ output = "XScriptInfo.class";
+ }
+ catch (com.sun.star.lang.IllegalArgumentException iae) {
+ log.println("caught IllegalArgumentException: " + iae);
+ output = "com.sun.star.lang.IllegalArgumentException";
+ }
+ catch (com.sun.star.script.CannotConvertException cce) {
+ log.println("caught CannotConvertException: " + cce);
+ output = "com.sun.star.script.CannotConvertException";
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("caught RuntimeException: " + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+
+ log.println("expected: " + expected + ", output: " + output);
+ if (output.equals(expected))
+ return true;
+ else
+ return false;
+ }
+
+ private int getStorageId(String location) {
+
+ if (location.equals("share"))
+ return 0;
+
+ if (location.equals("user"))
+ return 1;
+
+ XSimpleFileAccess access = null;
+ String uri = util.utils.getFullTestURL(location);
+
+ if (storageManager == null) {
+ try {
+ XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, tParam.getMSF());
+
+ XComponentContext xContext = (XComponentContext)
+ UnoRuntime.queryInterface(XComponentContext.class,
+ xProp.getPropertyValue("DefaultContext"));
+
+ XInterface ifc = (XInterface)
+ xContext.getValueByName("/singletons/drafts.com.sun.star." +
+ "script.framework.storage.theScriptStorageManager");
+
+ storageManager = (XScriptStorageManager)
+ UnoRuntime.queryInterface(XScriptStorageManager.class, ifc);
+ }
+ catch( Exception e ) {
+ return -1;
+ }
+ }
+
+ access = getXSimpleFileAccess();
+ if (access == null)
+ return -1;
+
+ int id = storageManager.createScriptStorageWithURI(access, uri);
+
+ return id;
+ }
+
+ private XSimpleFileAccess getXSimpleFileAccess() {
+ XSimpleFileAccess access = null;
+
+ try {
+ Object fa = tParam.getMSF().createInstance(
+ "com.sun.star.ucb.SimpleFileAccess");
+
+ access = (XSimpleFileAccess)
+ UnoRuntime.queryInterface(XSimpleFileAccess.class, fa);
+ }
+ catch (com.sun.star.uno.Exception e) {
+ return null;
+ }
+ return access;
+ }
+}
diff --git a/scripting/workben/ifc/scripting/_XScriptSecurity.java b/scripting/workben/ifc/scripting/_XScriptSecurity.java
new file mode 100644
index 000000000000..ee5ade31e7f4
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XScriptSecurity.java
@@ -0,0 +1,409 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.security;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Collection;
+
+import drafts.com.sun.star.script.framework.security.XScriptSecurity;
+import drafts.com.sun.star.script.framework.storage.XScriptStorageManager;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XInterface;
+import com.sun.star.frame.XModel;
+import com.sun.star.container.XNameReplace;
+import com.sun.star.util.XChangesBatch;
+import com.sun.star.reflection.InvocationTargetException;
+
+import ifc.script.framework.SecurityDialogUtil;
+
+import lib.MultiMethodTest;
+import lib.StatusException;
+import lib.Parameters;
+import util.SOfficeFactory;
+
+public class _XScriptSecurity extends MultiMethodTest {
+
+ public XScriptSecurity oObj = null;
+ private XScriptStorageManager storageManager = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ }
+
+ public void after() throws StatusException {
+ }
+
+ public void _checkPermission() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_checkPermission");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ result &= runCheckPermissionTest((Parameters)tests.next());
+ }
+ }
+ else {
+ result = false;
+ }
+
+ // set security to always without confirmation dialog and empty path
+ // list so other tests can run without dialog popping up
+ setSecurity(2, "false", "false", null);
+
+ tRes.tested("checkPermission()", result);
+ }
+
+ private boolean runCheckPermissionTest(Parameters testdata) {
+ // description of test
+ String description = testdata.get("description");
+
+ // document location
+ String location = testdata.get("location");
+
+ //security settings
+ String runmacro = testdata.get("runmacro");
+ String confirm = testdata.get("confirm");
+ String warning = testdata.get("warning");
+ String pathlist = testdata.get("pathlist");
+
+ //do this test produce a dialog?
+ String dialog = testdata.get("dialog");
+ //is checkbox to be ticked?
+ String checkBoxStr = testdata.get("checkbox");
+ //name of button in dialog to press
+ String buttonName = testdata.get("buttonName");
+
+ //expected result
+ String expected = testdata.get("expected");
+ //do we need to check the pathlist?
+ String checkpath = testdata.get("checkpath");
+
+ String output = null;
+
+ log.println(description);
+
+ // get the officeBasic setting
+ int officeBasic = 0;
+ if( runmacro.equals("never") )
+ {
+ officeBasic = 0;
+ }
+ else if ( runmacro.equals("pathlist") )
+ {
+ officeBasic = 1;
+ }
+ else if ( runmacro.equals("always") )
+ {
+ officeBasic = 2;
+ }
+
+ // should pathlist include doc?
+ String secureURLs = null;
+ if( pathlist.equals("true") )
+ {
+ String uri = util.utils.getFullTestURL(location);
+ secureURLs = uri.substring(0, uri.lastIndexOf('/'));
+ }
+
+ if ( !setSecurity( officeBasic, confirm, warning, secureURLs ) )
+ {
+ log.println( "failed to set security" );
+ return false;
+ }
+
+ if( dialog.equals( "true" ) )
+ {
+ // is the checkbox to be ticked?
+ boolean checkBox = false;
+ if( checkBoxStr.equals( "true" ) )
+ {
+ checkBox = true;
+ }
+ new SecurityDialogUtil( tParam.getMSF(), buttonName, checkBox ).start();
+ }
+ // need to set up dialog utils thread first
+ int storageId = getStorageId(location);
+
+ try {
+ String uri = util.utils.getFullTestURL(location);
+ oObj.checkPermission(uri, "execute" );
+ output = "true";
+ }
+ catch (com.sun.star.security.AccessControlException ace) {
+ log.println("Couldn't invoke script:" + ace);
+ output = "com.sun.star.security.AccessControlException";
+ }
+ catch (com.sun.star.lang.IllegalArgumentException iae) {
+ log.println("Couldn't invoke script:" + iae);
+ output = "com.sun.star.lang.IllegalArgumentException";
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("Couldn't invoke script:" + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+
+ log.println("expected: " + expected + ", output: " + output);
+ if (output.equals(expected))
+ {
+ if( checkpath.equals("true") )
+ {
+ String setPath = getPathList();
+ String expectedPath = "empty";
+ if( checkBoxStr.equals( "true" ) )
+ {
+ String uri = util.utils.getFullTestURL(location);
+ expectedPath = uri.substring(0, uri.lastIndexOf('/'));
+ }
+ log.println("pathlist: expected: " + expectedPath + ", output: " + setPath);
+ if( setPath.equals( expectedPath ) )
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ else
+ return false;
+ }
+
+ private String getPathList()
+ {
+ String result = "";
+ try {
+ Object oProv = tParam.getMSF().createInstance(
+ "com.sun.star.configuration.ConfigurationProvider" );
+
+ XMultiServiceFactory xProv = (XMultiServiceFactory)
+ UnoRuntime.queryInterface(XMultiServiceFactory.class, oProv);
+
+ //the path to the security settings in the registry
+ PropertyValue aPathArg = new PropertyValue();
+ aPathArg.Name="nodepath";
+ aPathArg.Value="org.openoffice.Office.Common/Security/Scripting";
+ // we don't want to cache the write
+ PropertyValue aModeArg = new PropertyValue();
+ aModeArg.Name="lazywrite";
+ aModeArg.Value=new Boolean(false);
+
+ Object[] aArgs = new Object[2];
+ aArgs[0]=aPathArg;
+ aArgs[1]=aModeArg;
+ Object oConfigUpdate = xProv.createInstanceWithArguments(
+ "com.sun.star.configuration.ConfigurationAccess",
+ aArgs );
+ XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, oConfigUpdate );
+
+ String[] paths = (String[])xPropertySet.getPropertyValue("SecureURL");
+ if (paths == null || paths.length == 0)
+ result = "empty";
+ else
+ result = paths[0];
+
+ } catch (Exception e)
+ {
+ result = e.getClass().getName() + " getting list of secure URLs";
+ }
+ return result;
+ }
+
+ private boolean setSecurity( int officeBasic, String confirm,
+ String warning, String secureURLs )
+ {
+ boolean success=false;
+ try {
+ Object oProv = tParam.getMSF().createInstance(
+ "com.sun.star.configuration.ConfigurationProvider" );
+
+ XMultiServiceFactory xProv = (XMultiServiceFactory)
+ UnoRuntime.queryInterface(XMultiServiceFactory.class, oProv);
+
+ //the path to the security settings in the registry
+ PropertyValue aPathArg = new PropertyValue();
+ aPathArg.Name="nodepath";
+ aPathArg.Value="org.openoffice.Office.Common/Security/Scripting";
+ // we don't want to cache the write
+ PropertyValue aModeArg = new PropertyValue();
+ aModeArg.Name="lazywrite";
+ aModeArg.Value=new Boolean(false);
+
+ Object[] aArgs = new Object[2];
+ aArgs[0]=aPathArg;
+ aArgs[1]=aModeArg;
+ Object oConfigUpdate = xProv.createInstanceWithArguments(
+ "com.sun.star.configuration.ConfigurationUpdateAccess",
+ aArgs );
+ XNameReplace xNameReplace = (XNameReplace)UnoRuntime.queryInterface(
+ XNameReplace.class, oConfigUpdate );
+ XChangesBatch xChangesBatch = (XChangesBatch)UnoRuntime.queryInterface(
+ XChangesBatch.class, oConfigUpdate );
+
+ Object[] aSecureURLs;
+ if (secureURLs == null) {
+ aSecureURLs = new Object[0];
+ }
+ else {
+ aSecureURLs = new Object[1];
+ aSecureURLs[0] = secureURLs;
+ }
+ log.println("setting SecureURL");
+ xNameReplace.replaceByName( "SecureURL", aSecureURLs );
+
+ log.println("setting OfficeBasic");
+ xNameReplace.replaceByName( "OfficeBasic", new Integer(officeBasic) );
+
+ Boolean bConfirm = null;
+ if( ( confirm != null ) && ( confirm.equals("true") ) )
+ {
+ bConfirm = new Boolean( true );
+ }
+ else
+ {
+ bConfirm = new Boolean( false );
+ }
+ log.println("setting Confirmation");
+ xNameReplace.replaceByName( "Confirmation", bConfirm );
+
+ Boolean bWarning = null;
+ if( ( warning != null ) && ( warning.equals("true") ) )
+ {
+ bWarning = new Boolean( true );
+ }
+ else
+ {
+ bWarning = new Boolean( false );
+ }
+ log.println("setting Warning");
+ xNameReplace.replaceByName( "Warning", bWarning );
+
+ // and now commit the changes
+ xChangesBatch.commitChanges();
+ success=true;
+ } catch (Exception e) {
+ log.println("Error updating security settings: " +
+ e.getMessage() );
+ }
+ return success;
+ }
+
+ private int getStorageId(String location) {
+
+ XSimpleFileAccess access = null;
+ String uri = util.utils.getFullTestURL(location);
+
+ if (storageManager == null) {
+ try {
+ XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, tParam.getMSF());
+
+ XComponentContext xContext = (XComponentContext)
+ UnoRuntime.queryInterface(XComponentContext.class,
+ xProp.getPropertyValue("DefaultContext"));
+
+ XInterface ifc = (XInterface)
+ xContext.getValueByName("/singletons/drafts.com.sun.star." +
+ "script.framework.storage.theScriptStorageManager");
+
+ storageManager = (XScriptStorageManager)
+ UnoRuntime.queryInterface(XScriptStorageManager.class, ifc);
+ }
+ catch( Exception e ) {
+ return -1;
+ }
+ }
+
+ access = getXSimpleFileAccess();
+ if (access == null)
+ return -1;
+
+ int id = storageManager.createScriptStorageWithURI(access, uri);
+
+ return id;
+ }
+
+ private XSimpleFileAccess getXSimpleFileAccess() {
+ XSimpleFileAccess access = null;
+
+ try {
+ Object fa = tParam.getMSF().createInstance(
+ "com.sun.star.ucb.SimpleFileAccess");
+
+ access = (XSimpleFileAccess)
+ UnoRuntime.queryInterface(XSimpleFileAccess.class, fa);
+ }
+ catch (com.sun.star.uno.Exception e) {
+ return null;
+ }
+ return access;
+ }
+
+ private XModel loadDocument(String name) {
+ XModel model = null;
+ SOfficeFactory factory = SOfficeFactory.getFactory(tParam.getMSF());
+
+ String fullname = util.utils.getFullTestURL(name);
+
+ try {
+ Object obj = factory.loadDocument(fullname);
+ model = (XModel) UnoRuntime.queryInterface(XModel.class, obj);
+ }
+ catch (com.sun.star.lang.IllegalArgumentException iae) {
+ return null;
+ }
+ catch (Exception e) {
+ return null;
+ }
+
+ try {
+ Thread.sleep(5000);
+ }
+ catch (InterruptedException ie) {
+ }
+
+ return model;
+ }
+}
diff --git a/scripting/workben/ifc/scripting/_XScriptStorageManager.java b/scripting/workben/ifc/scripting/_XScriptStorageManager.java
new file mode 100644
index 000000000000..d24b97070b57
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XScriptStorageManager.java
@@ -0,0 +1,267 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.storage;
+
+import drafts.com.sun.star.script.framework.storage.XScriptStorageManager;
+import drafts.com.sun.star.script.framework.storage.XScriptInfoAccess;
+
+import java.util.Iterator;
+import java.util.Collection;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.XInterface;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.uno.Exception;
+
+import java.io.PrintWriter;
+import lib.MultiMethodTest;
+import lib.StatusException;
+import lib.Parameters;
+
+public class _XScriptStorageManager extends MultiMethodTest {
+
+ public XScriptStorageManager oObj = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ }
+
+ public void _createScriptStorage() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_createScriptStorage");
+
+ if (c == null) {
+ tRes.tested("createScriptStorage()", false);
+ return;
+ }
+
+ Iterator tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ XSimpleFileAccess access = getXSimpleFileAccess();
+
+ if (access == null) {
+ output = "Couldn't create XSimpleFileAccess";
+ }
+ else {
+ try {
+ int id = oObj.createScriptStorage(access);
+ output = "success";
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("Exception from createScriptStorage: " + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+ }
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ tRes.tested("createScriptStorage()", result);
+ }
+
+ public void _createScriptStorageWithURI() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_createScriptStorageWithURI");
+
+ if (c == null) {
+ tRes.tested("createScriptStorageWithURI()", false);
+ return;
+ }
+
+ Iterator tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String location = testdata.get("location");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ String uri = util.utils.getFullTestURL(location);
+ XSimpleFileAccess access = getXSimpleFileAccess();
+
+ try {
+ int id = oObj.createScriptStorageWithURI(access, uri);
+
+ XInterface ifc = (XInterface)oObj.getScriptStorage(id);
+
+ if (ifc == null)
+ output = "null";
+ else {
+ Object info = UnoRuntime.queryInterface(
+ XScriptInfoAccess.class, ifc);
+
+ if (info == null)
+ output = "null";
+ else
+ output = "XScriptInfoAccess.class";
+ }
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("Caught RuntimeException: " + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+
+ tRes.tested("createScriptStorageWithURI()", result);
+ }
+
+ public void _getScriptStorage() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_getScriptStorage");
+
+ if (c == null) {
+ tRes.tested("getScriptStorage()", false);
+ return;
+ }
+
+ Iterator tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String location = testdata.get("location");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ try {
+ int storageid = getStorageId(location);
+
+ XInterface ifc = (XInterface)oObj.getScriptStorage(storageid);
+
+ if (ifc == null)
+ output = "null";
+ else {
+ Object info = UnoRuntime.queryInterface(
+ XScriptInfoAccess.class, ifc);
+
+ if (info == null)
+ output = "null";
+ else
+ output = "XScriptInfoAccess.class";
+ }
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("Caught RuntimeException: " + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ tRes.tested("getScriptStorage()", result);
+ }
+
+ public void _refreshScriptStorage() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_refreshScriptStorage");
+
+ if (c == null) {
+ tRes.tested("refreshScriptStorage()", false);
+ return;
+ }
+
+ Iterator tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String location = testdata.get("location");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ try {
+ String uri = util.utils.getFullTestURL(location);
+ log.println("calling refreshScriptStorage with URI: " + uri);
+ oObj.refreshScriptStorage(uri);
+ output = "success";
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("Caught RuntimeException: " + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ tRes.tested("refreshScriptStorage()", result);
+ }
+
+ private int getStorageId(String location) {
+
+ if (location.equals("share"))
+ return 0;
+
+ if (location.equals("user"))
+ return 1;
+
+ String uri = util.utils.getFullTestURL(location);
+
+ XSimpleFileAccess access = getXSimpleFileAccess();
+ if (access == null)
+ return -1;
+
+ return oObj.createScriptStorageWithURI(access, uri);
+ }
+
+ private XSimpleFileAccess getXSimpleFileAccess() {
+ XSimpleFileAccess access = null;
+
+ try {
+ Object fa = tParam.getMSF().createInstance(
+ "com.sun.star.ucb.SimpleFileAccess");
+
+ access = (XSimpleFileAccess)
+ UnoRuntime.queryInterface(XSimpleFileAccess.class, fa);
+ }
+ catch (com.sun.star.uno.Exception e) {
+ return null;
+ }
+ return access;
+ }
+}
diff --git a/scripting/workben/ifc/scripting/_XScriptStorageRefresh.java b/scripting/workben/ifc/scripting/_XScriptStorageRefresh.java
new file mode 100644
index 000000000000..56b5e7ec8f82
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XScriptStorageRefresh.java
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.storage;
+
+import drafts.com.sun.star.script.framework.storage.XScriptStorageRefresh;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.XInterface;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.uno.Exception;
+import com.sun.star.beans.XPropertySet;
+
+import java.io.PrintWriter;
+import lib.MultiMethodTest;
+import lib.StatusException;
+import lib.Parameters;
+
+public class _XScriptStorageRefresh extends MultiMethodTest {
+
+ public XScriptStorageRefresh oObj = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ }
+
+ public void _refresh() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_refresh");
+
+ if (c == null) {
+ tRes.tested("refresh()", false);
+ return;
+ }
+
+ Iterator tests = c.iterator();
+
+ while (tests.hasNext()) {
+ Parameters testdata = (Parameters)tests.next();
+ String expected = testdata.get("expected");
+ String output = "";
+
+ log.println(testdata.get("description"));
+
+ try {
+ oObj.refresh();
+ output = "success";
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("Caught RuntimeException: " + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+ log.println("expected: " + expected + ", output: " + output);
+ result &= output.equals(expected);
+ }
+ tRes.tested("refresh()", result);
+ }
+}
diff --git a/scripting/workben/ifc/scripting/makefile.mk b/scripting/workben/ifc/scripting/makefile.mk
new file mode 100644
index 000000000000..15c8492d8da8
--- /dev/null
+++ b/scripting/workben/ifc/scripting/makefile.mk
@@ -0,0 +1,40 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ = ..$/..$/..$/..
+PRJNAME = testcase
+TARGET = testcase
+
+# --- Settings -----------------------------------------------------
+.INCLUDE: settings.mk
+
+JARFILES = ridl.jar unoil.jar jurt.jar juh.jar $(CLASSPATH)$
+JAVAFILES = $(foreach,j,$(shell @ls | grep java) $j)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/scripting/workben/installer/Banner.java b/scripting/workben/installer/Banner.java
new file mode 100644
index 000000000000..c6d0f0b0bd5e
--- /dev/null
+++ b/scripting/workben/installer/Banner.java
@@ -0,0 +1,30 @@
+package installer;
+
+import java.awt.*;
+
+public class Banner extends Canvas
+{
+ Image img;
+ Banner()
+ {
+ setBackground(Color.white);
+ img = Toolkit.getDefaultToolkit().createImage("sidebar.jpg");
+ }
+
+ public void paint(Graphics g)
+ {
+ g.drawImage(img, 0, 0, Color.white, null);
+ g.dispose();
+ }
+
+ public void update(Graphics g)
+ {
+ super.update(g);
+ }
+
+ public Dimension getPreferredSize()
+ {
+ return new Dimension(137, 358);
+ }
+
+}
diff --git a/scripting/workben/installer/ExceptionTraceHelper.java b/scripting/workben/installer/ExceptionTraceHelper.java
new file mode 100644
index 000000000000..c661c8d36216
--- /dev/null
+++ b/scripting/workben/installer/ExceptionTraceHelper.java
@@ -0,0 +1,64 @@
+/*************************************************************************
+*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+************************************************************************/
+package installer;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+// class for propagating the exception stack traces across the Java/UNO bridge
+public class ExceptionTraceHelper
+{
+ public static String getTrace( Exception e )
+ {
+ ByteArrayOutputStream baos = null;
+ PrintStream ps = null;
+ String result = "";
+ try
+ {
+ baos = new ByteArrayOutputStream( 128 );
+ ps = new PrintStream( baos );
+ e.printStackTrace( ps );
+ }
+ finally
+ {
+ try
+ {
+ if ( baos != null )
+ {
+ baos.close();
+ }
+ if ( ps != null )
+ {
+ ps.close();
+ }
+ }
+ catch ( Exception excp )
+ {
+ }
+ }
+ return result;
+ }
+}
diff --git a/scripting/workben/installer/ExecCmd.java b/scripting/workben/installer/ExecCmd.java
new file mode 100644
index 000000000000..fa5f9a8b2dcd
--- /dev/null
+++ b/scripting/workben/installer/ExecCmd.java
@@ -0,0 +1,100 @@
+package installer;
+import java.util.*;
+import java.io.*;
+public class ExecCmd
+{
+
+ public boolean exec( String cmd, String[] env )
+ {
+ System.out.println("About to exectute " + cmd);
+ final Process p;
+ boolean result = false;
+ try
+ {
+ Runtime rt = Runtime.getRuntime();
+ p=rt.exec( cmd, env );
+ new Thread(new Runnable() {
+ public void run()
+ {
+ BufferedReader br_in = null;
+ try
+ {
+ br_in = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ String buff = null;
+ while ((buff = br_in.readLine()) != null)
+ {
+ System.out.println("Process out :" + buff);
+ /*try
+ {
+ Thread.sleep(100);
+ }
+ catch(Exception e) {}*/
+ }
+ System.out.println("finished reading out");
+ }
+ catch (IOException ioe)
+ {
+ System.out.println("Exception caught printing javac result");
+ ioe.printStackTrace();
+ }
+ finally
+ {
+ if ( br_in != null )
+ {
+ try
+ {
+ br_in.close();
+ }
+ catch( Exception e ) {} // nothing can be done
+ }
+ }
+ } } ).start();
+
+ new Thread(new Runnable() {
+ public void run() {
+ BufferedReader br_err = null;
+ try {
+ br_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ String buff = null;
+ while ((buff = br_err.readLine()) != null) {
+ System.out.println("Process err :" + buff);
+ /*try {Thread.sleep(100); } catch(Exception e) {}*/
+ }
+ System.out.println("finished reading err");
+ } catch (IOException ioe) {
+ System.out.println("Exception caught printing javac result");
+ ioe.printStackTrace();
+ }
+ finally
+ {
+ if ( br_err != null )
+ {
+ try
+ {
+ br_err.close();
+ }
+ catch( Exception e ) {} // nothing can be done
+ }
+ }
+ } }).start();
+ int exitcode = p.waitFor();
+ if ( exitcode != 0 )
+ {
+ System.out.println("cmd [" + cmd + "] failed" );
+ result= false;
+ }
+ else
+ {
+ System.out.println("cmd [" + cmd + "] completed successfully");
+ result= true;
+ }
+ }
+ catch (Exception e) {
+ System.out.println("Exception");
+ e.printStackTrace();
+ }
+ System.out.println("command complete");
+ return result;
+ }
+}
+
diff --git a/scripting/workben/installer/FileUpdater.java b/scripting/workben/installer/FileUpdater.java
new file mode 100644
index 000000000000..76b5358eb6fe
--- /dev/null
+++ b/scripting/workben/installer/FileUpdater.java
@@ -0,0 +1,232 @@
+package installer;
+
+import java.io.*;
+import javax.swing.JLabel;
+
+public class FileUpdater {
+
+ public static boolean updateProtocolHandler( String installPath, JLabel statusLabel ) {
+ File in_file = null;
+ FileInputStream in = null;
+ File out_file = null;
+ FileWriter out = null;
+ int count = 0;
+
+ try {
+ in_file = new File( installPath+File.separator+"share"+File.separator+"registry"+File.separator+"data"+File.separator+"org"+File.separator+"openoffice"+File.separator+"Office"+File.separator+"ProtocolHandler.xcu" );
+
+ String[] xmlArray = new String[50];
+ try {
+ BufferedReader reader = new BufferedReader(new FileReader(in_file));
+ count = -1;
+ for (String s = reader.readLine(); s != null; s = reader.readLine()) { //</oor:node>
+ count = count + 1;
+ if(s != null) {
+ s.trim();
+ xmlArray[count] = s;
+ }
+ else
+ break;
+ }
+ }
+ catch( IOException ioe ) {
+ String message = "\nError reading ProtocolHandler.xcu, please view SFrameworkInstall.log.";
+ System.out.println(message);
+ ioe.printStackTrace();
+ statusLabel.setText(message);
+ return false;
+ }
+
+ in_file.delete();
+
+ out_file = new File( installPath+File.separator+"share"+File.separator+"registry"+File.separator+"data"+File.separator+"org"+File.separator+"openoffice"+File.separator+"Office"+File.separator+"ProtocolHandler.xcu" );
+ out_file.createNewFile();
+ out = new FileWriter( out_file );
+
+ for(int i=0; i<count + 1; i++) {
+ out.write(xmlArray[i]+"\n");
+ if( ( xmlArray[i].indexOf( "<node oor:name=\"HandlerSet\">" ) != -1 ) && ( xmlArray[i+1].indexOf( "ScriptProtocolHandler" ) == -1 ) ) {
+ out.write( " <node oor:name=\"com.sun.star.comp.ScriptProtocolHandler\" oor:op=\"replace\">\n" );
+ out.write( " <prop oor:name=\"Protocols\">\n" );
+ out.write( " <value>script:*</value>\n" );
+ out.write( " </prop>\n" );
+ out.write( " </node>\n" );
+ }
+ }
+ }
+ catch( Exception e ) {
+ String message = "\nError updating ProtocolHandler.xcu, please view SFrameworkInstall.log.";
+ System.out.println(message);
+ e.printStackTrace();
+ statusLabel.setText(message);
+ return false;
+ }
+ finally {
+ try {
+ out.close();
+ System.out.println("File closed");
+ }
+ catch(Exception e) {
+ System.out.println("Update ProtocolHandler Failed, please view SFrameworkInstall.log.");
+ System.err.println(e);
+ e.printStackTrace();
+ }
+ }
+ return true;
+
+ }// updateProtocolHandler
+
+
+ public static boolean updateScriptXLC( String installPath, JLabel statusLabel ) {
+
+ File in_file = null;
+ FileInputStream in = null;
+ File out_file = null;
+ FileWriter out = null;
+ int count = 0;
+
+ //System.out.println("updateScriptXLC");
+ try {
+ in_file = new File( installPath+File.separator+"user"+File.separator+"basic"+File.separator+"script.xlc" );
+
+ String[] xmlArray = new String[50];
+ try {
+ BufferedReader reader = new BufferedReader(new FileReader(in_file));
+ count = -1;
+ for (String s = reader.readLine(); s != null; s = reader.readLine()) { //</oor:node>
+ count = count + 1;
+ if(s != null) {
+ s.trim();
+ xmlArray[count] = s;
+ }
+ else
+ break;
+ }
+ }
+ catch( IOException ioe ) {
+ String message = "Error reading script.xlc, please view SFrameworkInstall.log.";
+ System.out.println(message);
+ ioe.printStackTrace();
+ statusLabel.setText(message);
+ return false;
+ }
+
+ in_file.delete();
+
+ out_file = new File( installPath+File.separator+"user"+File.separator+"basic"+File.separator+"script.xlc" );
+ out_file.createNewFile();
+ out = new FileWriter( out_file );
+
+ //split the string into a string array with one line of xml in each element
+ //String[] xmlArray = xmlLine.split("\n");
+ for(int i=0; i<count + 1; i++) {
+ out.write(xmlArray[i]+"\n");
+ if( ( xmlArray[i].indexOf( "<library:libraries xmlns:library" ) != -1 ) && ( xmlArray[i+1].indexOf( "ScriptBindingLibrary" ) == -1 ) ) {
+ String opSys = System.getProperty("os.name");
+ if (opSys.indexOf("Windows") != -1) {
+ out.write(" <library:library library:name=\"ScriptBindingLibrary\" library:link=\"true\"/>\n" );
+ }
+ else {
+ out.write(" <library:library library:name=\"ScriptBindingLibrary\" xlink:href=\"file://"+installPath+"/share/basic/ScriptBindingLibrary/script.xlb/\" xlink:type=\"simple\" library:link=\"true\"/>\n" );
+ }
+ }
+ }
+ }
+ catch( Exception e ) {
+ String message = "\nError updating script.xlc, please view SFrameworkInstall.log.";
+ System.out.println(message);
+ e.printStackTrace();
+ statusLabel.setText(message);
+ return false;
+ }
+ finally {
+ try {
+ out.close();
+ }
+ catch(Exception e) {
+ System.out.println("Update Script.xlc Failed, please view SFrameworkInstall.log.");
+ e.printStackTrace();
+ System.err.println(e);
+ }
+ }
+ return true;
+ }// updateScriptXLC
+
+
+ public static boolean updateDialogXLC( String installPath, JLabel statusLabel ) {
+ File in_file = null;
+ FileInputStream in = null;
+ File out_file = null;
+ FileWriter out = null;
+ int count = 0;
+
+ //System.out.println( "updateDialogXLC" );
+ try {
+ in_file = new File( installPath+File.separator+"user"+File.separator+"basic"+File.separator+"dialog.xlc" );
+ String xmlLine = "";
+
+ String[] xmlArray = new String[50];
+ try {
+ BufferedReader reader = new BufferedReader(new FileReader(in_file));
+ count = -1;
+ for (String s = reader.readLine(); s != null; s = reader.readLine()) {
+ count = count + 1;
+ if(s != null) {
+ s.trim();
+ xmlArray[count] = s;
+ }
+ else
+ break;
+ }
+ }
+ catch( IOException ioe ) {
+
+ String message = "\nError reading dialog.xlc, please view SFrameworkInstall.log.";
+ System.out.println(message);
+ statusLabel.setText(message);
+ return false;
+ }
+ in_file.delete();
+
+ out_file = new File( installPath+File.separator+"user"+File.separator+"basic"+File.separator+"dialog.xlc" );
+ out_file.createNewFile();
+
+ out = new FileWriter( out_file );
+
+ //split the string into a string array with one line of xml in each element
+ // String[] xmlArray = xmlLine.split("\n");
+ for(int i=0; i<count + 1; i++) {
+ out.write(xmlArray[i]+"\n");
+ if( ( xmlArray[i].indexOf( "<library:libraries xmlns:library" ) != -1 ) && ( xmlArray[i+1].indexOf( "ScriptBindingLibrary" ) == -1 ) ) {
+ String opSys = System.getProperty("os.name");
+ if (opSys.indexOf("Windows") != -1) {
+ out.write(" <library:library library:name=\"ScriptBindingLibrary\" library:link=\"true\"/>\n" );
+ }
+ else {
+ out.write(" <library:library library:name=\"ScriptBindingLibrary\" xlink:href=\"file://"+installPath+"/share/basic/ScriptBindingLibrary/dialog.xlb/\" xlink:type=\"simple\" library:link=\"true\"/>\n" );
+ }
+ }
+ }
+ }
+ catch( Exception e ) {
+ String message = "\nError updating dialog.xlc, please view SFrameworkInstall.log.";
+ System.out.println(message);
+ e.printStackTrace();
+ statusLabel.setText(message);
+ return false;
+ }
+ finally {
+ try {
+ out.close();
+ }
+ catch(Exception e) {
+ System.out.println("Update dialog.xlc Failed, please view SFrameworkInstall.log.");
+ e.printStackTrace();
+ System.err.println(e);
+ }
+ }
+ return true;
+ }// updateScriptXLC
+
+
+}
diff --git a/scripting/workben/installer/Final.java b/scripting/workben/installer/Final.java
new file mode 100644
index 000000000000..ea543d45ccec
--- /dev/null
+++ b/scripting/workben/installer/Final.java
@@ -0,0 +1,136 @@
+package installer;
+
+/*
+ * Welcome.java
+ *
+ * Created on 04 July 2002, 15:43
+ */
+
+/**
+ *
+ * @author mike
+ */
+
+import java.awt.event.*;
+import java.util.*;
+import java.net.*;
+import javax.swing.*;
+
+public class Final extends javax.swing.JPanel implements ActionListener, InstallListener {
+
+ /** Creates new form Welcome */
+ public Final(InstallWizard wizard) {
+ this.wizard = wizard;
+ setBackground(java.awt.Color.white);
+ xud = null;
+ initComponents();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ private void initComponents() {//GEN-BEGIN:initComponents
+ statusPanel = new javax.swing.JPanel();
+ statusPanel.setBackground(java.awt.Color.white);
+ statusLine = new javax.swing.JLabel("Ready", javax.swing.JLabel.CENTER);
+
+ setLayout(new java.awt.BorderLayout());
+
+ statusPanel.setLayout(new java.awt.BorderLayout());
+
+ statusLine.setText("Waiting to install. \n All Office processes must be terminated.");
+ statusPanel.add(statusLine, java.awt.BorderLayout.CENTER);
+
+ add(statusPanel, java.awt.BorderLayout.CENTER);
+ nav = new NavPanel(wizard, true, true, true, InstallWizard.VERSIONS, "");
+ nav.setNextListener(this);
+ nav.removeCancelListener(nav);
+ nav.setCancelListener(this);
+ nav.navNext.setText("Install");
+ add(nav, java.awt.BorderLayout.SOUTH);
+
+
+
+ }//GEN-END:initComponents
+
+ public java.awt.Dimension getPreferredSize() {
+ return new java.awt.Dimension(InstallWizard.DEFWIDTH, InstallWizard.DEFHEIGHT);
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ // navNext is "Install"
+ if (e.getSource() == nav.navNext)
+ {
+ JProgressBar progressBar=new JProgressBar();
+ progressBar.setMaximum(10);
+ progressBar.setValue(0);
+ statusPanel.add(progressBar, java.awt.BorderLayout.SOUTH);
+ nav.enableNext(false);
+ nav.enableBack(false);
+ nav.enableCancel(false);
+ ArrayList locations = wizard.getLocations();
+ //System.out.println("here "+locations.size());
+ // Returned 1
+ String progpath=null;
+ String path=null;
+ String classespath=null;
+ for (int i =0;i<locations.size();i++){
+ path= (String)locations.get(i);
+ //InstallWizard.currentPath = path;
+ xud = new XmlUpdater(path, statusLine,progressBar,InstallWizard.bNetworkInstall,InstallWizard.bBindingsInstall);
+ xud.addInstallListener(this);
+ InstallWizard.setInstallStarted(true);
+ InstallWizard.setPatchedTypes(false);
+ InstallWizard.setPatchedJava(false);
+ InstallWizard.setPatchedRDB(false);
+ xud.start();
+ }
+ }
+
+ // set to "Exit" at end of installation process
+ if (e.getSource() == nav.navCancel) {
+ int answer = JOptionPane.showConfirmDialog(wizard, "Are you sure you want to exit?");
+ if (answer == JOptionPane.YES_OPTION)
+ {
+ wizard.exitForm(null);
+ }
+ else
+ {
+ return;
+ }
+ }
+ }// actionPerformed
+
+
+ public void installationComplete(InstallationEvent ev) {
+ //System.out.println("Detected installation complete");
+ if( InstUtil.hasNetbeansInstallation() ) {
+ //System.out.println("Detected installation complete (IDE(s) detected)");
+ nav.removeCancelListener(this);
+ nav.setCancelListener(nav);
+ nav.navCancel.setText("Finish");
+ nav.enableIDE(true);
+ nav.enableCancel(true);
+ xud = null;
+ }
+ else {
+ //System.out.println("Detected installation complete (No IDE(s) detected)");
+ nav.removeCancelListener(this);
+ nav.setCancelListener(nav);
+ nav.navCancel.setText("Finish");
+ nav.enableCancel(true);
+ xud = null;
+ }
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel statusPanel;
+ private javax.swing.JLabel statusLine;
+ private InstallWizard wizard;
+ private NavPanel nav;
+ private XmlUpdater xud;
+ // End of variables declaration//GEN-END:variables
+
+}
diff --git a/scripting/workben/installer/IdeFinal.java b/scripting/workben/installer/IdeFinal.java
new file mode 100644
index 000000000000..d7b622a02bef
--- /dev/null
+++ b/scripting/workben/installer/IdeFinal.java
@@ -0,0 +1,125 @@
+package installer;
+
+/*
+ * Welcome.java
+ *
+ * Created on 04 July 2002, 15:43
+ */
+
+/**
+ *
+ * @author mike
+ */
+
+import java.awt.event.*;
+import java.util.*;
+import java.net.*;
+import javax.swing.*;
+
+public class IdeFinal extends javax.swing.JPanel implements ActionListener, InstallListener {
+
+ /** Creates new form Welcome */
+ public IdeFinal(InstallWizard wizard) {
+ this.wizard = wizard;
+ setBackground(java.awt.Color.white);
+ ideupdater = null;
+ initComponents();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ private void initComponents() {//GEN-BEGIN:initComponents
+ statusPanel = new javax.swing.JPanel();
+ statusPanel.setBackground(java.awt.Color.white);
+ statusLine = new javax.swing.JLabel("Ready", javax.swing.JLabel.CENTER);
+
+ setLayout(new java.awt.BorderLayout());
+
+ statusPanel.setLayout(new java.awt.BorderLayout());
+
+ statusLine.setText("Waiting to install IDE support.");
+ statusPanel.add(statusLine, java.awt.BorderLayout.CENTER);
+
+ add(statusPanel, java.awt.BorderLayout.CENTER);
+ nav = new NavPanel(wizard, true, true, true, InstallWizard.IDEVERSIONS, "");
+ nav.setNextListener(this);
+ nav.removeCancelListener(nav);
+ nav.setCancelListener(this);
+ nav.navNext.setText("Install");
+ add(nav, java.awt.BorderLayout.SOUTH);
+ }//GEN-END:initComponents
+
+ public java.awt.Dimension getPreferredSize() {
+ return new java.awt.Dimension(InstallWizard.DEFWIDTH, InstallWizard.DEFHEIGHT);
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ // navNext is "Install"
+ if (e.getSource() == nav.navNext)
+ {
+ JProgressBar progressBar=new JProgressBar();
+ progressBar.setMaximum(10);
+ progressBar.setValue(0);
+ statusPanel.add(progressBar, java.awt.BorderLayout.SOUTH);
+ nav.enableNext(false);
+ nav.enableBack(false);
+ nav.enableCancel(false);
+ ArrayList locations = wizard.getLocations();
+ //System.out.println("here "+locations.size());
+ // Returned 1
+ String progpath=null;
+ String path=null;
+ String classespath=null;
+ for (int i =0;i<locations.size();i++){
+ path= (String)locations.get(i);
+
+ //InstallWizard.currentPath = path;
+ ideupdater = new IdeUpdater( path, statusLine, progressBar );
+ ideupdater.addInstallListener(this);
+ InstallWizard.setInstallStarted(true);
+ //InstallWizard.setPatchedTypes(false);
+ //InstallWizard.setPatchedJava(false);
+ //InstallWizard.setPatchedRDB(false);
+ ideupdater.start();
+ }
+ }
+
+ // set to "Exit" at end of installation process
+ if (e.getSource() == nav.navCancel) {
+ int answer = JOptionPane.showConfirmDialog(wizard, "Are you sure you want to exit?");
+ if (answer == JOptionPane.YES_OPTION)
+ {
+ wizard.exitForm(null);
+ }
+ else
+ {
+ return;
+ }
+ }
+ }// actionPerformed
+
+
+ public void installationComplete(InstallationEvent ev) {
+ //System.out.println("Detected installation complete");
+ //if( InstUtil.hasNetbeansInstallation() || InstUtil.hasJeditInstallation() ) {
+ //System.out.println("Detected installation complete (IDE(s) detected)");
+ nav.removeCancelListener(this);
+ nav.setCancelListener(nav);
+ nav.navCancel.setText("Finish");
+ nav.enableCancel(true);
+ ideupdater = null;
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel statusPanel;
+ private javax.swing.JLabel statusLine;
+ private InstallWizard wizard;
+ private NavPanel nav;
+ //private XmlUpdater xud;
+ private IdeUpdater ideupdater;
+ // End of variables declaration//GEN-END:variables
+
+}
diff --git a/scripting/workben/installer/IdeUpdater.java b/scripting/workben/installer/IdeUpdater.java
new file mode 100644
index 000000000000..dd7dbb0991a8
--- /dev/null
+++ b/scripting/workben/installer/IdeUpdater.java
@@ -0,0 +1,172 @@
+package installer;
+
+import java.io.*;
+import java.util.*;
+import java.util.jar.*;
+//import org.xml.sax.*;
+//import org.w3c.dom.*;
+//import javax.xml.parsers.*;
+import java.net.URL;
+import java.net.JarURLConnection;
+//import javax.xml.parsers.*;
+import javax.swing.*;
+
+/**
+ * The <code>XmlUpdater</code> pulls a META-INF/converter.xml
+ * file out of a jar file and parses it, providing access to this
+ * information in a <code>Vector</code> of <code>ConverterInfo</code>
+ * objects.
+ *
+ * @author Aidan Butler
+ */
+public class IdeUpdater extends Thread {
+
+ private String classesPath = null;
+ private String jarfilename;
+ private String installPath;
+
+ private JLabel statusLabel;
+
+ private Vector listeners;
+ private Thread internalThread;
+ private boolean threadSuspended;
+ private JProgressBar progressBar;
+
+ private boolean isNetbeansPath = false;
+
+
+ public IdeUpdater(String installPath, JLabel statusLabel, JProgressBar pBar) {
+
+ if (installPath.endsWith(File.separator) == false)
+ installPath += File.separator;
+
+ //File jeditLauncher = new File( installPath + "jedit.jar" );
+ File netbeansLauncher = new File( installPath + "bin" );
+
+ if( netbeansLauncher.isDirectory() ) {
+ isNetbeansPath = true;
+ installPath = installPath +"modules" + File.separator;
+ }
+ /*
+ else if( jeditLauncher.isFile() ){
+ isNetbeansPath = false;
+ installPath = installPath + "jars" + File.separator;
+ }
+ */
+
+ System.out.println( "IdeUpdater installPath is " + installPath + " isNetbeansPath is " + isNetbeansPath );
+ this.installPath = installPath;
+ this.statusLabel = statusLabel;
+ listeners = new Vector();
+ threadSuspended = false;
+ progressBar=pBar;
+ progressBar.setStringPainted(true);
+ }// XmlUpdater
+
+
+ public boolean checkStop()
+ {
+ if (internalThread == Thread.currentThread())
+ return false;
+ return true;
+ }// checkStop
+
+
+ public void checkSuspend()
+ {
+ if (threadSuspended)
+ {
+ synchronized(this)
+ {
+ while (threadSuspended)
+ {
+ try {
+ wait();
+ } catch (InterruptedException eInt) {
+ //...
+ }
+ }
+ }
+ }
+ }// checkSuspend
+
+
+ public void setSuspend()
+ {
+ threadSuspended = true;
+ }// setSuspend
+
+
+ public void setResume()
+ {
+ threadSuspended = false;
+ notify();
+ }// setResume
+
+
+ public void setStop()
+ {
+ internalThread = null;
+ }// setStop
+
+
+ public void run() {
+
+ //InputStream istream;
+ //URL url;
+ //String fileName = null;
+
+ internalThread = Thread.currentThread();
+
+ progressBar.setString("Unzipping Required Files");
+ ZipData zd = new ZipData("SFrameworkInstall.jar");
+
+ // Adding IDE support
+ if( isNetbeansPath ) {
+ if (!zd.extractEntry("ide/office.jar",installPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ }
+ else {
+ if (!zd.extractEntry("ide/idesupport.jar",installPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("ide/OfficeScripting.jar",installPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ }
+
+ //System.out.println("About to call register");
+ //Register.register(installPath+File.separator, statusLabel, progressBar);
+
+ statusLabel.setText("Installation Complete");
+ progressBar.setString("Installation Complete");
+ progressBar.setValue(10);
+ onInstallComplete();
+
+ }// run
+
+
+ public void addInstallListener(InstallListener listener)
+ {
+ listeners.addElement(listener);
+ }// addInstallListener
+
+
+ private void onInstallComplete()
+ {
+ Enumeration e = listeners.elements();
+ while (e.hasMoreElements())
+ {
+ InstallListener listener = (InstallListener)e.nextElement();
+ listener.installationComplete(null);
+ }
+ }// onInstallComplete
+
+}// XmlUpdater class
diff --git a/scripting/workben/installer/IdeVersion.java b/scripting/workben/installer/IdeVersion.java
new file mode 100644
index 000000000000..9d35f5bd623a
--- /dev/null
+++ b/scripting/workben/installer/IdeVersion.java
@@ -0,0 +1,349 @@
+package installer;
+
+/*
+ * Welcome.java
+ *
+ * Created on 04 July 2002, 15:43
+ */
+
+/**
+ *
+ * @author mike
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.table.*;
+import javax.swing.SwingUtilities.*;
+
+public class IdeVersion extends javax.swing.JPanel implements ActionListener, TableModelListener {
+
+ /** Creates new form Welcome */
+ public IdeVersion(InstallWizard wizard) {
+ this.wizard=wizard;
+ setBackground(Color.white);
+ initComponents();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ private void initComponents() {
+ Properties props = null;
+ JPanel versionPanel = new JPanel();
+ setLayout(new BorderLayout());
+
+
+ try {
+ //props = InstUtil.getNetbeansLocation();
+
+ Properties netbeansProps = InstUtil.getNetbeansLocation();
+ //Properties jeditProps = InstUtil.getJeditLocation();
+ Properties ideProps = new Properties();
+ if(netbeansProps!=null )
+ {
+ System.out.println("**** Found netbeans install");
+ for( int n = 0; n < netbeansProps.size(); n++ ) {
+ for( int v = 0; v < InstUtil.versions.length; v++ ) {
+ System.out.println("n: " +n+" v: " +v);
+ String key = InstUtil.versions[v];
+ System.out.println("It got here1");
+ String path = null;
+ if ( (path = netbeansProps.getProperty(key) ) != null ) {
+ //System.out.println( "n="+n+" v="+v + " Netbeans " + " key=" + key + " path=" + path );
+ ideProps.put(key, path);
+ }
+ }
+ }
+ }
+ //System.out.println("*** About to look for jedit install");
+ /*
+ if(jeditProps!=null)
+ {
+ for( int j = 0; j < jeditProps.size(); j++ ) {
+ for( int v = 0; v < InstUtil.versions.length; v++ ) {
+ System.out.println("j: " +j+" v: " +v);
+ String key = InstUtil.versions[v];
+ String path = null;
+ if ((path = jeditProps.getProperty(key)) != null) {
+ //System.out.println( "j="+j+" v="+v + " jEdit " + " key=" + key + " path=" + path );
+ ideProps.put(key, path);
+ }
+ }
+ }
+ }
+ */
+ props = ideProps;
+ }
+ catch (IOException eIO) {
+ System.err.println("Failed to parse .netbeans/ide.log");
+ //JOptionPane.showMessageDialog(this, "There was a problem reading from the NetBeans ide.log file.", "Parse Error", JOptionPane.ERROR_MESSAGE);
+ }
+ catch (Exception e) {
+ System.err.println("Exception thrown in initComponents");
+ }
+
+ tableModel = new MyTableModelIDE (props, InstUtil.versions);
+
+ if (tableModel.getRowCount() == 0)
+ {
+ JOptionPane.showMessageDialog(this, "No compatible IDEs were found.", "Invalid versions", JOptionPane.ERROR_MESSAGE);
+ //wizard.exitForm(null);
+ }
+
+ tableModel.addTableModelListener(this);
+ JTable tableVersions = new JTable(tableModel) {
+ public String getToolTipText(MouseEvent event)
+ {
+ int col = columnAtPoint( event.getPoint() );
+ if (col != 2)
+ return null;
+
+ int row = rowAtPoint( event.getPoint() );
+ Object o = getValueAt(row, col);
+
+ if (o == null)
+ return null;
+
+ if (o.toString().equals(""))
+ return null;
+
+ return o.toString();
+ }
+
+ public Point getToolTipLocation(MouseEvent event)
+ {
+ int col = columnAtPoint( event.getPoint() );
+ if (col != 2)
+ return null;
+
+ int row = rowAtPoint( event.getPoint() );
+ Object o = getValueAt(row,col);
+
+ if (o == null)
+ return null;
+
+ if (o.toString().equals(""))
+ return null;
+
+ Point pt = getCellRect(row, col, true).getLocation();
+ pt.translate(-1,-2);
+ return pt;
+ }
+ };
+
+ JScrollPane scroll = new JScrollPane(tableVersions);
+
+ tableVersions.setPreferredSize(
+ new Dimension(InstallWizard.DEFWIDTH,InstallWizard.DEFHEIGHT));
+
+ tableVersions.setRowSelectionAllowed(false);
+ tableVersions.setColumnSelectionAllowed(false);
+ tableVersions.setCellSelectionEnabled(false);
+
+ initColumnSizes(tableVersions, tableModel);
+ versionPanel.add(scroll);
+
+ JTextArea area = new JTextArea("Please select IDEs below that you wish to add Scripting support to");
+ area.setLineWrap(true);
+ area.setEditable(false);
+ add(area, BorderLayout.NORTH);
+ add(versionPanel, BorderLayout.CENTER);
+ nav = new NavPanel(wizard, true, false, true, InstallWizard.IDEWELCOME, InstallWizard.IDEFINAL);
+ nav.setNextListener(this);
+ add(nav, BorderLayout.SOUTH);
+
+ }// initComponents
+
+
+ public java.awt.Dimension getPreferredSize() {
+ return new java.awt.Dimension(320, 280);
+ }
+
+
+ public void actionPerformed(ActionEvent ev) {
+ wizard.clearLocations();
+ int len = tableModel.data.size();
+ for (int i = 0; i < len; i++) {
+ ArrayList list = (ArrayList)tableModel.data.get(i);
+ if (((Boolean)list.get(0)).booleanValue() == true)
+ wizard.storeLocation((String)list.get(2));
+ }
+
+ //System.out.println(wizard.getLocations());
+ }
+
+
+ public void tableChanged(TableModelEvent e) {
+ if (tableModel.isAnySelected()) {
+ nav.enableNext(true);
+ }
+ else {
+ nav.enableNext(false);
+ }
+ }
+
+ private void initColumnSizes(JTable table, MyTableModelIDE model) {
+ TableColumn column = null;
+ Component comp = null;
+ int headerWidth = 0;
+ int cellWidth = 0;
+ int preferredWidth = 0;
+ int totalWidth = 0;
+ Object[] longValues = model.longValues;
+
+ for (int i = 0; i < 3; i++) {
+ column = table.getColumnModel().getColumn(i);
+
+ try {
+ comp = column.getHeaderRenderer().
+ getTableCellRendererComponent(
+ null, column.getHeaderValue(),
+ false, false, 0, 0);
+ headerWidth = comp.getPreferredSize().width;
+ } catch (NullPointerException e) {
+ // System.err.println("Null pointer exception!");
+ // System.err.println(" getHeaderRenderer returns null in 1.3.");
+ // System.err.println(" The replacement is getDefaultRenderer.");
+ }
+
+ // need to replace spaces in String before getting preferred width
+ if (longValues[i] instanceof String) {
+ longValues[i] = ((String)longValues[i]).replace(' ', '_');
+ }
+
+ System.out.println("longValues: " + longValues[i]);
+ comp = table.getDefaultRenderer(model.getColumnClass(i)).
+ getTableCellRendererComponent(
+ table, longValues[i],
+ false, false, 0, i);
+ cellWidth = comp.getPreferredSize().width;
+
+ preferredWidth = Math.max(headerWidth, cellWidth);
+
+ if (false) {
+ System.out.println("Initializing width of column "
+ + i + ". "
+ + "preferredWidth = " + preferredWidth
+ + "; totalWidth = " + totalWidth
+ + "; leftWidth = " + (InstallWizard.DEFWIDTH - totalWidth));
+ }
+
+ //XXX: Before Swing 1.1 Beta 2, use setMinWidth instead.
+ if (i == 2) {
+ if (preferredWidth > InstallWizard.DEFWIDTH - totalWidth)
+ column.setPreferredWidth(InstallWizard.DEFWIDTH - totalWidth);
+ else
+ column.setPreferredWidth(preferredWidth);
+ }
+ else {
+ column.setMinWidth(preferredWidth);
+ totalWidth += preferredWidth;
+ }
+ }
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JTextField jTextField2;
+ private InstallWizard wizard;
+ private MyTableModelIDE tableModel;
+ private NavPanel nav;
+ // End of variables declaration//GEN-END:variables
+
+ }
+
+class MyTableModelIDE extends AbstractTableModel {
+ ArrayList data;
+ String colNames[] = {"", "IDE Name", "IDE Location"};
+ Object[] longValues = new Object[] {Boolean.TRUE, "Name", "Location"};
+
+ MyTableModelIDE (Properties properties, String [] validVersions) {
+ data = new ArrayList();
+ //System.out.println(properties);
+
+ int len = validVersions.length;
+ for (int i = 0; i < len; i++) {
+ String key = validVersions[i];
+ String path = null;
+
+ if ((path = properties.getProperty(key)) != null) {
+ ArrayList row = new ArrayList();
+ row.add(0, new Boolean(false));
+
+ row.add(1, key);
+ if (key.length() > ((String)longValues[1]).length()) {
+ longValues[1] = key;
+ }
+
+ row.add(2, path);
+ if (path.length() > ((String)longValues[2]).length()) {
+ longValues[2] = path;
+ }
+
+ data.add(row);
+ }
+ }
+ }// MyTableModel
+
+ public int getColumnCount() {
+ return 3;
+ }
+
+ public int getRowCount() {
+ return data.size();
+ }
+
+ public String getColumnName(int col) {
+ return colNames[col];
+ }
+
+ public Object getValueAt(int row, int col) {
+ if (row < 0 || row > getRowCount() ||
+ col < 0 || col > getColumnCount())
+ return null;
+
+ ArrayList aRow = (ArrayList)data.get(row);
+ return aRow.get(col);
+ }
+
+ public Class getColumnClass(int c) {
+ return getValueAt(0, c).getClass();
+ }
+
+ public boolean isCellEditable(int row, int col) {
+ if (col == 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public void setValueAt(Object value, int row, int col) {
+ ArrayList aRow = (ArrayList)data.get(row);
+ aRow.set(col, value);
+ fireTableCellUpdated(row, col);
+ }
+
+ String [] getSelected() {
+ return null;
+ }
+
+ public boolean isAnySelected() {
+ Iterator iter = data.iterator();
+ while (iter.hasNext()) {
+ ArrayList row = (ArrayList)iter.next();
+ if (((Boolean)row.get(0)).booleanValue() == true) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
+
diff --git a/scripting/workben/installer/IdeWelcome.java b/scripting/workben/installer/IdeWelcome.java
new file mode 100644
index 000000000000..93ce8ec5e22a
--- /dev/null
+++ b/scripting/workben/installer/IdeWelcome.java
@@ -0,0 +1,79 @@
+package installer;
+
+/*
+ * Welcome.java
+ *
+ * Created on 04 July 2002, 15:43
+ */
+
+/**
+ *
+ * @author mike
+ */
+import java.awt.event.*;
+import javax.swing.*;
+import java.io.*;
+import java.net.*;
+import java.awt.*;
+
+public class IdeWelcome extends javax.swing.JPanel implements ActionListener {
+
+ /** Creates new form Welcome */
+ public IdeWelcome(InstallWizard wizard) {
+ this.wizard = wizard;
+ setBorder(new javax.swing.border.EtchedBorder(javax.swing.border.EtchedBorder.RAISED));
+ initComponents();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ private void initComponents() {//GEN-BEGIN:initComponents
+ welcomePanel = new javax.swing.JPanel();
+ area = new javax.swing.JTextArea();
+
+ setLayout(new java.awt.BorderLayout());
+
+ welcomePanel.setLayout(new java.awt.BorderLayout());
+ //area.setHorizontalAlignment(javax.swing.JTextField.CENTER);
+ area.setEditable(false);
+ area.setLineWrap(true);
+ area.setText("\n Click Next to include Scripting Framework support for IDEs.");
+ area.append("\n Click Cancel exit the Installation process. \n");
+ if( InstUtil.hasNetbeansInstallation() ) {
+ area.append("\n \tA version of Netbeans has been detected. \n");
+ }
+ //if( InstUtil.hasJeditInstallation() ) {
+ // area.append("\n \tA version of jEdit has been detected.");
+ //}
+
+ welcomePanel.add(area, java.awt.BorderLayout.CENTER);
+ add(welcomePanel, java.awt.BorderLayout.CENTER);
+ NavPanel nav = new NavPanel(wizard, false, true, true, "", InstallWizard.IDEVERSIONS);
+ nav.setNextListener(this);
+ add(nav, java.awt.BorderLayout.SOUTH);
+
+ //Banner br = new Banner();
+ //add(br, java.awt.BorderLayout.WEST);
+
+ }//GEN-END:initComponents
+
+ public java.awt.Dimension getPreferredSize() {
+ return new java.awt.Dimension(InstallWizard.DEFWIDTH, InstallWizard.DEFHEIGHT);
+ }
+
+ public void actionPerformed(ActionEvent ev)
+ {
+ //Perform next actions here...
+ }
+
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel welcomePanel;
+ private javax.swing.JTextArea area;
+ private InstallWizard wizard;
+
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/scripting/workben/installer/InstUtil.java b/scripting/workben/installer/InstUtil.java
new file mode 100644
index 000000000000..5ca03e27a19b
--- /dev/null
+++ b/scripting/workben/installer/InstUtil.java
@@ -0,0 +1,463 @@
+package installer;
+
+import java.net.URLDecoder;
+import java.io.*;
+import java.util.*;
+import java.util.zip.*;
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import java.net.*;
+
+public class InstUtil {
+
+ public static File buildSversionLocation() throws IOException {
+ File theFile = null;
+ StringBuffer str = new StringBuffer();
+ str.append(System.getProperty("user.home"));
+ str.append(File.separator);
+ StringBuffer thePath = new StringBuffer(str.toString());
+
+ String os = System.getProperty("os.name");
+
+ if (os.indexOf("Windows") != -1) {
+ boolean bSVersionInHomeDir = new File(thePath.toString() + "sversion.ini").exists();
+
+ if (!bSVersionInHomeDir) {
+ thePath.append("Application Data");
+ thePath.append(File.separator);
+ }
+ theFile = findVersionFile(new File(thePath.toString()));
+ } else if (os.indexOf("SunOS") != -1) {
+ thePath.append(".sversionrc");
+ theFile = new File(thePath.toString());
+ } else if (os.indexOf("Linux") != -1) {
+ thePath.append(".sversionrc");
+ theFile = new File(thePath.toString());
+ }
+
+ if (theFile == null)
+ {
+ throw new IOException("Could not locate the OpenOffice settings file.\nAre you sure StarOffice is installed on your system?");
+ }
+ if (!theFile.exists())
+ {
+ throw new IOException("Could not locate the OpenOffice settings file.\nAre you sure StarOffice is installed on your system?");
+ }
+ return theFile;
+ }
+
+
+
+ public static boolean hasNetbeansInstallation() {
+ boolean result = false;
+ try
+ {
+ result = checkForSupportedVersion( getNetbeansLocation(), versions );
+
+ if (result == false)
+ System.out.println("No supported version of NetBeans found.");
+ }
+ catch ( IOException ioe )
+ {
+ System.err.println("Exception caught trying to determine netbeans installation: " + ioe );
+ ioe.printStackTrace();
+ result = false;
+ }
+ return result;
+ }
+
+ private static boolean checkForSupportedVersion( Properties installs, String[] supportedVersions )
+ {
+ if ( installs != null )
+ {
+ for ( int index = 0; index < supportedVersions.length; index++ )
+ {
+ String key = supportedVersions[ index ];
+ String path = null;
+ if ( ( path = installs.getProperty(key) ) != null )
+ {
+ // at least one supported version for netbeans present, so return;
+ return true;
+ }
+
+ }
+ }
+ return false;
+ }
+
+
+ public static boolean hasJeditInstallation() {
+ boolean result = false;
+ try
+ {
+ result = checkForSupportedVersion( getJeditLocation(), versions );
+ if ( !result )
+ {
+ System.out.println("No supported version for JEdit found.");
+ }
+ }
+ catch ( IOException ioe )
+ {
+ System.err.println("Exception caught trying to determine jedit installation: " + ioe );
+ ioe.printStackTrace();
+ result = false;
+ }
+ return result;
+ }
+
+
+
+ public static Properties getNetbeansLocation() throws IOException {
+ File theFile = null;
+ Properties results = new Properties();
+
+ StringBuffer str = new StringBuffer();
+ str.append(System.getProperty("user.home"));
+ str.append(File.separator);
+ StringBuffer thePath = new StringBuffer(str.toString());
+
+ String os = System.getProperty("os.name");
+
+ if (os.indexOf("Windows") != -1) {
+ //theFile = findVersionFile(new File(str.toString()));
+ thePath.append(".netbeans");
+ //theFile = new File(thePath.toString());
+ } else if (os.indexOf("SunOS") != -1) {
+ thePath.append(".netbeans");
+ //theFile = new File(thePath.toString());
+ } else if (os.indexOf("Linux") != -1) {
+ thePath.append(".netbeans");
+ //theFile = new File(thePath.toString());
+ }
+
+ if ( thePath.toString().indexOf( ".netbeans" ) == -1 )
+ return null;
+ else if ( new File( thePath.append( File.separator+"3.4"+File.separator ).toString() ).isDirectory() ) {
+
+ System.out.println( "Found NetBeans 3.4 user directory: " + thePath );
+ File netbeansLogFile = new File( thePath.toString() + File.separator + "system" + File.separator + "ide.log" );
+ if( netbeansLogFile.exists() ) {
+ String installPath = getNetbeansInstallation( netbeansLogFile );
+ File f = new File(installPath);
+ results.put("NetBeans 3.4", f.getPath()+File.separator);
+ System.out.println( "NetBeans Installation directory: " + f.getPath());
+ }
+ else {
+ System.out.println( "No NetBeans log file found" );
+ return null;
+ }
+ }
+ else
+ {
+ System.out.println( "No NetBeans user directory found" );
+ return null;
+ }
+
+
+ return results;
+ }
+
+
+
+ public static Properties getJeditLocation() throws IOException {
+
+ /*if( !hasJeditInstallation() ) {
+ System.out.println( "No Jedit found (line195 InstUtil");
+ return null;
+ }*/
+
+ File theFile = null;
+ Properties results = new Properties();
+
+ StringBuffer str = new StringBuffer();
+ str.append(System.getProperty("user.home"));
+ str.append(File.separator);
+ StringBuffer thePath = new StringBuffer(str.toString());
+
+ String os = System.getProperty("os.name");
+ thePath.append(".jedit");
+ //System.out.println( ".jedit path " + thePath );
+
+ File jeditLogFile = new File( thePath.toString() + File.separator + "activity.log" );
+ if( jeditLogFile.exists() ) {
+ String[] jeditDetails = getJeditInstallation( jeditLogFile );
+ System.out.println( "getJeditLocation ) " + jeditDetails[0] );
+ File f = new File(jeditDetails[0]);
+ results.put("jEdit "+jeditDetails[1], jeditDetails[0]);
+ System.out.println( "jeditDetails[0] is " + jeditDetails[0]);
+ }
+ else {
+ System.out.println( "Prompt user for Jedit installation path" );
+ }
+
+
+ return results;
+ }
+
+
+
+
+
+ private static String getNetbeansInstallation( File logFile ) {
+ String installPath = "";
+ try {
+ BufferedReader reader = new BufferedReader(new FileReader(logFile));
+
+ for (String s = reader.readLine(); s != null; s = reader.readLine()) {
+ s.trim();
+ if( s.indexOf( "IDE Install" ) != -1 ) {
+ int pathStart = s.indexOf( "=" ) + 2;
+ //System.out.println( "pathStart " + pathStart );
+ installPath = s.substring( pathStart, s.length() );
+ //System.out.println( "installPath 1" + installPath );
+ int pathEnd = installPath.indexOf( ";");
+ //System.out.println( "pathEnd " + pathEnd );
+ installPath = installPath.substring( 0, pathEnd ) +File.separator;
+ //System.out.println( "pathStart " + pathStart );
+ //int pathEnd = s.indexOf( ";");
+ //System.out.println( "pathEnd " + pathEnd );
+ //System.out.println( "s is " + s + " and " + s.length() + " long" );
+ //installPath = s.substring( pathStart, pathEnd - 1 );
+ installPath.trim();
+ break;
+ }
+ }
+ }
+ catch( IOException ioe ) {
+ System.out.println( "Error reading Netbeans location information" );
+ }
+ //catch( FileNotFoundException fnfe ) {
+ //System.out.println( "NetBeans ide.log FileNotFoundException" );
+ //}
+
+ return installPath;
+ }
+
+
+ private static String[] getJeditInstallation( File logFile ) {
+ String[] jeditDetails = new String[2];
+ try {
+ BufferedReader reader = new BufferedReader(new FileReader(logFile));
+ String installPath = "";
+ String version = "";
+
+ for (String s = reader.readLine(); s != null; s = reader.readLine()) {
+ s.trim();
+ if( s.indexOf( "jEdit home directory is" ) != -1 ) {
+ int pathStart = new String( "[message] jEdit: jEdit home directory is " ).length();
+ //System.out.println( "pathStart " + pathStart );
+ installPath = s.substring( pathStart, s.length() ) +File.separator;
+ System.out.println( "installPath 1" + installPath );
+ //int pathEnd = installPath.indexOf( ";");
+ //System.out.println( "pathEnd " + pathEnd );
+ //installPath = installPath.substring( 0, pathEnd ) +File.separator;
+ //System.out.println( "pathStart " + pathStart );
+ //int pathEnd = s.indexOf( ";");
+ //System.out.println( "pathEnd " + pathEnd );
+ //System.out.println( "s is " + s + " and " + s.length() + " long" );
+ //installPath = s.substring( pathStart, pathEnd - 1 );
+ installPath.trim();
+ //System.out.println( "installPath 2 " + installPath );
+ //break;
+ jeditDetails[0] = installPath;
+ }
+ if( s.indexOf( "jEdit: jEdit version" ) != -1 ) {
+ int versionStart = s.indexOf( "version" ) + 8;
+ System.out.println( "versionStart is: " + versionStart );
+ version = s.substring( versionStart, s.length() );
+ version.trim();
+ System.out.println( "jEdit version is: " + version );
+ jeditDetails[1] = version;
+ }
+ }
+ }
+ catch( IOException ioe ) {
+ System.out.println( "Error reading Jedit location information" );
+ }
+ //catch( FileNotFoundException fnfe ) {
+ //System.out.println( "Jedit activity.log FileNotFoundException" );
+ //}
+
+ return jeditDetails;
+ }
+
+
+
+ public static File findVersionFile(File start)
+ {
+ File versionFile = null;
+
+ File files[] = start.listFiles(new VersionFilter());
+ if (files.length == 0)
+ {
+ File dirs[] = start.listFiles(new DirFilter());
+ for (int i=0; i< dirs.length; i++)
+ {
+ versionFile = findVersionFile(dirs[i]);
+ if (versionFile != null)
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+ versionFile = files[0];
+ }
+
+ return versionFile;
+ }
+
+ public static boolean verifySversionExists(File sversionFile) {
+ if (!sversionFile.exists())
+ return false;
+ return true;
+ }
+
+ public static Properties getOfficeVersions(File sversionFile) throws IOException {
+ BufferedReader reader = new BufferedReader(new FileReader(sversionFile));
+ Vector values;
+ String sectionName = null;
+ Properties results = new Properties();
+
+ for (String s = reader.readLine(); s != null; s = reader.readLine()) {
+ s.trim();
+ //System.out.println(s);
+ if (s.length() == 0)
+ continue;
+ if (s.charAt(0) == '[') {
+ sectionName = s.substring(1, s.length() - 1);
+ //System.out.println(sectionName);
+ continue;
+ }
+ if ((sectionName != null) && sectionName.equalsIgnoreCase("Versions")) {
+ int equals = s.indexOf( "=" );
+ String officeName = s.substring(0, equals );
+
+ String instPath = s.substring(equals + 8, s.length());
+ String [] parts = new String[2];
+ parts[0] = officeName;
+ parts[1] = instPath + File.separator;
+ //System.out.println( "InstUtil officeName " + officeName );
+ //System.out.println( "InstUtil instPath " + instPath );
+
+ //String [] parts = s.split("=");
+ if (parts.length == 2) {
+ //ver.version = parts[0].trim();
+ //File f = new File(parts[1].trim());
+ //results.put(parts[0].trim(), f.getPath());
+ try {
+ URL url = new URL("file://" + parts[1].trim());
+ String opSys =System.getProperty("os.name");
+ if (opSys.indexOf("Windows")!=-1){
+ String windowsPath = URLDecoder.decode( url.getPath() );
+ boolean firstSlash = true;
+ while( windowsPath.indexOf("/") != -1 ) {
+ int forwardSlashPos = windowsPath.indexOf("/");
+ String firstPart = windowsPath.substring( 0, forwardSlashPos );
+ String lastPart = windowsPath.substring( forwardSlashPos + 1, windowsPath.length() );
+ if( firstSlash ) {
+ windowsPath = lastPart;
+ firstSlash = false;
+ }
+ else {
+ windowsPath = firstPart + "\\" + lastPart;
+ }
+ }
+ int lastSlash = windowsPath.lastIndexOf("\\");
+ windowsPath = windowsPath.substring( 0, lastSlash );
+ results.put( parts[0].trim(), windowsPath );
+ }
+ else {
+ //System.err.println( " InstUtil URLDecoder " + URLDecoder.decode(url.getPath()) );
+ results.put(parts[0].trim(), URLDecoder.decode(url.getPath()));
+ }
+ //File f = new File(url);
+
+ //.sversion: OpenOffice.org 643=file:///scriptdev/neil/ScriptFrameOpenoffice1.0.1
+ // parts = Installation name. f.getPath = Installation path
+ //results.put(parts[0].trim(), f.getPath());
+
+ //results.put(parts[0].trim(), URLDecoder.decode(url.getPath()));
+ //results.put( parts[0].trim(), windowsPath );
+
+ }
+ catch (MalformedURLException eSyntax) {
+ //throw new IOException("Error while reading version information");
+ results.put(parts[0].trim(), parts[1].trim());
+ //System.out.println(parts[0].trim() + " : " + parts[1].trim());
+ System.err.println("GotHereException");
+ }
+ }
+ else {
+ System.out.println("not splitting on equals");
+ }
+ }
+ }
+
+ return results;
+ }
+
+ public static String getJavaVersion() {
+ return System.getProperty("java.version");
+ }
+
+ public static boolean isCorrectJavaVersion() {
+ if (System.getProperty("java.version").startsWith("1.4"))
+ return true;
+ return false;
+ }
+
+ public static void main(String args[]) {
+ InstUtil inst = new InstUtil();
+ File f = null;
+ try
+ {
+ f = inst.buildSversionLocation();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ }
+ if (!inst.verifySversionExists(f)) {
+ System.err.println("Problem with sversion.ini");
+ }
+ try {
+ Properties vers = inst.getOfficeVersions(f);
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.err.println(e);
+ }
+ System.out.println(inst.getJavaVersion());
+ if (!inst.isCorrectJavaVersion()) {
+ System.err.println("Not correct Java Version");
+ }
+ }
+
+ public static final String [] versions = {"NetBeans 3.4", "jEdit 4.0.3", "jEdit 4.1pre5" };
+ private static File tmpDir = null;
+}
+
+
+
+class DirFilter implements java.io.FileFilter
+{
+ public boolean accept(File aFile)
+ {
+ return aFile.isDirectory();
+ }
+}
+class VersionFilter implements java.io.FileFilter
+{
+ public boolean accept(File aFile)
+ {
+ if (aFile.getName().compareToIgnoreCase("sversion.ini") == 0)
+ {
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/scripting/workben/installer/InstallListener.java b/scripting/workben/installer/InstallListener.java
new file mode 100644
index 000000000000..eade1ef413c8
--- /dev/null
+++ b/scripting/workben/installer/InstallListener.java
@@ -0,0 +1,6 @@
+package installer;
+
+public interface InstallListener
+{
+ public void installationComplete(InstallationEvent e);
+}
diff --git a/scripting/workben/installer/InstallWizard.java b/scripting/workben/installer/InstallWizard.java
new file mode 100644
index 000000000000..14fae1c5dfcd
--- /dev/null
+++ b/scripting/workben/installer/InstallWizard.java
@@ -0,0 +1,389 @@
+package installer;
+
+/*
+ * InstallWizard.java
+ *
+ * Created on 04 July 2002, 15:09
+ */
+
+/**
+ *
+ * @author mike
+ */
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import java.net.*;
+import java.io.*;
+
+public class InstallWizard extends javax.swing.JFrame implements ActionListener {
+/*
+ private static class ShutdownHook extends Thread {
+ public void run()
+ {
+ if (InstallWizard.isInstallStarted())
+ {
+ // Check for and backup any config.xml files
+ // Check for and backup any StarBasic macro files
+ // Check for and backup ProtocolHandler
+
+ if (!InstallWizard.isPatchedTypes())
+ {
+ File backup = new File(InstUtil.getTmpDir(), "TypeDetection.xml");
+ File destination = new File(InstallWizard.getTypesPath());
+ InstUtil.copy(backup, destination); //Restore typedetection.xml
+ }
+ if (!InstallWizard.isPatchedJava())
+ {
+ File backup = new File(InstUtil.getTmpDir(), "Java.xml");
+ File destination = new File(InstallWizard.getJavaPath());
+ InstUtil.copy(backup, destination); //Restore typedetection.xml
+ }
+ if (!InstallWizard.isPatchedRDB())
+ {
+ File backup = new File(InstUtil.getTmpDir(), "applicat.rdb");
+ File destination = new File(InstallWizard.getJavaPath());
+ //InstUtil.copy(backup, destination); //Restore typedetection.xml
+ }
+
+ System.out.println( "ShutdownHook" );
+ }
+
+ InstUtil.removeTmpDir();
+ }
+ }// class ShutdownHook
+
+ static {
+ Runtime rt=Runtime.getRuntime();
+ rt.addShutdownHook(new ShutdownHook());
+ }
+*/
+ /** Creates new form InstallWizard */
+ public InstallWizard() {
+ super("Office Scripting Framework Installer - Early Developer Release");
+
+ try {
+ System.out.print("All diagnostic output is being redirected to SFrameworkInstall.log\n");
+ System.out.print("Location: "+ System.getProperty( "user.dir" ) +
+ File.separator + "SFrameworkInstall.log\n");
+
+ LogStream log = new LogStream( "SFrameworkInstall.log" );
+ System.setErr(log);
+
+ System.setOut(log);
+ }
+ catch( FileNotFoundException fnfe ) {
+ System.err.println("Office Scripting Framework Installer - Error: ");
+ System.err.println("Unable to create log file for installation.");
+ exitForm(null);
+ }
+
+ //setBackground(Color.WHITE);
+ setBackground(new Color(0,0,0));
+ locations = new ArrayList();
+ //Point center = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
+ Point center = new Point( 400, 400 );
+ int windowWidth=200;
+ int windowHeight=300;
+ setSize(windowWidth,windowHeight);
+ setBounds((center.x-windowWidth/2)-115,(center.y-windowWidth/2)-100, windowWidth,windowHeight);
+ initComponents();
+ setResizable(false);
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ */
+ private void initComponents() {
+ navigation = new javax.swing.JPanel();
+ navBack = new javax.swing.JButton();
+ navNext = new javax.swing.JButton();
+ navCancel = new javax.swing.JButton();
+ screens = new javax.swing.JPanel();
+
+ addWindowListener(new java.awt.event.WindowAdapter() {
+ public void windowClosing(java.awt.event.WindowEvent evt) {
+ exitForm(evt);
+ }
+ });
+
+ navigation.setLayout(new java.awt.GridBagLayout());
+ java.awt.GridBagConstraints gridBagConstraints1;
+
+ navBack.setText("<< Back");
+ gridBagConstraints1 = new java.awt.GridBagConstraints();
+ gridBagConstraints1.insets = new java.awt.Insets(1, 1, 1, 1);
+
+ navNext.setText("Next >>");
+ gridBagConstraints1 = new java.awt.GridBagConstraints();
+ gridBagConstraints1.gridx = 2;
+ gridBagConstraints1.gridy = 0;
+
+ navCancel.setText("Cancel");
+ gridBagConstraints1 = new java.awt.GridBagConstraints();
+ gridBagConstraints1.gridx = 6;
+ gridBagConstraints1.gridy = 0;
+ //navigation.add(navNext, gridBagConstraints1);
+ //navigation.add(navBack, gridBagConstraints1);
+ //navigation.add(navCancel, gridBagConstraints1);
+
+ getContentPane().add(navigation, java.awt.BorderLayout.SOUTH);
+ screens.setLayout(new java.awt.CardLayout());
+ screens.add(WELCOME, new Welcome(this));
+ version = new Version(this);
+ screens.add(VERSIONS, version);
+ _final = new Final(this);
+ screens.add(FINAL, _final);
+
+ //boolean hasIDEInstallation = (InstUtil.hasNetbeansInstallation() || InstUtil.hasJeditInstallation()) ;
+ boolean hasIDEInstallation = ( InstUtil.hasNetbeansInstallation() ) ;
+
+ if( hasIDEInstallation )
+ {
+ idewelcome = new IdeWelcome(this);
+ screens.add(IDEWELCOME, idewelcome);
+ ideversion = new IdeVersion(this);
+ screens.add(IDEVERSIONS, ideversion);
+ idefinal = new IdeFinal(this);
+ screens.add(IDEFINAL, idefinal);
+ }
+ getContentPane().add(screens, java.awt.BorderLayout.CENTER);
+
+ navNext.addActionListener(this);
+ navNext.addActionListener(version);
+ navNext.addActionListener(_final);
+
+ if( hasIDEInstallation )
+ {
+ navNext.addActionListener(ideversion);
+ navNext.addActionListener(idefinal);
+ }
+
+ navCancel.addActionListener(this);
+ navBack.addActionListener(this);
+
+
+ URL url = this.getClass().getResource("sidebar.jpg");
+ JLabel sideBar = new JLabel();
+ sideBar.setIcon(new ImageIcon(url));
+ getContentPane().add (sideBar, java.awt.BorderLayout.WEST);
+ pack();
+ }// initComponents
+
+ /** Exit the Application */
+ public void exitForm(java.awt.event.WindowEvent evt) {
+ System.exit(0);
+ }
+
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getSource() == navNext)
+ {
+ ((CardLayout)screens.getLayout()).next(screens);
+ }
+
+ if (e.getSource() == navCancel)
+ {
+ exitForm(null);
+ }
+
+ if (e.getSource() == navBack)
+ {
+ ((CardLayout)screens.getLayout()).previous(screens);
+ }
+ }// actionPerformed
+
+ public static void storeLocation(String path)
+ {
+ locations.add(path);
+ }
+
+ public static ArrayList getLocations()
+ {
+ return locations;
+ }
+
+ public static void clearLocations()
+ {
+ locations.clear();
+ }
+
+ public void show(String cardName)
+ {
+ ((CardLayout)screens.getLayout()).show(screens, cardName);
+ }
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String args[]) {
+ String officePath = null;
+ String netbeansPath = null;
+ //String jeditPath = null;
+ int i = 0;
+
+ while (i < args.length) {
+ if (args[i].equals("-help")) {
+ printUsage();
+ System.exit(0);
+ }
+ if (args[i].equals("-office"))
+ officePath = args[++i];
+ if (args[i].equals("-netbeans"))
+ netbeansPath = args[++i];
+ if (args[i].equals("-net"))
+ bNetworkInstall = true;
+ if (args[i].equals("-bindings"))
+ bBindingsInstall = true;
+ //if (args[i].equals("-jedit"))
+ // jeditPath = args[++i];
+ i++;
+ }
+
+ //if (officePath == null && netbeansPath == null && jeditPath == null)
+ if (officePath == null && netbeansPath == null)
+ new InstallWizard().show();
+
+ JLabel label = new JLabel();
+ JProgressBar progressbar = new JProgressBar();
+
+ try {
+ System.out.println("Log file is: " +
+ System.getProperty("user.dir") +
+ File.separator + "SFrameworkInstall.log");
+
+ LogStream log = new LogStream( "SFrameworkInstall.log" );
+ System.setErr(log);
+ System.setOut(log);
+ }
+ catch( FileNotFoundException fnfe ) {
+ System.err.println("Error: Unable to create log file: "
+ + fnfe.getMessage());
+ System.exit(-1);
+ }
+
+ if (officePath != null) {
+ XmlUpdater xud = new XmlUpdater(officePath, label, progressbar, bNetworkInstall, bBindingsInstall );
+ xud.run();
+ }
+
+ if (netbeansPath != null) {
+ IdeUpdater ideup = new IdeUpdater(netbeansPath, label, progressbar);
+ ideup.run();
+ }
+
+ //if (jeditPath != null) {
+ // IdeUpdater ideup = new IdeUpdater(jeditPath, label, progressbar);
+ // ideup.run();
+ //}
+ }
+
+ private static void printUsage() {
+ System.err.println("java -jar SFrameworkInstall.jar");
+ System.err.println("\t[-office <path_to_office_installation]");
+ System.err.println("\t[-netbeans <path_to_netbeans_installation]");
+ System.err.println("\t[-net]");
+ System.err.println("\t[-bindings]");
+ System.err.println("\n\n-net indicates that this is the network part of a network install.");
+ System.err.println("-bindings will only install the menu & key bindings in user/config/soffice.cfg.");
+ //System.err.println("\t[-jedit <path_to_jedit_installation]");
+ }
+
+ public static synchronized boolean isPatchedTypes()
+ {
+ return bPatchedTypes;
+ }
+
+ public static synchronized boolean isPatchedJava()
+ {
+ return bPatchedJava;
+ }
+
+ public static synchronized boolean isPatchedRDB()
+ {
+ return bPatchedRDB;
+ }
+
+ public static synchronized boolean isInstallStarted()
+ {
+ return bInstallStarted;
+ }
+
+ public static synchronized void setPatchedTypes(boolean value)
+ {
+ bPatchedTypes = value;
+ }
+
+ public static synchronized void setPatchedJava(boolean value)
+ {
+ bPatchedJava = value;
+ }
+
+ public static synchronized void setPatchedRDB(boolean value)
+ {
+ bPatchedRDB = value;
+ }
+
+ public static synchronized void setInstallStarted(boolean value)
+ {
+ bInstallStarted = value;
+ }
+
+ public static synchronized void setTypesPath(String path)
+ {
+ typesPath = path;
+ }
+
+ public static synchronized void setJavaPath(String path)
+ {
+ javaPath = path;
+ }
+
+ public static synchronized String getTypesPath()
+ {
+ return typesPath;
+ }
+
+ public static synchronized String getJavaPath()
+ {
+ return javaPath;
+ }
+
+ private javax.swing.JPanel navigation;
+ private javax.swing.JButton navBack;
+ private javax.swing.JButton navNext;
+ private javax.swing.JButton navCancel;
+ private javax.swing.JPanel screens;
+
+ private Version version = null;
+ private Final _final = null;
+ private IdeVersion ideversion = null;
+ private IdeFinal idefinal = null;
+ private IdeWelcome idewelcome = null;
+ private static ArrayList locations = null;
+
+ public static String VERSIONS = "VERSIONS";
+ public static String WELCOME = "WELCOME";
+ public static String FINAL = "FINAL";
+ public static String IDEVERSIONS = "IDEVERSIONS";
+ public static String IDEWELCOME = "IDEWELCOME";
+ public static String IDEFINAL = "IDEFINAL";
+
+ public static int DEFWIDTH = 480;
+ public static int DEFHEIGHT = 240;
+
+ private static String typesPath = null;
+ private static String javaPath = null;
+
+ public static boolean bNetworkInstall = false;
+ public static boolean bBindingsInstall = false;
+
+ private static boolean bPatchedTypes = false;
+ private static boolean bPatchedJava = false;
+ private static boolean bPatchedRDB = false;
+ private static boolean bInstallStarted = false;
+
+}// InstallWizard
diff --git a/scripting/workben/installer/InstallationEvent.java b/scripting/workben/installer/InstallationEvent.java
new file mode 100644
index 000000000000..d00dbe45a53e
--- /dev/null
+++ b/scripting/workben/installer/InstallationEvent.java
@@ -0,0 +1,22 @@
+package installer;
+
+public class InstallationEvent
+{
+ private Object source;
+ private String message;
+ InstallationEvent(Object source, String message)
+ {
+ this.source = source;
+ this.message = message;
+ }
+
+ public Object getSource()
+ {
+ return source;
+ }
+
+ public String getMessage()
+ {
+ return message;
+ }
+}
diff --git a/scripting/workben/installer/LogStream.java b/scripting/workben/installer/LogStream.java
new file mode 100644
index 000000000000..073c945579cb
--- /dev/null
+++ b/scripting/workben/installer/LogStream.java
@@ -0,0 +1,54 @@
+package installer;
+import java.io.PrintStream;
+import java.io.FileOutputStream;
+
+import java.util.Date;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+
+
+//import java.io.PrintWriter;
+public class LogStream extends PrintStream
+{
+ static final private DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z: ");
+
+ private String getTimeStamp()
+ {
+ String timeStamp = formatter.format( new Date() );
+ return timeStamp;
+ }
+ public LogStream( String logFileName ) throws java.io.FileNotFoundException
+ {
+ super( new FileOutputStream( logFileName ) );
+ }
+ public void println(String x)
+ {
+ super.println( getTimeStamp() + x );
+ }
+ public static void main(String[] args)
+ {
+ if ( args.length > 0 )
+ {
+ try
+ {
+ LogStream log = new LogStream( args[0] );
+ System.setErr(log);
+ System.setOut(log);
+ System.out.println("Test from logger from out");
+ System.err.println("Test from logger from err");
+ System.out.println("finised test from out");
+ System.err.println("finised test from err");
+ }
+ catch( java.io.FileNotFoundException fe )
+ {
+ System.err.println("Error creating logStream: " + fe );
+ fe.printStackTrace();
+ }
+ }
+ else
+ {
+ System.err.println("specify log file java LogStream [logfile]");
+ System.exit(1);
+ }
+ }
+}
diff --git a/scripting/workben/installer/NavPanel.java b/scripting/workben/installer/NavPanel.java
new file mode 100644
index 000000000000..8c6cecc3042b
--- /dev/null
+++ b/scripting/workben/installer/NavPanel.java
@@ -0,0 +1,113 @@
+package installer;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+public class NavPanel extends JPanel implements ActionListener {
+
+ NavPanel(InstallWizard wizard, boolean bBack, boolean bNext, boolean bCancel, String prev, String next) {
+ setBackground(Color.white);
+ setBorder(new javax.swing.border.EtchedBorder(javax.swing.border.EtchedBorder.LOWERED));
+ this.wizard = wizard;
+ this.next = next;
+ this.prev = prev;
+ navBack = new javax.swing.JButton("<< Back");
+ navNext = new javax.swing.JButton("Next >>");
+ navCancel = new javax.swing.JButton("Cancel");
+ setLayout(new GridBagLayout());
+
+ gridBagConstraints1 = new java.awt.GridBagConstraints();
+ gridBagConstraints1.insets = new java.awt.Insets(1, 1, 1, 1);
+ gridBagConstraints1.anchor = gridBagConstraints1.WEST;
+
+ gridBagConstraints2 = new java.awt.GridBagConstraints();
+ gridBagConstraints2.gridx = 2;
+ gridBagConstraints2.gridy = 0;
+
+ gridBagConstraints3 = new java.awt.GridBagConstraints();
+ gridBagConstraints3.gridx = 6;
+ gridBagConstraints3.gridy = 0;
+
+ navNext.setEnabled(bNext);
+ navBack.setEnabled(bBack);
+ navCancel.setEnabled(bCancel);
+ navNext.addActionListener(this);
+ navBack.addActionListener(this);
+ navCancel.addActionListener(this);
+ add(navBack, gridBagConstraints1);
+ add(navNext, gridBagConstraints2);
+ add(navCancel, gridBagConstraints3);
+ }
+
+ public void enableNext(boolean bEnable) {
+ navNext.setEnabled(bEnable);
+ }
+
+ public void enableBack(boolean bEnable) {
+ navBack.setEnabled(bEnable);
+ }
+
+ public void enableCancel(boolean bEnable) {
+ navCancel.setEnabled(bEnable);
+ }
+
+ public void enableIDE(boolean bEnable) {
+ ideDetected = bEnable;
+ }
+
+ public void actionPerformed(ActionEvent ev) {
+ if ((ev.getSource() == navNext) && (next.length() != 0)) {
+ wizard.show(next);
+ }
+ if ((ev.getSource() == navBack) && (prev.length() != 0)) {
+ wizard.show(prev);
+ }
+ if (ev.getSource() == navCancel) {
+ if( ideDetected ) {
+ wizard.show(InstallWizard.IDEWELCOME);
+ }
+ else {
+ wizard.exitForm(null);
+ }
+ enableIDE(false);
+ }
+ }
+
+ public void setNextListener(ActionListener listener) {
+ navNext.addActionListener(listener);
+ }
+
+ public void setBackListener(ActionListener listener) {
+ navBack.addActionListener(listener);
+ }
+
+ public void setCancelListener(ActionListener listener) {
+ navCancel.addActionListener(listener);
+ }
+
+ public void removeNextListener(ActionListener listener)
+ {
+ navNext.removeActionListener(listener);
+ }
+
+ public void removeBackListener(ActionListener listener)
+ {
+ navBack.removeActionListener(listener);
+ }
+
+ public void removeCancelListener(ActionListener listener)
+ {
+ navCancel.removeActionListener(listener);
+ }
+
+ public JButton navBack;
+ public JButton navNext;
+ public JButton navCancel;
+ private GridBagConstraints gridBagConstraints1;
+ private GridBagConstraints gridBagConstraints2;
+ private GridBagConstraints gridBagConstraints3;
+ private InstallWizard wizard;
+ private String next;
+ private String prev;
+ private boolean ideDetected = false;
+}
diff --git a/scripting/workben/installer/Navigation.java b/scripting/workben/installer/Navigation.java
new file mode 100644
index 000000000000..6cba1980a427
--- /dev/null
+++ b/scripting/workben/installer/Navigation.java
@@ -0,0 +1,58 @@
+package installer;
+
+/*
+ * Navigation.java
+ *
+ * Created on 04 July 2002, 15:10
+ */
+
+/**
+ *
+ * @author mike
+ */
+public class Navigation extends javax.swing.JPanel {
+
+ /** Creates new form Navigation */
+ public Navigation() {
+ initComponents();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ private void initComponents() {//GEN-BEGIN:initComponents
+ navBack = new javax.swing.JButton();
+ navNext = new javax.swing.JButton();
+ navCancel = new javax.swing.JButton();
+
+ setLayout(new java.awt.GridBagLayout());
+ java.awt.GridBagConstraints gridBagConstraints1;
+
+ navBack.setText("<< Back");
+ gridBagConstraints1 = new java.awt.GridBagConstraints();
+ add(navBack, gridBagConstraints1);
+
+ navNext.setText("Next >>");
+ gridBagConstraints1 = new java.awt.GridBagConstraints();
+ gridBagConstraints1.gridx = 2;
+ gridBagConstraints1.gridy = 0;
+ add(navNext, gridBagConstraints1);
+
+ navCancel.setText("Cancel");
+ gridBagConstraints1 = new java.awt.GridBagConstraints();
+ gridBagConstraints1.gridx = 6;
+ gridBagConstraints1.gridy = 0;
+ add(navCancel, gridBagConstraints1);
+
+ }//GEN-END:initComponents
+
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JButton navBack;
+ private javax.swing.JButton navNext;
+ private javax.swing.JButton navCancel;
+ // End of variables declaration//GEN-END:variables
+
+}
diff --git a/scripting/workben/installer/ProtocolHandler.xcu b/scripting/workben/installer/ProtocolHandler.xcu
new file mode 100644
index 000000000000..c4dafd6e678f
--- /dev/null
+++ b/scripting/workben/installer/ProtocolHandler.xcu
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oor:node xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="ProtocolHandler" oor:package="org.openoffice.Office">
+ <node oor:name="HandlerSet">
+ <node oor:name="com.sun.star.comp.ScriptProtocolHandler" oor:op="replace">
+ <prop oor:name="Protocols" oor:type="oor:string-list">
+ <value>script:*</value>
+ </prop>
+ </node>
+ </node>
+</oor:node>
diff --git a/scripting/workben/installer/Register.java b/scripting/workben/installer/Register.java
new file mode 100644
index 000000000000..69557f59fe34
--- /dev/null
+++ b/scripting/workben/installer/Register.java
@@ -0,0 +1,144 @@
+package installer;
+
+import java.lang.String;
+import java.io.*;
+import javax.swing.*;
+public class Register{
+ private static String[] singletonDefParams = { "drafts.com.sun.star.script.framework.theScriptRuntimeForJava=drafts.com.sun.star.script.framework.ScriptRuntimeForJava",
+ "drafts.com.sun.star.script.framework.storage.theScriptStorageManager=drafts.com.sun.star.script.framework.storage.ScriptStorageManager",
+ "drafts.com.sun.star.script.framework.theScriptRuntimeManager=drafts.com.sun.star.script.framework.ScriptRuntimeManager"};
+
+
+ private static String quotedString ( String stringToQuote ) {
+ String doubleQuote = "\"";
+ String result = new String ( doubleQuote + stringToQuote + doubleQuote );
+ return result;
+ }
+ private static boolean regSingletons( String path, String progPath, String opSys, JLabel statusLabel ) {
+ try{
+ boolean goodResult = false;
+ String[] env = new String[1];
+ String regCmd = null;
+ ExecCmd command = new ExecCmd();
+ for ( int i=0; i<singletonDefParams.length; i++){
+ if ( opSys.indexOf( "Windows" ) == -1 ){
+ // Not windows
+ env[0] = "LD_LIBRARY_PATH=" + progPath;
+ command.exec( "chmod a+x " + progPath + "regsingleton", null );
+ regCmd = progPath + "regsingleton " + path + "user" + File.separator + "uno_packages" + File.separator + "cache" + File.separator + "services.rdb " + singletonDefParams[i];
+ goodResult = command.exec( regCmd, env );
+ }
+ else {
+ // Windows
+ regCmd = quotedString( progPath + "regsingleton.exe" ) + " " + quotedString( path + "user" + File.separator + "uno_packages" + File.separator + "cache" + File.separator + "services.rdb" ) + " " + quotedString( singletonDefParams[i] );
+ goodResult = command.exec( regCmd,null );
+ }
+ if ( !goodResult ){
+ System.out.println("Regsingleton cmd failed, cmd: " + regCmd );
+ statusLabel.setText("Regsingleton ScriptRuntimeForJava Failed, please view SFrameworkInstall.log");
+ return false;
+ }
+ }
+ }
+ catch ( Exception e ) {
+ String message = "\nError installing scripting package, please view SFrameworkInstall.log.";
+ System.out.println(message);
+ e.printStackTrace();
+ statusLabel.setText(message);
+ return false;
+ }
+ return true;
+
+
+ }
+ public static boolean register(String path, JLabel statusLabel) {
+ String[] packages = {"ooscriptframe.zip", "bshruntime.zip", "jsruntime.zip"};
+
+ try {
+ String s=null;
+ boolean goodResult = false;
+ String env[] = new String[1];
+ ExecCmd command = new ExecCmd();
+ boolean isWindows =
+ (System.getProperty("os.name").indexOf("Windows") != -1);
+
+ String progpath = path.concat("program" + File.separator);
+
+ statusLabel.setText("Registering Scripting Framework...");
+
+ // pkgchk Scripting Framework Components
+ statusLabel.setText("Registering Scripting Framework Components...");
+ System.out.println("Registering Scripting Framework Components...");
+
+ for (int i = 0; i < packages.length; i++) {
+ String cmd = "";
+
+ if (!isWindows) {
+ env[0]="LD_LIBRARY_PATH=" + progpath;
+
+ goodResult = command.exec("chmod a+x " + progpath + "pkgchk", null );
+
+ if ( goodResult ){
+ cmd = progpath + "pkgchk -s -f " + progpath + packages[i];
+
+ System.err.println(cmd);
+ goodResult = command.exec(cmd, env);
+ }
+ }
+ else {
+ cmd = "\"" + progpath + "pkgchk.exe\" -s -f \"" + progpath +
+ packages[i] + "\"";
+
+ System.err.println(cmd);
+ goodResult =command.exec(cmd,null);
+
+ }
+ if (!goodResult) {
+ System.err.println("\nPkgChk Failed");
+
+ if(!isWindows)
+ System.err.println("Command: " + cmd + "\n" + env[0]);
+ else
+ System.err.println("Command: \"" + cmd + "\"");
+
+ statusLabel.setText(
+ "PkgChk Failed, please view SFrameworkInstall.log");
+
+ return false;
+ }
+ }
+
+ // if ( !regSingletons( path, progpath, opSys, statusLabel ) )
+ // {
+ // return false;
+ // }
+ // updating ProtocolHandler
+ /* statusLabel.setText("Updating ProtocolHandler...");
+ if(!FileUpdater.updateProtocolHandler(path, statusLabel)) {
+ statusLabel.setText("Updating ProtocolHandler failed, please view SFrameworkInstall.log");
+ return false;
+ } */
+
+ // updating StarBasic libraries
+ statusLabel.setText("Updating StarBasic libraries...");
+ if(!FileUpdater.updateScriptXLC(path, statusLabel)) {
+ statusLabel.setText("Updating user/basic/script.xlc failed, please view SFrameworkInstall.log");
+ return false;
+ }
+ if(!FileUpdater.updateDialogXLC(path, statusLabel)) {
+ statusLabel.setText("Updating user/basic/dialog.xlc failed, please view SFrameworkInstall.log");
+ return false;
+ }
+
+ }
+ catch(Exception e){
+ String message = "\nError installing scripting package, please view SFrameworkInstall.log.";
+ System.out.println(message);
+ e.printStackTrace();
+ statusLabel.setText(message);
+ return false;
+ }
+ return true;
+ }// register
+
+}//Register
diff --git a/scripting/workben/installer/Scripting.BeanShell.xcu b/scripting/workben/installer/Scripting.BeanShell.xcu
new file mode 100644
index 000000000000..d763aa8ff7d9
--- /dev/null
+++ b/scripting/workben/installer/Scripting.BeanShell.xcu
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oor:node xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Scripting" oor:package="org.openoffice.Office">
+ <node oor:name="ScriptRuntimes">
+ <node oor:name="BeanShell" oor:op="replace">
+ <prop oor:name="SupportedFileExtensions">
+ <value xml:lang="x-no-translate">bsh</value>
+ <value xml:lang="en-US">bsh</value>
+ </prop>
+ </node>
+ </node>
+</oor:node>
diff --git a/scripting/workben/installer/Scripting.JavaScript.xcu b/scripting/workben/installer/Scripting.JavaScript.xcu
new file mode 100755
index 000000000000..562189acc93d
--- /dev/null
+++ b/scripting/workben/installer/Scripting.JavaScript.xcu
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oor:node xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Scripting" oor:package="org.openoffice.Office">
+ <node oor:name="ScriptRuntimes">
+ <node oor:name="JavaScript" oor:op="replace">
+ <prop oor:name="SupportedFileExtensions">
+ <value xml:lang="x-no-translate">js</value>
+ <value xml:lang="en-US">js</value>
+ </prop>
+ </node>
+ </node>
+</oor:node>
diff --git a/scripting/workben/installer/Scripting.xcs b/scripting/workben/installer/Scripting.xcs
new file mode 100644
index 000000000000..efac10769915
--- /dev/null
+++ b/scripting/workben/installer/Scripting.xcs
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--***********************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************ -->
+<!DOCTYPE oor:component-schema SYSTEM "../../../../component-schema.dtd">
+<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="Scripting" oor:package="org.openoffice.Office" xml:lang="en-US">
+ <info>
+ <author>DF</author>
+ <desc xml:lang="x-no-translate"></desc>
+ <desc xml:lang="en-US">Contains the various settings needed by the Scripting Framework and its runtimes.</desc>
+ </info>
+ <templates>
+ <group oor:name="RuntimeNode">
+ <info>
+ <desc xml:lang="x-no-translate"></desc>
+ <desc xml:lang="en-US">Specifies the runtimes available to the Scriptying Framework.</desc>
+ </info>
+ <prop oor:name="SupportedFileExtensions" oor:type="oor:string-list">
+ <info>
+ <desc xml:lang="x-no-translate"></desc>
+ <desc xml:lang="en-US">Lists the file extensions that are recognized by this runtime.</desc>
+ </info>
+ </prop>
+ </group>
+ </templates>
+ <component>
+ <set oor:name="ScriptRuntimes" oor:node-type="RuntimeNode">
+ <info>
+ <desc xml:lang="x-no-translate"></desc>
+ <desc xml:lang="en-US">Lists the registered Scripting Framework runtimes.</desc>
+ </info>
+ </set>
+ </component>
+</oor:component-schema>
diff --git a/scripting/workben/installer/Version.java b/scripting/workben/installer/Version.java
new file mode 100644
index 000000000000..56e78024769e
--- /dev/null
+++ b/scripting/workben/installer/Version.java
@@ -0,0 +1,339 @@
+package installer;
+
+/*
+ * Welcome.java
+ *
+ * Created on 04 July 2002, 15:43
+ */
+
+/**
+ *
+ * @author mike
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.table.*;
+import javax.swing.SwingUtilities.*;
+
+public class Version extends javax.swing.JPanel implements ActionListener, TableModelListener {
+
+ /** Creates new form Welcome */
+ public Version(InstallWizard wizard) {
+ this.wizard=wizard;
+ setBackground(Color.white);
+ initComponents();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ private void initComponents() {
+ Properties props = null;
+ JPanel versionPanel = new JPanel();
+ setLayout(new BorderLayout());
+
+ System.out.println("Initialising versions");
+
+ File fileVersions = null;
+ try
+ {
+ fileVersions = InstUtil.buildSversionLocation();
+ }
+ catch(IOException eFnF)
+ {
+ System.err.println("Cannot find sversion.ini/.sversionrc");
+ JOptionPane.showMessageDialog(this, eFnF.getMessage(), "File not Found", JOptionPane.ERROR_MESSAGE);
+ wizard.exitForm(null);
+ }
+
+ try {
+ props = InstUtil.getOfficeVersions(fileVersions);
+ }
+ catch (IOException eIO) {
+ //Message about no installed versions found
+ System.err.println("Failed to parse SVERSION");
+ JOptionPane.showMessageDialog(this, "There was a problem reading from the Office settings file.", "Parse Error", JOptionPane.ERROR_MESSAGE);
+ wizard.exitForm(null);
+ }
+
+ tableModel = new MyTableModel(props, versions);
+ if (tableModel.getRowCount() == 0)
+ {
+ JOptionPane.showMessageDialog(this, "No compatible versions of Office were found.", "Invalid versions", JOptionPane.ERROR_MESSAGE);
+ wizard.exitForm(null);
+ }
+
+ tableModel.addTableModelListener(this);
+ JTable tableVersions = new JTable(tableModel) {
+ public String getToolTipText(MouseEvent event)
+ {
+ int col = columnAtPoint( event.getPoint() );
+ if (col != 2)
+ return null;
+
+ int row = rowAtPoint( event.getPoint() );
+ Object o = getValueAt(row, col);
+
+ if (o == null)
+ return null;
+
+ if (o.toString().equals(""))
+ return null;
+
+ return o.toString();
+ }
+
+ public Point getToolTipLocation(MouseEvent event)
+ {
+ int col = columnAtPoint( event.getPoint() );
+ if (col != 2)
+ return null;
+
+ int row = rowAtPoint( event.getPoint() );
+ Object o = getValueAt(row,col);
+
+ if (o == null)
+ return null;
+
+ if (o.toString().equals(""))
+ return null;
+
+ Point pt = getCellRect(row, col, true).getLocation();
+ pt.translate(-1,-2);
+ return pt;
+ }
+ };
+
+ JScrollPane scroll = new JScrollPane(tableVersions);
+
+ tableVersions.setPreferredSize(
+ new Dimension(InstallWizard.DEFWIDTH,InstallWizard.DEFHEIGHT));
+
+ tableVersions.setRowSelectionAllowed(false);
+ tableVersions.setColumnSelectionAllowed(false);
+ tableVersions.setCellSelectionEnabled(false);
+
+ initColumnSizes(tableVersions, tableModel);
+ versionPanel.add(scroll);
+
+ JTextArea area = new JTextArea("Please select the Office version you wish to Update");
+ area.setLineWrap(true);
+ area.setEditable(false);
+ add(area, BorderLayout.NORTH);
+ add(versionPanel, BorderLayout.CENTER);
+ //nav = new NavPanel(wizard, true, false, true, InstallWizard.WELCOME, InstallWizard.FINAL);
+ nav = new NavPanel(wizard, true, false, true, InstallWizard.WELCOME, InstallWizard.FINAL);
+ nav.setNextListener(this);
+ add(nav, BorderLayout.SOUTH);
+
+ }// initComponents
+
+ private void initColumnSizes(JTable table, MyTableModel model) {
+ TableColumn column = null;
+ Component comp = null;
+ int headerWidth = 0;
+ int cellWidth = 0;
+ int preferredWidth = 0;
+ int totalWidth = 0;
+ Object[] longValues = model.longValues;
+
+ for (int i = 0; i < 3; i++) {
+ column = table.getColumnModel().getColumn(i);
+
+ try {
+ comp = column.getHeaderRenderer().
+ getTableCellRendererComponent(
+ null, column.getHeaderValue(),
+ false, false, 0, 0);
+ headerWidth = comp.getPreferredSize().width;
+ } catch (NullPointerException e) {
+ // System.err.println("Null pointer exception!");
+ // System.err.println(" getHeaderRenderer returns null in 1.3.");
+ // System.err.println(" The replacement is getDefaultRenderer.");
+ }
+
+ // need to replace spaces in String before getting preferred width
+ if (longValues[i] instanceof String) {
+ longValues[i] = ((String)longValues[i]).replace(' ', '_');
+ }
+
+ System.out.println("longValues: " + longValues[i]);
+ comp = table.getDefaultRenderer(model.getColumnClass(i)).
+ getTableCellRendererComponent(
+ table, longValues[i],
+ false, false, 0, i);
+ cellWidth = comp.getPreferredSize().width;
+
+ preferredWidth = Math.max(headerWidth, cellWidth);
+
+ if (false) {
+ System.out.println("Initializing width of column "
+ + i + ". "
+ + "preferredWidth = " + preferredWidth
+ + "; totalWidth = " + totalWidth
+ + "; leftWidth = " + (InstallWizard.DEFWIDTH - totalWidth));
+ }
+
+ //XXX: Before Swing 1.1 Beta 2, use setMinWidth instead.
+ if (i == 2) {
+ if (preferredWidth > InstallWizard.DEFWIDTH - totalWidth)
+ column.setPreferredWidth(InstallWizard.DEFWIDTH - totalWidth);
+ else
+ column.setPreferredWidth(preferredWidth);
+ }
+ else {
+ column.setMinWidth(preferredWidth);
+ totalWidth += preferredWidth;
+ }
+ }
+ }
+
+ public java.awt.Dimension getPreferredSize() {
+ return new java.awt.Dimension(320, 280);
+ }
+
+
+ public void actionPerformed(ActionEvent ev) {
+ wizard.clearLocations();
+ int len = tableModel.data.size();
+ for (int i = 0; i < len; i++) {
+ ArrayList list = (ArrayList)tableModel.data.get(i);
+ if (((Boolean)list.get(0)).booleanValue() == true)
+ wizard.storeLocation((String)list.get(2));
+ }
+
+ //System.out.println(wizard.getLocations());
+ }
+
+
+ public void tableChanged(TableModelEvent e) {
+ if (tableModel.isAnySelected()) {
+ nav.enableNext(true);
+ }
+ else {
+ nav.enableNext(false);
+ }
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JTextField jTextField2;
+ private InstallWizard wizard;
+ private MyTableModel tableModel;
+ private NavPanel nav;
+ //private static final String [] versions = {"StarOffice 6.0", "OpenOffice.org 1.0","OpenOffice.org 1.0.1","OpenOffice.org 642","OpenOffice.org 643","StarOffice 6.1"};
+ //private static final String [] versions = {"OpenOffice.org 643"};
+ //private static final String [] versions = {"OpenOffice.org 643", "StarOffice 6.1"};
+ private static final String [] versions = {"StarOffice 6.1", "OpenOffice.org 1.1Beta", "OpenOffice.org 644", "OpenOffice.org 1.1"};
+ // End of variables declaration//GEN-END:variables
+
+}
+
+class MyTableModel extends AbstractTableModel {
+ ArrayList data;
+ String colNames[] = {"", "Name", "Location"};
+ Object[] longValues = new Object[] {Boolean.TRUE, "Name", "Location"};
+
+ MyTableModel (Properties properties, String [] validVersions) {
+ data = new ArrayList();
+ boolean isWindows =
+ (System.getProperty("os.name").indexOf("Windows") != -1);
+ int len = validVersions.length;
+ for (Enumeration e = properties.propertyNames(); e.hasMoreElements() ;) {
+ String key = (String)e.nextElement();
+ String path = null;
+
+ if ( !( key.startsWith("#") ) &&
+ ( path = properties.getProperty(key)) != null) {
+ String pkgChkPath = path + File.separator + "program" + File.separator;
+ if ( isWindows )
+ {
+ pkgChkPath += "pkgchk.exe";
+ }
+ else
+ {
+ pkgChkPath += "pkgchk";
+ }
+ File pkgChk = new File( pkgChkPath );
+ if ( pkgChk.exists() )
+ {
+ ArrayList row = new ArrayList();
+ row.add(0, new Boolean(false));
+
+ row.add(1, key);
+ if (key.length() > ((String)longValues[1]).length()) {
+ longValues[1] = key;
+ }
+
+ row.add(2, path);
+ if (path.length() > ((String)longValues[2]).length()) {
+ longValues[2] = path;
+ }
+
+ data.add(row);
+ }
+ }
+ }
+ }// MyTableModel
+
+ public int getColumnCount() {
+ return 3;
+ }
+
+ public int getRowCount() {
+ return data.size();
+ }
+
+ public String getColumnName(int col) {
+ return colNames[col];
+ }
+
+ public Object getValueAt(int row, int col) {
+ if (row < 0 || row > getRowCount() ||
+ col < 0 || col > getColumnCount())
+ return null;
+
+ ArrayList aRow = (ArrayList)data.get(row);
+ return aRow.get(col);
+ }
+
+ public Class getColumnClass(int c) {
+ return getValueAt(0, c).getClass();
+ }
+
+ public boolean isCellEditable(int row, int col) {
+ if (col == 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public void setValueAt(Object value, int row, int col) {
+ ArrayList aRow = (ArrayList)data.get(row);
+ aRow.set(col, value);
+ fireTableCellUpdated(row, col);
+ }
+
+ String [] getSelected() {
+ return null;
+ }
+
+ public boolean isAnySelected() {
+ Iterator iter = data.iterator();
+ while (iter.hasNext()) {
+ ArrayList row = (ArrayList)iter.next();
+ if (((Boolean)row.get(0)).booleanValue() == true) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/scripting/workben/installer/Welcome.java b/scripting/workben/installer/Welcome.java
new file mode 100644
index 000000000000..e73cdca87728
--- /dev/null
+++ b/scripting/workben/installer/Welcome.java
@@ -0,0 +1,156 @@
+package installer;
+
+/*
+ * Welcome.java
+ *
+ * Created on 04 July 2002, 15:43
+ */
+
+/**
+ *
+ * @author mike
+ */
+import java.awt.event.*;
+import javax.swing.*;
+import java.io.*;
+import java.net.*;
+import java.util.Properties;
+
+public class Welcome extends javax.swing.JPanel implements ActionListener {
+
+ /** Creates new form Welcome */
+ public Welcome(InstallWizard wizard) {
+ this.wizard = wizard;
+ setBorder(new javax.swing.border.EtchedBorder(javax.swing.border.EtchedBorder.RAISED));
+ initComponents();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ private void initComponents() {//GEN-BEGIN:initComponents
+ welcomePanel = new javax.swing.JPanel();
+ area = new javax.swing.JTextArea();
+ nextButtonEnable = true;
+
+ setLayout(new java.awt.BorderLayout());
+
+ welcomePanel.setLayout(new java.awt.BorderLayout());
+ area.setEditable(false);
+ area.setLineWrap(true);
+
+ String message = "\n\tOffice Scripting Framework Version 0.3" +
+ "\n\n\n\tPlease ensure that you have exited from Office";
+
+ /* String userDir = (String) System.getProperty( "user.dir" );
+ boolean isValid = validateCurrentUserDir(userDir);
+ if( !isValid ) {
+ nextButtonEnable = false;
+ message = "Please run Installer from the program directory in a valid Office installation";
+ setUpWelcomePanel(message);
+ return;
+ }
+
+ int programPosition = userDir.lastIndexOf("program");
+ String offInstallPth = null;
+ offInstallPth = userDir.substring( 0, programPosition );
+
+ wizard.storeLocation(offInstallPth); */
+ setUpWelcomePanel(message);
+
+ }//GEN-END:initComponents
+
+ private void setUpWelcomePanel(String message){
+ area.setText( message );
+ welcomePanel.add(area, java.awt.BorderLayout.CENTER);
+ add(welcomePanel, java.awt.BorderLayout.CENTER);
+ NavPanel nav = new NavPanel(wizard, false, nextButtonEnable, true, "", InstallWizard.VERSIONS);
+ nav.setNextListener(this);
+ add(nav, java.awt.BorderLayout.SOUTH);
+
+ //Banner br = new Banner();
+ //add(br, java.awt.BorderLayout.WEST);
+ }
+
+
+ private boolean validateCurrentUserDir(String userDir){
+
+
+
+ Properties props = null;
+
+ File fileVersions = null;
+ try
+ {
+ fileVersions = InstUtil.buildSversionLocation();
+ }
+ catch(IOException eFnF)
+ {
+ System.err.println("Cannot find sversion.ini/.sversionrc");
+ JOptionPane.showMessageDialog(this, eFnF.getMessage(), "File not Found", JOptionPane.ERROR_MESSAGE);
+ wizard.exitForm(null);
+ }
+
+ try {
+ props = InstUtil.getOfficeVersions(fileVersions);
+ }
+ catch (IOException eIO) {
+ //Message about no installed versions found
+ System.err.println("Failed to parse SVERSION");
+ JOptionPane.showMessageDialog(this, "There was a problem reading from the Office settings file.", "Parse Error", JOptionPane.ERROR_MESSAGE);
+ wizard.exitForm(null);
+ }
+
+
+ boolean versionMatch = false;
+
+ for( int i = 0; i < versions.length; i++ ) {
+ String key = versions[i];
+ String progPath = ( String )props.getProperty( key );
+ if ( progPath != null ){
+ progPath = progPath + File.separator + "program";
+
+ File tmpFile = new File(progPath + File.separator + "oostubversion.txt");
+ try{
+ tmpFile.createNewFile();
+
+ if( new File(userDir + File.separator + "oostubversion.txt").exists())
+ {
+ versionMatch = true;
+ break;
+ }
+ }
+ catch( IOException e)
+ {
+ // Fail silently
+ }
+ tmpFile.delete();
+ }
+ }
+ return versionMatch;
+ }
+
+
+
+ public java.awt.Dimension getPreferredSize() {
+ return new java.awt.Dimension(InstallWizard.DEFWIDTH, InstallWizard.DEFHEIGHT);
+ }
+
+ public void actionPerformed(ActionEvent ev)
+ {
+ //Perform next actions here...
+ }
+
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel welcomePanel;
+ private javax.swing.JTextArea area;
+ private InstallWizard wizard;
+ //private static final String [] versions = {"OpenOffice.org 643", "StarOffice 6.1"};
+ private static final String [] versions = { "StarOffice 6.1" };
+ private boolean nextButtonEnable = true;
+
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/scripting/workben/installer/XmlUpdater.java b/scripting/workben/installer/XmlUpdater.java
new file mode 100644
index 000000000000..a0b79c2ecbb8
--- /dev/null
+++ b/scripting/workben/installer/XmlUpdater.java
@@ -0,0 +1,427 @@
+package installer;
+
+import java.io.*;
+import java.util.*;
+import java.util.jar.*;
+import java.net.URL;
+import java.net.JarURLConnection;
+import javax.swing.*;
+
+/**
+ *
+ *
+ * @author Aidan Butler
+ */
+public class XmlUpdater extends Thread {
+
+ private String classesPath = null;
+ private String jarfilename;
+ private String installPath;
+ private boolean netInstall;
+ private boolean bindingsInstall;
+
+ private JLabel statusLabel;
+
+ private Vector listeners;
+ private Thread internalThread;
+ private boolean threadSuspended;
+ private JProgressBar progressBar;
+
+ private final String[] bakFiles =
+ {
+ "writermenubar.xml",
+ "writerkeybinding.xml",
+ "calcmenubar.xml",
+ "calckeybinding.xml",
+ "impressmenubar.xml",
+ "impresskeybinding.xml",
+ "drawmenubar.xml",
+ "drawkeybinding.xml",
+ "eventbindings.xml",
+ "META-INF" + File.separator + "manifest.xml"
+ };
+
+ private final String[] dirs =
+ {
+ "java" + File.separator + "Highlight",
+ "java" + File.separator + "MemoryUsage",
+ "java" + File.separator + "ScriptFrmwrkHelper",
+ "java" + File.separator + "debugger",
+ "java" + File.separator + "debugger" + File.separator + "rhino",
+ "beanshell" + File.separator + "InteractiveBeanShell",
+ "beanshell" + File.separator + "Highlight",
+ "beanshell" + File.separator + "MemoryUsage",
+ "javascript" + File.separator + "ExportSheetsToHTML"
+ };
+
+ private final String[] names =
+ {
+ "java/Highlight/HighlightUtil.java",
+ "java/Highlight/HighlightText.java",
+ "java/Highlight/Highlight.jar",
+ "java/Highlight/parcel-descriptor.xml",
+ "java/MemoryUsage/MemoryUsage.java",
+ "java/MemoryUsage/MemoryUsage.class",
+ "java/MemoryUsage/parcel-descriptor.xml",
+ "java/MemoryUsage/ExampleSpreadSheet.sxc",
+ "java/ScriptFrmwrkHelper/parcel-descriptor.xml",
+ "java/ScriptFrmwrkHelper/ScriptFrmwrkHelper.java",
+ "java/ScriptFrmwrkHelper/ScriptFrmwrkHelper.class",
+ "java/ScriptFrmwrkHelper/ScriptFrmwrkHelper.jar",
+ "java/debugger/debugger.jar",
+ "java/debugger/OOBeanShellDebugger.java",
+ "java/debugger/OOScriptDebugger.java",
+ "java/debugger/DebugRunner.java",
+ "java/debugger/OORhinoDebugger.java",
+ "java/debugger/parcel-descriptor.xml",
+ "java/debugger/rhino/Main.java",
+ "beanshell/InteractiveBeanShell/parcel-descriptor.xml",
+ "beanshell/InteractiveBeanShell/interactive.bsh",
+ "beanshell/Highlight/parcel-descriptor.xml",
+ "beanshell/Highlight/highlighter.bsh",
+ "beanshell/MemoryUsage/parcel-descriptor.xml",
+ "beanshell/MemoryUsage/memusage.bsh",
+ "javascript/ExportSheetsToHTML/parcel-descriptor.xml",
+ "javascript/ExportSheetsToHTML/exportsheetstohtml.js"
+ };
+
+
+ public XmlUpdater(String installPath, JLabel statusLabel,JProgressBar pBar, boolean netInstall, boolean bindingsInstall) {
+ this.installPath = installPath;
+ this.statusLabel = statusLabel;
+ this.netInstall = netInstall;
+ this.bindingsInstall = bindingsInstall;
+ listeners = new Vector();
+ threadSuspended = false;
+ progressBar=pBar;
+ progressBar.setStringPainted(true);
+ }// XmlUpdater
+
+
+ public boolean checkStop()
+ {
+ if (internalThread == Thread.currentThread())
+ return false;
+ return true;
+ }// checkStop
+
+
+ public void checkSuspend()
+ {
+ if (threadSuspended) {
+ synchronized(this) {
+ while (threadSuspended) {
+ try {
+ wait();
+ } catch (InterruptedException eInt) {
+ //...
+ }
+ }
+ }
+ }
+ }// checkSuspend
+
+
+ public void setSuspend()
+ {
+ threadSuspended = true;
+ }// setSuspend
+
+
+ public void setResume()
+ {
+ threadSuspended = false;
+ notify();
+ }// setResume
+
+
+ public void setStop()
+ {
+ internalThread = null;
+ }// setStop
+
+
+ public void run() {
+
+ InputStream istream;
+ //InputSource isource;
+ //DocumentBuilderFactory builderFactory;
+ //DocumentBuilder builder = null;
+ URL url;
+ String fileName = null;
+
+ internalThread = Thread.currentThread();
+
+ //System.out.println("\n\n\n\nFileName: "+installPath);
+ classesPath= installPath.concat(File.separator+"program"+File.separator+"classes"+File.separator);
+ String opSys =System.getProperty("os.name");
+ //System.out.println("\n System "+opSys);
+
+ String progpath=installPath;
+ progpath= progpath.concat(File.separator+"program"+File.separator);
+ //System.out.println("Office progpath" + progpath );
+ //System.out.println("\nModifying Installation "+installPath);
+
+ String starBasicPath=installPath;
+ starBasicPath= starBasicPath.concat(File.separator+"share"+File.separator+"basic"+File.separator+"ScriptBindingLibrary"+File.separator);
+ //System.out.println( "Office StarBasic path: " + starBasicPath );
+
+ String regSchemaOfficePath=installPath;
+ regSchemaOfficePath= regSchemaOfficePath.concat(File.separator+"share"+File.separator+"registry"+File.separator+"schema"+File.separator+"org"+File.separator+"openoffice"+File.separator+"Office"+File.separator);
+ //System.out.println( "Office schema path: " + regSchemaOfficePath );
+
+ // Get the NetBeans installation
+ //String netbeansPath=
+
+ progressBar.setString("Unzipping Required Files");
+ ZipData zd = new ZipData("SFrameworkInstall.jar");
+
+
+ if( (!netInstall) || bindingsInstall) {
+ String configPath=installPath;
+ configPath= configPath.concat(File.separator+"user"+File.separator+"config"+File.separator+"soffice.cfg"+File.separator);
+ //System.out.println( "Office configuration path: " + configPath );
+ String manifestPath=configPath + "META-INF" + File.separator;
+
+ //Adding <Office>/user/config/soffice.cfg/
+ File configDir = new File( configPath );
+ if( !configDir.isDirectory() ) {
+ if( !configDir.mkdir() ) {
+ System.out.println( "creating " + configDir + "directory failed");
+ }
+ else {
+ System.out.println( configDir + "directory created");
+ }
+ }
+ else
+ System.out.println( "soffice.cfg exists" );
+
+ File manifestDir = new File( manifestPath );
+ if( !manifestDir.isDirectory() ) {
+ if( !manifestDir.mkdir() ) {
+ System.out.println( "creating " + manifestPath + "directory failed");
+ }
+ else {
+ System.out.println( manifestPath + " directory created");
+ }
+ }
+ else
+ System.out.println( manifestPath + " exists" );
+
+ // Backup the confguration files in
+ // <office>/user/config/soffice.cfg/
+ // If they already exist.
+
+ for( int i=0; i < bakFiles.length; i++ )
+ {
+ String pathNameBak = configPath + bakFiles[i];
+ File origFile = new File( pathNameBak );
+ if( origFile.exists() )
+ {
+ System.out.println( "Attempting to backup " + pathNameBak + " to " + pathNameBak + ".bak" );
+ if(! origFile.renameTo( new File( pathNameBak + ".bak" ) ) )
+ {
+ System.out.println( "Failed to backup " + pathNameBak + " to " + pathNameBak + ".bak" );
+ }
+ }
+ }
+
+ // Adding Office configuration files
+ if (!zd.extractEntry("bindingdialog/writermenubar.xml",configPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/writerkeybinding.xml",configPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/calcmenubar.xml",configPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/calckeybinding.xml",configPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/impressmenubar.xml",configPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/impresskeybinding.xml",configPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/drawmenubar.xml",configPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/drawkeybinding.xml",configPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/eventbindings.xml",configPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/manifest.xml",manifestPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ }
+
+ if(!bindingsInstall) {
+ // Adding new directories to Office
+ // Adding <Office>/user/basic/ScriptBindingLibrary/
+ File scriptBindingLib = new File( starBasicPath );
+ if( !scriptBindingLib.isDirectory() ) {
+ if( !scriptBindingLib.mkdir() ) {
+ System.out.println( "ScriptBindingLibrary failed");
+ }
+ else {
+ System.out.println( "ScriptBindingLibrary directory created");
+ }
+ }
+ else
+ System.out.println( "ScriptBindingLibrary exists" );
+
+ // Adding Scripting Framework and tools
+ if (!zd.extractEntry("sframework/ooscriptframe.zip",progpath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+
+ if (!zd.extractEntry("sframework/bshruntime.zip",progpath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+
+ if (!zd.extractEntry("sframework/jsruntime.zip",progpath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+
+ if (!zd.extractEntry("schema/Scripting.xcs",regSchemaOfficePath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+
+ //--------------------------------
+
+ progressBar.setString("Registering Scripting Framework");
+ progressBar.setValue(3);
+ if(!Register.register(installPath+File.separator, statusLabel) ) {
+ onInstallComplete();
+ return;
+ }
+ progressBar.setValue(5);
+
+ String path = installPath + File.separator +
+ "share" + File.separator + "Scripts" + File.separator;
+
+ for (int i = 0; i < dirs.length; i++) {
+ File dir = new File(path + dirs[i]);
+
+ if (!dir.exists()) {
+ if (!dir.mkdirs()) {
+ System.err.println("Error making dir: " +
+ dir.getAbsolutePath());
+ onInstallComplete();
+ return;
+ }
+ }
+ }
+
+ for (int i = 0; i < names.length; i++) {
+ String source = "/examples/" + names[i];
+ String dest = path + names[i].replace('/', File.separatorChar);
+
+ if (!zd.extractEntry(source, dest, statusLabel)) {
+ onInstallComplete();
+ return;
+ }
+ }
+
+
+ // Adding binding dialog
+ if (!zd.extractEntry("bindingdialog/ScriptBinding.xba",starBasicPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/MenuBinding.xdl",starBasicPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/KeyBinding.xdl",starBasicPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/EventsBinding.xdl",starBasicPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/HelpBinding.xdl",starBasicPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/EditDebug.xdl",starBasicPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/dialog.xlb",starBasicPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ if (!zd.extractEntry("bindingdialog/script.xlb",starBasicPath, statusLabel))
+ {
+ onInstallComplete();
+ return;
+ }
+ }
+
+
+ statusLabel.setText("Installation Complete");
+ progressBar.setString("Installation Complete");
+ progressBar.setValue(10);
+ onInstallComplete();
+
+ }// run
+
+
+ public void addInstallListener(InstallListener listener)
+ {
+ listeners.addElement(listener);
+ }// addInstallListener
+
+
+ private void onInstallComplete()
+ {
+ Enumeration e = listeners.elements();
+ while (e.hasMoreElements())
+ {
+ InstallListener listener = (InstallListener)e.nextElement();
+ listener.installationComplete(null);
+ }
+ }// onInstallComplete
+
+}// XmlUpdater class
diff --git a/scripting/workben/installer/ZipData.java b/scripting/workben/installer/ZipData.java
new file mode 100644
index 000000000000..301d2ef58b64
--- /dev/null
+++ b/scripting/workben/installer/ZipData.java
@@ -0,0 +1,103 @@
+package installer;
+
+import java.io.*;
+import java.util.*;
+import java.util.zip.*;
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+
+public class ZipData
+{
+ public ZipData(String file) {
+ }
+
+ public boolean extractEntry(String entry, String destination,
+ JLabel statusLabel) {
+
+ OutputStream out = null;
+ InputStream in = null;
+
+ System.out.println("Copying: " + entry);
+ System.out.println("To: " + destination);
+
+ if (statusLabel != null) {
+ statusLabel.setText("Copying " + entry);
+ }
+
+ String entryName;
+ if (entry.lastIndexOf("/") != -1) {
+ entryName = entry.substring(entry.lastIndexOf("/") + 1);
+ }
+ else {
+ entryName = entry;
+ }
+
+ String destName;
+ if (destination.lastIndexOf(File.separator) != -1) {
+ destName = destination.substring(destination.lastIndexOf(File.separator) + 1);
+ }
+ else {
+ destName = destination;
+ }
+
+ if (!destName.equals(entryName))
+ destination = destination.concat(entryName);
+
+ System.out.println("Unzipping " + entry + " to " + destination);
+
+ try {
+ out = new FileOutputStream(destination);
+ }
+ catch (IOException ioe) {
+ System.err.println("Error opening " + destination +
+ ": " + ioe.getMessage());
+
+ if (statusLabel != null)
+ statusLabel.setText("Error opening" + destination +
+ "see SFramework.log for more information");
+
+ return false;
+ }
+
+ if (entry.startsWith("/") == false)
+ entry = "/" + entry;
+
+ in = this.getClass().getResourceAsStream(entry);
+ if (in == null) {
+ System.err.println("File " + entry + " not found in jar file");
+
+ if (statusLabel != null)
+ statusLabel.setText("Failed extracting " + entry +
+ "see SFramework.log for more information");
+
+ return false;
+ }
+
+ try {
+ byte[] bytes = new byte[1024];
+ int len;
+
+ while ((len = in.read(bytes)) != -1)
+ out.write(bytes, 0, len);
+ }
+ catch (IOException ioe) {
+ System.err.println("Error writing " + destination + ": " +
+ ioe.getMessage());
+
+ if (statusLabel != null)
+ statusLabel.setText("Failed writing " + destination +
+ "see SFramework.log for more information");
+ return false;
+ }
+ finally {
+ try {
+ in.close();
+ out.close();
+ }
+ catch (IOException ioe) {
+ }
+ }
+ return true;
+ }
+}
diff --git a/scripting/workben/installer/sidebar.jpg b/scripting/workben/installer/sidebar.jpg
new file mode 100644
index 000000000000..c2b366f74e76
--- /dev/null
+++ b/scripting/workben/installer/sidebar.jpg
Binary files differ
diff --git a/scripting/workben/makefile.mk b/scripting/workben/makefile.mk
new file mode 100755
index 000000000000..cefad979148f
--- /dev/null
+++ b/scripting/workben/makefile.mk
@@ -0,0 +1,35 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+PRJNAME=scriptinginstaller
+TARGET=scriptinginstaller
+
+.INCLUDE : ant.mk
+
+ALLTAR : ANTBUILD
+
diff --git a/scripting/workben/mod/_scripting/Dispatch.java b/scripting/workben/mod/_scripting/Dispatch.java
new file mode 100644
index 000000000000..21a54fec77d1
--- /dev/null
+++ b/scripting/workben/mod/_scripting/Dispatch.java
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package mod._scripting;
+
+import java.net.URLEncoder;
+import java.io.PrintWriter;
+
+import lib.StatusException;
+import lib.TestCase;
+import lib.TestEnvironment;
+import lib.TestParameters;
+
+import util.utils;
+import util.SOfficeFactory;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XComponent;
+
+import com.sun.star.uno.XInterface;
+import com.sun.star.uno.UnoRuntime;
+
+import com.sun.star.frame.XModel;
+import com.sun.star.frame.XFrame;
+import com.sun.star.frame.XDesktop;
+
+
+import com.sun.star.util.URL;
+import com.sun.star.util.XURLTransformer;
+
+
+
+public class Dispatch extends TestCase {
+ //private String scriptURL = "script://MemoryUtils.MemUsage";
+ private String scriptURL = "script://HighlightText.showForm";
+ public void initialize( TestParameters tParam, PrintWriter log ) {
+ }
+
+ public synchronized TestEnvironment createTestEnvironment(
+ TestParameters tParam, PrintWriter log ) throws StatusException {
+ log.println("creating test environment");
+ XInterface oObj = null;
+ URL dispatchURL = null;
+ try {
+
+ XMultiServiceFactory xMSF = tParam.getMSF();
+ SOfficeFactory SOF = null;
+ SOF = SOfficeFactory.getFactory( xMSF );
+ String docPath = util.utils.getFullTestURL( "ExampleSpreadSheetLatest.sxc" );
+ XComponent doc = SOF.loadDocument( docPath );
+ XModel model = ( XModel ) UnoRuntime.queryInterface( XModel.class,
+ doc );
+ XFrame frame = model.getCurrentController().getFrame();
+ oObj = ( XInterface )xMSF.createInstanceWithArguments( "com.sun.star.comp.ScriptProtocolHandler", new Object[] { frame } );
+
+ XURLTransformer xParser=(XURLTransformer)
+ UnoRuntime.queryInterface(XURLTransformer.class,
+ tParam.getMSF().createInstance
+ ("com.sun.star.util.URLTransformer"));
+ // Because it's an in/out parameter we must use an array of
+ // URL objects.
+ URL[] aParseURL = new URL[1];
+ aParseURL[0] = new URL();
+ aParseURL[0].Complete = scriptURL;
+ xParser.parseStrict(aParseURL);
+ dispatchURL = aParseURL[0];
+
+ } catch (com.sun.star.uno.Exception e) {
+ e.printStackTrace();
+ throw new StatusException("Can't create object environment", e) ;
+ }
+
+ TestEnvironment tEnv = new TestEnvironment(oObj) ;
+ tEnv.addObjRelation( "XDispatchProvider.URL", scriptURL );
+ tEnv.addObjRelation( "XDispatch.URL", dispatchURL );
+ return tEnv ;
+ }
+
+ public synchronized void disposeTestEnvironment( TestEnvironment tEnv,
+ TestParameters tParam) {
+ }
+}
+
+
diff --git a/scripting/workben/mod/_scripting/Function.java b/scripting/workben/mod/_scripting/Function.java
new file mode 100644
index 000000000000..7dc73cbd7140
--- /dev/null
+++ b/scripting/workben/mod/_scripting/Function.java
@@ -0,0 +1,95 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package mod._scripting;
+
+import com.sun.star.uno.XInterface;
+import java.io.PrintWriter;
+import lib.StatusException;
+import lib.TestCase;
+import lib.TestEnvironment;
+import lib.TestParameters;
+import util.utils;
+import java.net.URLEncoder;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.UnoRuntime;
+
+import com.sun.star.frame.XModel;
+import com.sun.star.frame.XFrame;
+import com.sun.star.lang.XComponent;
+import com.sun.star.frame.XDesktop;
+
+import util.SOfficeFactory;
+
+import drafts.com.sun.star.script.framework.provider.XFunction;
+import drafts.com.sun.star.script.framework.provider.XFunctionProvider;
+
+public class Function extends TestCase {
+ private String script = "script://returns-Integer";
+ private String doc = "doc_with_beanshell_scripts.sxw";
+
+ public void initialize( TestParameters tParam, PrintWriter log ) {
+ }
+
+ public synchronized TestEnvironment createTestEnvironment(
+ TestParameters tParam, PrintWriter log ) throws StatusException {
+ XInterface oObj = null;
+ XFunctionProvider provider = null;
+
+ log.println("creating test environment");
+ try {
+
+ XMultiServiceFactory xMSF = tParam.getMSF();
+ SOfficeFactory SOF = null;
+ SOF = SOfficeFactory.getFactory( xMSF );
+ String docPath = util.utils.getFullTestURL(doc);
+ XComponent doc = SOF.loadDocument( docPath );
+ XModel model = ( XModel ) UnoRuntime.queryInterface( XModel.class,
+ doc );
+ oObj =
+ (XInterface)xMSF.createInstanceWithArguments( "drafts.com.sun.star.script.framework.provider.FunctionProvider", new Object[]{ model } );
+ provider = ( XFunctionProvider )UnoRuntime.queryInterface( XFunctionProvider.class, oObj );
+ oObj = provider.getFunction( script );
+
+ } catch (com.sun.star.uno.Exception e) {
+ e.printStackTrace();
+ throw new StatusException("Can't create object environment", e) ;
+ }
+
+ TestEnvironment tEnv = new TestEnvironment(oObj) ;
+ tEnv.addObjRelation("provider", provider);
+ TestDataLoader.setupData(tEnv, "Function");
+
+ return tEnv ;
+ }
+
+ public synchronized void disposeTestEnvironment( TestEnvironment tEnv,
+ TestParameters tParam) {
+ }
+}
+
+
diff --git a/scripting/workben/mod/_scripting/FunctionProvider.java b/scripting/workben/mod/_scripting/FunctionProvider.java
new file mode 100644
index 000000000000..f9ec85212c83
--- /dev/null
+++ b/scripting/workben/mod/_scripting/FunctionProvider.java
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package mod._scripting;
+
+import com.sun.star.uno.XInterface;
+import java.io.PrintWriter;
+import lib.StatusException;
+import lib.TestCase;
+import lib.TestEnvironment;
+import lib.TestParameters;
+import util.utils;
+import java.net.URLEncoder;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.UnoRuntime;
+
+import com.sun.star.frame.XModel;
+import com.sun.star.frame.XDesktop;
+
+public class FunctionProvider extends TestCase {
+
+ String docPath = null;
+ public void initialize( TestParameters tParam, PrintWriter log ) {
+ }
+
+ public synchronized TestEnvironment createTestEnvironment(
+ TestParameters tParam, PrintWriter log ) throws StatusException {
+ XInterface oObj = null;
+ log.println("creating test environment");
+ try {
+
+ XMultiServiceFactory xMSF = tParam.getMSF();
+
+ Object xInterface = xMSF.createInstance( "com.sun.star.frame.Desktop" );
+ XDesktop dtop = ( XDesktop )UnoRuntime.queryInterface( XDesktop.class,
+ xInterface );
+
+ XModel model = dtop.getCurrentFrame().getController().getModel();
+ oObj =
+ (XInterface)xMSF.createInstanceWithArguments( "drafts.com.sun.star.script.framework.provider.FunctionProvider", new Object[]{ model } );
+
+
+ } catch (com.sun.star.uno.Exception e) {
+ throw new StatusException("Can't create object environment", e) ;
+ }
+
+ TestEnvironment tEnv = new TestEnvironment(oObj) ;
+ TestDataLoader.setupData(tEnv, "FunctionProvider");
+
+ return tEnv ;
+ }
+
+ public synchronized void disposeTestEnvironment( TestEnvironment tEnv,
+ TestParameters tParam) {
+ }
+}
+
+
diff --git a/scripting/workben/mod/_scripting/ScriptInfo.java b/scripting/workben/mod/_scripting/ScriptInfo.java
new file mode 100644
index 000000000000..8e6e2a332f20
--- /dev/null
+++ b/scripting/workben/mod/_scripting/ScriptInfo.java
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package mod._scripting;
+
+import com.sun.star.uno.XInterface;
+import java.io.PrintWriter;
+import lib.StatusException;
+import lib.TestCase;
+import lib.TestEnvironment;
+import lib.TestParameters;
+import util.utils;
+import java.net.URLEncoder;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.uno.UnoRuntime;
+
+import drafts.com.sun.star.script.framework.storage.XScriptInfoAccess;
+import drafts.com.sun.star.script.framework.storage.XScriptInfo;
+
+public class ScriptInfo extends TestCase {
+
+ String docPath = null;
+ public void initialize( TestParameters tParam, PrintWriter log ) {
+ // Get path to test documents
+ String rootDocPath = ( String )tParam.get( "DOCPTH" );
+ System.out.println( "DOCPTH is " + rootDocPath );
+ rootDocPath = util.utils.getFullTestURL( "ExampleSpreadSheetLatest.sxc" );
+ if ( rootDocPath != null && rootDocPath.length() > 1 ){
+ // convert all "\\" to "/", necessary for UCB
+ if ( rootDocPath.indexOf( "\\" ) > 0 ){
+ rootDocPath = rootDocPath.replace( '\\','/' );
+ }
+ System.out.println("After processing the path is " + rootDocPath);
+ // encode the ulr (for UCB)
+ String encodedPath = URLEncoder.encode( rootDocPath );
+ System.out.println("The encoded path is " + encodedPath );
+ docPath = "vnd.sun.star.pkg://" + encodedPath;
+ System.out.println( "docPath path is " + docPath );
+ }
+
+ }
+
+ public synchronized TestEnvironment createTestEnvironment(
+ TestParameters tParam, PrintWriter log ) throws StatusException {
+
+ log.println("creating test environment");
+ if ( docPath == null ){
+ log.println("Testdata not set up, docPath is null");
+ throw new StatusException(
+ "Can't create object environment, no test document available",
+ new Exception() ) ;
+ }
+
+ XInterface oObj = null;
+ XSimpleFileAccess access = null;
+ try {
+ XMultiServiceFactory xMSF = tParam.getMSF();
+ Object xInterface =
+ xMSF.createInstance( "com.sun.star.ucb.SimpleFileAccess" );
+ access = ( XSimpleFileAccess )
+ UnoRuntime.queryInterface( XSimpleFileAccess.class, xInterface );
+ Object storageObj = ( XInterface )xMSF.createInstanceWithArguments(
+ "drafts.com.sun.star.script.framework.storage.ScriptStorage",
+ new Object[]{ access, new Integer(99), docPath } );
+ XScriptInfoAccess infoAccess = ( XScriptInfoAccess )UnoRuntime.queryInterface(XScriptInfoAccess.class, storageObj);
+ XScriptInfo[] infos = infoAccess.getImplementations("script://MemoryUtils.MemUsage?location=document");
+ oObj = infos[0];
+ } catch (com.sun.star.uno.Exception e) {
+ throw new StatusException("Can't create object environment", e) ;
+ }
+
+ TestEnvironment tEnv = new TestEnvironment(oObj) ;
+ TestDataLoader.setupData(tEnv, "ScriptInfo");
+
+ return tEnv ;
+ }
+
+ public synchronized void disposeTestEnvironment( TestEnvironment tEnv,
+ TestParameters tParam) {
+ }
+}
+
+
diff --git a/scripting/workben/mod/_scripting/ScriptRuntimeManager.java b/scripting/workben/mod/_scripting/ScriptRuntimeManager.java
new file mode 100644
index 000000000000..28cd4d4843d9
--- /dev/null
+++ b/scripting/workben/mod/_scripting/ScriptRuntimeManager.java
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package mod._scripting;
+
+import com.sun.star.uno.XInterface;
+import java.io.PrintWriter;
+import lib.StatusException;
+import lib.TestCase;
+import lib.TestEnvironment;
+import lib.TestParameters;
+
+public class ScriptRuntimeManager extends TestCase {
+
+ public void initialize( TestParameters tParam, PrintWriter log ) {
+ }
+
+ public synchronized TestEnvironment createTestEnvironment(
+ TestParameters Param, PrintWriter log ) throws StatusException {
+
+ log.println("creating test environment");
+
+ XInterface oObj = null;
+
+ try {
+ oObj = (XInterface) Param.getMSF().createInstance
+ ("drafts.com.sun.star.script.framework.runtime.ScriptRuntimeManager");
+ } catch (com.sun.star.uno.Exception e) {
+ throw new StatusException("Can't create object environment", e) ;
+ }
+
+ TestEnvironment tEnv = new TestEnvironment(oObj) ;
+ TestDataLoader.setupData(tEnv, "ScriptRuntimeManager");
+
+ return tEnv ;
+ }
+
+ public synchronized void disposeTestEnvironment( TestEnvironment tEnv,
+ TestParameters tParam) {
+ }
+}
diff --git a/scripting/workben/mod/_scripting/ScriptStorage.java b/scripting/workben/mod/_scripting/ScriptStorage.java
new file mode 100644
index 000000000000..556eb74e8421
--- /dev/null
+++ b/scripting/workben/mod/_scripting/ScriptStorage.java
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package mod._scripting;
+
+import com.sun.star.uno.XInterface;
+import java.io.PrintWriter;
+import lib.StatusException;
+import lib.TestCase;
+import lib.TestEnvironment;
+import lib.TestParameters;
+import util.utils;
+import java.net.URLEncoder;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.uno.UnoRuntime;
+
+public class ScriptStorage extends TestCase {
+
+ String docPath = null;
+ public void initialize( TestParameters tParam, PrintWriter log ) {
+ // Get path to test documents
+ String rootDocPath = ( String )tParam.get( "DOCPTH" );
+ System.out.println( "DOCPTH is " + rootDocPath );
+ rootDocPath = util.utils.getFullTestURL( "ExampleSpreadSheetLatest.sxc" );
+ if ( rootDocPath != null && rootDocPath.length() > 1 ){
+ // convert all "\\" to "/", necessary for UCB
+ if ( rootDocPath.indexOf( "\\" ) > 0 ){
+ rootDocPath = rootDocPath.replace( '\\','/' );
+ }
+ System.out.println("After processing the path is " + rootDocPath);
+ // encode the ulr (for UCB)
+ String encodedPath = URLEncoder.encode( rootDocPath );
+ System.out.println("The encoded path is " + encodedPath );
+ docPath = "vnd.sun.star.pkg://" + encodedPath;
+ System.out.println( "docPath path is " + docPath );
+ }
+
+ }
+
+ public synchronized TestEnvironment createTestEnvironment(
+ TestParameters tParam, PrintWriter log ) throws StatusException {
+
+ log.println("creating test environment");
+ if ( docPath == null ){
+ log.println("Testdata not set up, docPath is null");
+ throw new StatusException(
+ "Can't create object environment, no test document available",
+ new Exception() ) ;
+ }
+
+ XInterface oObj = null;
+ XSimpleFileAccess access = null;
+ try {
+ XMultiServiceFactory xMSF = tParam.getMSF();
+ Object xInterface =
+ xMSF.createInstance( "com.sun.star.ucb.SimpleFileAccess" );
+ access = ( XSimpleFileAccess )
+ UnoRuntime.queryInterface( XSimpleFileAccess.class, xInterface );
+ oObj = ( XInterface )xMSF.createInstanceWithArguments(
+ "drafts.com.sun.star.script.framework.storage.ScriptStorage",
+ new Object[]{ access, new Integer(99), docPath } );
+
+ } catch (com.sun.star.uno.Exception e) {
+ throw new StatusException("Can't create object environment", e) ;
+ }
+
+ TestEnvironment tEnv = new TestEnvironment(oObj) ;
+ TestDataLoader.setupData(tEnv, "ScriptStorage");
+
+ return tEnv ;
+ }
+
+ public synchronized void disposeTestEnvironment( TestEnvironment tEnv,
+ TestParameters tParam) {
+ }
+}
+
+
diff --git a/scripting/workben/mod/_scripting/ScriptStorageManager.java b/scripting/workben/mod/_scripting/ScriptStorageManager.java
new file mode 100644
index 000000000000..f0f863b7131e
--- /dev/null
+++ b/scripting/workben/mod/_scripting/ScriptStorageManager.java
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package mod._scripting;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.uno.XInterface;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import java.io.PrintWriter;
+import lib.StatusException;
+import lib.TestCase;
+import lib.TestEnvironment;
+import lib.TestParameters;
+import util.utils;
+
+public class ScriptStorageManager extends TestCase {
+
+ public void initialize( TestParameters tParam, PrintWriter log ) {
+ }
+
+ public synchronized TestEnvironment createTestEnvironment(
+ TestParameters Param, PrintWriter log ) throws StatusException {
+
+ XInterface oObj = null;
+ Object oInterface = null;
+
+ try {
+ XMultiServiceFactory xMSF = Param.getMSF();
+ XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, xMSF);
+ // get context
+ XComponentContext xContext = (XComponentContext)
+ UnoRuntime.queryInterface(XComponentContext.class,
+ xProp.getPropertyValue("DefaultContext"));
+ // get the script storage manager from context
+ oInterface = xContext.getValueByName("/singletons/" +
+ "drafts.com.sun.star.script.framework.storage.theScriptStorageManager");
+ }
+ catch( Exception e ) {
+ log.println("ScriptStorageManager singleton service not available" );
+ e.printStackTrace();
+ }
+ oObj = (XInterface) oInterface;
+
+ TestEnvironment tEnv = new TestEnvironment(oObj) ;
+ TestDataLoader.setupData(tEnv, "ScriptStorageManager");
+
+ return tEnv ;
+ }
+
+ public synchronized void disposeTestEnvironment( TestEnvironment tEnv,
+ TestParameters tParam) {
+ }
+}
+
+
diff --git a/scripting/workben/mod/_scripting/TestDataLoader.java b/scripting/workben/mod/_scripting/TestDataLoader.java
new file mode 100644
index 000000000000..f5e947a54773
--- /dev/null
+++ b/scripting/workben/mod/_scripting/TestDataLoader.java
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package mod._scripting;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.BufferedReader;
+import java.io.IOException;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.StringTokenizer;
+
+import lib.TestEnvironment;
+import lib.Parameters;
+
+public class TestDataLoader {
+
+ private TestDataLoader() {
+ }
+
+ public static void setupData(TestEnvironment tEnv, String name) {
+ String filename =
+ util.utils.getFullTestDocName("testdata");
+ File testdatadir = new File(filename);
+ File f = new File(testdatadir, name + ".csv");
+
+ if (!f.exists())
+ return;
+
+ BufferedReader in;
+
+ try {
+ in = new BufferedReader(new FileReader(f));
+
+ String s, previous, current;
+ ArrayList list = new ArrayList(11);
+
+ if ((s = in.readLine()) != null) {
+ StringTokenizer st = new StringTokenizer(s, ";");
+
+ current = previous = st.nextToken();
+ list.add(getParameters(st));
+ }
+ else {
+ return;
+ }
+
+ while ((s = in.readLine()) != null) {
+ StringTokenizer st = new StringTokenizer(s, ";");
+
+ current = st.nextToken();
+
+ if (!current.equals(previous)) {
+ tEnv.addObjRelation(previous, list);
+ previous = current;
+ list = new ArrayList(11);
+ }
+
+ list.add(getParameters(st));
+ }
+
+ tEnv.addObjRelation(previous, list);
+ }
+ catch (IOException ioe) {
+ }
+ }
+
+ private static Parameters getParameters(StringTokenizer st) {
+ String separator = "=";
+ HashMap map = new HashMap(5);
+
+ while (st.hasMoreTokens()) {
+ String pair = st.nextToken();
+ StringTokenizer tokens = new StringTokenizer(pair, separator);
+
+ String name;
+ String value;
+
+ if (tokens.countTokens() < 2)
+ continue;
+
+ name = tokens.nextToken();
+ if (tokens.countTokens() == 1)
+ value = tokens.nextToken();
+ else {
+ StringBuffer buf = new StringBuffer(tokens.nextToken());
+ while (tokens.hasMoreTokens())
+ buf.append(separator).append(tokens.nextToken());
+ value = buf.toString();
+ }
+
+ map.put(name, value);
+ }
+
+ return new Parameters(map);
+ }
+}
diff --git a/scripting/workben/mod/_scripting/makefile.mk b/scripting/workben/mod/_scripting/makefile.mk
new file mode 100644
index 000000000000..9d9e05d6010b
--- /dev/null
+++ b/scripting/workben/mod/_scripting/makefile.mk
@@ -0,0 +1,40 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ = ..$/..$/..$/..
+PRJNAME = testcase
+TARGET = testcase
+
+# --- Settings -----------------------------------------------------
+.INCLUDE: settings.mk
+
+JARFILES = ridl.jar unoil.jar jurt.jar juh.jar $(CLASSPATH)
+JAVAFILES = $(foreach,j,$(shell @ls | grep java) $j)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk