Files
libreoffice/wizards/source/access2base/Form.xba
Jean-Pierre Ledure fbbd7045a8 Access2Base - Removal of Property Set constructions
The workaround to bug https://www.libreoffice.org/bugzilla/show_bug.cgi?id=60752 has been removed.
Bug corrected in LO 4.0.2
End of support of Access2Base under LO 4.0.0 and 4.0.1

Change-Id: Ide5046ce4a44096bca42eaf14c4dc96c59958e16
2014-08-23 12:42:57 +02:00

874 lines
36 KiB
XML

<?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" 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 _Shortcut As String
Private _Name As String
Private _DocEntry As Integer &apos; Doc- and DbContainer entries in Root structure
Private _DbEntry As Integer
Private _IsLoaded As Boolean
Private _OpenArgs As Variant
Private _OrderBy As String
Public Component As Object &apos; com.sun.star.text.TextDocument
Public ContainerWindow As Object &apos; (No name)
Public DatabaseForm As Object &apos; com.sun.star.form.component.DataForm and com.sun.star.sdb.ResultSet (a.o.)
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJFORM
_Shortcut = &quot;&quot;
_Name = &quot;&quot;
_DocEntry = -1
_DbEntry = -1
_IsLoaded = False
_OpenArgs = &quot;&quot;
_OrderBy = &quot;&quot;
Set Component = Nothing
Set ContainerWindow = Nothing
Set DatabaseForm = Nothing
End Sub &apos; Constructor
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Terminate()
On Local Error Resume Next
Call Class_Initialize()
End Sub &apos; Destructor
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub Dispose()
Call Class_Terminate()
End Sub &apos; Explicit destructor
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS GET/LET/SET PROPERTIES ---
REM -----------------------------------------------------------------------------------------------------------------------
Property Get AllowAdditions() As Variant
AllowAdditions = _PropertyGet(&quot;AllowAdditions&quot;)
End Property &apos; AllowAdditions (get)
Property Let AllowAdditions(ByVal pvValue As Variant)
Call _PropertySet(&quot;AllowAdditions&quot;, pvValue)
End Property &apos; AllowAdditions (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get AllowDeletions() As Variant
AllowDeletions = _PropertyGet(&quot;AllowDeletions&quot;)
End Property &apos; AllowDeletions (get)
Property Let AllowDeletions(ByVal pvValue As Variant)
Call _PropertySet(&quot;AllowDeletions&quot;, pvValue)
End Property &apos; AllowDeletions (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get AllowEdits() As Variant
AllowEdits = _PropertyGet(&quot;AllowEdits&quot;)
End Property &apos; AllowEdits (get)
Property Let AllowEdits(ByVal pvValue As Variant)
Call _PropertySet(&quot;AllowEdits&quot;, pvValue)
End Property &apos; AllowEdits (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Bookmark() As Variant
Bookmark = _PropertyGet(&quot;Bookmark&quot;)
End Property &apos; Bookmark (get)
Property Let Bookmark(ByVal pvValue As Variant)
Call _PropertySet(&quot;Bookmark&quot;, pvValue)
End Property &apos; Bookmark (set)
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 CurrentRecord() As Variant
CurrentRecord = _PropertyGet(&quot;CurrentRecord&quot;)
End Property &apos; CurrentRecord (get)
Property Let CurrentRecord(ByVal pvValue As Variant)
Call _PropertySet(&quot;CurrentRecord&quot;, pvValue)
End Property &apos; CurrentRecord (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Filter() As Variant
Filter = _PropertyGet(&quot;Filter&quot;)
End Property &apos; Filter (get)
Property Let Filter(ByVal pvValue As Variant)
Call _PropertySet(&quot;Filter&quot;, pvValue)
End Property &apos; Filter (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get FilterOn() As Variant
FilterOn = _PropertyGet(&quot;FilterOn&quot;)
End Property &apos; FilterOn (get)
Property Let FilterOn(ByVal pvValue As Variant)
Call _PropertySet(&quot;FilterOn&quot;, pvValue)
End Property &apos; FilterOn (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 -----------------------------------------------------------------------------------------------------------------------
Function IsLoaded() As Boolean
&apos;Return True if form open
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;Form.getIsLoaded&quot;)
If _IsLoaded Then &apos; For performance reasons, a form object, once detected as loaded, is presumed remaining loaded
IsLoaded = True
Goto Exit_Function
End If
IsLoaded = False
Dim oDoc As Object, oDatabase As Object, oEnum As Object, oDesk As Object, oComp As Object, bFound As Boolean
Dim i As Integer
Set oDoc = _A2B_.CurrentDoc(Application._CurrentDoc())
Select Case oDoc.DbConnect
Case DBCONNECTBASE
Set oDesk = CreateUnoService(&quot;com.sun.star.frame.Desktop&quot;)
Set oEnum = oDesk.Components().createEnumeration
bFound = False
Do While oEnum.hasMoreElements And Not bFound &apos; Search in all open components if one corresponds with current form
oComp = oEnum.nextElement
If HasUnoInterfaces(oComp, &quot;com.sun.star.frame.XModule&quot;) Then
If oComp.Identifier = &quot;com.sun.star.sdb.FormDesign&quot; Then
For i = 0 To UBound(oComp.Args())
If oComp.Args(i).Name = &quot;DocumentTitle&quot; Then
bFound = ( oComp.Args(i).Value = _Name )
If bFound Then
_IsLoaded = True
Set Component = oComp
Exit For
End If
End If
Next i
End If
End If
Loop
Case DBCONNECTFORM
Set Component = oDoc.Document &apos; Form
_IsLoaded = True &apos; Interactive form always loaded by design
End Select
Set oComp = Nothing
IsLoaded = _IsLoaded
Exit_Function:
Utils._ResetCalledSub(&quot;Form.getIsLoaded&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Form.getIsLoaded&quot;, Erl)
GoTo Exit_Function
End Function &apos; IsLoaded V1.1.0
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 -----------------------------------------------------------------------------------------------------------------------
Property Get OpenArgs() As Variant
OpenArgs = _PropertyGet(&quot;OpenArgs&quot;)
End Property &apos; OpenArgs (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OrderBy() As Variant
OrderBy = _PropertyGet(&quot;OrderBy&quot;)
End Property &apos; OrderBy (get) V1.2.0
Property Let OrderBy(ByVal pvValue As Variant)
Call _PropertySet(&quot;OrderBy&quot;, pvValue)
End Property &apos; OrderBy (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OrderByOn() As Variant
OrderByOn = _PropertyGet(&quot;OrderByOn&quot;)
End Property &apos; OrderByOn (get) V1.2.0
Property Let OrderByOn(ByVal pvValue As Variant)
Call _PropertySet(&quot;OrderByOn&quot;, pvValue)
End Property &apos; OrderByOn (set)
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
Const cstThisSub = &quot;Form.OptionGroup&quot;
Dim ogGroup As Object
Utils._SetCalledSub(cstThisSub)
If IsMissing(pvGroupName) Then Call _TraceArguments()
If _ErrorHandler() Then On Local Error Goto Error_Function
Set ogGroup = _OptionGroup(pvGroupName, CTLPARENTISFORM, Component, DatabaseForm)
If Not IsNull(ogGroup) Then
ogGroup._DocEntry = _DocEntry
ogGroup._DbEntry = _DbEntry
End If
Set OptionGroup = ogGroup
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, Form.OptionGroup, Erl)
GoTo Exit_Function
End Function &apos; OptionGroup V1.1.0
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 Recordset() As Object
Recordset = _PropertyGet(&quot;Recordset&quot;)
End Property &apos; Recordset (get) V0.9.5
REM -----------------------------------------------------------------------------------------------------------------------
Property Get RecordSource() As Variant
RecordSource = _PropertyGet(&quot;RecordSource&quot;)
End Property &apos; RecordSource (get)
Property Let RecordSource(ByVal pvValue As Variant)
Call _PropertySet(&quot;RecordSource&quot;, pvValue)
End Property &apos; RecordSource (set)
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 mClose() As Variant
&apos; Close the form
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;Form.Close&quot;)
mClose = False
Dim oDatabase As Object, oController As Object
Set oDatabase = Application._CurrentDb()
If oDatabase._DbConnect &lt;&gt; DBCONNECTBASE Then Goto Error_NotApplicable
Set oController = oDatabase.Document.getFormDocuments.getByName(_Name)
oController.close()
mClose = True
Exit_Function:
Utils._ResetCalledSub(&quot;Form.Close&quot;)
Exit Function
Error_NotApplicable:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Form.Close&quot;, Erl)
GoTo Exit_Function
End Function
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;Form.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 = CTLPARENTISFORM
sParentShortcut = _Shortcut
iControlCount = DatabaseForm.getCount()
If IsMissing(pvIndex) Then &apos; No argument, return Collection pseudo-object
Set oCounter = New Collect
oCounter._CollType = COLLCONTROLS
oCounter._ParentType = OBJFORM
oCounter._ParentName = _Name
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
sControls() = DatabaseForm.getElementNames()
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 = DatabaseForm.getByName(ocControl._Name)
ocControl._ImplementationName = ocControl.ControlModel.getImplementationName()
ocControl._FormComponent = Component
If Utils._hasUNOProperty(ocControl.ControlModel, &quot;ClassId&quot;) Then ocControl._ClassId = ocControl.ControlModel.ClassId
If ocControl._ClassId &gt; 0 And ocControl._ClassId &lt;&gt; acHiddenControl Then
Set ocControl.ControlView = Component.CurrentController.getControl(ocControl.ControlModel)
End If
ocControl._Initialize()
ocControl._DocEntry = _DocEntry
ocControl._DbEntry = _DbEntry
Set Controls = ocControl
Exit_Function:
Utils._ResetCalledSub(&quot;Form.Controls&quot;)
Exit Function
Trace_Error_NotOpen:
TraceError(TRACEFATAL, ERRFORMNOTOPEN, 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;Form.Controls&quot;, Erl)
Set Controls = Nothing
GoTo Exit_Function
End Function &apos; Controls
REM -----------------------------------------------------------------------------------------------------------------------
Public Function CurrentDb() As Object
&apos; Returns Database object related to current form
Const cstThisSub = &quot;Form.CurrentDb&quot;
Utils._SetCalledSub(cstThisSub)
Set CurrentDb = Application._CurrentDb(_DocEntry, _DbEntry)
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; CurrentDb V1.1.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos; Return property value of psProperty property name
Utils._SetCalledSub(&quot;Form.getProperty&quot;)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(&quot;Form.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;Form.Move&quot;)
If IsMissing(pvLeft) Then Call _TraceArguments()
If _ErrorHandler() Then 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;Form.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, iWrong As Integer &apos; Check arguments values
iArg = 0
If pvHeight &lt; -1 Then
iArg = 4 : iWrong = pvHeight
ElseIf pvWidth &lt; -1 Then
iArg = 3 : iWrong = pvWidth
ElseIf pvTop &lt; -1 Then
iArg = 2 : iWrong = pvTop
ElseIf pvLeft &lt; -1 Then
iArg = 1 : iWrong = pvLeft
End If
If iArg &gt; 0 Then
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, 1, Array(iArgNr + iArg, iWrong))
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
If Utils._hasUNOProperty(ContainerWindow, &quot;IsMaximized&quot;) Then &apos; Ignored when &lt;= OO3.2
ContainerWindow.IsMaximized = False
ContainerWindow.IsMinimized = False
End If
ContainerWindow.setPosSize(pvLeft, pvTop, pvWidth, pvHeight, iPosSize)
End If
Move = True
Exit_Function:
Utils._ResetCalledSub(&quot;Form.Move&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Form.Move&quot;, Erl)
GoTo Exit_Function
End Function &apos; Move
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Refresh() As Boolean
&apos; Refresh data with its most recent value in the database in a form or subform
Utils._SetCalledSub(&quot;Form.Refresh&quot;)
If _ErrorHandler() Then On Local Error Goto Error_Function
Refresh = False
Dim oSet As Object
Set oSet = DatabaseForm.createResultSet()
If Not IsNull(oSet) Then
oSet.refreshRow()
Refresh = True
End If
Exit_Function:
Set oSet = Nothing
Utils._ResetCalledSub(&quot;Form.Refresh&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;SubForm.Refresh&quot;, Erl)
GoTo Exit_Function
End Function &apos; Refresh
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Requery() As Boolean
&apos; Refresh data displayed in a form, subform, combobox or listbox
Utils._SetCalledSub(&quot;Form.Requery&quot;)
If _ErrorHandler() Then On Local Error Goto Error_Function
Requery = False
DatabaseForm.reload()
Requery = True
Exit_Function:
Utils._ResetCalledSub(&quot;Form.Requery&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Form.Requery&quot;, Erl)
GoTo Exit_Function
End Function &apos; Requery
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setFocus() As Boolean
&apos; Execute setFocus method
Const cstThisSub = &quot;Form.setFocus&quot;
Utils._SetCalledSub(cstThisSub)
If _ErrorHandler() Then On Local Error Goto Error_Function
setFocus = False
With ContainerWindow
If .isVisible() = False Then .setVisible(True)
.IsMinimized = False
.setFocus()
.setEnable(True) &apos; Added to try to bypass desynchro issue in Linux
.toFront() &apos; Added to force window change in Linux
End With
setFocus = True
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
Goto Exit_Function
End Function &apos; setFocus V1.1.0
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;Form.setProperty&quot;)
setProperty = _PropertySet(psProperty, pvValue)
Utils._ResetCalledSub(&quot;Form.setProperty&quot;)
End Function
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub _Initialize(psName As String)
&apos; Set pointers to UNO objects
Dim oDoc As Object, oFormsCollection As Object, oDatabase As Object
If _ErrorHandler() Then On Local Error Goto Trace_Error
_Name = psName
_Shortcut = &quot;Forms!&quot; &amp; Utils._Surround(psName)
If IsLoaded Then
Set oDoc = _A2B_.CurrentDoc(Application._CurrentDoc())
Select Case oDoc.DbConnect
Case DBCONNECTBASE
If Not IsNull(Component.CurrentController) Then &apos; A form opened then closed afterwards keeps a Component attribute
Set ContainerWindow = Component.CurrentController.Frame.ContainerWindow
Set oFormsCollection = Component.getDrawPage.Forms
If oFormsCollection.hasByName(&quot;MainForm&quot;) Then
Set DatabaseForm = oFormsCollection.getByName(&quot;MainForm&quot;)
ElseIf oFormsCollection.hasByName(&quot;Form&quot;) Then
Set DatabaseForm = oFormsCollection.getByName(&quot;Form&quot;)
ElseIf oFormsCollection.hasByName(_Name) Then
Set DatabaseForm = oFormsCollection.getByName(_Name)
Else
Goto Trace_Internal_Error
End If
End If
Case DBCONNECTFORM
Set ContainerWindow = oDoc.Document.CurrentController.Frame.ContainerWindow
Set oDatabase = Application._CurrentDb(_DocEntry, _DbEntry)
With oDatabase
Set DatabaseForm = .Form
If IsNull(.Connection) Then
Set .Connection = DatabaseForm.ActiveConnection
If Not IsNull(.Connection) Then
Set .MetaData = .Connection.MetaData
oDatabase._ReadOnly = .Connection.isReadOnly()
End If
End If
End With
End Select
_OrderBy = DatabaseForm.Order
Else
Set Component = Nothing
Set ContainerWindow = Nothing
Set DatabaseForm = Nothing
End If
Exit_Sub:
Exit Sub
Trace_Error:
TraceError(TRACEABORT, Err, &quot;Form.Initialize&quot;, Erl)
Goto Exit_Sub
Trace_Internal_Error:
TraceError(TRACEABORT, ERRFORMNOTIDENTIFIED, Utils._CalledSub(), 0, , _Name)
Goto Exit_Sub
End Sub &apos; _Initialize V1.1.0
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
If IsLoaded Then
_PropertiesList = Array(&quot;AllowAdditions&quot;, &quot;AllowDeletions&quot;, &quot;AllowEdits&quot;, &quot;Bookmark&quot; _
, &quot;Caption&quot;, &quot;CurrentRecord&quot;, &quot;Filter&quot;, &quot;FilterOn&quot;, &quot;Height&quot;, &quot;IsLoaded&quot; _
, &quot;Name&quot;, &quot;ObjectType&quot;, &quot;OpenArgs&quot;, &quot;OrderBy&quot;, &quot;OrderByOn&quot; _
, &quot;RecordSource&quot;, &quot;Visible&quot;, &quot;Width&quot; _
) &apos; Recordset removed
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;Form.get&quot; &amp; psProperty)
&apos;Execute
Dim oDatabase As Object, vBookmark As Variant, vEMPTY As Variant
Dim oObject As Object
_PropertyGet = vEMPTY
Select Case UCase(psProperty)
Case UCase(&quot;Name&quot;), UCase(&quot;IsLoaded&quot;)
Case Else : If Not IsLoaded Then Goto Trace_Error_Form
End Select
Select Case UCase(psProperty)
Case UCase(&quot;AllowAdditions&quot;)
_PropertyGet = DatabaseForm.AllowInserts
Case UCase(&quot;AllowDeletions&quot;)
_PropertyGet = DatabaseForm.AllowDeletes
Case UCase(&quot;AllowEdits&quot;)
_PropertyGet = DatabaseForm.AllowUpdates
Case UCase(&quot;Bookmark&quot;)
On Local Error Resume Next &apos; Disable error handler because bookmarking does not always react well in events ...
If DatabaseForm.IsBookmarkable Then vBookmark = DatabaseForm.getBookmark() Else vBookmark = Nothing
If _ErrorHandler() Then On Local Error Goto Error_Function Else On Local Error Goto 0
If IsNull(vBookmark) Then Goto Trace_Error
_PropertyGet = vBookmark
Case UCase(&quot;Caption&quot;)
Set odatabase = Application._CurrentDb(_DocEntry, _DbEntry)
Select Case oDatabase._DbConnect
Case DBCONNECTFORM : _PropertyGet = oDatabase.Document.CurrentController.Frame.Title
Case DBCONNECTBASE : _PropertyGet = Component.CurrentController.Frame.Title
End Select
Case UCase(&quot;CurrentRecord&quot;)
_PropertyGet = DatabaseForm.Row
Case UCase(&quot;Filter&quot;)
_PropertyGet = DatabaseForm.Filter
Case UCase(&quot;FilterOn&quot;)
_PropertyGet = DatabaseForm.ApplyFilter
Case UCase(&quot;Height&quot;)
_PropertyGet = ContainerWindow.getPosSize().Height
Case UCase(&quot;IsLoaded&quot;) &apos; Only for indirect access from property object
_PropertyGet = IsLoaded
Case UCase(&quot;Name&quot;)
_PropertyGet = _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;OpenArgs&quot;)
_PropertyGet = _OpenArgs
Case UCase(&quot;OrderBy&quot;)
_PropertyGet = _OrderBy
Case UCase(&quot;OrderByOn&quot;)
If DatabaseForm.Order = &quot;&quot; Then _PropertyGet = False Else _PropertyGet = True
Case UCase(&quot;Recordset&quot;)
If DatabaseForm.Command = &quot;&quot; Then Goto Trace_Error &apos; No underlying data ??
Set oObject = New Recordset
With DatabaseForm
oObject._CommandType = .CommandType
oObject._Command = .Command
oObject._ParentName = _Name
oObject._ParentType = _Type
Set oDatabase = Application._CurrentDb(_DocEntry, _DbEntry)
Set oObject._ParentDatabase = oDatabase
Set oObject._ParentDatabase.Connection = .ActiveConnection
oObject._ForwardOnly = ( .ResultSetType = com.sun.star.sdbc.ResultSetType.FORWARD_ONLY )
oObject._PassThrough = ( .EscapeProcessing = False )
oObject._ReadOnly = ( .ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.READ_ONLY )
Call oObject._Initialize()
End With
With oDatabase
.RecordsetMax = .RecordsetMax + 1
oObject._Name = Format(.RecordsetMax, &quot;0000000&quot;)
.RecordsetsColl.Add(oObject, UCase(oObject._Name))
End With
If Not ( oObject._BOF And oObject._EOF ) Then oObject.MoveFirst() &apos; Do nothing if resultset empty
Set _PropertyGet = oObject
Case UCase(&quot;RecordSource&quot;)
_PropertyGet = DatabaseForm.ActiveCommand
Case UCase(&quot;Visible&quot;)
_PropertyGet = ContainerWindow.IsVisible()
Case UCase(&quot;Width&quot;)
_PropertyGet = ContainerWindow.getPosSize().Width
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;Form.get&quot; &amp; psProperty)
Exit Function
Trace_Error:
TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = vEMPTY
Goto Exit_Function
Trace_Error_Form:
TraceError(TRACEFATAL, ERRFORMNOTOPEN, Utils._CalledSub(), 0, 1, _Name)
_PropertyGet = vEMPTY
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Form._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;Form.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; 5 And Left(_A2B_.CalledSub, 5) = &quot;Form.&quot; Then iArgNr = 1 Else iArgNr = 2
If Not IsLoaded Then Goto Trace_Error_Form
Select Case UCase(psProperty)
Case UCase(&quot;AllowAdditions&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
DatabaseForm.AllowInserts = pvValue
DatabaseForm.reload()
Case UCase(&quot;AllowDeletions&quot;)
If Not Utils._CheckArgument(pvValue,iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
DatabaseForm.AllowDeletes = pvValue
DatabaseForm.reload()
Case UCase(&quot;AllowEdits&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
DatabaseForm.AllowUpdates = pvValue
DatabaseForm.reload()
Case UCase(&quot;Bookmark&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(vbObject), , False) Then Goto Trace_Error_Value
If IsNull(pvValue) Then Goto Trace_Error_Value
DatabaseForm.MoveToBookmark(pvValue)
Case UCase(&quot;Caption&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
Set oDatabase = Application._CurrentDb(_DocEntry, _DbEntry)
Select Case oDatabase._DbConnect
Case DBCONNECTFORM : oDatabase.Document.CurrentController.Frame.Title = pvValue
Case DBCONNECTBASE : Component.CurrentController.Frame.Title = pvValue
End Select
Case UCase(&quot;CurrentRecord&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
If pvValue &lt; 1 Then Goto Trace_Error_Value
DatabaseForm.absolute(pvValue)
Case UCase(&quot;Filter&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
DatabaseForm.Filter = Application._CurrentDb(_DocEntry, _DbEntry)._ReplaceSquareBrackets(pvValue)
Case UCase(&quot;FilterOn&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
DatabaseForm.ApplyFilter = pvValue
DatabaseForm.reload()
Case UCase(&quot;Height&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
If Utils._hasUNOProperty(ContainerWindow, &quot;IsMaximized&quot;) Then &apos; Ignored when &lt;= OO3.2
ContainerWindow.IsMaximized = False
ContainerWindow.IsMinimized = False
End If
ContainerWindow.setPosSize(0, 0, 0, pvValue, com.sun.star.awt.PosSize.HEIGHT)
Case UCase(&quot;OrderBy&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
_OrderBy = Application._CurrentDb(_DocEntry, _DbEntry)._ReplaceSquareBrackets(pvValue)
Case UCase(&quot;OrderByOn&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
If pvValue Then DatabaseForm.Order = _OrderBy Else DatabaseForm.Order = &quot;&quot;
DatabaseForm.reload()
Case UCase(&quot;RecordSource&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
DatabaseForm.Command = Application._CurrentDb(_DocEntry, _DbEntry)._ReplaceSquareBrackets(pvValue)
DatabaseForm.CommandType = com.sun.star.sdb.CommandType.COMMAND
DatabaseForm.Filter = &quot;&quot;
DatabaseForm.reload()
Case UCase(&quot;Visible&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
ContainerWindow.setVisible(pvValue)
Case UCase(&quot;Width&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric()) Then Goto Trace_Error_Value
If Utils._hasUNOProperty(ContainerWindow, &quot;IsMaximized&quot;) Then &apos; Ignored when &lt;= OO3.2
ContainerWindow.IsMaximized = False
ContainerWindow.IsMinimized = False
End If
ContainerWindow.setPosSize(0, 0, pvValue, 0, com.sun.star.awt.PosSize.WIDTH)
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;Form.set&quot; &amp; psProperty)
Exit Function
Trace_Error_Form:
TraceError(TRACEFATAL, ERRFORMNOTOPEN, 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;Form._PropertySet&quot;, Erl)
_PropertySet = False
GoTo Exit_Function
End Function &apos; _PropertySet
</script:module>