<?xml version="1.0" encoding="UTF-8"?>
<!--***********************************************************
 *
 * 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.
 *
 ***********************************************************-->


<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Events" script:language="StarBasic">REM  *****  BASIC  *****

Global s_CloseListenerCalled As Boolean

Sub PressCancel
	gDlgState = cDlgCancel
end Sub

Sub PressOk
	gDlgState = cDlgOk
end Sub

Sub PressTest
	gOptionsDialog.EndExecute()
	gDlgState = cDlgStartTest
end Sub

Sub closeListener_queryClosing
  &apos; not interested in
  closeListener_queryClosing = TRUE
End Sub

Sub closeListener_notifyClosing
  s_CloseListenerCalled = TRUE
End Sub

Sub closeListener_disposing
  &apos; not interested in
End Sub

Sub ResetCloseListenerFlag
  s_CloseListenerCalled = FALSE
End Sub

Function HasCloseListenerBeenCalled As Boolean
  HasCloseListenerBeenCalled = s_CloseListenerCalled
End Function
</script:module>
