<?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="toolkit_AccessibleMenuSeparator" script:language="StarBasic">


'*************************************************************************
'
'  Licensed to the Apache Software Foundation (ASF) under one
'  or more contributor license agreements.  See the NOTICE file
'  distributed with this work for additional information
'  regarding copyright ownership.  The ASF licenses this file
'  to you under the Apache License, Version 2.0 (the
'  "License"); you may not use this file except in compliance
'  with the License.  You may obtain a copy of the License at
'  
'    http://www.apache.org/licenses/LICENSE-2.0
'  
'  Unless required by applicable law or agreed to in writing,
'  software distributed under the License is distributed on an
'  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
'  KIND, either express or implied.  See the License for the
'  specific language governing permissions and limitations
'  under the License.
'
'*************************************************************************





' Be sure that all variables are dimensioned:
option explicit



Sub CreateObj()

'*************************************************************************
' COMPONENT: 
' toolkit.AccessibleMenuSeparator
'*************************************************************************
On Error Goto ErrHndl
    Dim oWin As Object, xRoot As Object
    Dim tk As Object
	Dim oMenu as Object
	Dim oMenuCont as Object

    oDoc = utils.createDocument("swriter", cObjectName)
    tk = createUNOService("com.sun.star.awt.Toolkit")
    wait(1000)
    oWin = tk.getActiveTopWindow()
    xRoot = utils.at_getAccessibleObject(oWin)
    oMenu = utils.at_getAccessibleObjectForRole(xRoot, com.sun.star.accessibility.AccessibleRole.MENU)
	oMenuCont = oMenu.getAccessibleContext()
    oMenuCont.doAccessibleAction(0)
    oObj = oMenu.getAccessibleChild(4)
	
    Out.Log("Implementation Name: "+oObj.getImplementationName())

Exit Sub
ErrHndl:
    Test.Exception()
End Sub

Sub DisposeObj()
    utils.closeObject(oDoc)
End Sub

Sub fireEvent()
    oObj.grabFocus()
End Sub
</script:module>
