1*b1cdbd2cSJim Jagielski<?xml version="1.0" encoding="UTF-8"?> 2*b1cdbd2cSJim Jagielski<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> 3*b1cdbd2cSJim Jagielski<!--*********************************************************** 4*b1cdbd2cSJim Jagielski * 5*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 6*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 7*b1cdbd2cSJim Jagielski * distributed with this work for additional information 8*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 9*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 10*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 11*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 14*b1cdbd2cSJim Jagielski * 15*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 16*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 17*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 19*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 20*b1cdbd2cSJim Jagielski * under the License. 21*b1cdbd2cSJim Jagielski * 22*b1cdbd2cSJim Jagielski ***********************************************************--> 23*b1cdbd2cSJim Jagielski<script:module xmlns:script="http://openoffice.org/2000/script" script:name="ScriptBinding" script:language="StarBasic">REM ***** BASIC ***** 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim JagielskiREM ----- Global Variables ----- 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski'bindingDialog can refer to either KeyBinding or MenuBinding dialog 28*b1cdbd2cSJim Jagielskiprivate languages() as String 29*b1cdbd2cSJim Jagielskiprivate extensions() as Object 30*b1cdbd2cSJim Jagielskiprivate locations() as String 31*b1cdbd2cSJim Jagielskiprivate filesysScripts() as String 32*b1cdbd2cSJim Jagielskiprivate filesysCount as integer 33*b1cdbd2cSJim Jagielskiprivate bindingDialog as object 34*b1cdbd2cSJim Jagielskiprivate helpDialog as object 35*b1cdbd2cSJim Jagielski'Couldn't get redim to work, so scriptDisplayList is and array of arrays 36*b1cdbd2cSJim Jagielski'where the one and only array in scriptDisplayList is an array 37*b1cdbd2cSJim Jagielski'of com.sun.star.beans.PropertyValue, where Name = [logicalName][FunctionName] 38*b1cdbd2cSJim Jagielski'and value is ScriptStorage object 39*b1cdbd2cSJim Jagielskiprivate scriptDisplayList(0) 40*b1cdbd2cSJim Jagielskiprivate testArray() as String 41*b1cdbd2cSJim Jagielski'Array to store lines from the xml file 42*b1cdbd2cSJim Jagielskiprivate xmlFile() as string 43*b1cdbd2cSJim Jagielski'Name of the xml file [writer/calc][menubar/keybindings].xml 44*b1cdbd2cSJim Jagielskiprivate xmlFileName as string 45*b1cdbd2cSJim Jagielski'Number of lines in the xml file 46*b1cdbd2cSJim Jagielskiprivate numberOfLines as integer 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski'Parallel arrays to store all top-level menu names and line positions 49*b1cdbd2cSJim Jagielskiprivate menuItems() as string 50*b1cdbd2cSJim Jagielskiprivate menuItemLinePosition() as integer 51*b1cdbd2cSJim Jagielski'Counter for the number of top-level menus 52*b1cdbd2cSJim Jagielskiprivate menuCount as integer 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski'Parallel arrays to store all sub-menu names and line positions for a particular top-level menu 55*b1cdbd2cSJim Jagielskiprivate subMenuItems() as string 56*b1cdbd2cSJim Jagielskiprivate subMenuItemLinePosition() as integer 57*b1cdbd2cSJim Jagielski'Counter for the number of sub-menus 58*b1cdbd2cSJim Jagielskiprivate subMenuCount as integer 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski'Parallel arrays to store all script names and line positions 61*b1cdbd2cSJim Jagielskiprivate scriptNames() as string 62*b1cdbd2cSJim Jagielskiprivate scriptLinePosition() as integer 63*b1cdbd2cSJim Jagielski'Counter for the number of scripts 64*b1cdbd2cSJim Jagielskiprivate scriptCount as integer 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski'Array to store all combinations of key bindings 67*b1cdbd2cSJim Jagielskiprivate allKeyBindings() as string 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski'Array of Arrays 70*b1cdbd2cSJim Jagielski'KeyBindArrayOfArrays(0) contains array of "SHIFT + CONTROL + F Keys" data 71*b1cdbd2cSJim Jagielski'Similarly 72*b1cdbd2cSJim Jagielski'KeyBindArrayOfArrays(1) contains SHIFT + CONTROL + digits 73*b1cdbd2cSJim Jagielski'KeyBindArrayOfArrays(2) contains SHIFT + CONTROL + letters 74*b1cdbd2cSJim Jagielski'KeyBindArrayOfArrays(3) contains CONTROL + F keys 75*b1cdbd2cSJim Jagielski'KeyBindArrayOfArrays(4) contains CONTROL + digits 76*b1cdbd2cSJim Jagielski'KeyBindArrayOfArrays(5) contains CONTROL + letters 77*b1cdbd2cSJim Jagielski'KeyBindArrayOfArrays(6) contains SHIFT + F keys 78*b1cdbd2cSJim Jagielskiprivate KeyBindArrayOfArrays(6) 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski'Each PropertyValue represents a key, Name member contains the script (if a binding exists) 81*b1cdbd2cSJim Jagielski' the Value contains and integer 82*b1cdbd2cSJim Jagielski' 0 means no script bound 83*b1cdbd2cSJim Jagielski' 1 script is bound to an office function 84*b1cdbd2cSJim Jagielski' >1 line number of entry in xmlfile array 85*b1cdbd2cSJim Jagielskiprivate keyAllocationMap(6,25) as new com.sun.star.beans.PropertyValue 86*b1cdbd2cSJim Jagielski'array to store key group descriptions 87*b1cdbd2cSJim Jagielskiprivate AllKeyGroupsArray(6) as String 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski'Array of props to store all event bindings for the Applications 91*b1cdbd2cSJim Jagielskiprivate allEventTypesApp( 14 ) as new com.sun.star.beans.PropertyValue 92*b1cdbd2cSJim Jagielski'Array of props to store all event bindings for the Document 93*b1cdbd2cSJim Jagielskiprivate allEventTypesDoc( 14 ) as new com.sun.star.beans.PropertyValue 94*b1cdbd2cSJim Jagielski'Array of props to store all event types (Name) and textual description (Value) 95*b1cdbd2cSJim Jagielskiprivate allEventTypes( 14 ) as new com.sun.star.beans.PropertyValue 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielskiprivate dialogName as String 99*b1cdbd2cSJim JagielskiREM ------ Storage Refresh Function ------ 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielskisub RefreshUserScripts() 103*b1cdbd2cSJim Jagielski' TDB - change Menu bindings to allow user to refresh all, user, share or document script 104*b1cdbd2cSJim Jagielski RefreshAppScripts( "USER" ) 105*b1cdbd2cSJim Jagielskiend sub 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielskisub RefreshAllScripts() 108*b1cdbd2cSJim Jagielski RefreshAppScripts( "USER" ) 109*b1cdbd2cSJim Jagielski RefreshAppScripts( "SHARE" ) 110*b1cdbd2cSJim Jagielski RefreshDocumentScripts 111*b1cdbd2cSJim Jagielskiend sub 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielskisub RefreshAppScripts( appName as String ) 114*b1cdbd2cSJim Jagielski On Error Goto ErrorHandler 115*b1cdbd2cSJim Jagielski smgr = getProcessServiceManager() 116*b1cdbd2cSJim Jagielski context = smgr.getPropertyValue( "DefaultContext" ) 117*b1cdbd2cSJim Jagielski scriptstoragemgr = context.getValueByName( "/singletons/drafts.com.sun.star.script.framework.storage.theScriptStorageManager" ) 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski scriptstoragemgr.refreshScriptStorage( appName ) 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski Exit sub 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski ErrorHandler: 124*b1cdbd2cSJim Jagielski reset 125*b1cdbd2cSJim Jagielski MsgBox ("Error: Unable to refresh Java (scripts)" + chr$(10) + chr$(10)+ "Detail: " & error$ + chr$(10) + chr$(10)+ "Action: Please restart Office",0,"Error" ) 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielskiend sub 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielskisub RefreshDocumentScripts() 130*b1cdbd2cSJim Jagielski On Error Goto ErrorHandler 131*b1cdbd2cSJim Jagielski smgr = getProcessServiceManager() 132*b1cdbd2cSJim Jagielski context = smgr.getPropertyValue( "DefaultContext" ) 133*b1cdbd2cSJim Jagielski scriptstoragemgr = context.getValueByName( "/singletons/drafts.com.sun.star.script.framework.storage.theScriptStorageManager" ) 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski oDocURL = ThisComponent.GetCurrentController.getModel.getURL 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski On Error Goto ErrorHandlerDoc 138*b1cdbd2cSJim Jagielski scriptstoragemgr.refreshScriptStorage( oDocURL ) 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski Exit sub 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski ErrorHandlerDoc: 143*b1cdbd2cSJim Jagielski reset 144*b1cdbd2cSJim Jagielski ' Ignore document script errors as it will happen when refreshing an unsaved doc 145*b1cdbd2cSJim Jagielski Exit sub 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski ErrorHandler: 148*b1cdbd2cSJim Jagielski reset 149*b1cdbd2cSJim Jagielski MsgBox ("Error: Unable to refresh Java (scripts)" + chr$(10) + chr$(10)+ "Detail: " & error$ + chr$(10) + chr$(10)+ "Action: Please restart Office",0,"Error" ) 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielskiend sub 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim JagielskiREM ----- Launch Functions ----- 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim JagielskiSub createAndPopulateKeyArrays() 157*b1cdbd2cSJim Jagielski 'Create SHIFT + CONTROL + F keys array 158*b1cdbd2cSJim Jagielski 'Dim keyGroupProp as new com.sun.star.beans.PropertyValue 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski Dim SCFKey( 11 ) 161*b1cdbd2cSJim Jagielski for FKey = 1 to 12 162*b1cdbd2cSJim Jagielski SCFKey( FKey - 1 ) = "SHIFT + CONTROL + F" + FKey 163*b1cdbd2cSJim Jagielski next FKey 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski KeyBindArrayOfArrays(0) = SCFKey() 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski 'Create SHIFT + CONTROL + digits 168*b1cdbd2cSJim Jagielski Dim SCDKey( 9 ) 169*b1cdbd2cSJim Jagielski for Digit = 0 to 9 170*b1cdbd2cSJim Jagielski SCDKey( Digit ) = "SHIFT + CONTROL + " + Digit 171*b1cdbd2cSJim Jagielski next Digit 172*b1cdbd2cSJim Jagielski KeyBindArrayOfArrays(1) = SCDKey() 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski 'Create SHIFT + CONTROL + letters 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski Dim SCLKey( 25 ) 177*b1cdbd2cSJim Jagielski for Alpha = 65 to 90 178*b1cdbd2cSJim Jagielski SCLKey( Alpha - 65 ) = "SHIFT + CONTROL + " + chr$( Alpha ) 179*b1cdbd2cSJim Jagielski next Alpha 180*b1cdbd2cSJim Jagielski KeyBindArrayOfArrays(2) = SCLKey() 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski 'Create CONTROL + F keys 183*b1cdbd2cSJim Jagielski Dim CFKey( 11 ) 184*b1cdbd2cSJim Jagielski for FKey = 1 to 12 185*b1cdbd2cSJim Jagielski CFKey( Fkey - 1 ) = "CONTROL + F" + FKey 186*b1cdbd2cSJim Jagielski next FKey 187*b1cdbd2cSJim Jagielski KeyBindArrayOfArrays(3) = CFKey() 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski 'Create CONTROL + digits 190*b1cdbd2cSJim Jagielski Dim CDKey( 9 ) 191*b1cdbd2cSJim Jagielski for Digit = 0 to 9 192*b1cdbd2cSJim Jagielski CDKey( Digit ) = "CONTROL + " + Digit 193*b1cdbd2cSJim Jagielski next Digit 194*b1cdbd2cSJim Jagielski KeyBindArrayOfArrays(4) = CDKey() 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski 'Create CONTROL + letters 197*b1cdbd2cSJim Jagielski Dim CLKey( 25 ) 198*b1cdbd2cSJim Jagielski for Alpha = 65 to 90 199*b1cdbd2cSJim Jagielski CLKey( Alpha - 65 ) = "CONTROL + " + chr$( Alpha ) 200*b1cdbd2cSJim Jagielski next Alpha 201*b1cdbd2cSJim Jagielski KeyBindArrayOfArrays(5) = CLKey() 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski 'Create SHIFT + F Keys 204*b1cdbd2cSJim Jagielski Dim SFKey( 11 ) 205*b1cdbd2cSJim Jagielski for FKey = 1 to 12 206*b1cdbd2cSJim Jagielski SFKey( Fkey - 1 ) = "SHIFT + F" + FKey 207*b1cdbd2cSJim Jagielski next FKey 208*b1cdbd2cSJim Jagielski KeyBindArrayOfArrays(6) = SFKey() 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim JagielskiEnd Sub 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim JagielskiSub updateMapWithDisabledKeys() 213*b1cdbd2cSJim Jagielski 'disable CONTROL + F1 & 214*b1cdbd2cSJim Jagielski keyAllocationMap( 3, 0 ).Value = 1 215*b1cdbd2cSJim Jagielski keyAllocationMap( 3, 0 ).Name = "" 216*b1cdbd2cSJim Jagielski 'disable CONTROL + F4 & 217*b1cdbd2cSJim Jagielski keyAllocationMap( 3, 3 ).Value = 1 218*b1cdbd2cSJim Jagielski keyAllocationMap( 3, 3 ).Name = "" 219*b1cdbd2cSJim Jagielski 'disable CONTROL + F6 220*b1cdbd2cSJim Jagielski keyAllocationMap( 3, 5 ).Value = 1 221*b1cdbd2cSJim Jagielski keyAllocationMap( 3, 5 ).Name = "" 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski 224*b1cdbd2cSJim Jagielski 'disable SHIFT + F1 & 225*b1cdbd2cSJim Jagielski keyAllocationMap( 6, 0 ).Value = 1 226*b1cdbd2cSJim Jagielski keyAllocationMap( 6, 0 ).Name = "" 227*b1cdbd2cSJim Jagielski 'disable SHIFT + F2 & 228*b1cdbd2cSJim Jagielski keyAllocationMap( 6, 1 ).Value = 1 229*b1cdbd2cSJim Jagielski keyAllocationMap( 6, 1 ).Name = "" 230*b1cdbd2cSJim Jagielski 'disable SHIFT + F6 & 231*b1cdbd2cSJim Jagielski keyAllocationMap( 6, 5 ).Value = 1 232*b1cdbd2cSJim Jagielski keyAllocationMap( 6, 5 ).Name = "" 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim JagielskiEnd Sub 235*b1cdbd2cSJim Jagielski 236*b1cdbd2cSJim JagielskiSub initialiseFileExtensions() 237*b1cdbd2cSJim Jagielski ReDim extensions(ubound(languages())+1) as Object 238*b1cdbd2cSJim Jagielski oConfigProvider = CreateUnoService( "com.sun.star.configuration.ConfigurationProvider" ) 239*b1cdbd2cSJim Jagielski Dim configArgs(1) as new com.sun.star.beans.PropertyValue 240*b1cdbd2cSJim Jagielski configargs(0).Name = "nodepath" 241*b1cdbd2cSJim Jagielski configArgs(0).Value = "org.openoffice.Office.Scripting/ScriptRuntimes" 242*b1cdbd2cSJim Jagielski configargs(1).Name = "lazywrite" 243*b1cdbd2cSJim Jagielski configArgs(1).Value = false 244*b1cdbd2cSJim Jagielski oConfigAccess = oConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", configArgs()) 245*b1cdbd2cSJim Jagielski for index = 0 to ubound(languages()) 246*b1cdbd2cSJim Jagielski if(languages(index) <> "Java") then 247*b1cdbd2cSJim Jagielski xPropSet = oConfigAccess.getByName(languages(index)) 248*b1cdbd2cSJim Jagielski extns() = xPropSet.getPropertyValue("SupportedFileExtensions") 249*b1cdbd2cSJim Jagielski extensions(index) = extns() 250*b1cdbd2cSJim Jagielski endif 251*b1cdbd2cSJim Jagielski next index 252*b1cdbd2cSJim Jagielskiend sub 253*b1cdbd2cSJim Jagielski 254*b1cdbd2cSJim JagielskiSub ExecuteEditDebug() 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielski locations = Array ( "User", "Share", "Document", "Filesystem" ) 257*b1cdbd2cSJim Jagielski languages = Array ( "BeanShell", "JavaScript" ) 258*b1cdbd2cSJim Jagielski dialogName = "EditDebug" 259*b1cdbd2cSJim Jagielski initialiseFileExtensions() 260*b1cdbd2cSJim Jagielski bindingDialog = LoadDialog( "ScriptBindingLibrary", "EditDebug" ) 261*b1cdbd2cSJim Jagielski 262*b1cdbd2cSJim Jagielski PopulateLanguageCombo() 263*b1cdbd2cSJim Jagielski PopulateLocationCombo() 264*b1cdbd2cSJim Jagielski PopulateScriptList( languages(0), locations(0) ) 265*b1cdbd2cSJim Jagielski 266*b1cdbd2cSJim Jagielski bindingDialog.execute() 267*b1cdbd2cSJim JagielskiEnd Sub 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim JagielskiSub ExecuteKeyBinding() 270*b1cdbd2cSJim Jagielski dialogName = "Key" 271*b1cdbd2cSJim Jagielski createAndPopulateKeyArrays() 272*b1cdbd2cSJim Jagielski updateMapWithDisabledKeys() 273*b1cdbd2cSJim Jagielski xmlFileName = GetDocumentType( "Key" ) 274*b1cdbd2cSJim Jagielski 275*b1cdbd2cSJim Jagielski if not (ReadXMLToArray( "Key" )) then 276*b1cdbd2cSJim Jagielski Exit Sub 277*b1cdbd2cSJim Jagielski endif 278*b1cdbd2cSJim Jagielski 279*b1cdbd2cSJim Jagielski bindingDialog = LoadDialog( "ScriptBindingLibrary", "KeyBinding" ) 280*b1cdbd2cSJim Jagielski PopulateKeyBindingList(0) 281*b1cdbd2cSJim Jagielski initialiseNavigationComboArrays() 282*b1cdbd2cSJim Jagielski PopulateLanguageCombo() 283*b1cdbd2cSJim Jagielski PopulateLocationCombo() 284*b1cdbd2cSJim Jagielski PopulateScriptList( languages(0), locations(0) ) 285*b1cdbd2cSJim Jagielski PopulateTopLevelKeyBindingList() 286*b1cdbd2cSJim Jagielski bindingDialog.execute() 287*b1cdbd2cSJim Jagielskiend Sub 288*b1cdbd2cSJim Jagielski 289*b1cdbd2cSJim Jagielski 290*b1cdbd2cSJim JagielskiSub initialiseNavigationComboArrays() 291*b1cdbd2cSJim Jagielski locations = Array ( "User", "Share", "Document", "Filesystem" ) 292*b1cdbd2cSJim Jagielski ReDim languages(0) as String 293*b1cdbd2cSJim Jagielski ReDim extensions(0) as Object 294*b1cdbd2cSJim Jagielski languages(0) = "Java" 295*b1cdbd2cSJim Jagielski REM extensions(0) = "" 296*b1cdbd2cSJim Jagielski 297*b1cdbd2cSJim Jagielski ' Setup languages array for all supported languages 298*b1cdbd2cSJim Jagielski oServiceManager = GetProcessServiceManager() 299*b1cdbd2cSJim Jagielski svrArray = oServiceManager.getAvailableServiceNames 300*b1cdbd2cSJim Jagielski 301*b1cdbd2cSJim Jagielski langCount = 1 302*b1cdbd2cSJim Jagielski for index = 0 to ubound(svrArray) 303*b1cdbd2cSJim Jagielski iPos = inStr(svrArray(index), "ScriptProviderFor") 304*b1cdbd2cSJim Jagielski 305*b1cdbd2cSJim Jagielski if (iPos > 0) then 306*b1cdbd2cSJim Jagielski lang = Mid(svrArray(index), iPos + Len("ScriptProviderFor") 307*b1cdbd2cSJim Jagielski 308*b1cdbd2cSJim Jagielski if not (lang = "Java") then 309*b1cdbd2cSJim Jagielski 'Add to language vector 310*b1cdbd2cSJim Jagielski ReDim Preserve languages(langCount) as String 311*b1cdbd2cSJim Jagielski languages(langCount) = lang 312*b1cdbd2cSJim Jagielski langCount = langCount + 1 313*b1cdbd2cSJim Jagielski endif 314*b1cdbd2cSJim Jagielski endif 315*b1cdbd2cSJim Jagielski next index 316*b1cdbd2cSJim Jagielski initialiseFileExtensions() 317*b1cdbd2cSJim JagielskiEnd Sub 318*b1cdbd2cSJim Jagielski 319*b1cdbd2cSJim Jagielski 320*b1cdbd2cSJim JagielskiSub ExecuteEventBinding 321*b1cdbd2cSJim Jagielski dialogName = "Event" 322*b1cdbd2cSJim Jagielski createAllEventTypes() 323*b1cdbd2cSJim Jagielski createAllEventBindings() 324*b1cdbd2cSJim Jagielski 325*b1cdbd2cSJim Jagielski 'Populate application event bindings array (from config xml file) 326*b1cdbd2cSJim Jagielski if not (ReadXMLToArray( "Event" )) then 327*b1cdbd2cSJim Jagielski Exit Sub 328*b1cdbd2cSJim Jagielski endif 329*b1cdbd2cSJim Jagielski 'Populate document event bindings array (using Office API calls) 330*b1cdbd2cSJim Jagielski ReadEventsFromDoc() 331*b1cdbd2cSJim Jagielski 332*b1cdbd2cSJim Jagielski bindingDialog = LoadDialog( "ScriptBindingLibrary", "EventsBinding" ) 333*b1cdbd2cSJim Jagielski initialiseNavigationComboArrays() 334*b1cdbd2cSJim Jagielski PopulateLanguageCombo() 335*b1cdbd2cSJim Jagielski PopulateLocationCombo() 336*b1cdbd2cSJim Jagielski PopulateScriptList( languages(0), locations(0) ) 337*b1cdbd2cSJim Jagielski populateEventList( 0 ) 338*b1cdbd2cSJim Jagielski EventListListener() 339*b1cdbd2cSJim Jagielski bindingDialog.execute() 340*b1cdbd2cSJim JagielskiEnd Sub 341*b1cdbd2cSJim Jagielski 342*b1cdbd2cSJim JagielskiSub ExecuteMenuBinding() 343*b1cdbd2cSJim Jagielski dialogName = "Menu" 344*b1cdbd2cSJim Jagielski xmlFileName = GetDocumentType( "Menu" ) 345*b1cdbd2cSJim Jagielski if not (ReadXMLToArray( "Menu" )) then 346*b1cdbd2cSJim Jagielski Exit Sub 347*b1cdbd2cSJim Jagielski endif 348*b1cdbd2cSJim Jagielski 349*b1cdbd2cSJim Jagielski bindingDialog = LoadDialog( "ScriptBindingLibrary", "MenuBinding" ) 350*b1cdbd2cSJim Jagielski initialiseNavigationComboArrays() 351*b1cdbd2cSJim Jagielski PopulateLanguageCombo() 352*b1cdbd2cSJim Jagielski PopulateLocationCombo() 353*b1cdbd2cSJim Jagielski PopulateScriptList( languages(0), locations(0) ) 354*b1cdbd2cSJim Jagielski PopulateMenuCombo() 355*b1cdbd2cSJim Jagielski PopulateSubMenuList( 1 ) 356*b1cdbd2cSJim Jagielski 357*b1cdbd2cSJim Jagielski subMenuList = bindingDialog.getControl("SubMenuList") 358*b1cdbd2cSJim Jagielski 359*b1cdbd2cSJim Jagielski subMenuList.selectItemPos( 0, true ) 360*b1cdbd2cSJim Jagielski 361*b1cdbd2cSJim Jagielski bindingDialog.execute() 362*b1cdbd2cSJim Jagielskiend Sub 363*b1cdbd2cSJim Jagielski 364*b1cdbd2cSJim Jagielski 365*b1cdbd2cSJim JagielskiREM ----- Initialising functions ----- 366*b1cdbd2cSJim Jagielski 367*b1cdbd2cSJim Jagielski 368*b1cdbd2cSJim Jagielskifunction LoadDialog( libName as string, dialogName as string ) as object 369*b1cdbd2cSJim Jagielski dim library as object 370*b1cdbd2cSJim Jagielski dim libDialog as object 371*b1cdbd2cSJim Jagielski dim runtimeDialog as object 372*b1cdbd2cSJim Jagielski libContainer = DialogLibraries 373*b1cdbd2cSJim Jagielski libContainer.LoadLibrary( libName ) 374*b1cdbd2cSJim Jagielski library = libContainer.getByName( libname ) 375*b1cdbd2cSJim Jagielski libDialog = library.getByName( dialogName ) 376*b1cdbd2cSJim Jagielski runtimeDialog = CreateUnoDialog( libDialog ) 377*b1cdbd2cSJim Jagielski LoadDialog() = runtimeDialog 378*b1cdbd2cSJim Jagielski 379*b1cdbd2cSJim Jagielskiend function 380*b1cdbd2cSJim Jagielski 381*b1cdbd2cSJim Jagielski 382*b1cdbd2cSJim Jagielskifunction GetDocumentType( bindingType as string ) as string 383*b1cdbd2cSJim Jagielski document = StarDesktop.ActiveFrame.Controller.Model 384*b1cdbd2cSJim Jagielski Dim errornumber As Integer 385*b1cdbd2cSJim Jagielski errornumber = 111 386*b1cdbd2cSJim Jagielski Error errornumber 387*b1cdbd2cSJim Jagielski if document.SupportsService("com.sun.star.sheet.SpreadsheetDocument") then 388*b1cdbd2cSJim Jagielski if bindingType = "Key" then 389*b1cdbd2cSJim Jagielski GetDocumentType() = "calckeybinding.xml" 390*b1cdbd2cSJim Jagielski else 391*b1cdbd2cSJim Jagielski if bindingType = "Menu" then 392*b1cdbd2cSJim Jagielski GetDocumentType() = "calcmenubar.xml" 393*b1cdbd2cSJim Jagielski end if 394*b1cdbd2cSJim Jagielski end if 395*b1cdbd2cSJim Jagielski elseif document.SupportsService("com.sun.star.text.TextDocument") then 396*b1cdbd2cSJim Jagielski if bindingType = "Key" then 397*b1cdbd2cSJim Jagielski GetDocumentType() = "writerkeybinding.xml" 398*b1cdbd2cSJim Jagielski else 399*b1cdbd2cSJim Jagielski if bindingType = "Menu" then 400*b1cdbd2cSJim Jagielski GetDocumentType() = "writermenubar.xml" 401*b1cdbd2cSJim Jagielski end if 402*b1cdbd2cSJim Jagielski end if 403*b1cdbd2cSJim Jagielski elseif document.SupportsService("com.sun.star.presentation.PresentationDocument") then 404*b1cdbd2cSJim Jagielski if bindingType = "Key" then 405*b1cdbd2cSJim Jagielski GetDocumentType() = "impresskeybinding.xml" 406*b1cdbd2cSJim Jagielski else 407*b1cdbd2cSJim Jagielski if bindingType = "Menu" then 408*b1cdbd2cSJim Jagielski GetDocumentType() = "impressmenubar.xml" 409*b1cdbd2cSJim Jagielski end if 410*b1cdbd2cSJim Jagielski end if 411*b1cdbd2cSJim Jagielski elseif document.SupportsService("com.sun.star.presentation.PresentationDocument") then 412*b1cdbd2cSJim Jagielski if bindingType = "Key" then 413*b1cdbd2cSJim Jagielski GetDocumentType() = "impresskeybinding.xml" 414*b1cdbd2cSJim Jagielski else 415*b1cdbd2cSJim Jagielski if bindingType = "Menu" then 416*b1cdbd2cSJim Jagielski GetDocumentType() = "impressmenubar.xml" 417*b1cdbd2cSJim Jagielski end if 418*b1cdbd2cSJim Jagielski end if 419*b1cdbd2cSJim Jagielski elseif document.SupportsService("com.sun.star.drawing.DrawingDocument") then 420*b1cdbd2cSJim Jagielski if bindingType = "Key" then 421*b1cdbd2cSJim Jagielski GetDocumentType() = "drawkeybinding.xml" 422*b1cdbd2cSJim Jagielski else 423*b1cdbd2cSJim Jagielski if bindingType = "Menu" then 424*b1cdbd2cSJim Jagielski GetDocumentType() = "drawmenubar.xml" 425*b1cdbd2cSJim Jagielski end if 426*b1cdbd2cSJim Jagielski end if 427*b1cdbd2cSJim Jagielski else 428*b1cdbd2cSJim Jagielski MsgBox ("Error: Couldn't determine configuration file type" + chr$(10) + chr$(10) + "Action: Please reinstall Scripting Framework",0,"Error" ) 429*b1cdbd2cSJim Jagielski end if 430*b1cdbd2cSJim Jagielskiend function 431*b1cdbd2cSJim Jagielski 432*b1cdbd2cSJim Jagielskifunction lastIndexOf( targetStr as String, substr as String ) as Integer 433*b1cdbd2cSJim Jagielski copyStr = targetStr 434*b1cdbd2cSJim Jagielski while instr(copyStr, substr) > 0 435*b1cdbd2cSJim Jagielski pos = instr(copyStr, substr) 436*b1cdbd2cSJim Jagielski tpos = tpos + pos 437*b1cdbd2cSJim Jagielski copyStr = mid(copyStr, pos+1, len(copyStr)-pos ) 438*b1cdbd2cSJim Jagielski wend 439*b1cdbd2cSJim Jagielski lastIndexOf() = tpos 440*b1cdbd2cSJim Jagielskiend function 441*b1cdbd2cSJim Jagielski 442*b1cdbd2cSJim Jagielskifunction getScriptURI( selectedScript as String ) as String 443*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "LocationCombo" ) 444*b1cdbd2cSJim Jagielski location = combo.text 445*b1cdbd2cSJim Jagielski if ( location = "User" ) then 446*b1cdbd2cSJim Jagielski location = "user" 447*b1cdbd2cSJim Jagielski elseif ( location = "Share" ) then 448*b1cdbd2cSJim Jagielski location = "share" 449*b1cdbd2cSJim Jagielski elseif ( location = "Filesystem" ) then 450*b1cdbd2cSJim Jagielski location = "filesystem" 451*b1cdbd2cSJim Jagielski else 452*b1cdbd2cSJim Jagielski location = "document" 453*b1cdbd2cSJim Jagielski end if 454*b1cdbd2cSJim Jagielski 455*b1cdbd2cSJim Jagielski 456*b1cdbd2cSJim Jagielski 457*b1cdbd2cSJim Jagielski if ( location = "filesystem" ) then 458*b1cdbd2cSJim Jagielski REM need to build URI here - dcf 459*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "LanguageCombo" ) 460*b1cdbd2cSJim Jagielski language = combo.text 461*b1cdbd2cSJim Jagielski url = selectedscript 462*b1cdbd2cSJim Jagielski pos = lastIndexOf( url, "/" ) 463*b1cdbd2cSJim Jagielski locationPath = mid( url, 1, pos) 464*b1cdbd2cSJim Jagielski url = mid( url, pos+1, len( url ) - pos ) 465*b1cdbd2cSJim Jagielski functionName = url 466*b1cdbd2cSJim Jagielski pos = lastIndexOf( url, "." ) 467*b1cdbd2cSJim Jagielski logicalName = mid( url, 1, pos - 1 ) 468*b1cdbd2cSJim Jagielski getScriptURI() = "script://" + logicalName + "?language=" _ 469*b1cdbd2cSJim Jagielski + language + "&amp;function=" + functionName _ 470*b1cdbd2cSJim Jagielski + "&amp;location=filesystem:" + locationPath 471*b1cdbd2cSJim Jagielski else 472*b1cdbd2cSJim Jagielski Dim scriptInfo as Object 473*b1cdbd2cSJim Jagielski scripts() = scriptDisplayList(0) 474*b1cdbd2cSJim Jagielski for n = LBOUND( scripts() ) to UBOUND( scripts() ) 475*b1cdbd2cSJim Jagielski 476*b1cdbd2cSJim Jagielski if ( scripts( n ).Name = selectedScript ) then 477*b1cdbd2cSJim Jagielski scriptInfo = scripts( n ).Value 478*b1cdbd2cSJim Jagielski exit for 479*b1cdbd2cSJim Jagielski end if 480*b1cdbd2cSJim Jagielski next n 481*b1cdbd2cSJim Jagielski getScriptURI() = "script://" + scriptInfo.getLogicalName + "?language=" _ 482*b1cdbd2cSJim Jagielski + scriptInfo.getLanguage() + "&amp;function=" + _ 483*b1cdbd2cSJim Jagielski scriptInfo.getFunctionName() + "&amp;location=" + location 484*b1cdbd2cSJim Jagielski end if 485*b1cdbd2cSJim Jagielski 486*b1cdbd2cSJim Jagielskiend function 487*b1cdbd2cSJim Jagielski 488*b1cdbd2cSJim Jagielskifunction GetOfficePath() as string 489*b1cdbd2cSJim Jagielski REM Error check and prompt user to manually input Office Path 490*b1cdbd2cSJim Jagielski settings = CreateUnoService( "com.sun.star.frame.Settings" ) 491*b1cdbd2cSJim Jagielski path = settings.getByName( "PathSettings" ) 492*b1cdbd2cSJim Jagielski unformattedOfficePath = path.getPropertyValue( "UserPath" ) 493*b1cdbd2cSJim Jagielski 494*b1cdbd2cSJim Jagielski dim officePath as string 495*b1cdbd2cSJim Jagielski const removeFromEnd = "/user" 496*b1cdbd2cSJim Jagielski const removeFromEndWindows = "\user" 497*b1cdbd2cSJim Jagielski 498*b1cdbd2cSJim Jagielski REM If Solaris or Linux 499*b1cdbd2cSJim Jagielski if not ( instr( unformattedOfficePath, removeFromEnd ) = 0 ) then 500*b1cdbd2cSJim Jagielski endPosition = instr( unformattedOfficePath, removeFromEnd ) 501*b1cdbd2cSJim Jagielski officePath = mid( unformattedOfficePath, 1, endPosition ) 502*b1cdbd2cSJim Jagielski REM If Windows 503*b1cdbd2cSJim Jagielski else if not ( instr( unformattedOfficePath, removeFromEndWindows ) = 0 ) then 504*b1cdbd2cSJim Jagielski endPosition = instr( unformattedOfficePath, removeFromEndWindows ) 505*b1cdbd2cSJim Jagielski officePath = mid( unformattedOfficePath, 1, endPosition ) 506*b1cdbd2cSJim Jagielski while instr( officePath, "\" ) > 0 507*b1cdbd2cSJim Jagielski backSlash = instr( officePath, "\" ) 508*b1cdbd2cSJim Jagielski startPath = mid( officePath, 1, backSlash - 1 ) 509*b1cdbd2cSJim Jagielski endPath = mid( officePath, backslash + 1, len( officePath ) - backSlash ) 510*b1cdbd2cSJim Jagielski officePath = startPath + "/" + endPath 511*b1cdbd2cSJim Jagielski wend 512*b1cdbd2cSJim Jagielski else 513*b1cdbd2cSJim Jagielski MsgBox ("Error: Office path not found" + chr$(10) + chr$(10) + "Action: Please reinstall Scripting Framework",0,"Error" ) 514*b1cdbd2cSJim Jagielski REM Prompt user 515*b1cdbd2cSJim Jagielski end if 516*b1cdbd2cSJim Jagielski end if 517*b1cdbd2cSJim Jagielski 518*b1cdbd2cSJim Jagielski GetOfficePath() = officePath 519*b1cdbd2cSJim Jagielskiend function 520*b1cdbd2cSJim Jagielski 521*b1cdbd2cSJim Jagielski 522*b1cdbd2cSJim Jagielski 523*b1cdbd2cSJim JagielskiREM ----- File I/O functions ----- 524*b1cdbd2cSJim Jagielski 525*b1cdbd2cSJim Jagielski 526*b1cdbd2cSJim Jagielskifunction ReadXMLToArray( bindingType as string ) as boolean 527*b1cdbd2cSJim Jagielski On Error Goto ErrorHandler 528*b1cdbd2cSJim Jagielski if ( bindingType = "Event" ) then 529*b1cdbd2cSJim Jagielski xmlfilename = "eventbindings.xml" 530*b1cdbd2cSJim Jagielski endif 531*b1cdbd2cSJim Jagielski 532*b1cdbd2cSJim Jagielski simplefileaccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) 533*b1cdbd2cSJim Jagielski filestream = simplefileaccess.openFileRead( "file://" + GetOfficePath() + "user/config/soffice.cfg/" + xmlFileName ) 534*b1cdbd2cSJim Jagielski 535*b1cdbd2cSJim Jagielski textin = CreateUnoService( "com.sun.star.io.TextInputStream" ) 536*b1cdbd2cSJim Jagielski textin.setInputStream( filestream ) 537*b1cdbd2cSJim Jagielski 538*b1cdbd2cSJim Jagielski redim xmlFile( 400 ) as String 539*b1cdbd2cSJim Jagielski redim menuItems( 30 ) as String 540*b1cdbd2cSJim Jagielski redim menuItemLinePosition( 30 ) as Integer 541*b1cdbd2cSJim Jagielski redim scriptNames( 120 ) as string 542*b1cdbd2cSJim Jagielski redim scriptLinePosition( 120) as integer 543*b1cdbd2cSJim Jagielski 544*b1cdbd2cSJim Jagielski lineCount = 1 545*b1cdbd2cSJim Jagielski menuCount = 1 546*b1cdbd2cSJim Jagielski scriptCount = 1 547*b1cdbd2cSJim Jagielski 548*b1cdbd2cSJim Jagielski do while not textin.isEOF() 549*b1cdbd2cSJim Jagielski xmlline = textin.readLine() 550*b1cdbd2cSJim Jagielski xmlFile( lineCount ) = xmlline 551*b1cdbd2cSJim Jagielski 552*b1cdbd2cSJim Jagielski const menuItemWhiteSpace = 2 553*b1cdbd2cSJim Jagielski const menuXMLTag = "<menu:menu" 554*b1cdbd2cSJim Jagielski 555*b1cdbd2cSJim Jagielski if bindingType = "Menu" then 556*b1cdbd2cSJim Jagielski evaluateForMenu( xmlline, lineCount ) 557*b1cdbd2cSJim Jagielski elseif bindingType = "Key" then 558*b1cdbd2cSJim Jagielski processKeyXMLLine( lineCount, xmlline ) 559*b1cdbd2cSJim Jagielski elseif bindingType = "Event" then 560*b1cdbd2cSJim Jagielski evaluateForEvent( xmlline, lineCount ) 561*b1cdbd2cSJim Jagielski else 562*b1cdbd2cSJim Jagielski MsgBox ("Error: Couldn't determine file type" + chr$(10) + chr$(10) + "Action: Please reinstall Scripting Framework",0,"Error" ) 563*b1cdbd2cSJim Jagielski end if 564*b1cdbd2cSJim Jagielski lineCount = lineCount + 1 565*b1cdbd2cSJim Jagielski loop 566*b1cdbd2cSJim Jagielski 567*b1cdbd2cSJim Jagielski 'Set global variable numberOfLines (lineCount is one too many at end of the loop) 568*b1cdbd2cSJim Jagielski numberOfLines = lineCount - 1 569*b1cdbd2cSJim Jagielski 'Set global variable menuCount (it is one too many at end of the loop) 570*b1cdbd2cSJim Jagielski menuCount = menuCount - 1 571*b1cdbd2cSJim Jagielski 572*b1cdbd2cSJim Jagielski filestream.closeInput() 573*b1cdbd2cSJim Jagielski ReadXMLToArray( ) = true 574*b1cdbd2cSJim Jagielski Exit function 575*b1cdbd2cSJim Jagielski 576*b1cdbd2cSJim Jagielski ErrorHandler: 577*b1cdbd2cSJim Jagielski reset 578*b1cdbd2cSJim Jagielski MsgBox ("Error: Unable to read Star Office configuration file - " + xmlFileName + chr$(10) + chr$(10) + "Action: Please reinstall Scripting Framework",0,"Error" ) 579*b1cdbd2cSJim Jagielski ReadXMLToArray( ) = false 580*b1cdbd2cSJim Jagielskiend function 581*b1cdbd2cSJim Jagielski 582*b1cdbd2cSJim Jagielski 583*b1cdbd2cSJim Jagielski 584*b1cdbd2cSJim Jagielskisub evaluateForMenu( xmlline as string, lineCount as integer ) 585*b1cdbd2cSJim Jagielski const menuItemWhiteSpace = 2 586*b1cdbd2cSJim Jagielski const menuXMLTag = "<menu:menu" 587*b1cdbd2cSJim Jagielski 'If the xml line is a top-level menu 588*b1cdbd2cSJim Jagielski if instr( xmlline, menuXMLTag ) = menuItemWhiteSpace then 589*b1cdbd2cSJim Jagielski menuLabel = ExtractLabelFromXMLLine( xmlline ) 590*b1cdbd2cSJim Jagielski menuItems( menuCount ) = menuLabel 591*b1cdbd2cSJim Jagielski menuItemLinePosition( menuCount ) = lineCount 592*b1cdbd2cSJim Jagielski menuCount = menuCount + 1 593*b1cdbd2cSJim Jagielski end if 594*b1cdbd2cSJim Jagielskiend sub 595*b1cdbd2cSJim Jagielski 596*b1cdbd2cSJim Jagielskisub evaluateForEvent( xmlline as string, lineCount as integer ) 597*b1cdbd2cSJim Jagielski dim eventName as String 598*b1cdbd2cSJim Jagielski 'if the xml line identifies a script or SB macro 599*b1cdbd2cSJim Jagielski dim scriptName as string 600*b1cdbd2cSJim Jagielski dim lineNumber as integer 601*b1cdbd2cSJim Jagielski if instr( xmlline, "event:language=" + chr$(34) + "Script" ) > 0 then 602*b1cdbd2cSJim Jagielski eventName = ExtractEventNameFromXMLLine( xmlline ) 603*b1cdbd2cSJim Jagielski scriptName = ExtractEventScriptFromXMLLine( xmlline ) 604*b1cdbd2cSJim Jagielski lineNumber = lineCount 605*b1cdbd2cSJim Jagielski elseif instr( xmlline, "event:language=" + chr$(34) + "StarBasic" ) > 0 then 606*b1cdbd2cSJim Jagielski eventName = ExtractEventNameFromXMLLine( xmlline ) 607*b1cdbd2cSJim Jagielski scriptName = "Allocated to Office function" 608*b1cdbd2cSJim Jagielski lineNumber = 1 609*b1cdbd2cSJim Jagielski end if 610*b1cdbd2cSJim Jagielski 611*b1cdbd2cSJim Jagielski 'Need to sequence to find the corresponding index for the event type 612*b1cdbd2cSJim Jagielski for n = 0 to ubound( allEventTypesApp() ) 613*b1cdbd2cSJim Jagielski if ( eventName = allEventTypes( n ).Name ) then 614*b1cdbd2cSJim Jagielski allEventTypesApp( n ).Name = scriptName 615*b1cdbd2cSJim Jagielski allEventTypesApp( n ).Value = lineNumber 616*b1cdbd2cSJim Jagielski end if 617*b1cdbd2cSJim Jagielski next n 618*b1cdbd2cSJim Jagielskiend sub 619*b1cdbd2cSJim Jagielski 620*b1cdbd2cSJim Jagielski 621*b1cdbd2cSJim Jagielskifunction isOKscriptProps( props() as Object, eventName as string ) as Boolean 622*b1cdbd2cSJim Jagielski On Error Goto ErrorHandler 623*b1cdbd2cSJim Jagielski props = ThisComponent.getEvents().getByName( eventName ) 624*b1cdbd2cSJim Jagielski test = ubound( props() ) 625*b1cdbd2cSJim Jagielski isOKscriptProps() = true 626*b1cdbd2cSJim Jagielski exit function 627*b1cdbd2cSJim Jagielski 628*b1cdbd2cSJim Jagielski ErrorHandler: 629*b1cdbd2cSJim Jagielski isOKscriptProps() = false 630*b1cdbd2cSJim Jagielskiend function 631*b1cdbd2cSJim Jagielski 632*b1cdbd2cSJim Jagielskisub ReadEventsFromDoc() 633*b1cdbd2cSJim Jagielski On Error Goto ErrorHandler 634*b1cdbd2cSJim Jagielski 635*b1cdbd2cSJim Jagielski eventSupplier = ThisComponent 636*b1cdbd2cSJim Jagielski for n = 0 to ubound( allEventTypes() ) 637*b1cdbd2cSJim Jagielski Dim scriptProps() as Object 638*b1cdbd2cSJim Jagielski if (isOKscriptProps( scriptProps(), allEventTypes( n ).Name) ) then 639*b1cdbd2cSJim Jagielski if ( ubound( scriptProps ) > 0 ) then 640*b1cdbd2cSJim Jagielski if ( scriptProps(0).Value = "Script" ) then 641*b1cdbd2cSJim Jagielski 'Script binding 642*b1cdbd2cSJim Jagielski allEventTypesDoc(n).Name = scriptProps(1).Value 643*b1cdbd2cSJim Jagielski allEventTypesDoc(n).value = 2 644*b1cdbd2cSJim Jagielski elseif( scriptProps(0).Value = "StarBasic" ) then 645*b1cdbd2cSJim Jagielski 'StarBasic macro 646*b1cdbd2cSJim Jagielski allEventTypesDoc(n).Name = "Allocated to Office function" 647*b1cdbd2cSJim Jagielski allEventTypesDoc(n).value = 1 648*b1cdbd2cSJim Jagielski end if 649*b1cdbd2cSJim Jagielski end if 650*b1cdbd2cSJim Jagielski end if 651*b1cdbd2cSJim Jagielski next n 652*b1cdbd2cSJim Jagielski 653*b1cdbd2cSJim Jagielski exit sub 654*b1cdbd2cSJim Jagielski 655*b1cdbd2cSJim Jagielski ' eventProps is undefined if there are no event bindings in the doc 656*b1cdbd2cSJim Jagielski ErrorHandler: 657*b1cdbd2cSJim Jagielski reset 658*b1cdbd2cSJim Jagielskiend sub 659*b1cdbd2cSJim Jagielski 660*b1cdbd2cSJim Jagielski 661*b1cdbd2cSJim Jagielskisub WriteEventsToDoc() 662*b1cdbd2cSJim Jagielski On Error Goto ErrorHandler 663*b1cdbd2cSJim Jagielski 664*b1cdbd2cSJim Jagielski eventSupplier = ThisComponent 665*b1cdbd2cSJim Jagielski for n = 0 to ubound( allEventTypes() ) 666*b1cdbd2cSJim Jagielski scriptName = allEventTypesDoc( n ).Name 667*b1cdbd2cSJim Jagielski eventName = allEventTypes( n ).Name 668*b1cdbd2cSJim Jagielski if( allEventTypesDoc( n ).Value > 1 ) then 'script 669*b1cdbd2cSJim Jagielski 'add to doc 670*b1cdbd2cSJim Jagielski AddEventToDocViaAPI( scriptName, eventName ) 671*b1cdbd2cSJim Jagielski elseif( allEventTypesDoc( n ).Value = 0 ) then 'blank (this will "remove" already blank entries) 672*b1cdbd2cSJim Jagielski 'remove from doc 673*b1cdbd2cSJim Jagielski RemoveEventFromDocViaAPI( eventName ) 674*b1cdbd2cSJim Jagielski endif 675*b1cdbd2cSJim Jagielski 'Otherwise it is a StarBasic binding - leave alone 676*b1cdbd2cSJim Jagielski next n 677*b1cdbd2cSJim Jagielski 'Mark document as modified ( should happen automatically as a result of calling the API ) 678*b1cdbd2cSJim Jagielski ThisComponent.CurrentController.getModel().setModified( True ) 679*b1cdbd2cSJim Jagielski exit sub 680*b1cdbd2cSJim Jagielski 681*b1cdbd2cSJim Jagielski ErrorHandler: 682*b1cdbd2cSJim Jagielski reset 683*b1cdbd2cSJim Jagielski msgbox( "Error calling UNO API for writing event bindings to the document" ) 684*b1cdbd2cSJim Jagielskiend sub 685*b1cdbd2cSJim Jagielski 686*b1cdbd2cSJim Jagielski 687*b1cdbd2cSJim Jagielskisub RemoveEventFromDocViaAPI( event as string ) 688*b1cdbd2cSJim Jagielski dim document as object 689*b1cdbd2cSJim Jagielski dim dispatcher as object 690*b1cdbd2cSJim Jagielski dim parser as object 691*b1cdbd2cSJim Jagielski dim url as new com.sun.star.util.URL 692*b1cdbd2cSJim Jagielski 693*b1cdbd2cSJim Jagielski document = ThisComponent.CurrentController.Frame 694*b1cdbd2cSJim Jagielski parser = createUnoService("com.sun.star.util.URLTransformer") 695*b1cdbd2cSJim Jagielski dim args(0) as new com.sun.star.beans.PropertyValue 696*b1cdbd2cSJim Jagielski args(0).Name = "" 697*b1cdbd2cSJim Jagielski args(0).Value = event 698*b1cdbd2cSJim Jagielski 699*b1cdbd2cSJim Jagielski url.Complete = "script://_$ScriptFrmwrkHelper.removeEvent?" _ 700*b1cdbd2cSJim Jagielski + "language=Java&function=ScriptFrmwrkHelper.removeEvent" _ 701*b1cdbd2cSJim Jagielski + "&location=share" 702*b1cdbd2cSJim Jagielski 703*b1cdbd2cSJim Jagielski parser.parseStrict(url) 704*b1cdbd2cSJim Jagielski disp = document.queryDispatch(url,"",0) 705*b1cdbd2cSJim Jagielski disp.dispatch(url,args()) 706*b1cdbd2cSJim Jagielskiend sub 707*b1cdbd2cSJim Jagielski 708*b1cdbd2cSJim Jagielski 709*b1cdbd2cSJim Jagielskisub AddEventToDocViaAPI( scriptName as string, eventName as string ) 710*b1cdbd2cSJim Jagielski dim properties( 1 ) as new com.sun.star.beans.PropertyValue 711*b1cdbd2cSJim Jagielski properties( 0 ).Name = "EventType" 712*b1cdbd2cSJim Jagielski properties( 0 ).Value = "Script" 713*b1cdbd2cSJim Jagielski properties( 1 ).Name = "Script" 714*b1cdbd2cSJim Jagielski properties( 1 ).Value = scriptName 715*b1cdbd2cSJim Jagielski 716*b1cdbd2cSJim Jagielski eventSupplier = ThisComponent 717*b1cdbd2cSJim Jagielski nameReplace = eventSupplier.getEvents() 718*b1cdbd2cSJim Jagielski nameReplace.replaceByName( eventName, properties() ) 719*b1cdbd2cSJim Jagielskiend sub 720*b1cdbd2cSJim Jagielski 721*b1cdbd2cSJim Jagielski 722*b1cdbd2cSJim Jagielski' returns 0 for Fkey 723*b1cdbd2cSJim Jagielski' 1 for digit 724*b1cdbd2cSJim Jagielski' 2 for letter 725*b1cdbd2cSJim Jagielski 726*b1cdbd2cSJim Jagielskifunction getKeyTypeOffset( key as String ) as integer 727*b1cdbd2cSJim Jagielski length = Len( key ) 728*b1cdbd2cSJim Jagielski if ( length > 1 ) then 729*b1cdbd2cSJim Jagielski getKeyTypeOffset() = 0 730*b1cdbd2cSJim Jagielski 731*b1cdbd2cSJim Jagielski elseif ( key >= "0" AND key <= "9" ) then 732*b1cdbd2cSJim Jagielski getKeyTypeOffset() = 1 733*b1cdbd2cSJim Jagielski else 734*b1cdbd2cSJim Jagielski getKeyTypeOffset() = 2 735*b1cdbd2cSJim Jagielski end if 736*b1cdbd2cSJim Jagielskiend function 737*b1cdbd2cSJim Jagielski 738*b1cdbd2cSJim Jagielskifunction getKeyGroupIndex( key as String, offset as Integer ) as Integer 739*b1cdbd2cSJim Jagielski ' Keys we are interested in are A - Z, F2 - F12, 0 - 9 anything else should 740*b1cdbd2cSJim Jagielski ' ensure -1 is returned 741*b1cdbd2cSJim Jagielski cutKey = mid( key,2 ) 742*b1cdbd2cSJim Jagielski 743*b1cdbd2cSJim Jagielski if ( cutKey <> "" ) then 744*b1cdbd2cSJim Jagielski acode = asc ( mid( cutKey,1,1) ) 745*b1cdbd2cSJim Jagielski if ( acode > 57 ) then 746*b1cdbd2cSJim Jagielski getKeyGroupIndex() = -1 747*b1cdbd2cSJim Jagielski exit function 748*b1cdbd2cSJim Jagielski end if 749*b1cdbd2cSJim Jagielski end if 750*b1cdbd2cSJim Jagielski 751*b1cdbd2cSJim Jagielski select case offset 752*b1cdbd2cSJim Jagielski case 0: 753*b1cdbd2cSJim Jagielski num = cint( cutKey ) 754*b1cdbd2cSJim Jagielski getKeyGroupIndex() = num - 1 755*b1cdbd2cSJim Jagielski exit function 756*b1cdbd2cSJim Jagielski case 1: 757*b1cdbd2cSJim Jagielski num = asc( key ) - 48 758*b1cdbd2cSJim Jagielski getKeyGroupIndex() = num 759*b1cdbd2cSJim Jagielski exit function 760*b1cdbd2cSJim Jagielski case 2: 761*b1cdbd2cSJim Jagielski num = asc( key ) - 65 762*b1cdbd2cSJim Jagielski getKeyGroupIndex() = num 763*b1cdbd2cSJim Jagielski exit function 764*b1cdbd2cSJim Jagielski end select 765*b1cdbd2cSJim Jagielski getKeyGroupIndex() = -1 766*b1cdbd2cSJim Jagielskiend function 767*b1cdbd2cSJim Jagielski 768*b1cdbd2cSJim JagielskiSub processKeyXMLLine( lineCount as Integer, xmlline as String ) 769*b1cdbd2cSJim Jagielski 770*b1cdbd2cSJim Jagielski if instr( xmlline, "<accel:item" ) > 0 then 771*b1cdbd2cSJim Jagielski shift = false 772*b1cdbd2cSJim Jagielski control = false 773*b1cdbd2cSJim Jagielski if instr( xmlline, "accel:shift="+chr$(34)+"true"+chr$(34) ) > 0 then 774*b1cdbd2cSJim Jagielski shift = true 775*b1cdbd2cSJim Jagielski end if 776*b1cdbd2cSJim Jagielski if instr( xmlFile( lineCount ), "accel:mod1="+chr$(34)+"true"+chr$(34) ) > 0 then 777*b1cdbd2cSJim Jagielski control = true 778*b1cdbd2cSJim Jagielski end if 779*b1cdbd2cSJim Jagielski offsetIntoArrayOfArrays = -1 'default unknown 780*b1cdbd2cSJim Jagielski if ( control AND shift ) then 781*b1cdbd2cSJim Jagielski offsetIntoArrayOfArrays = 0 782*b1cdbd2cSJim Jagielski elseif ( control ) then 783*b1cdbd2cSJim Jagielski offsetIntoArrayOfArrays = 3 784*b1cdbd2cSJim Jagielski elseif ( shift ) then 785*b1cdbd2cSJim Jagielski offsetIntoArrayOfArrays = 6 786*b1cdbd2cSJim Jagielski endif 787*b1cdbd2cSJim Jagielski ' Calculate which of the 7 key group arrays we need to point to 788*b1cdbd2cSJim Jagielski key = ExtractKeyCodeFromXMLLine( xmlline ) 789*b1cdbd2cSJim Jagielski keyTypeOffset = getKeyTypeOffset( key ) 790*b1cdbd2cSJim Jagielski offsetIntoArrayOfArrays = offsetIntoArrayOfArrays + keyTypeOffset 791*b1cdbd2cSJim Jagielski 792*b1cdbd2cSJim Jagielski ' Calculate from the key the offset into key group array we need to point to 793*b1cdbd2cSJim Jagielski KeyGroupIndex = getKeyGroupIndex( key, keyTypeOffset ) 794*b1cdbd2cSJim Jagielski if ( offsetIntoArrayOfArrays = -1 ) then 795*b1cdbd2cSJim Jagielski 'Unknown key group, no processing necessary 796*b1cdbd2cSJim Jagielski Exit Sub 797*b1cdbd2cSJim Jagielski end if 798*b1cdbd2cSJim Jagielski if ( KeyGroupIndex > -1 ) then 799*b1cdbd2cSJim Jagielski 800*b1cdbd2cSJim Jagielski ' Determine if a script framework binding is present or not 801*b1cdbd2cSJim Jagielski if instr( xmlline, "script://" ) > 0 then 802*b1cdbd2cSJim Jagielski ' its one of ours so update its details 803*b1cdbd2cSJim Jagielski scriptName = ExtractScriptIdFromXMLLine( xmlline ) 804*b1cdbd2cSJim Jagielski 805*b1cdbd2cSJim Jagielski keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value = lineCount 806*b1cdbd2cSJim Jagielski keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Name = scriptName 807*b1cdbd2cSJim Jagielski else 808*b1cdbd2cSJim Jagielski keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value = 1 809*b1cdbd2cSJim Jagielski keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Name = "" 810*b1cdbd2cSJim Jagielski 811*b1cdbd2cSJim Jagielski end if 812*b1cdbd2cSJim Jagielski end if 813*b1cdbd2cSJim Jagielski end if 814*b1cdbd2cSJim JagielskiEnd Sub 815*b1cdbd2cSJim Jagielski 816*b1cdbd2cSJim JagielskiSub WriteXMLFromArray() 817*b1cdbd2cSJim Jagielski On Error Goto ErrorHandler 818*b1cdbd2cSJim Jagielski cfgFile = GetOfficePath() + "user/config/soffice.cfg/" + xmlFileName 819*b1cdbd2cSJim Jagielski updateCfgFile( cfgFile ) 820*b1cdbd2cSJim Jagielski 'if ( false ) then' config stuff not in build yet 821*b1cdbd2cSJim Jagielski if ( true ) then 822*b1cdbd2cSJim Jagielski updateConfig( xmlFileName ) 823*b1cdbd2cSJim Jagielski else 824*b1cdbd2cSJim Jagielski msgbox ("Office must be restarted before your changes will take effect."+ chr$(10)+"Also close the Office QuickStarter (Windows and Linux)", 48, "Assign Script (Java) To Menu" ) 825*b1cdbd2cSJim Jagielski endif 826*b1cdbd2cSJim Jagielski Exit Sub 827*b1cdbd2cSJim Jagielski 828*b1cdbd2cSJim Jagielski ErrorHandler: 829*b1cdbd2cSJim Jagielski reset 830*b1cdbd2cSJim Jagielski MsgBox ("Error: Unable to write to Star Office configuration file" + chr$(10) + "/" + GetOfficePath() + "user/config/soffice.cfg/" +xmlFileName + chr$(10) + chr$(10) + "Action: Please make sure you have write access to this file",0,"Error" ) 831*b1cdbd2cSJim Jagielskiend Sub 832*b1cdbd2cSJim Jagielski 833*b1cdbd2cSJim Jagielski 834*b1cdbd2cSJim JagielskiSub UpdateCfgFile ( fileName as String ) 835*b1cdbd2cSJim Jagielski dim ScriptProvider as Object 836*b1cdbd2cSJim Jagielski dim Script as Object 837*b1cdbd2cSJim Jagielski dim args(1) 838*b1cdbd2cSJim Jagielski dim displayDialogFlag as boolean 839*b1cdbd2cSJim Jagielski displayDialogFlag = false 840*b1cdbd2cSJim Jagielski args(0) = ThisComponent 841*b1cdbd2cSJim Jagielski args(1) = displayDialogFlag 842*b1cdbd2cSJim Jagielski 843*b1cdbd2cSJim Jagielski ScriptProvider = createUnoService("drafts.com.sun.star.script.framework.provider.MasterScriptProvider") 844*b1cdbd2cSJim Jagielski ScriptProvider.initialize( args() ) 845*b1cdbd2cSJim Jagielski Script = ScriptProvider.getScript("script://_$ScriptFrmwrkHelper.updateCfgFile?" _ 846*b1cdbd2cSJim Jagielski + "language=Java&function=ScriptFrmwrkHelper.updateCfgFile&location=share") 847*b1cdbd2cSJim Jagielski Dim inArgs(2) 848*b1cdbd2cSJim Jagielski Dim outArgs() 849*b1cdbd2cSJim Jagielski Dim outIndex() 850*b1cdbd2cSJim Jagielski dim localNumLines as integer 851*b1cdbd2cSJim Jagielski 852*b1cdbd2cSJim Jagielski inArgs(0) = xmlFile() 853*b1cdbd2cSJim Jagielski inArgs(1) = fileName 854*b1cdbd2cSJim Jagielski inArgs(2) = numberOfLines 855*b1cdbd2cSJim Jagielski Script.invoke( inArgs(), outIndex(), outArgs() ) 856*b1cdbd2cSJim JagielskiEnd Sub 857*b1cdbd2cSJim Jagielski 858*b1cdbd2cSJim Jagielskisub UpdateConfig( a$ ) 859*b1cdbd2cSJim Jagielski dim document as object 860*b1cdbd2cSJim Jagielski dim dispatcher as object 861*b1cdbd2cSJim Jagielski dim parser as object 862*b1cdbd2cSJim Jagielski dim disp as object 863*b1cdbd2cSJim Jagielski dim url as new com.sun.star.util.URL 864*b1cdbd2cSJim Jagielski document = ThisComponent.CurrentController.Frame 865*b1cdbd2cSJim Jagielski parser = createUnoService("com.sun.star.util.URLTransformer") 866*b1cdbd2cSJim Jagielski dim args1(0) as new com.sun.star.beans.PropertyValue 867*b1cdbd2cSJim Jagielski args1(0).Name = "StreamName" 868*b1cdbd2cSJim Jagielski args1(0).Value = a$ 869*b1cdbd2cSJim Jagielski url.Complete = ".uno:UpdateConfiguration" 870*b1cdbd2cSJim Jagielski parser.parseStrict(url) 871*b1cdbd2cSJim Jagielski disp = document.queryDispatch(url,"",0) 872*b1cdbd2cSJim Jagielski disp.dispatch(url,args1()) 873*b1cdbd2cSJim Jagielski 874*b1cdbd2cSJim JagielskiEnd Sub 875*b1cdbd2cSJim Jagielski 876*b1cdbd2cSJim Jagielski 877*b1cdbd2cSJim Jagielskisub AddNewEventBinding( scriptName as string, eventPosition as integer, isApp as boolean ) 878*b1cdbd2cSJim Jagielski event = allEventTypes( eventPosition ).Name 879*b1cdbd2cSJim Jagielski 'dim scriptProp as new com.sun.star.beans.PropertyValue 880*b1cdbd2cSJim Jagielski if isApp then 881*b1cdbd2cSJim Jagielski 'scriptProp.Name = scriptName 882*b1cdbd2cSJim Jagielski 'scriptProp.Value = numberOfLines 883*b1cdbd2cSJim Jagielski allEventTypesApp( eventPosition ).Name = scriptName 884*b1cdbd2cSJim Jagielski allEventTypesApp( eventPosition ).Value = numberOfLines 885*b1cdbd2cSJim Jagielski 886*b1cdbd2cSJim Jagielski newline = " <event:event event:name=" + chr$(34) + event + chr$(34) 887*b1cdbd2cSJim Jagielski newline = newline + " event:language=" + chr$(34) + "Script" + chr$(34) + " xlink:href=" + chr$(34) 888*b1cdbd2cSJim Jagielski newline = newline + scriptName + chr$(34) + " xlink:type=" + chr$(34) + "simple" + chr$(34) + "/>" 889*b1cdbd2cSJim Jagielski xmlFile( numberOfLines ) = newline 890*b1cdbd2cSJim Jagielski xmlFile( numberOfLines + 1 ) = "</event:events>" 891*b1cdbd2cSJim Jagielski numberOfLines = numberOfLines + 1 892*b1cdbd2cSJim Jagielski else 893*b1cdbd2cSJim Jagielski 'scriptProp.Name = scriptName 894*b1cdbd2cSJim Jagielski 'scriptProp.Value = 2 895*b1cdbd2cSJim Jagielski allEventTypesDoc( eventPosition ).Name = scriptName 896*b1cdbd2cSJim Jagielski allEventTypesDoc( eventPosition ).Value = 2 897*b1cdbd2cSJim Jagielski end if 898*b1cdbd2cSJim Jagielskiend sub 899*b1cdbd2cSJim Jagielski 900*b1cdbd2cSJim JagielskiREM ----- Array update functions ----- 901*b1cdbd2cSJim Jagielski 902*b1cdbd2cSJim Jagielski 903*b1cdbd2cSJim Jagielskisub AddNewMenuBinding( newScript as string, newMenuLabel as string, newLinePosition as integer ) 904*b1cdbd2cSJim Jagielski dim newXmlFile( 400 ) as string 905*b1cdbd2cSJim Jagielski dim newLineInserted as boolean 906*b1cdbd2cSJim Jagielski dim lineCounter as integer 907*b1cdbd2cSJim Jagielski lineCounter = 1 908*b1cdbd2cSJim Jagielski 909*b1cdbd2cSJim Jagielski do while lineCounter <= numberOfLines 910*b1cdbd2cSJim Jagielski if not newLineInserted then 911*b1cdbd2cSJim Jagielski REM If the line number is the position at which to insert the new line 912*b1cdbd2cSJim Jagielski if lineCounter = newLinePosition then 913*b1cdbd2cSJim Jagielski if( instr( xmlFile( lineCounter ), "<menu:menupopup>" ) > 0 ) then 914*b1cdbd2cSJim Jagielski indent = GetMenuWhiteSpace( xmlFile( newLinePosition + 1 ) ) 915*b1cdbd2cSJim Jagielski newXmlFile( lineCounter ) = xmlFile( lineCounter ) 916*b1cdbd2cSJim Jagielski newXmlFile( lineCounter + 1 ) = ( indent + "<menu:menuitem menu:id="+chr$(34) + newScript + chr$(34)+" menu:helpid="+chr$(34)+"1929"+chr$(34)+" menu:label="+chr$(34)+ newMenuLabel + chr$(34)+"/>" ) 917*b1cdbd2cSJim Jagielski else 918*b1cdbd2cSJim Jagielski indent = GetMenuWhiteSpace( xmlFile( newLinePosition - 1 ) ) 919*b1cdbd2cSJim Jagielski newXmlFile( lineCounter ) = ( indent + "<menu:menuitem menu:id="+chr$(34) + newScript + chr$(34)+" menu:helpid="+chr$(34)+"1929"+chr$(34)+" menu:label="+chr$(34)+ newMenuLabel + chr$(34)+"/>" ) 920*b1cdbd2cSJim Jagielski newXmlFile( lineCounter + 1 ) = xmlFile( lineCounter ) 921*b1cdbd2cSJim Jagielski end if 922*b1cdbd2cSJim Jagielski REM added -1 for debug --> 923*b1cdbd2cSJim Jagielski ' indent = GetMenuWhiteSpace( xmlFile( newLinePosition ) ) 924*b1cdbd2cSJim Jagielski ' newXmlFile( lineCounter ) = ( indent + "<menu:menuitem menu:id="+chr$(34)+"script://" + newScript + chr$(34)+" menu:helpid="+chr$(34)+"1929"+chr$(34)+" menu:label="+chr$(34)+ newMenuLabel + chr$(34)+"/>" ) 925*b1cdbd2cSJim Jagielski ' newXmlFile( lineCounter + 1 ) = xmlFile( lineCounter ) 926*b1cdbd2cSJim Jagielski newLineInserted = true 927*b1cdbd2cSJim Jagielski else 928*b1cdbd2cSJim Jagielski newXmlFile( lineCounter ) = xmlFile( lineCounter ) 929*b1cdbd2cSJim Jagielski end if 930*b1cdbd2cSJim Jagielski else 931*b1cdbd2cSJim Jagielski REM if the new line has been inserted the read from one position behind 932*b1cdbd2cSJim Jagielski newXmlFile( lineCounter + 1 ) = xmlFile( lineCounter ) 933*b1cdbd2cSJim Jagielski end if 934*b1cdbd2cSJim Jagielski lineCounter = lineCounter + 1 935*b1cdbd2cSJim Jagielski loop 936*b1cdbd2cSJim Jagielski 937*b1cdbd2cSJim Jagielski numberOfLines = numberOfLines + 1 938*b1cdbd2cSJim Jagielski 939*b1cdbd2cSJim Jagielski REM read the new file into the global array 940*b1cdbd2cSJim Jagielski for n = 1 to numberOfLines 941*b1cdbd2cSJim Jagielski xmlFile( n ) = newXmlFile( n ) 942*b1cdbd2cSJim Jagielski next n 943*b1cdbd2cSJim Jagielski 944*b1cdbd2cSJim Jagielskiend sub 945*b1cdbd2cSJim Jagielski 946*b1cdbd2cSJim Jagielski 947*b1cdbd2cSJim Jagielskisub AddNewKeyBinding( scriptName as string, shift as boolean, control as boolean, key as string ) 948*b1cdbd2cSJim Jagielski 949*b1cdbd2cSJim Jagielski dim keyCombo as string 950*b1cdbd2cSJim Jagielski newLine = " <accel:item accel:code="+chr$(34)+"KEY_" + key +chr$(34) 951*b1cdbd2cSJim Jagielski if shift then 952*b1cdbd2cSJim Jagielski keyCombo = "SHIFT + " 953*b1cdbd2cSJim Jagielski newLine = newLine + " accel:shift="+chr$(34)+"true"+chr$(34) 954*b1cdbd2cSJim Jagielski end if 955*b1cdbd2cSJim Jagielski if control then 956*b1cdbd2cSJim Jagielski keyCombo = keyCombo + "CONTROL + " 957*b1cdbd2cSJim Jagielski newLine = newLine + " accel:mod1="+chr$(34)+"true"+chr$(34) 958*b1cdbd2cSJim Jagielski end if 959*b1cdbd2cSJim Jagielski keyCombo = keyCombo + key 960*b1cdbd2cSJim Jagielski newLine = newLine + " xlink:href="+chr$(34)+ scriptName +chr$(34) +"/>" 961*b1cdbd2cSJim Jagielski 962*b1cdbd2cSJim Jagielski if ( control AND shift ) then 963*b1cdbd2cSJim Jagielski offsetIntoArrayOfArrays = 0 964*b1cdbd2cSJim Jagielski elseif ( control ) then 965*b1cdbd2cSJim Jagielski offsetIntoArrayOfArrays = 3 966*b1cdbd2cSJim Jagielski elseif ( shift ) then 967*b1cdbd2cSJim Jagielski offsetIntoArrayOfArrays = 6 968*b1cdbd2cSJim Jagielski endif 969*b1cdbd2cSJim Jagielski 970*b1cdbd2cSJim Jagielski keyTypeOffset = getKeyTypeOffset( key ) 971*b1cdbd2cSJim Jagielski offsetIntoArrayOfArrays = offsetIntoArrayOfArrays + keyTypeOffset 972*b1cdbd2cSJim Jagielski ' Calculate from the key the offset into key group array we need to point to 973*b1cdbd2cSJim Jagielski KeyGroupIndex = getKeyGroupIndex( key, keyTypeOffset ) 974*b1cdbd2cSJim Jagielski 975*b1cdbd2cSJim Jagielski ' if key is allready allocated to a script then just reallocate 976*b1cdbd2cSJim Jagielski if ( keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value > 1 ) then 977*b1cdbd2cSJim Jagielski 978*b1cdbd2cSJim Jagielski keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Name = scriptName 979*b1cdbd2cSJim Jagielski 'replace line in xml file 980*b1cdbd2cSJim Jagielski xmlFile( keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value ) = newLine 981*b1cdbd2cSJim Jagielski else 982*b1cdbd2cSJim Jagielski ' this is a new binding, create a new line in xml file 983*b1cdbd2cSJim Jagielski for n = 1 to numberOfLines 984*b1cdbd2cSJim Jagielski if n = numberOfLines then 985*b1cdbd2cSJim Jagielski xmlFile( n ) = newLine 986*b1cdbd2cSJim Jagielski xmlFile( n + 1 ) = "</accel:acceleratorlist>" 987*b1cdbd2cSJim Jagielski exit for 988*b1cdbd2cSJim Jagielski else 989*b1cdbd2cSJim Jagielski xmlFile( n ) = xmlFile( n ) 990*b1cdbd2cSJim Jagielski end if 991*b1cdbd2cSJim Jagielski next n 992*b1cdbd2cSJim Jagielski 993*b1cdbd2cSJim Jagielski keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Value = n 994*b1cdbd2cSJim Jagielski keyAllocationMap( offsetIntoArrayOfArrays, KeyGroupIndex ).Name = scriptName 995*b1cdbd2cSJim Jagielski numberOfLines = numberOfLines + 1 996*b1cdbd2cSJim Jagielski endif 997*b1cdbd2cSJim Jagielski 998*b1cdbd2cSJim Jagielskiend sub 999*b1cdbd2cSJim Jagielski 1000*b1cdbd2cSJim Jagielski 1001*b1cdbd2cSJim JagielskiSub RemoveBinding( lineToRemove as Integer ) 1002*b1cdbd2cSJim Jagielski xmlFile( lineToRemove ) = "" 1003*b1cdbd2cSJim Jagielskiend Sub 1004*b1cdbd2cSJim Jagielski 1005*b1cdbd2cSJim JagielskiREM Adds or removes the starting xml line positions for each top-level menu after the menu with the added script 1006*b1cdbd2cSJim Jagielskisub UpdateTopLevelMenus( topLevelMenuPosition as integer, addLine as boolean ) 1007*b1cdbd2cSJim Jagielski for n = topLevelMenuPosition to 8 1008*b1cdbd2cSJim Jagielski if addLine then 1009*b1cdbd2cSJim Jagielski menuItemLinePosition( n ) = menuItemLinePosition( n ) + 1 1010*b1cdbd2cSJim Jagielski 1011*b1cdbd2cSJim Jagielski end if 1012*b1cdbd2cSJim Jagielski next n 1013*b1cdbd2cSJim Jagielskiend sub 1014*b1cdbd2cSJim Jagielski 1015*b1cdbd2cSJim Jagielski 1016*b1cdbd2cSJim JagielskiREM Remove scriptNames and scriptLinePosition entries 1017*b1cdbd2cSJim Jagielskisub RemoveScriptNameAndPosition( keyComboPosition ) 1018*b1cdbd2cSJim Jagielski dim updatedScriptNames( 120 ) as string 1019*b1cdbd2cSJim Jagielski dim updatedScriptLinePosition( 120 ) as integer 1020*b1cdbd2cSJim Jagielski dim removedScript as boolean 1021*b1cdbd2cSJim Jagielski removedScript = false 1022*b1cdbd2cSJim Jagielski 1023*b1cdbd2cSJim Jagielski for n = 1 to scriptCount 1024*b1cdbd2cSJim Jagielski if not removedScript then 1025*b1cdbd2cSJim Jagielski if not( n = keyComboPosition ) then 1026*b1cdbd2cSJim Jagielski updatedScriptNames( n ) = scriptNames( n ) 1027*b1cdbd2cSJim Jagielski else 1028*b1cdbd2cSJim Jagielski removedScript = true 1029*b1cdbd2cSJim Jagielski end if 1030*b1cdbd2cSJim Jagielski else 1031*b1cdbd2cSJim Jagielski updatedScriptNames( n - 1 ) = scriptNames( n ) 1032*b1cdbd2cSJim Jagielski end if 1033*b1cdbd2cSJim Jagielski next n 1034*b1cdbd2cSJim Jagielski scriptCount = scriptCount - 1 1035*b1cdbd2cSJim Jagielski 1036*b1cdbd2cSJim Jagielski for n = 1 to scriptCount 1037*b1cdbd2cSJim Jagielski scriptNames( n ) = updatedScriptNames( n ) 1038*b1cdbd2cSJim Jagielski next n 1039*b1cdbd2cSJim Jagielskiend sub 1040*b1cdbd2cSJim Jagielski 1041*b1cdbd2cSJim Jagielski 1042*b1cdbd2cSJim Jagielski 1043*b1cdbd2cSJim JagielskiREM ----- Populating Dialog Controls ----- 1044*b1cdbd2cSJim Jagielski 1045*b1cdbd2cSJim JagielskiSub PopulateLanguageCombo() 1046*b1cdbd2cSJim Jagielski langCombo = bindingDialog.getControl( "LanguageCombo" ) 1047*b1cdbd2cSJim Jagielski langCombo.removeItems( 0, langCombo.getItemCount() ) 1048*b1cdbd2cSJim Jagielski for n = LBOUND( languages() ) to UBOUND ( languages() ) 1049*b1cdbd2cSJim Jagielski langCombo.addItem( languages( n ), n ) 1050*b1cdbd2cSJim Jagielski next n 1051*b1cdbd2cSJim Jagielski langCombo.setDropDownLineCount( n ) 1052*b1cdbd2cSJim Jagielski langCombo.text = langCombo.getItem( 0 ) 1053*b1cdbd2cSJim JagielskiEnd Sub 1054*b1cdbd2cSJim Jagielski 1055*b1cdbd2cSJim JagielskiSub PopulateLocationCombo() 1056*b1cdbd2cSJim Jagielski dim ScriptProvider as Object 1057*b1cdbd2cSJim Jagielski dim args(1) 1058*b1cdbd2cSJim Jagielski dim displayDialogFlag as boolean 1059*b1cdbd2cSJim Jagielski displayDialogFlag = false 1060*b1cdbd2cSJim Jagielski args(0) = ThisComponent 1061*b1cdbd2cSJim Jagielski args(1) = displayDialogFlag 1062*b1cdbd2cSJim Jagielski 1063*b1cdbd2cSJim Jagielski ScriptProvider = createUnoService("drafts.com.sun.star.script.framework.provider.MasterScriptProvider") 1064*b1cdbd2cSJim Jagielski ScriptProvider.initialize( args() ) 1065*b1cdbd2cSJim Jagielski 1066*b1cdbd2cSJim Jagielski locCombo = bindingDialog.getControl( "LocationCombo" ) 1067*b1cdbd2cSJim Jagielski locCombo.removeItems( 0, locCombo.getItemCount() ) 1068*b1cdbd2cSJim Jagielski for n = LBOUND( locations() ) to UBOUND ( locations() ) 1069*b1cdbd2cSJim Jagielski locCombo.addItem( locations( n ), n ) 1070*b1cdbd2cSJim Jagielski next n 1071*b1cdbd2cSJim Jagielski locCombo.setDropDownLineCount( n ) 1072*b1cdbd2cSJim Jagielski locCombo.text = locCombo.getItem( 0 ) 1073*b1cdbd2cSJim JagielskiEnd Sub 1074*b1cdbd2cSJim Jagielski 1075*b1cdbd2cSJim Jagielskisub PopulateScriptList( lang as String, loc as String ) 1076*b1cdbd2cSJim Jagielski Dim detailedView as boolean 1077*b1cdbd2cSJim Jagielski detailedView = bindingDialog.Model.detail.state 1078*b1cdbd2cSJim Jagielski scriptList = bindingDialog.getControl( "ScriptList" ) 1079*b1cdbd2cSJim Jagielski scriptList.removeItems( 0, scriptList.getItemCount() ) 1080*b1cdbd2cSJim Jagielski 1081*b1cdbd2cSJim Jagielski smgr = getProcessServiceManager() 1082*b1cdbd2cSJim Jagielski context = smgr.getPropertyValue( "DefaultContext" ) 1083*b1cdbd2cSJim Jagielski scriptstoragemgr = context.getValueByName( "/singletons/drafts.com.sun.star.script.framework.storage.theScriptStorageManager" ) 1084*b1cdbd2cSJim Jagielski scriptLocationURI = "USER" 1085*b1cdbd2cSJim Jagielski if ( loc = "Share" ) then 1086*b1cdbd2cSJim Jagielski scriptLocationURI = "SHARE" 1087*b1cdbd2cSJim Jagielski elseif ( loc = "Document" )then 1088*b1cdbd2cSJim Jagielski document = StarDesktop.ActiveFrame.Controller.Model 1089*b1cdbd2cSJim Jagielski scriptLocationURI = document.getURL() 1090*b1cdbd2cSJim Jagielski elseif ( loc = "Filesystem" ) then 1091*b1cdbd2cSJim Jagielski REM populate the list from the filesysScripts list 1092*b1cdbd2cSJim Jagielski if(lang = "Java" ) then 1093*b1cdbd2cSJim Jagielski exit sub 1094*b1cdbd2cSJim Jagielski endif 1095*b1cdbd2cSJim Jagielski length = UBOUND( filesysScripts() ) 1096*b1cdbd2cSJim Jagielski if(length = -1) then 1097*b1cdbd2cSJim Jagielski exit sub 1098*b1cdbd2cSJim Jagielski endif 1099*b1cdbd2cSJim Jagielski for langIndex = lbound(languages()) to ubound(languages()) 1100*b1cdbd2cSJim Jagielski if ( lang = languages(langIndex)) then 1101*b1cdbd2cSJim Jagielski extns = extensions(langIndex) 1102*b1cdbd2cSJim Jagielski exit for 1103*b1cdbd2cSJim Jagielski endif 1104*b1cdbd2cSJim Jagielski next langIndex 1105*b1cdbd2cSJim Jagielski dim locnDisplayList( length ) as new com.sun.star.beans.PropertyValue 1106*b1cdbd2cSJim Jagielski for index = lbound(filesysScripts()) to ubound(filesysScripts()) 1107*b1cdbd2cSJim Jagielski scriptextn = filesysScripts( index ) 1108*b1cdbd2cSJim Jagielski pos = lastIndexOf( scriptextn, "." ) 1109*b1cdbd2cSJim Jagielski scriptextn = mid( scriptextn, pos + 1, len( scriptextn ) - pos ) 1110*b1cdbd2cSJim Jagielski 1111*b1cdbd2cSJim Jagielski for extnsIndex = lbound(extns()) to ubound(extns()) 1112*b1cdbd2cSJim Jagielski extn = extns(extnsIndex) 1113*b1cdbd2cSJim Jagielski if ( scriptextn = extn ) then 1114*b1cdbd2cSJim Jagielski if ( detailedView ) then 1115*b1cdbd2cSJim Jagielski locnDisplayList( index ).Name = filesysScripts( index ) 1116*b1cdbd2cSJim Jagielski locnDisplayList( index ).Value = filesysScripts( index ) 1117*b1cdbd2cSJim Jagielski else 1118*b1cdbd2cSJim Jagielski REM replace name with simplified view 1119*b1cdbd2cSJim Jagielski locnDisplayList( index ).Name = filesysScripts( index ) 1120*b1cdbd2cSJim Jagielski locnDisplayList( index ).Value = filesysScripts( index ) 1121*b1cdbd2cSJim Jagielski end if 1122*b1cdbd2cSJim Jagielski scriptList.addItem( locnDisplayList( index ).Name, index ) 1123*b1cdbd2cSJim Jagielski exit for 1124*b1cdbd2cSJim Jagielski end if 1125*b1cdbd2cSJim Jagielski next extnsIndex 1126*b1cdbd2cSJim Jagielski next index 1127*b1cdbd2cSJim Jagielski ScriptDisplayList(0) = locnDisplayList() 1128*b1cdbd2cSJim Jagielski scriptList.selectItemPos( 0, true ) 1129*b1cdbd2cSJim Jagielski 1130*b1cdbd2cSJim Jagielski REM !!!!At this point we exit the sub!!!! 1131*b1cdbd2cSJim Jagielski exit sub 1132*b1cdbd2cSJim Jagielski 1133*b1cdbd2cSJim Jagielski endif 1134*b1cdbd2cSJim Jagielski 1135*b1cdbd2cSJim Jagielski scriptStorageID = scriptstoragemgr.getScriptStorageID( scriptLocationURI ) 1136*b1cdbd2cSJim Jagielski dim resultList() as Object 1137*b1cdbd2cSJim Jagielski if ( scriptStorageID > -1 ) then 1138*b1cdbd2cSJim Jagielski storage = scriptstoragemgr.getScriptStorage( scriptStorageID ) 1139*b1cdbd2cSJim Jagielski implementations() = storage.getAllImplementations() 1140*b1cdbd2cSJim Jagielski length = UBOUND( implementations() ) 1141*b1cdbd2cSJim Jagielski reservedScriptTag = "_$" 1142*b1cdbd2cSJim Jagielski if ( length > -1 ) then 1143*b1cdbd2cSJim Jagielski dim tempDisplayList( length ) as new com.sun.star.beans.PropertyValue 1144*b1cdbd2cSJim Jagielski for n = LBOUND( implementations() ) to UBOUND( implementations() ) 1145*b1cdbd2cSJim Jagielski logicalName = implementations( n ).getLogicalName() 1146*b1cdbd2cSJim Jagielski firstTwoChars = LEFT( logicalName, 2 ) 1147*b1cdbd2cSJim Jagielski 'Only display scripts whose logicalnames don't begin with "_$" 1148*b1cdbd2cSJim Jagielski if ( firstTwoChars <> reservedScriptTag ) then 1149*b1cdbd2cSJim Jagielski if ( lang = implementations( n ).getLanguage() ) then 1150*b1cdbd2cSJim Jagielski if ( detailedView ) then 1151*b1cdbd2cSJim Jagielski tempDisplayList( n ).Name = logicalName _ 1152*b1cdbd2cSJim Jagielski + " [" + implementations( n ).getFunctionName() + "]" 1153*b1cdbd2cSJim Jagielski tempDisplayList( n ).Value = implementations( n ) 1154*b1cdbd2cSJim Jagielski else 1155*b1cdbd2cSJim Jagielski tempDisplayList( n ).Name = logicalName 1156*b1cdbd2cSJim Jagielski tempDisplayList( n ).Value = implementations( n ) 1157*b1cdbd2cSJim Jagielski endif 1158*b1cdbd2cSJim Jagielski scriptList.addItem( tempDisplayList( n ).Name, n ) 1159*b1cdbd2cSJim Jagielski endif 1160*b1cdbd2cSJim Jagielski endif 1161*b1cdbd2cSJim Jagielski next n 1162*b1cdbd2cSJim Jagielski resultList = tempDisplayList() 1163*b1cdbd2cSJim Jagielski endif 1164*b1cdbd2cSJim Jagielski ScriptDisplayList(0) = resultList() 1165*b1cdbd2cSJim Jagielski endif 1166*b1cdbd2cSJim Jagielski scriptList.selectItemPos( 0, true ) 1167*b1cdbd2cSJim Jagielski 1168*b1cdbd2cSJim Jagielskiend sub 1169*b1cdbd2cSJim Jagielski 1170*b1cdbd2cSJim Jagielskisub PopulateMenuCombo() 1171*b1cdbd2cSJim Jagielski menuComboBox = bindingDialog.getControl( "MenuCombo" ) 1172*b1cdbd2cSJim Jagielski menuComboBox.removeItems( 0, menuComboBox.getItemCount() ) 1173*b1cdbd2cSJim Jagielski for n = 1 to menuCount 1174*b1cdbd2cSJim Jagielski menuComboBox.addItem( menuItems( n ), n - 1 ) 1175*b1cdbd2cSJim Jagielski next n 1176*b1cdbd2cSJim Jagielski menuComboBox.setDropDownLineCount( 8 ) 1177*b1cdbd2cSJim Jagielski menuComboBox.text = menuComboBox.getItem( 0 ) 1178*b1cdbd2cSJim Jagielskiend sub 1179*b1cdbd2cSJim Jagielski 1180*b1cdbd2cSJim Jagielski 1181*b1cdbd2cSJim Jagielskisub PopulateSubMenuList( menuItemPosition as integer ) 1182*b1cdbd2cSJim Jagielski redim subMenuItems( 100 ) as string 1183*b1cdbd2cSJim Jagielski redim subMenuItemLinePosition( 100 ) as integer 1184*b1cdbd2cSJim Jagielski dim lineNumber as integer 1185*b1cdbd2cSJim Jagielski const menuItemWhiteSpace = 4 1186*b1cdbd2cSJim Jagielski const menuXMLTag = "<menu:menu" 1187*b1cdbd2cSJim Jagielski subMenuCount = 1 1188*b1cdbd2cSJim Jagielski 1189*b1cdbd2cSJim Jagielski REM xmlStartLine and xmlEndLine refer to the first and last lines 1190*b1cdbd2cSJim Jagielski ' menuItemPosition of a top-level menu ( 1=File to 8=Help ) add one line 1191*b1cdbd2cSJim Jagielski xmlStartLine = menuItemLinePosition( menuItemPosition ) + 1 1192*b1cdbd2cSJim Jagielski 1193*b1cdbd2cSJim Jagielski REM If last menu item is chosen 1194*b1cdbd2cSJim Jagielski if menuItemPosition = menuCount then 1195*b1cdbd2cSJim Jagielski xmlEndLine = numberOfLines 1196*b1cdbd2cSJim Jagielski else 1197*b1cdbd2cSJim Jagielski REM Other wise get the line before the next top-level menu begins 1198*b1cdbd2cSJim Jagielski xmlEndLine = menuItemLinePosition( menuItemPosition + 1 ) - 1 1199*b1cdbd2cSJim Jagielski end if 1200*b1cdbd2cSJim Jagielski 1201*b1cdbd2cSJim Jagielski for lineNumber = xmlStartLine to xmlEndLine 1202*b1cdbd2cSJim Jagielski REM Insert all sub-menus and sub-popupmenus 1203*b1cdbd2cSJim Jagielski if not( instr( xmlFile( lineNumber ), menuXMLTag ) = 0 ) and instr( xmlFile( lineNumber ), "menupopup") = 0 then 1204*b1cdbd2cSJim Jagielski subMenuIndent = GetMenuWhiteSpace( xmlFile( lineNumber ) ) 1205*b1cdbd2cSJim Jagielski if subMenuIndent = " " then 1206*b1cdbd2cSJim Jagielski subMenuIndent = "" 1207*b1cdbd2cSJim Jagielski else 1208*b1cdbd2cSJim Jagielski subMenuIndent = subMenuIndent + subMenuIndent 1209*b1cdbd2cSJim Jagielski end if 1210*b1cdbd2cSJim Jagielski if not( instr( xmlFile( lineNumber ), "menuseparator" ) = 0 ) then 1211*b1cdbd2cSJim Jagielski subMenuItems( subMenuCount ) = subMenuIndent + "----------------" 1212*b1cdbd2cSJim Jagielski else 1213*b1cdbd2cSJim Jagielski subMenuName = ExtractLabelFromXMLLine( xmlFile( lineNumber ) ) 1214*b1cdbd2cSJim Jagielski REM Add script Name if there is one bound to menu item 1215*b1cdbd2cSJim Jagielski if instr( xmlFile( lineNumber ), "script://" ) > 0 then 1216*b1cdbd2cSJim Jagielski script = ExtractScriptIdFromXMLLine( xmlFile( lineNumber ) ) 1217*b1cdbd2cSJim Jagielski subMenuItems( subMenuCount ) = ( subMenuIndent + subMenuName + " [" + script + "]" ) 1218*b1cdbd2cSJim Jagielski else 1219*b1cdbd2cSJim Jagielski subMenuItems( subMenuCount ) = subMenuIndent + subMenuName 1220*b1cdbd2cSJim Jagielski end if 1221*b1cdbd2cSJim Jagielski end if 1222*b1cdbd2cSJim Jagielski subMenuItemLinePosition( subMenuCount ) = lineNumber 1223*b1cdbd2cSJim Jagielski subMenuCount = subMenuCount + 1 1224*b1cdbd2cSJim Jagielski end if 1225*b1cdbd2cSJim Jagielski next lineNumber 1226*b1cdbd2cSJim Jagielski 1227*b1cdbd2cSJim Jagielski subMenuList = bindingDialog.getControl( "SubMenuList" ) 1228*b1cdbd2cSJim Jagielski 1229*b1cdbd2cSJim Jagielski currentPosition = subMenuList.getSelectedItemPos() 1230*b1cdbd2cSJim Jagielski 1231*b1cdbd2cSJim Jagielski subMenuList.removeItems( 0, subMenuList.getItemCount() ) 1232*b1cdbd2cSJim Jagielski 'If there are no sub-menus i.e. a dynamically generated menu like Format 1233*b1cdbd2cSJim Jagielski 'if subMenuCount = 1 then 1234*b1cdbd2cSJim Jagielski if menuItems( menuItemPosition ) = "Format" then 1235*b1cdbd2cSJim Jagielski subMenuList.addItem( "Unable to Assign Scripts to this menu", 0 ) 1236*b1cdbd2cSJim Jagielski else 1237*b1cdbd2cSJim Jagielski for n = 1 to subMenuCount - 1 1238*b1cdbd2cSJim Jagielski subMenuList.addItem( subMenuItems( n ), n - 1 ) 1239*b1cdbd2cSJim Jagielski next n 1240*b1cdbd2cSJim Jagielski end if 1241*b1cdbd2cSJim Jagielski 1242*b1cdbd2cSJim Jagielski subMenuList.selectItemPos( currentPosition, true ) 1243*b1cdbd2cSJim Jagielski 1244*b1cdbd2cSJim Jagielski SubMenuListListener() 1245*b1cdbd2cSJim Jagielski MenuLabelBoxListener() 1246*b1cdbd2cSJim Jagielskiend sub 1247*b1cdbd2cSJim Jagielski 1248*b1cdbd2cSJim Jagielski 1249*b1cdbd2cSJim Jagielski 1250*b1cdbd2cSJim Jagielskisub PopulateTopLevelKeyBindingList() 1251*b1cdbd2cSJim Jagielski 1252*b1cdbd2cSJim Jagielski allKeyGroupsArray(0) = "SHIFT + CONTROL + F keys" 1253*b1cdbd2cSJim Jagielski allKeyGroupsArray(1) = "SHIFT + CONTROL + digits" ' CURRENTLY DISABLED 1254*b1cdbd2cSJim Jagielski allKeyGroupsArray(2) = "SHIFT + CONTROL + letters" 1255*b1cdbd2cSJim Jagielski allKeyGroupsArray(3) = "CONTROL + F keys" 1256*b1cdbd2cSJim Jagielski allKeyGroupsArray(4) = "CONTROL + digits" 1257*b1cdbd2cSJim Jagielski allKeyGroupsArray(5) = "CONTROL + letters" 1258*b1cdbd2cSJim Jagielski allKeyGroupsArray(6) = "SHIFT + F keys" 1259*b1cdbd2cSJim Jagielski 1260*b1cdbd2cSJim Jagielski keyCombo = bindingDialog.getControl( "KeyCombo" ) 1261*b1cdbd2cSJim Jagielski keyCombo.removeItems( 0, keyCombo.getItemCount() ) 1262*b1cdbd2cSJim Jagielski pos = 0 1263*b1cdbd2cSJim Jagielski for n = LBOUND( allKeyGroupsArray() ) to UBOUND( allKeyGroupsArray() ) 1264*b1cdbd2cSJim Jagielski ' SHIFT + CONTROL + digits group is disabled at the moment, so skip 1265*b1cdbd2cSJim Jagielski ' it 1266*b1cdbd2cSJim Jagielski if ( n <> 1 ) then 1267*b1cdbd2cSJim Jagielski keyCombo.addItem( allKeyGroupsArray( n ), pos ) 1268*b1cdbd2cSJim Jagielski pos = pos +1 1269*b1cdbd2cSJim Jagielski endif 1270*b1cdbd2cSJim Jagielski next n 1271*b1cdbd2cSJim Jagielski keyCombo.text = keyCombo.getItem( 0 ) 1272*b1cdbd2cSJim Jagielskiend sub 1273*b1cdbd2cSJim Jagielski 1274*b1cdbd2cSJim Jagielskisub PopulateKeyBindingList( keyGroupIndex as Integer ) 1275*b1cdbd2cSJim Jagielski keyList = bindingDialog.getControl( "KeyList" ) 1276*b1cdbd2cSJim Jagielski selectedPos = keyList.getSelectedItemPos() 1277*b1cdbd2cSJim Jagielski keyList.removeItems( 0, keyList.getItemCount() ) 1278*b1cdbd2cSJim Jagielski 1279*b1cdbd2cSJim Jagielski ShortCutKeyArray() = KeyBindArrayOfArrays( keyGroupIndex ) 1280*b1cdbd2cSJim Jagielski 1281*b1cdbd2cSJim Jagielski Dim keyProp as new com.sun.star.beans.PropertyValue 1282*b1cdbd2cSJim Jagielski for n = lbound( ShortCutKeyArray() ) to ubound( ShortCutKeyArray() ) 1283*b1cdbd2cSJim Jagielski keyName = ShortCutKeyArray( n ) 1284*b1cdbd2cSJim Jagielski if ( keyAllocationMap( keyGroupIndex, n ).Value = 1 ) then 1285*b1cdbd2cSJim Jagielski keyName = keyName + " [Allocated to Office function]" 1286*b1cdbd2cSJim Jagielski 1287*b1cdbd2cSJim Jagielski elseif ( keyAllocationMap( keyGroupIndex, n ).Value > 1 ) then 1288*b1cdbd2cSJim Jagielski keyName = keyName + " " + keyAllocationMap( keyGroupIndex, n ).Name 1289*b1cdbd2cSJim Jagielski endif 1290*b1cdbd2cSJim Jagielski keyList.addItem( keyName, n ) 1291*b1cdbd2cSJim Jagielski next n 1292*b1cdbd2cSJim Jagielski 1293*b1cdbd2cSJim Jagielski if ( selectedPos <> -1 )then 1294*b1cdbd2cSJim Jagielski keyList.selectItemPos( selectedPos, true ) 1295*b1cdbd2cSJim Jagielski else 1296*b1cdbd2cSJim Jagielski keyList.selectItemPos( 0, true ) 1297*b1cdbd2cSJim Jagielski end if 1298*b1cdbd2cSJim Jagielski KeyListListener() 1299*b1cdbd2cSJim Jagielskiend sub 1300*b1cdbd2cSJim Jagielski 1301*b1cdbd2cSJim Jagielskisub populateEventList( focusPosition as integer ) 1302*b1cdbd2cSJim Jagielski allApps = bindingDialog.getControl( "AllAppsOption" ) 1303*b1cdbd2cSJim Jagielski eventList = bindingDialog.getControl( "EventList" ) 1304*b1cdbd2cSJim Jagielski eventList.removeItems( 0, eventList.getItemCount() ) 1305*b1cdbd2cSJim Jagielski 1306*b1cdbd2cSJim Jagielski dim isApp as boolean 1307*b1cdbd2cSJim Jagielski if allApps.state = true then ' Application event 1308*b1cdbd2cSJim Jagielski isApp = true 1309*b1cdbd2cSJim Jagielski else 1310*b1cdbd2cSJim Jagielski isApp = false 1311*b1cdbd2cSJim Jagielski end if 1312*b1cdbd2cSJim Jagielski 1313*b1cdbd2cSJim Jagielski ' use allEventTypes() to fill list box 1314*b1cdbd2cSJim Jagielski ' for each element compare with allEventTypesApp 1315*b1cdbd2cSJim Jagielski dim scriptName as string 1316*b1cdbd2cSJim Jagielski dim lineNumber as integer 1317*b1cdbd2cSJim Jagielski for n = 0 to ubound( allEventTypes() ) 1318*b1cdbd2cSJim Jagielski ' If the line number is 1 then SB macro 1319*b1cdbd2cSJim Jagielski ' more than 1 it is the line number of the script 1320*b1cdbd2cSJim Jagielski if isApp and n > 12 then 1321*b1cdbd2cSJim Jagielski exit for 1322*b1cdbd2cSJim Jagielski endif 1323*b1cdbd2cSJim Jagielski if isApp then 1324*b1cdbd2cSJim Jagielski lineNumber = allEventTypesApp( n ).Value 1325*b1cdbd2cSJim Jagielski scriptName = allEventTypesApp( n ).Name 1326*b1cdbd2cSJim Jagielski else 1327*b1cdbd2cSJim Jagielski lineNumber = allEventTypesDoc( n ).Value 1328*b1cdbd2cSJim Jagielski scriptName = allEventTypesDoc( n ).Name 1329*b1cdbd2cSJim Jagielski end if 1330*b1cdbd2cSJim Jagielski stringToAdd = "" 1331*b1cdbd2cSJim Jagielski if ( lineNumber >= 1 ) then 1332*b1cdbd2cSJim Jagielski stringToAdd = " [" + scriptName + "]" 1333*b1cdbd2cSJim Jagielski end if 1334*b1cdbd2cSJim Jagielski eventList.addItem( allEventTypes( n ).Value + " " + stringToAdd, n ) 1335*b1cdbd2cSJim Jagielski next n 1336*b1cdbd2cSJim Jagielski 1337*b1cdbd2cSJim Jagielski eventList.selectItemPos( focusPosition, true ) 1338*b1cdbd2cSJim Jagielskiend sub 1339*b1cdbd2cSJim Jagielski 1340*b1cdbd2cSJim Jagielski 1341*b1cdbd2cSJim Jagielski 1342*b1cdbd2cSJim Jagielskisub CreateAllKeyBindings() 1343*b1cdbd2cSJim Jagielski reDim allKeyBindings( 105 ) as string 1344*b1cdbd2cSJim Jagielski keyBindingPosition = 1 1345*b1cdbd2cSJim Jagielski 1346*b1cdbd2cSJim Jagielski for FKey = 2 to 12 1347*b1cdbd2cSJim Jagielski allKeyBindings( keyBindingPosition ) = "SHIFT + CONTROL + F" + FKey 1348*b1cdbd2cSJim Jagielski keyBindingPosition = keyBindingPosition + 1 1349*b1cdbd2cSJim Jagielski next FKey 1350*b1cdbd2cSJim Jagielski for Digit = 0 to 9 1351*b1cdbd2cSJim Jagielski allKeyBindings( keyBindingPosition ) = "SHIFT + CONTROL + " + Digit 1352*b1cdbd2cSJim Jagielski keyBindingPosition = keyBindingPosition + 1 1353*b1cdbd2cSJim Jagielski next Digit 1354*b1cdbd2cSJim Jagielski for Alpha = 65 to 90 1355*b1cdbd2cSJim Jagielski allKeyBindings( keyBindingPosition ) = "SHIFT + CONTROL + " + chr$( Alpha ) 1356*b1cdbd2cSJim Jagielski keyBindingPosition = keyBindingPosition + 1 1357*b1cdbd2cSJim Jagielski next Alpha 1358*b1cdbd2cSJim Jagielski 1359*b1cdbd2cSJim Jagielski for FKey = 2 to 12 1360*b1cdbd2cSJim Jagielski allKeyBindings( keyBindingPosition ) = "CONTROL + F" + FKey 1361*b1cdbd2cSJim Jagielski keyBindingPosition = keyBindingPosition + 1 1362*b1cdbd2cSJim Jagielski next FKey 1363*b1cdbd2cSJim Jagielski for Digit = 0 to 9 1364*b1cdbd2cSJim Jagielski allKeyBindings( keyBindingPosition ) = "CONTROL + " + Digit 1365*b1cdbd2cSJim Jagielski keyBindingPosition = keyBindingPosition + 1 1366*b1cdbd2cSJim Jagielski next Digit 1367*b1cdbd2cSJim Jagielski for Alpha = 65 to 90 1368*b1cdbd2cSJim Jagielski allKeyBindings( keyBindingPosition ) = "CONTROL + " + chr$( Alpha ) 1369*b1cdbd2cSJim Jagielski keyBindingPosition = keyBindingPosition + 1 1370*b1cdbd2cSJim Jagielski next Alpha 1371*b1cdbd2cSJim Jagielski 1372*b1cdbd2cSJim Jagielski for FKey = 2 to 12 1373*b1cdbd2cSJim Jagielski allKeyBindings( keyBindingPosition ) = "SHIFT + F" + FKey 1374*b1cdbd2cSJim Jagielski keyBindingPosition = keyBindingPosition + 1 1375*b1cdbd2cSJim Jagielski next FKey 1376*b1cdbd2cSJim Jagielskiend sub 1377*b1cdbd2cSJim Jagielski 1378*b1cdbd2cSJim Jagielski 1379*b1cdbd2cSJim Jagielskisub createAllEventTypes() 1380*b1cdbd2cSJim Jagielski allEventTypes( 0 ).Name = "OnStartApp" 1381*b1cdbd2cSJim Jagielski allEventTypes( 0 ).Value = "Start Application" 1382*b1cdbd2cSJim Jagielski allEventTypes( 1 ).Name = "OnCloseApp" 1383*b1cdbd2cSJim Jagielski allEventTypes( 1 ).Value = "Close Application" 1384*b1cdbd2cSJim Jagielski allEventTypes( 2 ).Name = "OnNew" 1385*b1cdbd2cSJim Jagielski allEventTypes( 2 ).Value = "Create Document" 1386*b1cdbd2cSJim Jagielski allEventTypes( 3 ).Name = "OnLoad" 1387*b1cdbd2cSJim Jagielski allEventTypes( 3 ).Value = "Open Document" 1388*b1cdbd2cSJim Jagielski allEventTypes( 4 ).Name = "OnSaveAs" 1389*b1cdbd2cSJim Jagielski allEventTypes( 4 ).Value = "Save Document As" 1390*b1cdbd2cSJim Jagielski allEventTypes( 5 ).Name = "OnSaveAsDone" 1391*b1cdbd2cSJim Jagielski allEventTypes( 5 ).Value = "Document has been saved as" 1392*b1cdbd2cSJim Jagielski allEventTypes( 6 ).Name = "OnSave" 1393*b1cdbd2cSJim Jagielski allEventTypes( 6 ).Value = "Save Document" 1394*b1cdbd2cSJim Jagielski allEventTypes( 7 ).Name = "OnSaveDone" 1395*b1cdbd2cSJim Jagielski allEventTypes( 7 ).Value = "Document has been saved" 1396*b1cdbd2cSJim Jagielski allEventTypes( 8 ).Name = "OnPrepareUnload" 1397*b1cdbd2cSJim Jagielski allEventTypes( 8 ).Value = "Close Document" 1398*b1cdbd2cSJim Jagielski allEventTypes( 9 ).Name = "OnUnload" 1399*b1cdbd2cSJim Jagielski allEventTypes( 9 ).Value = "Close Document" 1400*b1cdbd2cSJim Jagielski allEventTypes( 10 ).Name = "OnFocus" 1401*b1cdbd2cSJim Jagielski allEventTypes( 10 ).Value = "Activate document" 1402*b1cdbd2cSJim Jagielski allEventTypes( 11 ).Name = "OnUnfocus" 1403*b1cdbd2cSJim Jagielski allEventTypes( 11 ).Value = "DeActivate document" 1404*b1cdbd2cSJim Jagielski allEventTypes( 12 ).Name = "OnPrint" 1405*b1cdbd2cSJim Jagielski allEventTypes( 12 ).Value = "Print Document" 1406*b1cdbd2cSJim Jagielski REM The following are document-only events 1407*b1cdbd2cSJim Jagielski allEventTypes( 13 ).Name = "OnMailMerge" 1408*b1cdbd2cSJim Jagielski allEventTypes( 13 ).Value = "Print form letters" 1409*b1cdbd2cSJim Jagielski allEventTypes( 14 ).Name = "OnPageCountChange" 1410*b1cdbd2cSJim Jagielski allEventTypes( 14 ).Value = "Changing the page count" 1411*b1cdbd2cSJim Jagielskiend sub 1412*b1cdbd2cSJim Jagielski 1413*b1cdbd2cSJim Jagielski 1414*b1cdbd2cSJim Jagielskisub createAllEventBindings() 1415*b1cdbd2cSJim Jagielski 'dim props as new com.sun.star.beans.PropertyValue 1416*b1cdbd2cSJim Jagielski 'props.Name = "" 'Name = script name 1417*b1cdbd2cSJim Jagielski 'props.Value = 0 'Value = 0 for empty, 1 for macro, linenumber for script 1418*b1cdbd2cSJim Jagielski 1419*b1cdbd2cSJim Jagielski ' Creates all types of event bindings for both Application and Document 1420*b1cdbd2cSJim Jagielski ' Initially both arrays have no bindings allocated to the events 1421*b1cdbd2cSJim Jagielski ' The value for Doc is only Script/macro name (no need for line number) 1422*b1cdbd2cSJim Jagielski for n = 0 to ubound( allEventTypes() ) 1423*b1cdbd2cSJim Jagielski allEventTypesApp( n ).Name = "" 1424*b1cdbd2cSJim Jagielski allEventTypesApp( n ).Value = 0 1425*b1cdbd2cSJim Jagielski allEventTypesDoc( n ).Name = "" 1426*b1cdbd2cSJim Jagielski allEventTypesDoc( n ).Value = 0 1427*b1cdbd2cSJim Jagielski next n 1428*b1cdbd2cSJim Jagielskiend sub 1429*b1cdbd2cSJim Jagielski 1430*b1cdbd2cSJim Jagielski 1431*b1cdbd2cSJim JagielskiREM ----- Text Handling Functions ----- 1432*b1cdbd2cSJim Jagielski 1433*b1cdbd2cSJim Jagielski 1434*b1cdbd2cSJim Jagielskifunction ExtractLabelFromXMLLine( XMLLine as string ) as string 1435*b1cdbd2cSJim Jagielski labelStart = instr( XMLLine, "label="+chr$(34)) + 7 1436*b1cdbd2cSJim Jagielski labelEnd = instr( XMLLine, chr$(34)+">" ) 1437*b1cdbd2cSJim Jagielski if labelEnd = 0 then 1438*b1cdbd2cSJim Jagielski labelEnd = instr( XMLLine, chr$(34)+"/>" ) 1439*b1cdbd2cSJim Jagielski end if 1440*b1cdbd2cSJim Jagielski labelLength = labelEnd - labelStart 1441*b1cdbd2cSJim Jagielski 1442*b1cdbd2cSJim Jagielski menuLabelUnformatted = mid( XMLLine, labelStart, labelLength ) 1443*b1cdbd2cSJim Jagielski tildePosition = instr( menuLabelUnformatted, "~" ) 1444*b1cdbd2cSJim Jagielski select case tildePosition 1445*b1cdbd2cSJim Jagielski case 0 1446*b1cdbd2cSJim Jagielski menuLabel = menuLabelUnformatted 1447*b1cdbd2cSJim Jagielski case 1 1448*b1cdbd2cSJim Jagielski menuLabel = right( menuLabelUnformatted, labelLength - 1 ) 1449*b1cdbd2cSJim Jagielski case else 1450*b1cdbd2cSJim Jagielski menuLabelLeft = left( menuLabelUnformatted, tildePosition - 1 ) 1451*b1cdbd2cSJim Jagielski menuLabelRight = right( menuLabelUnformatted, labelLength - tildePosition ) 1452*b1cdbd2cSJim Jagielski menuLabel = menuLabelLeft + menuLabelRight 1453*b1cdbd2cSJim Jagielski end select 1454*b1cdbd2cSJim Jagielski 1455*b1cdbd2cSJim Jagielski ExtractLabelFromXMLLine() = menuLabel 1456*b1cdbd2cSJim Jagielskiend function 1457*b1cdbd2cSJim Jagielski 1458*b1cdbd2cSJim Jagielski 1459*b1cdbd2cSJim Jagielskifunction ExtractScriptIdFromXMLLine( XMLLine as string ) as string 1460*b1cdbd2cSJim Jagielski idStart = instr( XMLLine, "script://") + 9 1461*b1cdbd2cSJim Jagielski if instr( XMLLine, chr$(34)+" menu:helpid=" ) = 0 then 1462*b1cdbd2cSJim Jagielski idEnd = instr( XMLLIne, "?location=" ) 1463*b1cdbd2cSJim Jagielski else 1464*b1cdbd2cSJim Jagielski idEnd = instr( XMLLine, ""+chr$(34)+" menu:helpid=" ) 1465*b1cdbd2cSJim Jagielski end if 1466*b1cdbd2cSJim Jagielski idLength = idEnd - idStart 1467*b1cdbd2cSJim Jagielski scriptId = mid( XMLLine, idStart, idLength ) 1468*b1cdbd2cSJim Jagielski 1469*b1cdbd2cSJim Jagielski ExtractScriptIdFromXMLLine() = scriptId 1470*b1cdbd2cSJim Jagielskiend function 1471*b1cdbd2cSJim Jagielski 1472*b1cdbd2cSJim Jagielskifunction ExtractEventScriptFromXMLLine( xmlline as string ) 1473*b1cdbd2cSJim Jagielski if instr( xmlline, "script://" ) > 0 then 1474*b1cdbd2cSJim Jagielski idStart = instr( xmlline, "script://") + 9 1475*b1cdbd2cSJim Jagielski idEnd = instr( xmlline, chr$(34)+" xlink:type=" ) 1476*b1cdbd2cSJim Jagielski idLength = idEnd - idStart 1477*b1cdbd2cSJim Jagielski scriptId = mid( xmlline, idStart, idLength ) 1478*b1cdbd2cSJim Jagielski end if 1479*b1cdbd2cSJim Jagielski ExtractEventScriptFromXMLLine() = scriptId 1480*b1cdbd2cSJim Jagielskiend function 1481*b1cdbd2cSJim Jagielski 1482*b1cdbd2cSJim Jagielski 1483*b1cdbd2cSJim Jagielskifunction ExtractEventNameFromXMLLine( xmlline as string ) 1484*b1cdbd2cSJim Jagielski idStart = instr( xmlline, "event:name=" + chr$(34) ) + 12 1485*b1cdbd2cSJim Jagielski idEnd = instr( xmlline, chr$(34)+" event:language" ) 1486*b1cdbd2cSJim Jagielski idLength = idEnd - idStart 1487*b1cdbd2cSJim Jagielski event = mid( xmlline, idStart, idLength ) 1488*b1cdbd2cSJim Jagielski 1489*b1cdbd2cSJim Jagielski ExtractEventNameFromXMLLine() = event 1490*b1cdbd2cSJim Jagielskiend function 1491*b1cdbd2cSJim Jagielski 1492*b1cdbd2cSJim Jagielskifunction ExtractKeyCodeFromXMLLine( XMLLine as string ) as string 1493*b1cdbd2cSJim Jagielski keyStart = instr( XMLLine, "code="+chr$(34)+"KEY_") + 10 1494*b1cdbd2cSJim Jagielski keyCode = mid( XMLLine, keyStart, ( len( XMLLine ) - keyStart ) ) 1495*b1cdbd2cSJim Jagielski keyEnd = instr( keyCode, chr$(34) ) 1496*b1cdbd2cSJim Jagielski keyCode = mid( keyCode, 1, keyEnd - 1 ) 1497*b1cdbd2cSJim Jagielski 1498*b1cdbd2cSJim Jagielski ExtractKeyCodeFromXMLLine() = keyCode 1499*b1cdbd2cSJim Jagielskiend function 1500*b1cdbd2cSJim Jagielski 1501*b1cdbd2cSJim Jagielski 1502*b1cdbd2cSJim Jagielskifunction GetMenuWhiteSpace( MenuXMLLine as string ) as string 1503*b1cdbd2cSJim Jagielski whiteSpace = "" 1504*b1cdbd2cSJim Jagielski numberOfSpaces = instr( MenuXMLLine, "<" ) - 1 1505*b1cdbd2cSJim Jagielski for i = 1 to numberOfSpaces 1506*b1cdbd2cSJim Jagielski whiteSpace = whiteSpace + " " 1507*b1cdbd2cSJim Jagielski next i 1508*b1cdbd2cSJim Jagielski 1509*b1cdbd2cSJim Jagielski GetMenuWhiteSpace() = whiteSpace 1510*b1cdbd2cSJim Jagielskiend function 1511*b1cdbd2cSJim Jagielski 1512*b1cdbd2cSJim Jagielskifunction IsAllocatedMenuItem( script as string ) as boolean 1513*b1cdbd2cSJim Jagielski foundMenuItem = false 1514*b1cdbd2cSJim Jagielski Allocated = false 1515*b1cdbd2cSJim Jagielski count = 0 1516*b1cdbd2cSJim Jagielski do 1517*b1cdbd2cSJim Jagielski count = count + 1 1518*b1cdbd2cSJim Jagielski if strcomp( script, subMenuItems( count ) ) = 0 then 1519*b1cdbd2cSJim Jagielski foundMenuItem = true 1520*b1cdbd2cSJim Jagielski end if 1521*b1cdbd2cSJim Jagielski loop while not( foundMenuItem ) and count < subMenuCount 1522*b1cdbd2cSJim Jagielski 1523*b1cdbd2cSJim Jagielski linePosition = subMenuItemLinePosition( count ) 1524*b1cdbd2cSJim Jagielski 1525*b1cdbd2cSJim Jagielski if not( instr( xmlFile( linePosition ), "script://" ) = 0 ) then 1526*b1cdbd2cSJim Jagielski Allocated = true 1527*b1cdbd2cSJim Jagielski end if 1528*b1cdbd2cSJim Jagielski 1529*b1cdbd2cSJim Jagielski isAllocatedMenuItem() = Allocated 1530*b1cdbd2cSJim Jagielskiend Function 1531*b1cdbd2cSJim Jagielski 1532*b1cdbd2cSJim Jagielski 1533*b1cdbd2cSJim Jagielskifunction HasShiftKey( keyCombo ) as boolean 1534*b1cdbd2cSJim Jagielski if instr( keyCombo, "SHIFT" ) = 0 then 1535*b1cdbd2cSJim Jagielski hasShift = false 1536*b1cdbd2cSJim Jagielski else 1537*b1cdbd2cSJim Jagielski hasShift = true 1538*b1cdbd2cSJim Jagielski end if 1539*b1cdbd2cSJim Jagielski 1540*b1cdbd2cSJim Jagielski HasShiftKey = hasShift 1541*b1cdbd2cSJim Jagielskiend function 1542*b1cdbd2cSJim Jagielski 1543*b1cdbd2cSJim Jagielski 1544*b1cdbd2cSJim Jagielskifunction HasControlKey( keyCombo ) as boolean 1545*b1cdbd2cSJim Jagielski if instr( keyCombo, "CONTROL" ) = 0 then 1546*b1cdbd2cSJim Jagielski hasControl = false 1547*b1cdbd2cSJim Jagielski else 1548*b1cdbd2cSJim Jagielski hasControl = true 1549*b1cdbd2cSJim Jagielski end if 1550*b1cdbd2cSJim Jagielski 1551*b1cdbd2cSJim Jagielski HasControlKey = hasControl 1552*b1cdbd2cSJim Jagielskiend function 1553*b1cdbd2cSJim Jagielski 1554*b1cdbd2cSJim Jagielski 1555*b1cdbd2cSJim Jagielskifunction ExtractKeyFromCombo( keyString as string ) as string 1556*b1cdbd2cSJim Jagielski while not( instr( keyString, "+" ) = 0 ) 1557*b1cdbd2cSJim Jagielski removeTo = instr( keyString, "+ " ) + 2 1558*b1cdbd2cSJim Jagielski keyString = mid( keyString, removeTo, ( len( keyString ) - removeTo ) + 1 ) 1559*b1cdbd2cSJim Jagielski wend 1560*b1cdbd2cSJim Jagielski ExtractKeyFromCombo() = keyString 1561*b1cdbd2cSJim Jagielskiend function 1562*b1cdbd2cSJim Jagielski 1563*b1cdbd2cSJim Jagielski 1564*b1cdbd2cSJim Jagielski 1565*b1cdbd2cSJim JagielskiREM ------ Event Handling Functions (Listeners) ------ 1566*b1cdbd2cSJim Jagielski 1567*b1cdbd2cSJim Jagielski 1568*b1cdbd2cSJim Jagielskisub KeyListListener() 1569*b1cdbd2cSJim Jagielski keyShortCutList = bindingDialog.getControl( "KeyList" ) 1570*b1cdbd2cSJim Jagielski selectedShortCut = keyShortCutList.getSelectedItem() 1571*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "KeyCombo" ) 1572*b1cdbd2cSJim Jagielski 1573*b1cdbd2cSJim Jagielski menuScriptList = bindingDialog.getControl( "ScriptList" ) 1574*b1cdbd2cSJim Jagielski selectedScript = menuScriptList.getSelectedItem() 1575*b1cdbd2cSJim Jagielski 1576*b1cdbd2cSJim Jagielski keyGroup = combo.text 1577*b1cdbd2cSJim Jagielski dim keyGroupIndex as Integer 1578*b1cdbd2cSJim Jagielski dim selectedKeyIndex as Integer 1579*b1cdbd2cSJim Jagielski for n = lbound ( allKeyGroupsArray() ) to ubound ( allKeyGroupsArray() ) 1580*b1cdbd2cSJim Jagielski if ( allKeyGroupsArray( n ) = keyGroup )then 1581*b1cdbd2cSJim Jagielski keyGroupIndex = n 1582*b1cdbd2cSJim Jagielski exit for 1583*b1cdbd2cSJim Jagielski end if 1584*b1cdbd2cSJim Jagielski next n 1585*b1cdbd2cSJim Jagielski selectedKeyIndex = keyShortCutList.getSelectedItemPos() 1586*b1cdbd2cSJim Jagielski 1587*b1cdbd2cSJim Jagielski if keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Value > 1 then 1588*b1cdbd2cSJim Jagielski bindingDialog.Model.Delete.enabled = true 1589*b1cdbd2cSJim Jagielski bindingDialog.Model.AddOn.enabled = true 1590*b1cdbd2cSJim Jagielski if selectedScript <> "" then 1591*b1cdbd2cSJim Jagielski bindingDialog.Model.NewButton.enabled = true 1592*b1cdbd2cSJim Jagielski endif 1593*b1cdbd2cSJim Jagielski 1594*b1cdbd2cSJim Jagielski else 1595*b1cdbd2cSJim Jagielski 1596*b1cdbd2cSJim Jagielski if keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Value = 1 then 1597*b1cdbd2cSJim Jagielski bindingDialog.Model.Delete.enabled = false 1598*b1cdbd2cSJim Jagielski bindingDialog.Model.AddOn.enabled = false 1599*b1cdbd2cSJim Jagielski bindingDialog.Model.NewButton.enabled = false 1600*b1cdbd2cSJim Jagielski else 1601*b1cdbd2cSJim Jagielski bindingDialog.Model.Delete.enabled = false 1602*b1cdbd2cSJim Jagielski bindingDialog.Model.AddOn.enabled = false 1603*b1cdbd2cSJim Jagielski if selectedScript <> "" then 1604*b1cdbd2cSJim Jagielski bindingDialog.Model.NewButton.enabled = true 1605*b1cdbd2cSJim Jagielski end if 1606*b1cdbd2cSJim Jagielski end if 1607*b1cdbd2cSJim Jagielski end if 1608*b1cdbd2cSJim Jagielskiend sub 1609*b1cdbd2cSJim Jagielski 1610*b1cdbd2cSJim Jagielski 1611*b1cdbd2cSJim Jagielskisub SubMenuListListener() 1612*b1cdbd2cSJim Jagielski scriptList = bindingDialog.getControl( "ScriptList" ) 1613*b1cdbd2cSJim Jagielski subMenuList = bindingDialog.getControl( "SubMenuList" ) 1614*b1cdbd2cSJim Jagielski selectedMenuItem = subMenuList.getSelectedItem() 1615*b1cdbd2cSJim Jagielski if IsAllocatedMenuItem( selectedMenuItem ) then 1616*b1cdbd2cSJim Jagielski bindingDialog.Model.Delete.enabled = true 1617*b1cdbd2cSJim Jagielski bindingDialog.Model.AddOn.enabled = true 1618*b1cdbd2cSJim Jagielski else 1619*b1cdbd2cSJim Jagielski bindingDialog.Model.Delete.enabled = false 1620*b1cdbd2cSJim Jagielski bindingDialog.Model.AddOn.enabled = false 1621*b1cdbd2cSJim Jagielski end if 1622*b1cdbd2cSJim Jagielskiend sub 1623*b1cdbd2cSJim Jagielski 1624*b1cdbd2cSJim JagielskiREM a keypress listener that in turn fires the MenuCL on a return key even only 1625*b1cdbd2cSJim Jagielskisub fireMenuComboListernerOnRet( eventobj as object ) 1626*b1cdbd2cSJim Jagielski if (eventobj.KeyCode = 1280 ) then 1627*b1cdbd2cSJim Jagielski MenuComboListener() 1628*b1cdbd2cSJim Jagielski endif 1629*b1cdbd2cSJim Jagielskiend sub 1630*b1cdbd2cSJim Jagielski 1631*b1cdbd2cSJim Jagielski'Populates the SubMenuList with the appropriate menu items from the Top-level menu selected from the combo box 1632*b1cdbd2cSJim Jagielskisub MenuComboListener() 1633*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "MenuCombo" ) 1634*b1cdbd2cSJim Jagielski newToplevelMenu = combo.text 1635*b1cdbd2cSJim Jagielski counter = 0 1636*b1cdbd2cSJim Jagielski do 1637*b1cdbd2cSJim Jagielski counter = counter + 1 1638*b1cdbd2cSJim Jagielski loop while not( newToplevelMenu = menuItems( counter ) ) 1639*b1cdbd2cSJim Jagielski 1640*b1cdbd2cSJim Jagielski PopulateSubMenuList( counter ) 1641*b1cdbd2cSJim Jagielskiend sub 1642*b1cdbd2cSJim Jagielski 1643*b1cdbd2cSJim JagielskiREM a keypress listener that in turn fires the LLCL on a return key even only 1644*b1cdbd2cSJim Jagielskisub fireLangLocComboListernerOnRet( eventobj as object ) 1645*b1cdbd2cSJim Jagielski if (eventobj.KeyCode = 1280 ) then 1646*b1cdbd2cSJim Jagielski LangLocComboListener() 1647*b1cdbd2cSJim Jagielski endif 1648*b1cdbd2cSJim Jagielskiend sub 1649*b1cdbd2cSJim Jagielski 1650*b1cdbd2cSJim Jagielskisub LangLocComboListener() 1651*b1cdbd2cSJim Jagielski 1652*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "LanguageCombo" ) 1653*b1cdbd2cSJim Jagielski language = combo.text 1654*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "LocationCombo" ) 1655*b1cdbd2cSJim Jagielski location = combo.text 1656*b1cdbd2cSJim Jagielski 1657*b1cdbd2cSJim Jagielski PopulateScriptList( language,location ) 1658*b1cdbd2cSJim Jagielski 1659*b1cdbd2cSJim Jagielski 'Enable/disable Assign button 1660*b1cdbd2cSJim Jagielski scriptList = bindingDialog.getControl( "ScriptList" ) 1661*b1cdbd2cSJim Jagielski if not (dialogName = "EditDebug") then 1662*b1cdbd2cSJim Jagielski if scriptList.getSelectedItem() = "" then 1663*b1cdbd2cSJim Jagielski bindingDialog.Model.NewButton.enabled = false 1664*b1cdbd2cSJim Jagielski end if 1665*b1cdbd2cSJim Jagielski end if 1666*b1cdbd2cSJim Jagielski 1667*b1cdbd2cSJim Jagielski if ( location = "Filesystem" ) and ( language <> "Java" ) then 1668*b1cdbd2cSJim Jagielski bindingDialog.Model.Browse.enabled = true 1669*b1cdbd2cSJim Jagielski if not (dialogName = "EditDebug") then 1670*b1cdbd2cSJim Jagielski bindingDialog.Model.fsonly.enabled = true 1671*b1cdbd2cSJim Jagielski end if 1672*b1cdbd2cSJim Jagielski else 1673*b1cdbd2cSJim Jagielski bindingDialog.Model.Browse.enabled = false 1674*b1cdbd2cSJim Jagielski if not (dialogName = "EditDebug") then 1675*b1cdbd2cSJim Jagielski bindingDialog.Model.fsonly.enabled = false 1676*b1cdbd2cSJim Jagielski end if 1677*b1cdbd2cSJim Jagielski endif 1678*b1cdbd2cSJim Jagielski 1679*b1cdbd2cSJim Jagielski ' extra dialog dependant processing 1680*b1cdbd2cSJim Jagielski if dialogName = "Menu" then 1681*b1cdbd2cSJim Jagielski ' will set New button to false if no text in LableBox 1682*b1cdbd2cSJim Jagielski MenuLabelBoxListener() 1683*b1cdbd2cSJim Jagielski elseif dialogName = "Key" then 1684*b1cdbd2cSJim Jagielski ' will set Assigne button to false if appropriate 1685*b1cdbd2cSJim Jagielski KeyListListener() 1686*b1cdbd2cSJim Jagielski elseif dialogName = "Event" then 1687*b1cdbd2cSJim Jagielski EventListListener() 1688*b1cdbd2cSJim Jagielski end if 1689*b1cdbd2cSJim Jagielski 1690*b1cdbd2cSJim Jagielskiend sub 1691*b1cdbd2cSJim Jagielski 1692*b1cdbd2cSJim JagielskiREM a keypress listener that in turn fires the KeyCL on a return key even only 1693*b1cdbd2cSJim Jagielskisub fireKeyComboListernerOnRet( eventobj as object ) 1694*b1cdbd2cSJim Jagielski if (eventobj.KeyCode = 1280 ) then 1695*b1cdbd2cSJim Jagielski KeyComboListener() 1696*b1cdbd2cSJim Jagielski endif 1697*b1cdbd2cSJim Jagielskiend sub 1698*b1cdbd2cSJim Jagielski 1699*b1cdbd2cSJim Jagielski'Populates the KeyList with the appropriate key combos from the Top-level key group selected from the combo box 1700*b1cdbd2cSJim Jagielskisub KeyComboListener() 1701*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "KeyCombo" ) 1702*b1cdbd2cSJim Jagielski keyGroup = combo.text 1703*b1cdbd2cSJim Jagielski for n = lbound ( allKeyGroupsArray() ) to ubound ( allKeyGroupsArray() ) 1704*b1cdbd2cSJim Jagielski if ( allKeyGroupsArray( n ) = keyGroup )then 1705*b1cdbd2cSJim Jagielski keyGroupIndex = n 1706*b1cdbd2cSJim Jagielski exit for 1707*b1cdbd2cSJim Jagielski end if 1708*b1cdbd2cSJim Jagielski next n 1709*b1cdbd2cSJim Jagielski PopulateKeyBindingList( keyGroupIndex ) 1710*b1cdbd2cSJim Jagielskiend sub 1711*b1cdbd2cSJim Jagielski 1712*b1cdbd2cSJim Jagielski 1713*b1cdbd2cSJim Jagielskisub MenuLabelBoxListener() 1714*b1cdbd2cSJim Jagielski menuScriptList = bindingDialog.getControl( "ScriptList" ) 1715*b1cdbd2cSJim Jagielski selectedScript = menuScriptList.getSelectedItem() 1716*b1cdbd2cSJim Jagielski 'if the SubMenuList is from a dynamically created menu (e.g. Format) 1717*b1cdbd2cSJim Jagielski 'or if the Menu Label text box is empty 1718*b1cdbd2cSJim Jagielski subMenuList = bindingDialog.getControl( "SubMenuList" ) 1719*b1cdbd2cSJim Jagielski firstItem = subMenuList.getItem( 0 ) 1720*b1cdbd2cSJim Jagielski if bindingDialog.Model.MenuLabelBox.text = "" OR firstItem = "Unable to Assign Scripts to this menu" OR selectedScript = "" then 1721*b1cdbd2cSJim Jagielski bindingDialog.Model.NewButton.enabled = false 1722*b1cdbd2cSJim Jagielski else 1723*b1cdbd2cSJim Jagielski bindingDialog.Model.NewButton.enabled = true 1724*b1cdbd2cSJim Jagielski end if 1725*b1cdbd2cSJim Jagielskiend sub 1726*b1cdbd2cSJim Jagielski 1727*b1cdbd2cSJim Jagielskisub AppDocEventListener() 1728*b1cdbd2cSJim Jagielski populateEventList( 0 ) 1729*b1cdbd2cSJim Jagielski EventListListener() 1730*b1cdbd2cSJim Jagielskiend sub 1731*b1cdbd2cSJim Jagielski 1732*b1cdbd2cSJim Jagielski 1733*b1cdbd2cSJim Jagielskisub EventListListener() 1734*b1cdbd2cSJim Jagielski on error goto ErrorHandler 1735*b1cdbd2cSJim Jagielski 1736*b1cdbd2cSJim Jagielski eventList = bindingDialog.getControl( "EventList" ) 1737*b1cdbd2cSJim Jagielski eventPos = eventList.getSelectedItemPos() 1738*b1cdbd2cSJim Jagielski 1739*b1cdbd2cSJim Jagielski allApps = bindingDialog.getControl( "AllAppsOption" ) 1740*b1cdbd2cSJim Jagielski 1741*b1cdbd2cSJim Jagielski menuScriptList = bindingDialog.getControl( "ScriptList" ) 1742*b1cdbd2cSJim Jagielski selectedScript = menuScriptList.getSelectedItem() 1743*b1cdbd2cSJim Jagielski 1744*b1cdbd2cSJim Jagielski dim binding as integer 1745*b1cdbd2cSJim Jagielski if allApps.state = true then 1746*b1cdbd2cSJim Jagielski binding = allEventTypesApp( eventPos ).Value 1747*b1cdbd2cSJim Jagielski else 1748*b1cdbd2cSJim Jagielski binding = allEventTypesDoc( eventPos ).Value 1749*b1cdbd2cSJim Jagielski endif 1750*b1cdbd2cSJim Jagielski 1751*b1cdbd2cSJim Jagielski if ( binding > 1 ) then 1752*b1cdbd2cSJim Jagielski bindingDialog.Model.Delete.enabled = true 1753*b1cdbd2cSJim Jagielski else 1754*b1cdbd2cSJim Jagielski bindingDialog.Model.Delete.enabled = false 1755*b1cdbd2cSJim Jagielski end if 1756*b1cdbd2cSJim Jagielski 1757*b1cdbd2cSJim Jagielski if ( binding = 1 ) then 1758*b1cdbd2cSJim Jagielski ' staroffice binding, can't assign 1759*b1cdbd2cSJim Jagielski bindingDialog.Model.NewButton.enabled = false 1760*b1cdbd2cSJim Jagielski elseif ( selectedScript <> "" ) then 1761*b1cdbd2cSJim Jagielski bindingDialog.Model.NewButton.enabled = true 1762*b1cdbd2cSJim Jagielski end if 1763*b1cdbd2cSJim Jagielski exit sub 1764*b1cdbd2cSJim Jagielski 1765*b1cdbd2cSJim Jagielski ErrorHandler: 1766*b1cdbd2cSJim Jagielski reset 1767*b1cdbd2cSJim Jagielski bindingDialog.Model.Delete.enabled = false 1768*b1cdbd2cSJim Jagielski 1769*b1cdbd2cSJim Jagielskiend sub 1770*b1cdbd2cSJim Jagielski 1771*b1cdbd2cSJim Jagielski 1772*b1cdbd2cSJim JagielskiREM ------ Event Handling Functions (Buttons) ------ 1773*b1cdbd2cSJim Jagielski 1774*b1cdbd2cSJim Jagielskifunction getFilePicker() as Object 1775*b1cdbd2cSJim Jagielski REM file dialog 1776*b1cdbd2cSJim Jagielski oFilePicker = CreateUnoService( "com.sun.star.ui.dialogs.FilePicker" ) 1777*b1cdbd2cSJim Jagielski 1778*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "LanguageCombo" ) 1779*b1cdbd2cSJim Jagielski language = combo.text 1780*b1cdbd2cSJim Jagielski currentFilter = "" 1781*b1cdbd2cSJim Jagielski 1782*b1cdbd2cSJim Jagielski for langIndex = 0 to ubound(languages()) 1783*b1cdbd2cSJim Jagielski if( languages(langIndex) <> "Java" ) then 1784*b1cdbd2cSJim Jagielski filterName = languages(langIndex) + " (" 1785*b1cdbd2cSJim Jagielski filterVal="" 1786*b1cdbd2cSJim Jagielski extns = extensions(langIndex) 1787*b1cdbd2cSJim Jagielski for extnIndex = lbound(extns()) to ubound(extns()) 1788*b1cdbd2cSJim Jagielski filterName = filterName + "*." + extns(extnIndex) + "," 1789*b1cdbd2cSJim Jagielski filterVal = filterVal + "*." + extns(extnIndex) + "," 1790*b1cdbd2cSJim Jagielski next extnIndex 1791*b1cdbd2cSJim Jagielski filterName = left(filterName, len(filterName) -1) + ")" 1792*b1cdbd2cSJim Jagielski filterVal = left(filterVal, len(filterVal) -1) 1793*b1cdbd2cSJim Jagielski if(instr(filterName,language) = 1 ) then 1794*b1cdbd2cSJim Jagielski currentFilter = filterName 1795*b1cdbd2cSJim Jagielski end if 1796*b1cdbd2cSJim Jagielski oFilePicker.AppendFilter(filterName, filterVal) 1797*b1cdbd2cSJim Jagielski end if 1798*b1cdbd2cSJim Jagielski next langIndex 1799*b1cdbd2cSJim Jagielski if(len(currentFilter) > 0 ) then 1800*b1cdbd2cSJim Jagielski oFilePicker.SetCurrentFilter( currentFilter ) 1801*b1cdbd2cSJim Jagielski end if 1802*b1cdbd2cSJim Jagielski 1803*b1cdbd2cSJim Jagielski If sFileURL = "" Then 1804*b1cdbd2cSJim Jagielski oSettings = CreateUnoService( "com.sun.star.frame.Settings" ) 1805*b1cdbd2cSJim Jagielski oPathSettings = oSettings.getByName( "PathSettings" ) 1806*b1cdbd2cSJim Jagielski sFileURL = oPathSettings.getPropertyValue( "Work" ) 1807*b1cdbd2cSJim Jagielski End If 1808*b1cdbd2cSJim Jagielski 1809*b1cdbd2cSJim Jagielski REM set display directory 1810*b1cdbd2cSJim Jagielski oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) 1811*b1cdbd2cSJim Jagielski 1812*b1cdbd2cSJim Jagielski If oSimpleFileAccess.exists( sFileURL ) And oSimpleFileAccess.isFolder( sFileURL ) Then 1813*b1cdbd2cSJim Jagielski oFilePicker.setDisplayDirectory( sFileURL ) 1814*b1cdbd2cSJim Jagielski End If 1815*b1cdbd2cSJim Jagielski getFilePicker() = oFilePicker 1816*b1cdbd2cSJim Jagielskiend function 1817*b1cdbd2cSJim Jagielski 1818*b1cdbd2cSJim JagielskiSub DoBrowseAndEdit() 1819*b1cdbd2cSJim Jagielski Dim oFilePicker As Object, oSimpleFileAccess As Object 1820*b1cdbd2cSJim Jagielski Dim oSettings As Object, oPathSettings As Object 1821*b1cdbd2cSJim Jagielski Dim sFileURL As String 1822*b1cdbd2cSJim Jagielski Dim sFiles As Variant 1823*b1cdbd2cSJim Jagielski 1824*b1cdbd2cSJim Jagielski oFilePicker = getFilePicker() 1825*b1cdbd2cSJim Jagielski REM execute file dialog 1826*b1cdbd2cSJim Jagielski If oFilePicker.execute() Then 1827*b1cdbd2cSJim Jagielski sFiles = oFilePicker.getFiles() 1828*b1cdbd2cSJim Jagielski 1829*b1cdbd2cSJim Jagielski sFileURL = sFiles(0) 1830*b1cdbd2cSJim Jagielski oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) 1831*b1cdbd2cSJim Jagielski If oSimpleFileAccess.exists( sFileURL ) Then 1832*b1cdbd2cSJim Jagielski for langIndex = 0 to ubound(languages()) 1833*b1cdbd2cSJim Jagielski If (instr(oFilePicker.GetCurrentFilter, languages(langIndex)) = 1 ) then 1834*b1cdbd2cSJim Jagielski RunDebugger(languages(langIndex), sFileURL, "") 1835*b1cdbd2cSJim Jagielski End If 1836*b1cdbd2cSJim Jagielski next langIndex 1837*b1cdbd2cSJim Jagielski End If 1838*b1cdbd2cSJim Jagielski bindingDialog.endExecute() 1839*b1cdbd2cSJim Jagielski End If 1840*b1cdbd2cSJim JagielskiEnd Sub 1841*b1cdbd2cSJim Jagielski 1842*b1cdbd2cSJim JagielskiSub RunDebugger(lang as String, uri as String, filename as String) 1843*b1cdbd2cSJim Jagielski dim document as object 1844*b1cdbd2cSJim Jagielski dim dispatcher as object 1845*b1cdbd2cSJim Jagielski dim parser as object 1846*b1cdbd2cSJim Jagielski dim url as new com.sun.star.util.URL 1847*b1cdbd2cSJim Jagielski 1848*b1cdbd2cSJim Jagielski document = ThisComponent.CurrentController.Frame 1849*b1cdbd2cSJim Jagielski parser = createUnoService("com.sun.star.util.URLTransformer") 1850*b1cdbd2cSJim Jagielski dim args(2) as new com.sun.star.beans.PropertyValue 1851*b1cdbd2cSJim Jagielski args(0).Name = "language" 1852*b1cdbd2cSJim Jagielski args(0).Value = lang 1853*b1cdbd2cSJim Jagielski args(1).Name = "uri" 1854*b1cdbd2cSJim Jagielski args(1).Value = uri 1855*b1cdbd2cSJim Jagielski args(2).Name = "filename" 1856*b1cdbd2cSJim Jagielski args(2).Value = filename 1857*b1cdbd2cSJim Jagielski 1858*b1cdbd2cSJim Jagielski url.Complete = "script://_$DebugRunner.Debug?" _ 1859*b1cdbd2cSJim Jagielski + "language=Java&function=DebugRunner.go" _ 1860*b1cdbd2cSJim Jagielski + "&location=share" 1861*b1cdbd2cSJim Jagielski 1862*b1cdbd2cSJim Jagielski parser.parseStrict(url) 1863*b1cdbd2cSJim Jagielski disp = document.queryDispatch(url,"",0) 1864*b1cdbd2cSJim Jagielski disp.dispatch(url, args()) 1865*b1cdbd2cSJim JagielskiEnd Sub 1866*b1cdbd2cSJim Jagielski 1867*b1cdbd2cSJim Jagielskisub DoEdit() 1868*b1cdbd2cSJim Jagielski Dim scriptInfo as Object 1869*b1cdbd2cSJim Jagielski 1870*b1cdbd2cSJim Jagielski menuScriptList = bindingDialog.getControl( "ScriptList" ) 1871*b1cdbd2cSJim Jagielski selectedScript = menuScriptList.getSelectedItem() 1872*b1cdbd2cSJim Jagielski 1873*b1cdbd2cSJim Jagielski if not (selectedScript = "") then 1874*b1cdbd2cSJim Jagielski scripts() = scriptDisplayList(0) 1875*b1cdbd2cSJim Jagielski for n = LBOUND( scripts() ) to UBOUND( scripts() ) 1876*b1cdbd2cSJim Jagielski if ( scripts( n ).Name = selectedScript ) then 1877*b1cdbd2cSJim Jagielski scriptInfo = scripts( n ).Value 1878*b1cdbd2cSJim Jagielski exit for 1879*b1cdbd2cSJim Jagielski end if 1880*b1cdbd2cSJim Jagielski next n 1881*b1cdbd2cSJim Jagielski 1882*b1cdbd2cSJim Jagielski RunDebugger(scriptInfo.getLanguage, scriptInfo.getParcelURI, scriptInfo.getFunctionName) 1883*b1cdbd2cSJim Jagielski bindingDialog.endExecute() 1884*b1cdbd2cSJim Jagielski end if 1885*b1cdbd2cSJim Jagielskiend sub 1886*b1cdbd2cSJim Jagielski 1887*b1cdbd2cSJim Jagielskisub MenuOKButton() 1888*b1cdbd2cSJim Jagielski WriteXMLFromArray() 1889*b1cdbd2cSJim Jagielski bindingDialog.endExecute() 1890*b1cdbd2cSJim Jagielskiend sub 1891*b1cdbd2cSJim Jagielski 1892*b1cdbd2cSJim Jagielski 1893*b1cdbd2cSJim Jagielskisub MenuCancelButton() 1894*b1cdbd2cSJim Jagielski bindingDialog.endExecute() 1895*b1cdbd2cSJim Jagielskiend sub 1896*b1cdbd2cSJim Jagielski 1897*b1cdbd2cSJim Jagielski 1898*b1cdbd2cSJim Jagielskisub MenuHelpButton() 1899*b1cdbd2cSJim Jagielski helpDialog = LoadDialog( "ScriptBindingLibrary", "HelpBinding" ) 1900*b1cdbd2cSJim Jagielski helpDialog.execute() 1901*b1cdbd2cSJim Jagielskiend sub 1902*b1cdbd2cSJim Jagielski 1903*b1cdbd2cSJim Jagielski 1904*b1cdbd2cSJim Jagielskisub MenuDeleteButton() 1905*b1cdbd2cSJim Jagielski subMenuList = bindingDialog.getControl( "SubMenuList" ) 1906*b1cdbd2cSJim Jagielski linePos = subMenuItemLinePosition( subMenuList.getSelectedItemPos() + 1 ) 1907*b1cdbd2cSJim Jagielski 1908*b1cdbd2cSJim Jagielski RemoveBinding( linePos ) 1909*b1cdbd2cSJim Jagielski 1910*b1cdbd2cSJim Jagielski REM Update the top-level menu's line positions 1911*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "MenuCombo" ) 1912*b1cdbd2cSJim Jagielski newToplevelMenu = combo.text 1913*b1cdbd2cSJim Jagielski counter = 0 1914*b1cdbd2cSJim Jagielski do 1915*b1cdbd2cSJim Jagielski counter = counter + 1 1916*b1cdbd2cSJim Jagielski loop while not( newToplevelMenu = menuItems( counter ) ) 1917*b1cdbd2cSJim Jagielski UpdateTopLevelMenus( counter + 1, false ) 1918*b1cdbd2cSJim Jagielski 1919*b1cdbd2cSJim Jagielski MenuComboListener() 1920*b1cdbd2cSJim Jagielski 1921*b1cdbd2cSJim Jagielski subMenuList.selectItemPos( subMenuList.getSelectedItemPos(), true ) 1922*b1cdbd2cSJim Jagielskiend sub 1923*b1cdbd2cSJim Jagielski 1924*b1cdbd2cSJim Jagielski 1925*b1cdbd2cSJim Jagielskisub MenuNewButton() 1926*b1cdbd2cSJim Jagielski menuScriptList = bindingDialog.getControl( "ScriptList" ) 1927*b1cdbd2cSJim Jagielski selectedScript = menuScriptList.getSelectedItem() 1928*b1cdbd2cSJim Jagielski scriptURI = getScriptURI( selectedScript ) 1929*b1cdbd2cSJim Jagielski newMenuLabel = bindingDialog.Model.MenuLabelBox.text 1930*b1cdbd2cSJim Jagielski 1931*b1cdbd2cSJim Jagielski subMenuList = bindingDialog.getControl( "SubMenuList" ) 1932*b1cdbd2cSJim Jagielski 1933*b1cdbd2cSJim Jagielski REM Update the top-level menu's line positions 1934*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "MenuCombo" ) 1935*b1cdbd2cSJim Jagielski newToplevelMenu = combo.text 1936*b1cdbd2cSJim Jagielski counter = 0 1937*b1cdbd2cSJim Jagielski do 1938*b1cdbd2cSJim Jagielski counter = counter + 1 1939*b1cdbd2cSJim Jagielski loop while not( newToplevelMenu = menuItems( counter ) ) 1940*b1cdbd2cSJim Jagielski UpdateTopLevelMenus( counter + 1, true ) 1941*b1cdbd2cSJim Jagielski 1942*b1cdbd2cSJim Jagielski REM New line position is one ahead of the selected sub menu item 1943*b1cdbd2cSJim Jagielski linePos = subMenuItemLinePosition( subMenuList.getSelectedItemPos() + 1 ) + 1 1944*b1cdbd2cSJim Jagielski 1945*b1cdbd2cSJim Jagielski AddNewMenuBinding( scriptURI, newMenuLabel, linePos ) 1946*b1cdbd2cSJim Jagielski 1947*b1cdbd2cSJim Jagielski MenuComboListener() 1948*b1cdbd2cSJim Jagielski subMenuList.selectItemPos( subMenuList.getSelectedItemPos() + 1, true ) 1949*b1cdbd2cSJim Jagielski SubMenuListListener() 1950*b1cdbd2cSJim Jagielskiend sub 1951*b1cdbd2cSJim Jagielski 1952*b1cdbd2cSJim Jagielskisub BrowseButton() 1953*b1cdbd2cSJim Jagielski Dim oFilePicker As Object, oSimpleFileAccess As Object 1954*b1cdbd2cSJim Jagielski Dim oSettings As Object, oPathSettings As Object 1955*b1cdbd2cSJim Jagielski Dim sFileURL As String 1956*b1cdbd2cSJim Jagielski Dim sFiles As Variant 1957*b1cdbd2cSJim Jagielski 1958*b1cdbd2cSJim Jagielski oFilePicker = getFilePicker() 1959*b1cdbd2cSJim Jagielski 1960*b1cdbd2cSJim Jagielski REM execute file dialog 1961*b1cdbd2cSJim Jagielski If oFilePicker.execute() Then 1962*b1cdbd2cSJim Jagielski sFiles = oFilePicker.getFiles() 1963*b1cdbd2cSJim Jagielski sFileURL = sFiles(0) 1964*b1cdbd2cSJim Jagielski oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) 1965*b1cdbd2cSJim Jagielski If oSimpleFileAccess.exists( sFileURL ) Then 1966*b1cdbd2cSJim Jagielski REM add sFileURL to the list 1967*b1cdbd2cSJim Jagielski ReDim preserve filesysScripts(filesysCount) as String 1968*b1cdbd2cSJim Jagielski filesysScripts( filesysCount ) = sFileURL 1969*b1cdbd2cSJim Jagielski filesysCount=filesysCount+1 1970*b1cdbd2cSJim Jagielski ' if user changed filter in file picker then populate 1971*b1cdbd2cSJim Jagielski ' language with language associated with that in file picker 1972*b1cdbd2cSJim Jagielski sFilter = oFilePicker.getCurrentFilter() 1973*b1cdbd2cSJim Jagielski langCombo = bindingDialog.getControl( "LanguageCombo" ) 1974*b1cdbd2cSJim Jagielski dim items() as String 1975*b1cdbd2cSJim Jagielski items() = langCombo.getItems() 1976*b1cdbd2cSJim Jagielski for index = lbound(items()) to ubound(items()) 1977*b1cdbd2cSJim Jagielski iPos = inStr(sFilter," ") 1978*b1cdbd2cSJim Jagielski Dim theLanguage as String 1979*b1cdbd2cSJim Jagielski if( iPos > 0 ) then 1980*b1cdbd2cSJim Jagielski theLanguage = Left( sFilter, iPos - 1) 1981*b1cdbd2cSJim Jagielski if ( theLanguage = items( index ) ) then 1982*b1cdbd2cSJim Jagielski langCombo.text = items( index ) 1983*b1cdbd2cSJim Jagielski exit for 1984*b1cdbd2cSJim Jagielski end if 1985*b1cdbd2cSJim Jagielski end if 1986*b1cdbd2cSJim Jagielski next index 1987*b1cdbd2cSJim Jagielski End If 1988*b1cdbd2cSJim Jagielski End If 1989*b1cdbd2cSJim Jagielski LangLocComboListener() 1990*b1cdbd2cSJim JagielskiEnd Sub 1991*b1cdbd2cSJim Jagielski 1992*b1cdbd2cSJim Jagielskisub KeyOKButton() 1993*b1cdbd2cSJim Jagielski WriteXMLFromArray() 1994*b1cdbd2cSJim Jagielski bindingDialog.endExecute() 1995*b1cdbd2cSJim Jagielskiend sub 1996*b1cdbd2cSJim Jagielski 1997*b1cdbd2cSJim Jagielski 1998*b1cdbd2cSJim Jagielskisub KeyCancelButton() 1999*b1cdbd2cSJim Jagielski bindingDialog.endExecute() 2000*b1cdbd2cSJim Jagielskiend sub 2001*b1cdbd2cSJim Jagielski 2002*b1cdbd2cSJim Jagielski 2003*b1cdbd2cSJim Jagielskisub KeyHelpButton() 2004*b1cdbd2cSJim Jagielski helpDialog = LoadDialog( "ScriptBindingLibrary", "HelpBinding" ) 2005*b1cdbd2cSJim Jagielski helpDialog.execute() 2006*b1cdbd2cSJim Jagielskiend sub 2007*b1cdbd2cSJim Jagielski 2008*b1cdbd2cSJim Jagielski 2009*b1cdbd2cSJim Jagielskisub KeyNewButton() 2010*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "KeyCombo" ) 2011*b1cdbd2cSJim Jagielski keyGroup = combo.text 2012*b1cdbd2cSJim Jagielski for n = lbound ( allKeyGroupsArray() ) to ubound ( allKeyGroupsArray() ) 2013*b1cdbd2cSJim Jagielski if ( allKeyGroupsArray( n ) = keyGroup )then 2014*b1cdbd2cSJim Jagielski keyGroupIndex = n 2015*b1cdbd2cSJim Jagielski exit for 2016*b1cdbd2cSJim Jagielski end if 2017*b1cdbd2cSJim Jagielski next n 2018*b1cdbd2cSJim Jagielski menuScriptList = bindingDialog.getControl( "ScriptList" ) 2019*b1cdbd2cSJim Jagielski script = menuScriptList.getSelectedItem() 2020*b1cdbd2cSJim Jagielski scriptURI = getScriptURI( script ) 2021*b1cdbd2cSJim Jagielski 2022*b1cdbd2cSJim Jagielski keyList = bindingDialog.getControl( "KeyList" ) 2023*b1cdbd2cSJim Jagielski keyIndex = keyList.getSelectedItemPos() 2024*b1cdbd2cSJim Jagielski ShortCutKeyArray() = KeyBindArrayOfArrays( keyGroupIndex ) 2025*b1cdbd2cSJim Jagielski keyText = ShortCutKeyArray( keyIndex ) 2026*b1cdbd2cSJim Jagielski 2027*b1cdbd2cSJim Jagielski AddNewKeyBinding( scriptURI, HasShiftKey( keyText ), HasControlKey( keyText ), ExtractKeyFromCombo( keyText ) ) 2028*b1cdbd2cSJim Jagielski 2029*b1cdbd2cSJim Jagielski KeyComboListener() 2030*b1cdbd2cSJim Jagielskiend sub 2031*b1cdbd2cSJim Jagielski 2032*b1cdbd2cSJim Jagielski 2033*b1cdbd2cSJim Jagielskisub KeyDeleteButton() 2034*b1cdbd2cSJim Jagielski 2035*b1cdbd2cSJim Jagielski keyShortCutList = bindingDialog.getControl( "KeyList" ) 2036*b1cdbd2cSJim Jagielski selectedShortCut = keyShortCutList.getSelectedItem() 2037*b1cdbd2cSJim Jagielski combo = bindingDialog.getControl( "KeyCombo" ) 2038*b1cdbd2cSJim Jagielski 2039*b1cdbd2cSJim Jagielski keyGroup = combo.text 2040*b1cdbd2cSJim Jagielski dim keyGroupIndex as Integer 2041*b1cdbd2cSJim Jagielski dim selectedKeyIndex as Integer 2042*b1cdbd2cSJim Jagielski for n = lbound ( allKeyGroupsArray() ) to ubound ( allKeyGroupsArray() ) 2043*b1cdbd2cSJim Jagielski if ( allKeyGroupsArray( n ) = keyGroup )then 2044*b1cdbd2cSJim Jagielski keyGroupIndex = n 2045*b1cdbd2cSJim Jagielski exit for 2046*b1cdbd2cSJim Jagielski end if 2047*b1cdbd2cSJim Jagielski next n 2048*b1cdbd2cSJim Jagielski selectedKeyIndex = keyShortCutList.getSelectedItemPos() 2049*b1cdbd2cSJim Jagielski linePosition = keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Value 2050*b1cdbd2cSJim Jagielski keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Value = 0 2051*b1cdbd2cSJim Jagielski keyAllocationMap( keyGroupIndex, selectedKeyIndex ).Name = "" 2052*b1cdbd2cSJim Jagielski RemoveBinding( linePosition ) 2053*b1cdbd2cSJim Jagielski KeyComboListener() 2054*b1cdbd2cSJim Jagielskiend sub 2055*b1cdbd2cSJim Jagielski 2056*b1cdbd2cSJim Jagielski 2057*b1cdbd2cSJim Jagielskisub EventNewButton() 2058*b1cdbd2cSJim Jagielski eventScriptList = bindingDialog.getControl( "ScriptList" ) 2059*b1cdbd2cSJim Jagielski selectedScript = eventScriptList.getSelectedItem() 2060*b1cdbd2cSJim Jagielski scriptURI = getScriptURI( selectedScript ) 2061*b1cdbd2cSJim Jagielski eventList = bindingDialog.getControl( "EventList" ) 2062*b1cdbd2cSJim Jagielski eventPosition = eventList.getSelectedItemPos() 2063*b1cdbd2cSJim Jagielski 2064*b1cdbd2cSJim Jagielski allApps = bindingDialog.getControl( "AllAppsOption" ) 2065*b1cdbd2cSJim Jagielski dim isApp as boolean 2066*b1cdbd2cSJim Jagielski if allApps.state = true then 'Application 2067*b1cdbd2cSJim Jagielski isApp = true 2068*b1cdbd2cSJim Jagielski else 'Document 2069*b1cdbd2cSJim Jagielski isApp = false 2070*b1cdbd2cSJim Jagielski end if 2071*b1cdbd2cSJim Jagielski AddNewEventBinding( scriptURI, eventPosition, isApp ) 2072*b1cdbd2cSJim Jagielski 2073*b1cdbd2cSJim Jagielski populateEventList( eventPosition ) 2074*b1cdbd2cSJim Jagielski EventListListener() 2075*b1cdbd2cSJim Jagielskiend sub 2076*b1cdbd2cSJim Jagielski 2077*b1cdbd2cSJim Jagielski 2078*b1cdbd2cSJim Jagielskisub EventDeleteButton() 2079*b1cdbd2cSJim Jagielski eventList = bindingDialog.getControl( "EventList" ) 2080*b1cdbd2cSJim Jagielski REM Check that combo is a script 2081*b1cdbd2cSJim Jagielski eventPosition = eventList.getSelectedItemPos() 2082*b1cdbd2cSJim Jagielski 2083*b1cdbd2cSJim Jagielski allApps = bindingDialog.getControl( "AllAppsOption" ) 2084*b1cdbd2cSJim Jagielski if allApps.state = true then 'Application 2085*b1cdbd2cSJim Jagielski linePosition = allEventTypesApp( eventPosition ).Value 2086*b1cdbd2cSJim Jagielski 'dim eventProp as new com.sun.star.beans.PropertyValue 2087*b1cdbd2cSJim Jagielski 'eventProp.Name = "" 2088*b1cdbd2cSJim Jagielski 'eventProp.Value = 0 2089*b1cdbd2cSJim Jagielski allEventTypesApp( eventPosition ).Name = "" 2090*b1cdbd2cSJim Jagielski allEventTypesApp( eventPosition ).Value = 0 2091*b1cdbd2cSJim Jagielski RemoveBinding( linePosition ) 2092*b1cdbd2cSJim Jagielski else 'Document 2093*b1cdbd2cSJim Jagielski 'DeleteEvent( allEventTypes( eventPosition ) ) 2094*b1cdbd2cSJim Jagielski allEventTypesDoc( eventPosition ).Name = "" 2095*b1cdbd2cSJim Jagielski allEventTypesDoc( eventPosition ).Value = 0 2096*b1cdbd2cSJim Jagielski end if 2097*b1cdbd2cSJim Jagielski 2098*b1cdbd2cSJim Jagielski PopulateEventList( eventPosition ) 2099*b1cdbd2cSJim Jagielski EventListListener() 2100*b1cdbd2cSJim Jagielskiend sub 2101*b1cdbd2cSJim Jagielski 2102*b1cdbd2cSJim Jagielski 2103*b1cdbd2cSJim Jagielskisub EventOKButton 2104*b1cdbd2cSJim Jagielski WriteEventsToDoc() 2105*b1cdbd2cSJim Jagielski WriteXMLFromArray() 2106*b1cdbd2cSJim Jagielski bindingDialog.endExecute() 2107*b1cdbd2cSJim Jagielskiend sub 2108*b1cdbd2cSJim Jagielski 2109*b1cdbd2cSJim Jagielski 2110*b1cdbd2cSJim Jagielskisub HelpOKButton() 2111*b1cdbd2cSJim Jagielski helpDialog.endExecute() 2112*b1cdbd2cSJim Jagielskiend sub 2113*b1cdbd2cSJim Jagielski</script:module> 2114