<?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="sw_SwAccessibleTableView" 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


' REQUIRED VARIABLES for interface/service tests:
Global oViewSettings As Object
Global multiSelection As Boolean


Sub CreateObj()

'*************************************************************************
' COMPONENT: 
' sw.SwAccessibleTableView
'*************************************************************************
On Error Goto ErrHndl
    oDoc = utils.createDocument("swriter", cObjectName)

    Dim oCursor As Object
    oCursor = oDoc.Text.createTextCursor()

    Dim oTable As Object
    oTable = oDoc.createInstance("com.sun.star.text.TextTable")
    oTable.initialize(3, 5)
    oDoc.Text.insertTextContent(oCursor, oTable, false)

    Dim xController As Object
    xController = oDoc.getCurrentController()

    oViewSettings = xController.getViewSettings()

    Dim oWin As Object
    Dim xRoot As Object
    oWin = utils.at_getCurrentWindow(oDoc)
    xRoot = utils.at_getAccessibleObject(oWin)
    oObj = utils.at_getAccessibleObjectForRole(xRoot, _
                                com.sun.star.accessibility.AccessibleRole.TABLE)
    multiSelection = true

Exit Sub
ErrHndl:
    Test.Exception()
End Sub

Sub fireEvent()
  oViewSettings.ZoomValue = 15
  oViewSettings.ZoomValue = 100
End Sub
</script:module>
