diff options
author | neilm <neilm@openoffice.org> | 2002-11-13 09:57:31 +0000 |
---|---|---|
committer | neilm <neilm@openoffice.org> | 2002-11-13 09:57:31 +0000 |
commit | 409218d48d9d11536f9194429a37c5fee8a67940 (patch) | |
tree | cd13309ea14c33611b1cfa2fa3de6dc8d9f4ae59 /scripting/workben/bindings/ScriptBinding.xba | |
parent | dda139f5bfea962fcb2d48ee7c0d305dbfa51169 (diff) |
Initial Import of Binding Dialog files to binding/ directory
Diffstat (limited to 'scripting/workben/bindings/ScriptBinding.xba')
-rw-r--r-- | scripting/workben/bindings/ScriptBinding.xba | 839 |
1 files changed, 839 insertions, 0 deletions
diff --git a/scripting/workben/bindings/ScriptBinding.xba b/scripting/workben/bindings/ScriptBinding.xba new file mode 100644 index 000000000000..3ff7f73d2ca8 --- /dev/null +++ b/scripting/workben/bindings/ScriptBinding.xba @@ -0,0 +1,839 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> +<script:module xmlns:script="http://openoffice.org/2000/script" script:name="ScriptBinding" script:language="StarBasic">REM ***** BASIC ***** + +REM ----- Global Variables ----- + +private bindingDialog as object +private helpDialog as object + +private xmlFile() as string +private xmlFileName as string + +private menuItems() as string +private menuItemLinePosition() as integer +private menuCount as integer + +private subMenuItems() as string +private subMenuItemLinePosition() as integer +private subMenuCount as integer + +private scriptNames() as string +private scriptLinePosition as integer +private scriptCount as integer + +private allKeyBindings() as string + +private numberOfLines as integer + + + +REM ------ Storage Refresh Function ------ + + +function RefreshUserScripts() + smgr = getProcessServiceManager() + context = smgr.getPropertyValue( "DefaultContext" ) + scriptstoragemgr = context.getValueByName( "/singletons/drafts.com.sun.star.script.framework.storage.theScriptStorageManager" ) + + storage = scriptstoragemgr.getScriptStorage( 1 ) + storage.refresh() +end function + + +REM ----- Launch Functions ----- + +function ExecuteKeyBinding() + bindingDialog = LoadDialog( "ScriptBindingLibrary", "KeyBinding" ) + xmlFileName = GetDocumentType( "Key" ) + officePath = GetOfficePath() + ReadXMLToArray( "Key" ) + PopulateScriptList() + CreateAllKeyBindings() + PopulateTopLevelKeyBindingList() + PopulateKeyBindingList( 1, 11 ) + bindingDialog.execute() +end function + + +function ExecuteMenuBinding() + bindingDialog = LoadDialog( "ScriptBindingLibrary", "MenuBinding" ) + xmlFileName = GetDocumentType( "Menu" ) + officePath = GetOfficePath() + ReadXMLToArray( "Menu" ) + PopulateScriptList() + PopulateMenuCombo() + PopulateSubMenuList( 1 ) + MenuLabelBoxListener() + bindingDialog.execute() +end function + + +REM ----- Initialising functions ----- + + +function LoadDialog( libName as string, dialogName as string ) as object + dim library as object + dim libDialog as object + dim runtimeDialog as object + + libContainer = DialogLibraries + libContainer.LoadLibrary( libName ) + library = libContainer.getByName( libname ) + libDialog = library.getByName( dialogName ) + runtimeDialog = CreateUnoDialog( libDialog ) + + LoadDialog() = runtimeDialog +end function + + +function GetDocumentType( bindingType as string ) as string + document = StarDesktop.ActiveFrame.Controller.Model + if document.SupportsService("com.sun.star.sheet.SpreadsheetDocument") then + if bindingType = "Key" then + GetDocumentType() = "calckeybinding.xml" + else + if bindingType = "Menu" then + GetDocumentType() = "calcmenubar.xml" + end if + end if + else + if document.SupportsService("com.sun.star.text.TextDocument") then + if bindingType = "Key" then + GetDocumentType() = "writerkeybinding.xml" + else + if bindingType = "Menu" then + GetDocumentType() = "writermenubar.xml" + end if + end if + else + msgbox "Couldn't determine file type" + end if + end if +end function + + +function ReadXMLToArray( bindingType as string ) + + simplefileaccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) + filestream = simplefileaccess.openFileRead( "file://" + GetOfficePath() + "/user/config/soffice.cfg/" + xmlFileName ) + + textin = CreateUnoService( "com.sun.star.io.TextInputStream" ) + textin.setInputStream( filestream ) + + reDim xmlFile( 500 ) as String + reDim menuItems( 30 ) as String + reDim menuItemLinePosition( 30 ) as Integer + reDim scriptNames( 120 ) as string + redim scriptLinePosition( 120) as integer + + lineCount = 1 + menuCount = 1 + scriptCount = 1 + + while not textin.isEOF() + xmlline = textin.readLine() + xmlFile( lineCount ) = xmlline + + const menuItemWhiteSpace = 2 + const menuXMLTag = "<menu:menu" + + 'If line read from XML file is a Menu title + if bindingType = "Menu" then + if instr( xmlFile( lineCount ), menuXMLTag ) = menuItemWhiteSpace then + menuLabel = ExtractLabelFromXMLLine( xmlFile( lineCount ) ) + menuItems( menuCount ) = menuLabel + menuItemLinePosition( menuCount ) = lineCount + menuCount = menuCount + 1 + end if + end if + + if bindingType = "Key" then + if not( instr( xmlFile( lineCount ), "<accel:item" ) = 0 ) then + scriptName = "" + if not( instr( xmlFile( lineCount ), "accel:shift="+chr$(34)+"true"+chr$(34) ) = 0 ) then + scriptName = scriptName + "SHIFT + " + end if + if not( instr( xmlFile( lineCount ), "accel:mod1="+chr$(34)+"true"+chr$(34) ) = 0 ) then + scriptName = scriptName + "CONTROL + " + end if + scriptName = scriptName + ExtractKeyCodeFromXMLLine( xmlFile( lineCount ) ) + scriptNames( scriptCount ) = scriptName + scriptLinePosition( scriptCount ) = lineCount + scriptCount = scriptCount + 1 + end if + end if + + lineCount = lineCount + 1 + wend + + numberOfLines = lineCount + filestream.closeInput() +end function + + +function GetOfficePath() as string +REM Error check and prompt user to manually input Office Path + settings = CreateUnoService( "com.sun.star.frame.Settings" ) + path = settings.getByName( "PathSettings" ) + unformattedOfficePath = path.getPropertyValue( "UserPath" ) + + dim officePath as string + const removeFromEnd = "/user" + const removeFromEndWindows = "\user" + + REM If Solaris or Linux + if not ( instr( unformattedOfficePath, removeFromEnd ) = 0 ) then + endPosition = instr( unformattedOfficePath, removeFromEnd )' - len( removeFromStart ) + officePath = mid( unformattedOfficePath, 1, endPosition ) + REM If Windows + else if not ( instr( unformattedOfficePath, removeFromEndWindows ) = 0 ) then + endPosition = instr( unformattedOfficePath, removeFromEndWindows ) + officePath = mid( unformattedOfficePath, 1, endPosition ) + while instr( officePath, "\" ) > 0 + backSlash = instr( officePath, "\" ) + startPath = mid( officePath, 1, backSlash - 1 ) + endPath = mid( officePath, backslash + 1, len( officePath ) - backSlash ) + officePath = startPath + "/" + endPath + wend + else + msgbox "Office path not found" + REM Prompt user + end if + end if + + GetOfficePath() = officePath +end function + + + +REM ----- File Output functions ----- + +function AddNewMenuBinding( newScript as string, newMenuLabel as string, newLinePosition as integer ) + simplefileaccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) + simplefileaccess.kill( "file:///" + GetOfficePath() + "user/config/soffice.cfg/" + xmlFileName ) + outfilestream = simplefileaccess.openFileWrite( "file:///" + GetOfficePath() + "user/config/soffice.cfg/" + xmlFileName ) + + textout = CreateUnoService( "com.sun.star.io.TextOutputStream" ) + textout.setOutputStream( outfilestream ) + + for n = 1 to numberOfLines - 1 + if n = newLinePosition + 1 then + indent = GetMenuWhiteSpace( xmlFile( newLinePosition ) ) + textout.writeString(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)+"/>"+ chr$(10) ) + 'msgbox (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)+"/>"+ chr$(10) + " newLinePosition is " + newLinePosition) + textout.writeString( xmlFile(n) + chr$(10) ) + else if n = numberOfLines - 1 then + textout.writeString( xmlFile(n) ) + else + textout.writeString( xmlFile(n) + chr$(10) ) + end if + end if + next n + + outfilestream.flush() + outfilestream.closeOutput() + 'bindingDialog.endExecute() + + 'msgbox ( "Menu Label: " + newMenuLabel + " Function Name: " + newScript ) +end function + + +function AddNewKeyBinding( scriptName as string, shift as boolean, control as boolean, key as string ) + simplefileaccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) + simplefileaccess.kill( "file:///" + GetOfficePath() + "user/config/soffice.cfg/" + xmlFileName ) + outfilestream = simplefileaccess.openFileWrite( "file:///" + GetOfficePath() + "user/config/soffice.cfg/" + xmlFileName ) + + textout = CreateUnoService( "com.sun.star.io.TextOutputStream" ) + textout.setOutputStream( outfilestream ) + + dim keyCombo as string + newLine = " <accel:item accel:code="+chr$(34)+"KEY_" + key +chr$(34) + if shift then + keyCombo = "SHIFT + " + newLine = newLine + " accel:shift="+chr$(34)+"true"+chr$(34) + end if + if control then + keyCombo = keyCombo + "CONTROL + " + newLine = newLine + " accel:mod1="+chr$(34)+"true"+chr$(34) + end if + keyCombo = keyCombo + key + newLine = newLine + " xlink:href="+chr$(34)+"script://" + scriptName + + 'For this release of the scripting framework only use application binding + applicationBinding = true + if applicationBinding then + newLine = newLine + "?location=application"+chr$(34)+"/>" + else + newLine = newLine + "?location=document"+chr$(34)+"/>" + end if + + 'msgbox ( "New key binding: " + newLine ) + + for n = 1 to numberOfLines - 1 + if n = numberOfLines - 1 then + textout.writeString( newLine + chr$(10) ) + textout.writeString( xmlFile( n ) )' + chr$(10) ) + else if n = numberOfLines - 1 then + textout.writeString( xmlFile( n ) ) + else + textout.writeString( xmlFile( n ) + chr$(10) ) + end if + end if + + next n + + outfilestream.flush() + outfilestream.closeOutput() + 'bindingDialog.endExecute() + + 'msgbox ( "Key: " + keyCombo + " Function Name: " + scriptName ) +end function + + +function RemoveBinding( removeLinePosition as integer ) + simplefileaccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) + simplefileaccess.kill( "file:///" + GetOfficePath() + "user/config/soffice.cfg/" + xmlFileName ) + outfilestream = simplefileaccess.openFileWrite( "file:///" + GetOfficePath() + "user/config/soffice.cfg/" + xmlFileName ) + + textout = CreateUnoService( "com.sun.star.io.TextOutputStream" ) + textout.setOutputStream( outfilestream ) + + for n = 1 to numberOfLines - 1 + if not( n = removeLinePosition ) then + if n = numberOfLines - 1 then + textout.writeString( xmlFile( n ) ) + else + textout.writeString( xmlFile( n ) + chr$(10) ) + end if + 'else + ' msgbox ("Deleting: " + xmlFile( n ) ) + end if + next n + + outfilestream.flush() + outfilestream.closeOutput() + 'bindingDialog.endExecute() +end function + + + +REM ----- Populating Dialog Controls ----- + + +function PopulateScriptList() + scriptList = bindingDialog.getControl( "ScriptList" ) + scriptList.removeItems( 0, scriptList.getItemCount() ) + + smgr = getProcessServiceManager() + context = smgr.getPropertyValue( "DefaultContext" ) + scriptstoragemgr = context.getValueByName( "/singletons/drafts.com.sun.star.script.framework.storage.theScriptStorageManager" ) + + storage = scriptstoragemgr.getScriptStorage( 1 ) + logicalNames() = storage.getScriptLogicalNames() + + for n = 1 to ubound( logicalNames() ) + 1 + scriptList.addItem( logicalNames( n - 1 ), n ) + next n + + scriptList.selectItemPos( 0, true ) +end function + + +function PopulateMenuCombo() + menuComboBox = bindingDialog.getControl( "MenuCombo" ) + menuComboBox.removeItems( 0, menuComboBox.getItemCount() ) + for n = 1 to menuCount - 1 + menuComboBox.addItem( menuItems( n ), n - 1 ) + next n + menuComboBox.setDropDownLineCount( 8 ) + menuComboBox.text = menuComboBox.getItem( 0 ) +end function + + +function PopulateSubMenuList( menuItemPosition as integer ) + redim subMenuItems( 100 ) as string + redim subMenuItemLinePosition( 100 ) as integer + dim lineNumber as integer + const menuItemWhiteSpace = 4 + const menuXMLTag = "<menu:menu" + subMenuCount = 1 + + xmlStartLine = menuItemLinePosition( menuItemPosition ) + 1 + 'If last menu item is chosen + if menuItemPosition = menuCount - 1 then + xmlEndLine = numberOfLines + else + xmlEndLine = menuItemLinePosition( menuItemPosition + 1 ) - 1 + end if + for lineNumber = xmlStartLine to xmlEndLine + 'Insert all sub-menus and sub-popupmenus + if not( instr( xmlFile( lineNumber ), menuXMLTag ) = 0 ) and instr( xmlFile( lineNumber ), "menupopup") = 0 then + subMenuIndent = GetMenuWhiteSpace( xmlFile( lineNumber ) ) + if subMenuIndent = " " then + subMenuIndent = "" + else + subMenuIndent = subMenuIndent + subMenuIndent + end if + if not( instr( xmlFile( lineNumber ), "menuseparator" ) = 0 ) then + subMenuItems( subMenuCount ) = subMenuIndent + "----------------" + else + subMenuName = ExtractLabelFromXMLLine( xmlFile( lineNumber ) ) + 'Add script Name if there is one bound to menu item + if instr( xmlFile( lineNumber ), "script://" ) > 0 then + script = ExtractScriptIdFromXMLLine( xmlFile( lineNumber ) ) + subMenuItems( subMenuCount ) = ( subMenuIndent + subMenuName + " [" + script + "]" ) + else + 'ZZZZZ Test to change text properties + 'tcolor = rgb( 255, 0, 0 ) + 'subMenuName.textcolor = tcolor + subMenuItems( subMenuCount ) = subMenuIndent + subMenuName + end if + end if + subMenuItemLinePosition( subMenuCount ) = lineNumber + subMenuCount = subMenuCount + 1 + end if + next lineNumber + + subMenuList = bindingDialog.getControl( "SubMenuList" ) + subMenuList.removeItems( 0, subMenuList.getItemCount() ) + for n = 1 to subMenuCount - 1 + subMenuList.addItem( subMenuItems( n ), n - 1 ) + next n + subMenuList.selectItemPos( 0, true ) + 'ZZZZZ Test to change text properties + 'control = CreateUnoService( "com.sun.star.awt.UnoControlEditModel" ) + 'msgbox ( subMenuName.dbg_methods ) + 'control.setModel( bindingDialog.Model ) + 'tcolor = rgb( 255, 0, 0 ) + 'bindingDialog.Model.subMenuList.textcolor = tcolor + SubMenuListListener() +end function + + + +function PopulateTopLevelKeyBindingList() + keyCombo = bindingDialog.getControl( "KeyCombo" ) + keyCombo.removeItems( 0, keyCombo.getItemCount() ) + keyCombo.addItem( "SHIFT + CONTROL + F keys", 0 ) + keyCombo.addItem( "SHIFT + CONTROL + digits", 1 ) + keyCombo.addItem( "SHIFT + CONTROL + letters", 2 ) + keyCombo.addItem( "CONTROL + F keys", 3 ) + keyCombo.addItem( "CONTROL + digits", 4 ) + keyCombo.addItem( "CONTROL + letters", 5 ) + keyCombo.addItem( "SHIFT + F keys", 6 ) + + keyCombo.setDropDownLineCount( 7 ) + keyCombo.text = keyCombo.getItem( 0 ) +end function + + +function PopulateKeyBindingList( startPosition as integer, endPosition as integer ) + dim formattedKeyBinding( 47 ) as string + counter = 1 + + keyList = bindingDialog.getControl( "KeyList" ) + + for n = startPosition to endPosition + if IsAllocatedKeyCombo( allKeyBindings( n ) ) > 1 then + formattedKeyBinding( counter ) = ( allKeyBindings( n ) + " [Allocated to " + ExtractScriptIdFromXMLLine( xmlFile( isAllocatedKeyCombo( allKeyBindings( n ) ) ) ) + "]" ) + else if IsAllocatedKeyCombo( allKeyBindings( n ) ) = 1 then + formattedKeyBinding( counter ) = ( allKeyBindings( n ) + " [Allocated to Office function]" ) + else + formattedKeyBinding( counter ) = allKeyBindings( n ) + end if + end if + counter = counter + 1 + next n + + keyList.removeItems( 0, keyList.getItemCount() ) + for n = 1 to counter - 1 + keyList.addItem( formattedKeyBinding( n ), n - 1 ) + next n + + keyList.selectItemPos( 0, true ) + KeyListListener() +end function + + + +function CreateAllKeyBindings() + reDim allKeyBindings( 105 ) as string + keyBindingPosition = 1 +'SHIFT + CONTROL for shftctrl = 1 to 46 + for FKey = 2 to 12 + allKeyBindings( keyBindingPosition ) = "SHIFT + CONTROL + F" + FKey + keyBindingPosition = keyBindingPosition + 1 + next FKey + for Digit = 0 to 9 + allKeyBindings( keyBindingPosition ) = "SHIFT + CONTROL + " + Digit + keyBindingPosition = keyBindingPosition + 1 + next Digit + for Alpha = 65 to 90 + allKeyBindings( keyBindingPosition ) = "SHIFT + CONTROL + " + chr$( Alpha ) + keyBindingPosition = keyBindingPosition + 1 + next Alpha +'FOR for ctrl = 1 to 46 + for FKey = 2 to 12 + allKeyBindings( keyBindingPosition ) = "CONTROL + F" + FKey + keyBindingPosition = keyBindingPosition + 1 + next FKey + for Digit = 0 to 9 + allKeyBindings( keyBindingPosition ) = "CONTROL + " + Digit + keyBindingPosition = keyBindingPosition + 1 + next Digit + for Alpha = 65 to 90 + allKeyBindings( keyBindingPosition ) = "CONTROL + " + chr$( Alpha ) + keyBindingPosition = keyBindingPosition + 1 + next Alpha +'SHIFT for shift = 1 to 46 + for FKey = 2 to 12 + allKeyBindings( keyBindingPosition ) = "SHIFT + F" + FKey + keyBindingPosition = keyBindingPosition + 1 + next FKey +end function + + + +REM ----- Text Handling Functions ----- + + +function ExtractLabelFromXMLLine( XMLLine as string ) as string + labelStart = instr( XMLLine, "label="+chr$(34)) + 7 + labelEnd = instr( XMLLine, chr$(34)+">" ) + if labelEnd = 0 then + labelEnd = instr( XMLLine, chr$(34)+"/>" ) + end if + labelLength = labelEnd - labelStart + + menuLabelUnformatted = mid( XMLLine, labelStart, labelLength ) + tildePosition = instr( menuLabelUnformatted, "~" ) + select case tildePosition + case 0 + menuLabel = menuLabelUnformatted + case 1 + menuLabel = right( menuLabelUnformatted, labelLength - 1 ) + case else + menuLabelLeft = left( menuLabelUnformatted, tildePosition - 1 ) + menuLabelRight = right( menuLabelUnformatted, labelLength - tildePosition ) + menuLabel = menuLabelLeft + menuLabelRight + end select + + ExtractLabelFromXMLLine() = menuLabel +end function + + +function ExtractScriptIdFromXMLLine( XMLLine as string ) as string + idStart = instr( XMLLine, "script://") + 9 + if instr( XMLLine, ""+chr$(34)+" menu:helpid=" ) = 0 then + idEnd = instr( XMLLIne, "?location=" ) + else + idEnd = instr( XMLLine, ""+chr$(34)+" menu:helpid=" ) + end if + idLength = idEnd - idStart + scriptId = mid( XMLLine, idStart, idLength ) + + ExtractScriptIdFromXMLLine() = scriptId +end function + + +function ExtractKeyCodeFromXMLLine( XMLLine as string ) as string + keyStart = instr( XMLLine, "code="+chr$(34)+"KEY_") + 10 + keyCode = mid( XMLLine, keyStart, ( len( XMLLine ) - keyStart ) ) + keyEnd = instr( keyCode, chr$(34) ) + keyCode = mid( keyCode, 1, keyEnd - 1 ) + + ExtractKeyCodeFromXMLLine() = keyCode +end function + + +function GetMenuWhiteSpace( MenuXMLLine as string ) as string + whiteSpace = "" + numberOfSpaces = instr( MenuXMLLine, "<" ) - 1 + for i = 1 to numberOfSpaces + whiteSpace = whiteSpace + " " + next i + + GetMenuWhiteSpace() = whiteSpace +end function + + +function IsAllocatedKeyCombo( script as string ) as integer + const NotAllocated = 0 + const AllocatedToOfficeFunction = 1 + const AllocatedToScript = 2 + dim Allocation as integer + + if instr( script, " [Allocated" ) > 0 then + endPosition = instr( script, " [Allocated" ) - 1 + script = mid( script, 1, endPosition ) + end if + + Allocation = NotAllocated + count = 1 + while Allocation = NotAllocated and count < scriptCount + linePosition = scriptLinePosition( count ) + if strcomp( script, scriptNames( count ) ) = 0 then + if instr( xmlFile( linePosition ), "script://" ) > 0 then + Allocation = linePosition + else + Allocation = AllocatedToOfficeFunction + end if + end if + count = count + 1 + wend + IsAllocatedKeyCombo() = Allocation +end Function + + +function IsAllocatedMenuItem( script as string ) as boolean + foundMenuItem = false + Allocated = false + count = 0 + do + count = count + 1 + if strcomp( script, subMenuItems( count ) ) = 0 then + foundMenuItem = true + end if + loop while not( foundMenuItem ) and count < subMenuCount + + linePosition = subMenuItemLinePosition( count ) + + if not( instr( xmlFile( linePosition ), "script://" ) = 0 ) then + Allocated = true + end if + + isAllocatedMenuItem() = Allocated +end Function + + +function HasShiftKey( keyCombo ) as boolean + if instr( keyCombo, "SHIFT" ) = 0 then + hasShift = false + else + hasShift = true + end if + + HasShiftKey = hasShift +end function + + +function HasControlKey( keyCombo ) as boolean + if instr( keyCombo, "CONTROL" ) = 0 then + hasControl = false + else + hasControl = true + end if + + HasControlKey = hasControl +end function + + +function ExtractKeyFromCombo( keyString as string ) as string + while not( instr( keyString, "+" ) = 0 ) + removeTo = instr( keyString, "+ " ) + 2 + keyString = mid( keyString, removeTo, ( len( keyString ) - removeTo ) + 1 ) + wend + + ExtractKeyFromCombo() = keyString +end function + + + +REM ------ Event Handling Functions ------ + + +function KeyListListener() + keyList = bindingDialog.getControl( "KeyList" ) + selectedKeyCombo = keyList.getSelectedItem() + + if isAllocatedKeyCombo( selectedKeyCombo ) > 1 then + bindingDialog.Model.Delete.enabled = true + bindingDialog.Model.NewButton.enabled = false + else + if isAllocatedKeyCombo( selectedKeyCombo ) = 1 then + bindingDialog.Model.Delete.enabled = false + bindingDialog.Model.NewButton.enabled = false + else + bindingDialog.Model.Delete.enabled = false + bindingDialog.Model.NewButton.enabled = true + end if + end if +end function + + +function SubMenuListListener() + subMenuList = bindingDialog.getControl( "SubMenuList" ) + selectedMenuItem = subMenuList.getSelectedItem() + if IsAllocatedMenuItem( selectedMenuItem ) then + bindingDialog.Model.Delete.enabled = true + else + bindingDialog.Model.Delete.enabled = false + end if +end function + + +'Populates the SubMenuList with the appropriate menu items from the Top-level menu selected from the combo box +function MenuComboListener() + combo = bindingDialog.getControl( "MenuCombo" ) + newToplevelMenu = combo.text + counter = 0 + do + counter = counter + 1 + loop while not( newToplevelMenu = menuItems( counter ) ) + + PopulateSubMenuList( counter ) +end function + + +'Populates the KeyList with the appropriate key combos from the Top-level key group selected from the combo box +function KeyComboListener() + combo = bindingDialog.getControl( "KeyCombo" ) + itemSelected = combo.text + + select case itemSelected + case "SHIFT + CONTROL + F keys" + PopulateKeyBindingList( 1, 11 ) + case "SHIFT + CONTROL + digits" + PopulateKeyBindingList( 12, 21 ) + case "SHIFT + CONTROL + letters" + PopulateKeyBindingList( 22, 47 ) + case "CONTROL + F keys" + PopulateKeyBindingList( 48, 58 ) + case "CONTROL + digits" + PopulateKeyBindingList( 59, 68 ) + case "CONTROL + letters" + PopulateKeyBindingList( 69, 94 ) + case "SHIFT + F keys" + PopulateKeyBindingList( 95, 105 ) + case else + msgbox "Error" + end select +end function + + +function MenuLabelBoxListener() + if bindingDialog.Model.MenuLabelBox.text = "" then + bindingDialog.Model.NewButton.enabled = false + else + bindingDialog.Model.NewButton.enabled = true + end if +end function + + +function MenuOKButton() + msgbox ("Office must be restarted before your changes will take effect." ) + bindingDialog.endExecute() +end function + + +function MenuCancelButton() + bindingDialog.endExecute() +end function + + +function MenuHelpButton() + helpDialog = LoadDialog( "ScriptBindingLibrary", "HelpBinding" ) + helpDialog.execute() +end function + + +function MenuDeleteButton() + subMenuList = bindingDialog.getControl( "SubMenuList" ) + linePos = subMenuItemLinePosition( subMenuList.getSelectedItemPos() + 1 ) + RemoveBinding( linePos ) + + menuLabel = ExtractLabelFromXMLLine( xmlFile( linePos ) ) + script = ExtractScriptIdFromXMLLine( xmlFile( linePos ) ) + ReadXMLToArray( "Menu" ) +REM !!! + MenuComboListener() + 'PopulateSubMenuList( menuItemPosition as integer ) +end function + + +function MenuNewButton() + menuScriptList = bindingDialog.getControl( "ScriptList" ) + script = menuScriptList.getSelectedItem() + newMenuLabel = bindingDialog.Model.MenuLabelBox.text + if newMenuLabel = "" then + msgbox "Error. Please enter new Menu Label" + end if + subMenuList = bindingDialog.getControl( "SubMenuList" ) + linePos = subMenuItemLinePosition( subMenuList.getSelectedItemPos() + 1 ) + AddNewMenuBinding( script, newMenuLabel, linePos ) + + 'topLevelMenu = bindingDialog.Model.MenuCombo.text + 'subMenu = subMenuList.getSelectedItem() + ReadXMLToArray( "Menu" ) +REM !!! + MenuComboListener() + 'PopulateSubMenuList( menuItemPosition as integer ) + 'msgbox ( "Menu: " + topLevelMenu + " -> " + newMenuLabel + " Function Name: " + script ) +end function + + +function KeyOKButton() + msgbox ("Office must be restarted before your changes will take effect." ) + bindingDialog.endExecute() +end function + + +function KeyCancelButton() + bindingDialog.endExecute() +end function + + +function KeyHelpButton() + helpDialog = LoadDialog( "ScriptBindingLibrary", "HelpBinding" ) + helpDialog.execute() +end function + + +function KeyNewButton() + menuScriptList = bindingDialog.getControl( "ScriptList" ) + script = menuScriptList.getSelectedItem() + + keyList = bindingDialog.getControl( "KeyList" ) + REM Check that combo has not already been allocated + keyCombo = keyList.getSelectedItem() + + AddNewKeyBinding( script, HasShiftKey( keyCombo ), HasControlKey( keyCombo ), ExtractKeyFromCombo( keyCombo ) ) + ReadXMLToArray( "Key" ) +REM !!! + KeyComboListener() + 'PopulateKeyBindingList( startPosition as integer, endPosition as integer ) +end function + + +function KeyDeleteButton() + keyList = bindingDialog.getControl( "KeyList" ) + REM Check that combo is a script + keyCombo = keyList.getSelectedItem() + + if instr( keyCombo, " [Allocated" ) > 0 then + endPosition = instr( keyCombo, " [Allocated" ) - 1 + keyCombo = mid( keyCombo, 1, endPosition ) + end if + + for n = 1 to scriptCount + if strcomp( keyCombo, scriptNames( n ) ) = 0 then + keyComboPosition = n + exit for + end if + next n + + linePosition = scriptLinePosition( keyComboPosition ) + RemoveBinding( linePosition ) + + script = ExtractScriptIdFromXMLLine( xmlFile( linePosition ) ) + ReadXMLToArray( "Key" ) +REM !!! + KeyComboListener() + 'PopulateKeyBindingList( startPosition as integer, endPosition as integer ) +end function + + +function HelpOKButton() + helpDialog.endExecute() +end function</script:module> |