<?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_SwXTextFrameText" 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 oCollection As Object
Global oInstance As Object


Sub CreateObj()

'*************************************************************************
' COMPONENT: 
' sw.SwXTextFrameText
'*************************************************************************
On Error Goto ErrHndl
    Dim nHeight As Integer
    Dim nWidth As Integer
    Dim oCursor As Object
    Dim sSize As Object

    nHeight = 4000
    nWidth = 15000

    oDoc = utils.createDocument("swriter", cObjectName)
    oCursor = oDoc.Text.createTextCursor()

    oObj = oDoc.createInstance("com.sun.star.text.TextFrame")
    sSize = createUNOStruct("com.sun.star.awt.Size")
    sSize.Height = nHeight
    sSize.Width = nWidth
    oObj.Size = sSize
    oObj.SizeType = 1
    oObj.Name = cObjectName
    oObj.HoriOrient = 1
    oObj.VertOrient = 1

    ' AnchorTypes: 0 = paragraph, 1 = as char, 2 = page, 3 = frame/paragraph 4= at char
    oObj.AnchorType = 2
    oDoc.Text.insertTextContent(oCursor, oObj, false)

    oInstance = oDoc.createInstance("com.sun.star.text.Bookmark")
    oCollection = oDoc.Bookmarks
Exit Sub
ErrHndl:
    Test.Exception()
End Sub
</script:module>
