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

Dim L1called as Boolean
Dim L2called as Boolean


Sub RunTest()

'*************************************************************************
' INTERFACE: 
' com.sun.star.form.XApproveActionBroadcaster
'*************************************************************************
On Error Goto ErrHndl
    Dim bOK As Boolean
    Dim list1 As Object, list2 As Object

    Test.StartMethod("addApproveActionListener()")
    bOK = true

    list1 = createUnoListener("L1_", "com.sun.star.form.XApproveActionListener")
    list2 = createUnoListener("L2_", "com.sun.star.form.XApproveActionListener")

    oObj.addApproveActionListener(list1)
    oObj.addApproveActionListener(list2)

    Test.StartMethod("removeApproveActionListener()")

    oObj.removeApproveActionListener(list1)

    L1called = false
    L2called = false
    
    Out.Log("The action for listener calling must be perfomed interactively")
    bOK = bOK AND L2called
    Test.MethodTested("addApproveActionListener()", TRUE)

    bOK = bOK AND NOT L1called
    Test.MethodTested("removeApproveActionListener()", TRUE)

    oObj.removeApproveActionListener(list2)

    Out.Log("Skipping all XApproveActionBroadcaster methods, since they need user interaction")

Exit Sub
ErrHndl:
    Test.Exception()
    bOK = false
    resume next
End Sub


Function L1_approveAction() As Boolean
    L1called = true
    Out.Log("Listener 1 is called")
    L1_approveAction = true
End Function

Function L2_approveAction() As Boolean
    L2called = true
    Out.Log("Listener 2 is called")
    L2_approveAction = true
End Function
</script:module>
