<?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="sd_SdDrawPage" 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.
'
'*************************************************************************






' REQUIRED VARIABLES for interface/service tests:
Global oXShapeInstance As Object
Global oGrouperCollection AS Object
Global oCombinerCollection As Object
Global oBinderCollection As Object


Sub CreateObj()

'*************************************************************************
' COMPONENT: 
' sd.SdDrawPage
'*************************************************************************
On Error Goto ErrHndl

    Dim bOK As Boolean
    bOK = true

    oDoc = utils.createDocument("sdraw", cObjectName)

    oXShapeInstance = oDoc.createInstance("com.sun.star.drawing.RectangleShape")

    oObj = oDoc.DrawPages.getByIndex(0)
    oGrouperCollection = createUNOService("com.sun.star.drawing.ShapeCollection")
    oCombinerCollection = createUNOService("com.sun.star.drawing.ShapeCollection")
    oBinderCollection = createUNOService("com.sun.star.drawing.ShapeCollection")

    addShape(oObj, 1000, 1000)
    addShape(oObj, 5000, 5000)
    addShape(oObj, 2000, 2000)
    addShape(oObj, 3000, 3000)
    addShape(oObj, 4000, 4000)
    addShape(oObj, 5000, 5000)
    addShape(oObj, 6000, 6000)
    addShape(oObj, 7000, 7000)

    oGrouperCollection.Add(oObj.getByIndex(0))
    oGrouperCollection.Add(oObj.getByIndex(1))
    oCombinerCollection.Add(oObj.getByIndex(2))
    oCombinerCollection.Add(oObj.getByIndex(3))
    oBinderCollection.Add(oObj.getByIndex(4))
    oBinderCollection.Add(oObj.getByIndex(5))


Exit Sub
ErrHndl:
    Test.Exception()
End Sub

sub AddShape(oPage as Object, nPosX as Integer, nPosY as Integer)
    Dim aPoint As New com.sun.star.awt.Point
    Dim aSize As New com.sun.star.awt.Size
    Dim oRectangleShape As Object

    aPoint.x = nPosX
    aPoint.y = nPosY
    aSize.Width = 10000
    aSize.Height = 10000
    oRectangleShape = oDoc.createInstance("com.sun.star.drawing.RectangleShape")
    oRectangleShape.Size = aSize
    oRectangleShape.Position = aPoint
    oRectangleShape.FillColor = RGB(255, 0, 0)
    oPage.add(oRectangleShape)
End Sub

Sub DisposeObj()
    if hasUnoInterfaces(oDoc, "com.sun.star.lang.XComponent") then
        oDoc.Dispose()
    end if
End Sub
</script:module>
