<?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="Dialog" script:language="StarBasic">REM =======================================================================================================================
REM ===					The Access2Base library is a part of the LibreOffice project.									===
REM ===					Full documentation is available on http://www.access2base.com									===
REM =======================================================================================================================

Option Compatible
Option ClassModule

Option Explicit

REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS ROOT FIELDS 								        														---
REM -----------------------------------------------------------------------------------------------------------------------

Private	_Type					As String				&apos;	Must be FORM
Private	_Name					As String
Private _Shortcut				As String
Private _Dialog					As Object				&apos;	com.sun.star.io.XInputStreamProvider
Private UnoDialog				As Object				&apos;	com.sun.star.awt.XControl

REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS						        														---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
	_Type = OBJDIALOG
	_Name = &quot;&quot;
	Set _Dialog = Nothing
	Set UnoDialog = Nothing
End Sub		&apos;	Constructor

REM -----------------------------------------------------------------------------------------------------------------------
&apos;Private Sub Class_Terminate()

REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS GET/LET/SET PROPERTIES					        														---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Caption() As Variant
	Caption = _PropertyGet(&quot;Caption&quot;)
End Property	&apos;	Caption (get)

Property Let Caption(ByVal pvValue As Variant)
	Call _PropertySet(&quot;Caption&quot;, pvValue)
End Property	&apos;	Caption (set)

REM -----------------------------------------------------------------------------------------------------------------------
Property Get Height() As Variant
	Height = _PropertyGet(&quot;Height&quot;)
End Property	&apos;	Height (get)

Property Let Height(ByVal pvValue As Variant)
	Call _PropertySet(&quot;Height&quot;, pvValue)
End Property	&apos;	Height (set)

REM -----------------------------------------------------------------------------------------------------------------------
Property Get IsLoaded() As Boolean
	IsLoaded = _PropertyGet(&quot;IsLoaded&quot;)
End Property

REM -----------------------------------------------------------------------------------------------------------------------
Property Get Name() As String
	Name = _PropertyGet(&quot;Name&quot;)
End Property	&apos;	Name (get)

Public Function pName() As String		&apos;	For compatibility with &lt; V0.9.0
	pName = _PropertyGet(&quot;Name&quot;)
End Function	&apos;	pName (get)

REM -----------------------------------------------------------------------------------------------------------------------
Property Get ObjectType() As String
	ObjectType = _PropertyGet(&quot;ObjectType&quot;)
End Property		&apos;	ObjectType (get)

REM -----------------------------------------------------------------------------------------------------------------------
Public Function OptionGroup(ByVal Optional pvGroupName As Variant) As Variant
&apos;	Return either an error or an object of type OPTIONGROUP based on its name
&apos;	A group is determined by the successive TabIndexes of the radio button
&apos;	The name of the group = the name of its first element

	Utils._SetCalledSub(&quot;Dialog.OptionGroup&quot;)
	If IsMissing(pvGroupName) Then Call _TraceArguments()
	If _ErrorHandler() Then On Local Error Goto Error_Function

	Set OptionGroup = Nothing
	If Not Utils._CheckArgument(pvGroupName, 1, vbString) Then Goto Exit_Function

Dim iAllCount As Integer, iRadioLast As Integer, iGroupCount As Integer, iBegin As Integer, iEnd As Integer
Dim oRadios() As Object, sGroupName As String
Dim i As Integer, j As Integer, bFound As Boolean, ocControl As Object, oRadio As Object, iTabIndex As Integer
Dim ogGroup As Object, vGroup() As Variant, vIndex() As Variant
	iAllCount = Controls.Count
	If iAllCount &gt; 0 Then
		iRadioLast = -1
		ReDim oRadios(0 To iAllCount - 1)
		For i = 0 To iAllCount - 1			&apos;	Store all RadioButtons objects
			Set ocControl = Controls(i)
			If ocControl._SubType = CTLRADIOBUTTON Then
				iRadioLast = iRadioLast + 1
				Set oRadios(iRadioLast) = ocControl
			End If
		Next i
	Else
		Goto Error_Arg							&apos;	No control in dialog
	End If
	
	If iRadioLast &lt; 0 then Goto Error_Arg		&apos;	No radio buttons in the dialog
	
	&apos;Resort oRadio array based on tab indexes
	If iRadioLast &gt; 0 Then
		For i = 0 To iRadioLast - 1		&apos;	Bubble sort
			For j = i + 1 To iRadioLast
				If oRadios(i).TabIndex &gt; oRadios(j).TabIndex Then
					Set oRadio = oRadios(i)
					Set oRadios(i) = oRadios(j)
					Set oRadios(j) = oRadio
				End If
			Next j
		Next i
	End If
	
	&apos;Scan Names to find match with argument
	bFound = False
	For i = 0 To iRadioLast
		If UCase(oRadios(i)._Name) = UCase(pvGroupName) Then
			Select Case i
				Case 0			:	bFound = True
				Case Else
					If oRadios(i).TabIndex &gt; oRadios(i - 1).TabIndex + 1 Then
						bFound = True
					Else
						Goto Error_Arg		&apos;	same group as preceeding item although name correct
					End If
			End Select
			If bFound Then
				iBegin = i
				iEnd = i
				sGroupName = oRadios(i)._Name
			End If
		ElseIf bFound Then
			If oRadios(i).TabIndex = oRadios(i - 1).TabIndex + 1 Then iEnd = i
		End If
	Next i

	If bFound Then		&apos;	Create OptionGroup
		iGroupCount = iEnd - iBegin + 1
		Set ogGroup = New OptionGroup
		ReDim vGroup(0 To iGroupCount - 1)
		ReDim vIndex(0 To iGroupCount - 1)
		With ogGroup
			._Name = sGroupName
			._Count = iGroupCount
			._ButtonsGroup = vGroup
			._ButtonsIndex = vIndex
			For i = 0 To iGroupCount - 1
				Set ._ButtonsGroup(i) = oRadios(iBegin + i).ControlModel
				._ButtonsIndex(i) = i
			Next i
			._ParentType = CTLPARENTISDIALOG
			._ParentComponent = UnoDialog
		End With
	Else Goto Error_Arg
	End If
	
	Set OptionGroup = ogGroup
	
Exit_Function:
	Utils._ResetCalledSub(&quot;Dialog.OptionGroup&quot;)
	Exit Function
Error_Arg:
	TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, , Array(1, pvGroupName))
	Goto Exit_Function
Error_Function:
	TraceError(TRACEABORT, Err, &quot;Dialog.OptionGroup&quot;, Erl)
	GoTo Exit_Function
End Function		&apos;	OptionGroup	V0.9.1

REM -----------------------------------------------------------------------------------------------------------------------
Property Get Page() As Variant
	Page = _PropertyGet(&quot;Page&quot;)
End Property		&apos;	Page (get)

Property Let Page(ByVal pvValue As Variant)
	Call _PropertySet(&quot;Page&quot;, pvValue)
End Property		&apos;	Page (set)

REM -----------------------------------------------------------------------------------------------------------------------
Public Function Properties(ByVal Optional pvIndex As Variant) As Variant
&apos;	Return
&apos;		a Collection object if pvIndex absent
&apos;		a Property object otherwise

Dim vProperty As Variant, vPropertiesList() As Variant, sObject As String
	vPropertiesList = _PropertiesList()
	sObject = Utils._PCase(_Type)
	If IsMissing(pvIndex) Then
		vProperty = PropertiesGet._Properties(sObject, _Name, vPropertiesList)
	Else
		vProperty = PropertiesGet._Properties(sObject, _Name, vPropertiesList, pvIndex)
		vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
	End If
	
Exit_Function:
	Set Properties = vProperty
	Exit Function
End Function	&apos;	Properties

REM -----------------------------------------------------------------------------------------------------------------------
Property Get Visible() As Variant
	Visible = _PropertyGet(&quot;Visible&quot;)
End Property	&apos;	Visible (get)

Property Let Visible(ByVal pvValue As Variant)
	Call _PropertySet(&quot;Visible&quot;, pvValue)
End Property	&apos;	Visible (set)

REM -----------------------------------------------------------------------------------------------------------------------
Property Get Width() As Variant
	Width = _PropertyGet(&quot;Width&quot;)
End Property	&apos;	Width (get)

Property Let Width(ByVal pvValue As Variant)
	Call _PropertySet(&quot;Width&quot;, pvValue)
End Property	&apos;	Width (set)

REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS	 								        														---
REM -----------------------------------------------------------------------------------------------------------------------

Public Function Controls(Optional ByVal pvIndex As Variant) As Variant
&apos;	Return a Control object with name or index = pvIndex

If _ErrorHandler() Then On Local Error Goto Error_Function
	Utils._SetCalledSub(&quot;Dialog.Controls&quot;)

Dim ocControl As Variant, sParentShortcut As String, iControlCount As Integer
Dim oCounter As Variant, sControls() As Variant, i As Integer, bFound As Boolean, sIndex As String
Dim j As Integer

	Set ocControl = Nothing
	If Not IsLoaded Then Goto Trace_Error_NotOpen
	Set ocControl = New Control
	ocControl._ParentType = CTLPARENTISDIALOG
	sParentShortcut = _Shortcut
	sControls() = UnoDialog.Model.getElementNames()
	iControlCount = UBound(sControls) + 1
	
	If IsMissing(pvIndex) Then					&apos;	No argument, return Collection object
		Set oCounter = New Collect
		oCounter._CollType = COLLCONTROLS
		oCounter._Count = iControlCount
		Set Controls = oCounter
		Goto Exit_Function
	End If
	
	If Not Utils._CheckArgument(pvIndex, 1, Utils._AddNumeric(vbString)) Then Goto Exit_Function
				
	&apos;	Start building the ocControl object
	&apos;	Determine exact name
	
	Select Case VarType(pvIndex)
		Case vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbBigint, vbDecimal
			If pvIndex &lt; 0 Or pvIndex &gt; iControlCount - 1 Then Goto Trace_Error_Index
			ocControl._Name = sControls(pvIndex)
		Case vbString			&apos;	Check control name validity (non case sensitive)
			bFound = False
			sIndex = UCase(Utils._Trim(pvIndex))
			For i = 0 To iControlCount - 1
				If UCase(sControls(i)) = sIndex Then
					bFound = True
					Exit For
				End If
			Next i
			If bFound Then ocControl._Name = sControls(i) Else Goto Trace_NotFound
	End Select

	ocControl._Shortcut = sParentShortcut &amp; &quot;!&quot; &amp; Utils._Surround(ocControl._Name)
	Set ocControl.ControlModel = UnoDialog.Model.getByName(ocControl._Name)
	Set ocControl.ControlView = UnoDialog.getControl(ocControl._Name)
	ocControl._ImplementationName = ocControl.ControlModel.getImplementationName()
	ocControl._FormComponent = UnoDialog

	ocControl._Initialize()
	Set Controls = ocControl
	
Exit_Function:
	Utils._ResetCalledSub(&quot;Dialog.Controls&quot;)
	Exit Function
Trace_Error:
	TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, , iArg)
	Set Controls = Nothing
	Goto Exit_Function
Trace_Error_NotOpen:
	TraceError(TRACEFATAL, ERRDIALOGNOTSTARTED, Utils._CalledSub(), 0, , _Name)
	Set Controls = Nothing
	Goto Exit_Function
Trace_Error_Index:
	TraceError(TRACEFATAL, ERRCOLLECTION, Utils._CalledSub(), 0, 1)
	Set Controls = Nothing
	Goto Exit_Function
Trace_NotFound:
	TraceError(TRACEFATAL, ERRCONTROLNOTFOUND, Utils._CalledSub(), 0, , Array(pvIndex, pvIndex))
	Set Controls = Nothing
	Goto Exit_Function
Error_Function:
	TraceError(TRACEABORT, Err, &quot;Dialog.Controls&quot;, Erl)
	Set Controls = Nothing
	GoTo Exit_Function
End Function		&apos;	Controls

REM -----------------------------------------------------------------------------------------------------------------------
Public Sub EndExecute(ByVal Optional pvReturn As Variant)
&apos;	Stop executing the dialog

If _ErrorHandler() Then On Local Error Goto Error_Sub
	Utils._SetCalledSub(&quot;Dialog.endExecute&quot;)

	If IsMissing(pvReturn) Then pvReturn = 0
	If Not Utils._CheckArgument(pvReturn, 1, Utils._AddNumeric(), , False) Then Goto Trace_Error
	
Dim lExecute As Long
	lExecute = CLng(pvReturn)
	If IsNull(_Dialog) Then Goto Error_Execute
	If IsNull(UnoDialog) Then Goto Error_Not_Started
	Call UnoDialog.endDialog(lExecute)

Exit_Sub:
	Utils._ResetCalledSub(&quot;Dialog.endExecute&quot;)
	Exit Sub
Trace_Error:
	TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, , Array(&quot;1&quot;, Utils._CStr(pvReturn)))
	Goto Exit_Sub
Error_Execute:
	TraceError(TRACEFATAL, ERRDIALOGUNDEFINED, Utils._CalledSub(), 0)
	Goto Exit_Sub
Error_Not_Started:
	TraceError(TRACEWARNING, ERRDIALOGNOTSTARTED, Utils._CalledSub(), 0, 1, _Name)
	Goto Exit_Sub
Error_Sub:
	TraceError(TRACEABORT, Err, &quot;Dialog.endExecute&quot;, Erl)
	GoTo Exit_Sub
End Sub			&apos;	EndExecute

REM -----------------------------------------------------------------------------------------------------------------------
Public Function Execute() As Long
&apos;	Execute dialog

&apos;If _ErrorHandler() Then On Local Error Goto Error_Function
&apos;Seems smart not to trap errors: debugging of dialog events otherwise made very difficult !
	Utils._SetCalledSub(&quot;Dialog.Execute&quot;)

Dim lExecute As Long
	If IsNull(_Dialog) Then Goto Error_Execute
	If IsNull(UnoDialog) Then Goto Error_Not_Started
	lExecute = UnoDialog.execute()

	Select Case lExecute
		Case 1		:	Execute = dlgOK
		Case 0		:	Execute = dlgCancel
		Case Else	:	Execute = lExecute
	End Select

Exit_Function:
	Utils._ResetCalledSub(&quot;Dialog.Execute&quot;)
	Exit Function
Error_Execute:
	TraceError(TRACEFATAL, ERRDIALOGUNDEFINED, Utils._CalledSub(), 0)
	Goto Exit_Function
Error_Not_Started:
	TraceError(TRACEWARNING, ERRDIALOGNOTSTARTED, Utils._CalledSub(), 0, 1, _Name)
	Goto Exit_Function
Error_Function:
	TraceError(TRACEABORT, Err, &quot;Dialog.Execute&quot;, Erl)
	GoTo Exit_Function
End Function		&apos;	Execute

REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos;	Return property value of psProperty property name

	Utils._SetCalledSub(&quot;Dialog.getProperty&quot;)
	If IsMissing(pvProperty) Then Call _TraceArguments()
	getProperty = _PropertyGet(pvProperty)
	Utils._ResetCalledSub(&quot;Dialog.getProperty&quot;)
	
End Function		&apos;	getProperty

REM -----------------------------------------------------------------------------------------------------------------------
Public Function hasProperty(ByVal Optional pvProperty As Variant) As Boolean
&apos;	Return True if object has a valid property called pvProperty (case-insensitive comparison !)

	If IsMissing(pvProperty) Then hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList()) Else hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList(), pvProperty)
	Exit Function
	
End Function	&apos;	hasProperty

REM -----------------------------------------------------------------------------------------------------------------------
Public Function Move(	  ByVal Optional pvLeft As Variant _
						, ByVal Optional pvTop As Variant _
						, ByVal Optional pvWidth As Variant _
						, ByVal Optional pvHeight As Variant _
						) As Variant
&apos;	Execute Move method
	Utils._SetCalledSub(&quot;Dialog.Move&quot;)
	If IsMissing(pvLeft) Then Call _TraceArguments()
	On Local Error Goto Error_Function
	Move = False
Dim iArgNr As Integer
	Select Case UCase(_A2B_.CalledSub)
		Case UCase(&quot;Move&quot;)					:	iArgNr = 1
		Case UCase(&quot;Dialog.Move&quot;)			:	iArgNr = 0
	End Select
	If IsMissing(pvLeft) Then Call _TraceArguments()
	If IsMissing(pvTop) Then pvTop = -1
	If IsMissing(pvWidth) Then pvWidth = -1
	If IsMissing(pvHeight) Then pvHeight = -1
	If Not Utils._CheckArgument(pvLeft,	iArgNr + 1, Utils._AddNumeric()) Then Goto Exit_Function
	If Not Utils._CheckArgument(pvTop,	iArgNr + 2, Utils._AddNumeric()) Then Goto Exit_Function
	If Not Utils._CheckArgument(pvWidth,	iArgNr + 3, Utils._AddNumeric()) Then Goto Exit_Function
	If Not Utils._CheckArgument(pvHeight, iArgNr + 4, Utils._AddNumeric()) Then Goto Exit_Function
	
Dim iArg As Integer		&apos;	Check arguments values
	iArg = 0
	If pvHeight &lt; -1 Then iArg = 4	:	If pvWidth &lt; -1 Then iArg = 3
	If pvTop &lt; -1 Then iArg = 2		:	If pvLeft &lt; -1 Then iArg = 1
	If iArg &gt; 0 Then
		TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, 1, iArgNr + iArg)
		Goto Exit_Function
	End If
	
Dim iPosSize As Integer
	iPosSize = 0
	If pvLeft &gt;= 0		Then iPosSize = iPosSize + com.sun.star.awt.PosSize.X
	If pvTop &gt;= 0		Then iPosSize = iPosSize + com.sun.star.awt.PosSize.Y
	If pvWidth &gt; 0		Then iPosSize = iPosSize + com.sun.star.awt.PosSize.WIDTH
	If pvHeight &gt; 0		Then iPosSize = iPosSize + com.sun.star.awt.PosSize.HEIGHT
	If iPosSize &gt; 0 Then UnoDialog.setPosSize(pvLeft, pvTop, pvWidth, pvHeight, iPosSize)
	Move = True
	
Exit_Function:
	Utils._ResetCalledSub(&quot;Dialog.Move&quot;)
	Exit Function
Error_Function:
	TraceError(TRACEABORT, Err, &quot;Dialog.Move&quot;, Erl)
	GoTo Exit_Function
End Function		&apos;	Move

REM -----------------------------------------------------------------------------------------------------------------------
Public Function setProperty(ByVal Optional psProperty As String, ByVal Optional pvValue As Variant) As Boolean
&apos;	Return True if property setting OK
	Utils._SetCalledSub(&quot;Dialog.setProperty&quot;)
	setProperty = _PropertySet(psProperty, pvValue)
	Utils._ResetCalledSub(&quot;Dialog.setProperty&quot;)
End Function

REM -----------------------------------------------------------------------------------------------------------------------
Public Function Start() As Boolean
&apos;	Create dialog

If _ErrorHandler() Then On Local Error Goto Error_Function
	Utils._SetCalledSub(&quot;Dialog.Start&quot;)

Dim oStart As Object, oDatabase As Object
	Start = False
	If IsNull(_Dialog) Then Goto Error_Start
	If Not IsNull(UnoDialog) Then Goto Error_Yet_Started
	Set oStart = CreateUnoDialog(_Dialog)
	If IsNull(oStart) Then
		Goto Error_Start
	Else
		Start = True
		Set UnoDialog = oStart
		Set oDatabase = Application._CurrentDb()
		With oDatabase
			If ._hasDialog(_Name) Then .Dialogs.Remove(_Name)		&apos;	Inserted to solve errors, when aborts between start and terminate
			.Dialogs.Add(UnoDialog, UCase(_Name))
		End With
	End If

Exit_Function:
	Utils._ResetCalledSub(&quot;Dialog.Start&quot;)
	Exit Function
Error_Start:
	TraceError(TRACEFATAL, ERRDIALOGUNDEFINED, Utils._CalledSub(), 0)
	Goto Exit_Function
Error_Yet_Started:
	TraceError(TRACEWARNING, ERRDIALOGSTARTED, Utils._CalledSub(), 0)
	Goto Exit_Function
Error_Function:
	TraceError(TRACEABORT, Err, &quot;Dialog.Start&quot;, Erl)
	GoTo Exit_Function
End Function		&apos;	Start

REM -----------------------------------------------------------------------------------------------------------------------
Public Function Terminate() As Boolean
&apos;	Close dialog

If _ErrorHandler() Then On Local Error Goto Error_Function
	Utils._SetCalledSub(&quot;Dialog.Terminate&quot;)

	Terminate = False
	If IsNull(_Dialog) Then Goto Error_Terminate
	If IsNull(UnoDialog) Then Goto Error_Not_Started
	UnoDialog.Dispose()
	Set UnoDialog = Nothing
	Application._CurrentDb().Dialogs.Remove(_Name)
	Terminate = True

Exit_Function:
	Utils._ResetCalledSub(&quot;Dialog.Terminate&quot;)
	Exit Function
Error_Terminate:
	TraceError(TRACEFATAL, ERRDIALOGUNDEFINED, Utils._CalledSub(), 0)
	Goto Exit_Function
Error_Not_Started:
	TraceError(TRACEWARNING, ERRDIALOGNOTSTARTED, Utils._CalledSub(), 0, 1, _Name)
	Goto Exit_Function
Error_Function:
	TraceError(TRACEABORT, Err, &quot;Dialog.Terminate&quot;, Erl)
	GoTo Exit_Function
End Function		&apos;	Terminate

REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS 								        														---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant

	If IsLoaded Then
		_PropertiesList =  Array(&quot;Caption&quot;, &quot;Height&quot;, &quot;IsLoaded&quot;, &quot;Name&quot; _
										, &quot;ObjectType&quot;, &quot;Page&quot;, &quot;Visible&quot;, &quot;Width&quot; _
									)
	Else
		 _PropertiesList = Array(&quot;IsLoaded&quot;, &quot;Name&quot; _
									)
	End If
	
End Function	&apos;	_PropertiesList

REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertyGet(ByVal psProperty As String) As Variant
&apos;	Return property value of the psProperty property name

	If _ErrorHandler() Then On Local Error Goto Error_Function
	Utils._SetCalledSub(&quot;Dialog.get&quot; &amp; psProperty)
	
&apos;Execute
Dim oDatabase As Object, vEMPTY As Variant
	_PropertyGet = vEMPTY

	Select Case UCase(psProperty)
		Case UCase(&quot;Name&quot;), UCase(&quot;IsLoaded&quot;)
		Case Else
			If IsNull(UnoDialog) Then Goto Trace_Error_Dialog
	End Select
	Select Case UCase(psProperty)
		Case UCase(&quot;Caption&quot;)
			_PropertyGet = UnoDialog.getTitle()
		Case UCase(&quot;Height&quot;)
			_PropertyGet = UnoDialog.getPosSize().Height
		Case UCase(&quot;IsLoaded&quot;)
			Set oDatabase = Application._CurrentDb()
			_PropertyGet = oDatabase._hasDialog(_Name)
		Case UCase(&quot;Name&quot;)
			_PropertyGet = _Name
		Case UCase(&quot;ObjectType&quot;)
			_PropertyGet = _Type
		Case UCase(&quot;Page&quot;)
			_PropertyGet = UnoDialog.Model.Step
		Case UCase(&quot;Visible&quot;)
			_PropertyGet = UnoDialog.IsVisible()
		Case UCase(&quot;Width&quot;)
			_PropertyGet = UnoDialog.getPosSize().Width
		Case Else
			Goto Trace_Error
	End Select
	
Exit_Function:
	Utils._ResetCalledSub(&quot;Dialog.get&quot; &amp; psProperty)
	Exit Function
Trace_Error:
	TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
	_PropertyGet = vEMPTY
	Goto Exit_Function
Trace_Error_Dialog:
	TraceError(TRACEFATAL, ERRDIALOGNOTSTARTED, Utils._CalledSub(), 0, 1, _Name)
	_PropertyGet = vEMPTY
	Goto Exit_Function
Error_Function:
	TraceError(TRACEABORT, Err, &quot;Dialog._PropertyGet&quot;, Erl)
	_PropertyGet = vEMPTY
	GoTo Exit_Function
End Function		&apos;	_PropertyGet

REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean

	Utils._SetCalledSub(&quot;Dialog.set&quot; &amp; psProperty)
	If _ErrorHandler() Then On Local Error Goto Error_Function
	_PropertySet = True

&apos;Execute
Dim iArgNr As Integer
Dim oDatabase As Object

	If Len(_A2B_.CalledSub) &gt; 7 And Left(_A2B_.CalledSub, 7) = &quot;Dialog.&quot; Then iArgNr = 1 Else iArgNr = 2
	If IsNull(UnoDialog) Then Goto Trace_Error_Dialog
	Select Case UCase(psProperty)
		Case UCase(&quot;Caption&quot;)
			If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
			UnoDialog.setTitle(pvValue)
		Case UCase(&quot;Height&quot;)
			If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
			UnoDialog.setPosSize(0, 0, 0, pvValue, com.sun.star.awt.PosSize.HEIGHT)
		Case UCase(&quot;Page&quot;)
			If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
			If pvValue &lt; 0 Then Goto Trace_Error_Value
			UnoDialog.Model.Step = pvValue
		Case UCase(&quot;Visible&quot;)
			If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
			UnoDialog.setVisible(pvValue)
		Case UCase(&quot;Width&quot;)
			If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric()) Then Goto Trace_Error_Value
			UnoDialog.setPosSize(0, 0,  pvValue, 0, com.sun.star.awt.PosSize.WIDTH)
		Case Else
			Goto Trace_Error
	End Select

Exit_Function:
	Utils._ResetCalledSub(&quot;Dialog.set&quot; &amp; psProperty)
	Exit Function
Trace_Error_Dialog:
	TraceError(TRACEFATAL, ERRDIALOGNOTSTARTED, Utils._CalledSub(), 0, 1, _Name)
	_PropertySet = False
	Goto Exit_Function
Trace_Error:
	TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
	_PropertySet = False
	Goto Exit_Function
Trace_Error_Value:
	TraceError(TRACEFATAL, ERRPROPERTYVALUE, Utils._CalledSub(), 0, 1, Array(pvValue, psProperty))
	_PropertySet = False
	Goto Exit_Function
Error_Function:
	TraceError(TRACEABORT, Err, &quot;Dialog._PropertySet&quot;, Erl)
	_PropertySet = False
	GoTo Exit_Function
End Function		&apos;	_PropertySet

REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS PROPERTY SETs								        														---
REM --- Workaround to bug https://www.libreoffice.org/bugzilla/show_bug.cgi?id=60752 (LibreOffice 4.0)					---
REM -----------------------------------------------------------------------------------------------------------------------

Property Set Caption(ByVal pvValue As Variant)
	Call _PropertySet(&quot;Caption&quot;, pvValue)
End Property	&apos;	Caption (set)

Property Set Height(ByVal pvValue As Variant)
	Call _PropertySet(&quot;Height&quot;, pvValue)
End Property	&apos;	Height (set)

Property Set Visible(ByVal pvValue As Variant)
	Call _PropertySet(&quot;Visible&quot;, pvValue)
End Property	&apos;	Visible (set)

Property Set Width(ByVal pvValue As Variant)
	Call _PropertySet(&quot;Width&quot;, pvValue)
End Property	&apos;	Width (set)

</script:module>