This commit is contained in:
Jane
2024-07-16 15:55:31 +08:00
parent 8f4ec86367
commit 29bc31ade5
12411 changed files with 8139339 additions and 0 deletions

View File

@@ -0,0 +1,399 @@
<?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="Collect" 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 MODULE NAME &lt;&gt; COLLECTION (is a reserved name for ... collections)
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS ROOT FIELDS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private _Type As String &apos; Must be COLLECTION
Private _This As Object &apos; Workaround for absence of This builtin function
Private _CollType As String
Private _Parent As Object
Private _Count As Long
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJCOLLECTION
Set _This = Nothing
_CollType = &quot;&quot;
Set _Parent = Nothing
_Count = 0
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 Count() As Long
Count = _PropertyGet(&quot;Count&quot;)
End Property &apos; Count (get)
REM -----------------------------------------------------------------------------------------------------------------------
Function Item(ByVal Optional pvItem As Variant) As Variant
&apos;Return property value.
&apos;pvItem either numeric index or property name
Const cstThisSub = &quot;Collection.getItem&quot;
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(cstThisSub)
If IsMissing(pvItem) Then Goto Exit_Function &apos; To allow object watching in Basic IDE, do not generate error
Select Case _CollType
Case COLLCOMMANDBARCONTROLS &apos; Have no name
If Not Utils._CheckArgument(pvItem, 1, Utils._AddNumeric()) Then Goto Exit_Function
Case Else
If Not Utils._CheckArgument(pvItem, 1, Utils._AddNumeric(vbString)) Then Goto Exit_Function
End Select
Dim vNames() As Variant, oProperty As Object
Set Item = Nothing
Select Case _CollType
Case COLLALLDIALOGS
Set Item = Application.AllDialogs(pvItem)
Case COLLALLFORMS
Set Item = Application.AllForms(pvItem)
Case COLLALLMODULES
Set Item = Application.AllModules(pvItem)
Case COLLCOMMANDBARS
Set Item = Application.CommandBars(pvItem)
Case COLLCOMMANDBARCONTROLS
If IsNull(_Parent) Then GoTo Error_Parent
Set Item = _Parent.CommandBarControls(pvItem)
Case COLLCONTROLS
If IsNull(_Parent) Then GoTo Error_Parent
Set Item = _Parent.Controls(pvItem)
Case COLLFORMS
Set Item = Application.Forms(pvItem)
Case COLLFIELDS
If IsNull(_Parent) Then GoTo Error_Parent
Set Item = _Parent.Fields(pvItem)
Case COLLPROPERTIES
If IsNull(_Parent) Then GoTo Error_Parent
Select Case _Parent._Type
Case OBJCONTROL, OBJSUBFORM, OBJDATABASE, OBJDIALOG, OBJFIELD _
, OBJFORM, OBJQUERYDEF, OBJRECORDSET, OBJTABLEDEF
Set Item = _Parent.Properties(pvItem)
Case OBJCOLLECTION, OBJEVENT, OBJOPTIONGROUP, OBJPROPERTY
&apos; NOT SUPPORTED
End Select
Case COLLQUERYDEFS
Set Item = _Parent.QueryDefs(pvItem)
Case COLLRECORDSETS
Set Item = _Parent.Recordsets(pvItem)
Case COLLTABLEDEFS
Set Item = _Parent.TableDefs(pvItem)
Case COLLTEMPVARS
Set Item = Application.TempVars(pvItem)
Case Else
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, Utils._CalledSub(), Erl)
Set Item = Nothing
GoTo Exit_Function
Error_Parent:
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, True, Array(_GetLabel(&quot;OBJECT&quot;), _GetLabel(&quot;PARENT&quot;)))
Set Item = Nothing
GoTo Exit_Function
End Function &apos; Item V1.1.0
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ObjectType() As String
ObjectType = _PropertyGet(&quot;ObjectType&quot;)
End Property &apos; ObjectType (get)
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, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
End If
Exit_Function:
Set Properties = vProperty
Exit Function
End Function &apos; Properties
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Add(Optional pvNew As Variant, Optional pvValue As Variant) As Boolean
&apos; Append a new TableDef or TempVar object to the TableDefs/TempVars collections
Const cstThisSub = &quot;Collection.Add&quot;
Utils._SetCalledSub(cstThisSub)
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim odbDatabase As Object, oConnection As Object, oTables As Object, oTable As Object
Dim vObject As Variant, oTempVar As Object
Add = False
If IsMissing(pvNew) Then Call _TraceArguments()
Select Case _CollType
Case COLLTABLEDEFS
If Not Utils._CheckArgument(pvNew, 1, vbObject) Then Goto Exit_Function
Set vObject = pvNew
With vObject
Set odbDatabase = ._ParentDatabase
If odbDatabase._DbConnect &lt;&gt; DBCONNECTBASE Then Goto Error_NotApplicable
Set oConnection = odbDatabase.Connection
If IsNull(.TableDescriptor) Or .TableFieldsCount = 0 Then Goto Error_Sequence
Set oTables = oConnection.getTables()
oTables.appendByDescriptor(.TableDescriptor)
Set .Table = oTables.getByName(._Name)
.CatalogName = .Table.CatalogName
.SchemaName = .Table.SchemaName
.TableName = .Table.Name
.TableDescriptor.dispose()
Set .TableDescriptor = Nothing
.TableFieldsCount = 0
.TableKeysCount = 0
End With
Case COLLTEMPVARS
If Not Utils._CheckArgument(pvNew, 1, vbString) Then Goto Exit_Function
If pvNew = &quot;&quot; Then Goto Error_Name
If IsMissing(pvValue) Then Call _TraceArguments()
If _A2B_.hasItem(COLLTEMPVARS, pvNew) Then Goto Error_Name
Set oTempVar = New TempVar
oTempVar._This = oTempVar
oTempVar._Name = pvNew
oTempVar._Value = pvValue
_A2B_.TempVars.Add(oTempVar, UCase(pvNew))
Case Else
Goto Error_NotApplicable
End Select
_Count = _Count + 1
Add = True
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
Error_NotApplicable:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
Goto Exit_Function
Error_Sequence:
TraceError(TRACEFATAL, ERRTABLECREATION, Utils._CalledSub(), 0, 1, vObject._Name)
Goto Exit_Function
Error_Name:
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), False, ,Array(1, pvNew))
AddItem = False
Goto Exit_Function
End Function &apos; Add V1.1.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Delete(ByVal Optional pvName As Variant) As Boolean
&apos; Delete a TableDef or QueryDef object in the TableDefs/QueryDefs collections
Const cstThisSub = &quot;Collection.Delete&quot;
Utils._SetCalledSub(cstThisSub)
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim odbDatabase As Object, oColl As Object, vName As Variant
Delete = False
If IsMissing(pvName) Then pvName = &quot;&quot;
If Not Utils._CheckArgument(pvName, 1, vbString) Then Goto Exit_Function
If pvName = &quot;&quot; Then Call _TraceArguments()
Select Case _CollType
Case COLLTABLEDEFS, COLLQUERYDEFS
If _A2B_.CurrentDocIndex() &lt;&gt; 0 Then Goto Error_NotApplicable
Set odbDatabase = Application._CurrentDb()
If odbDatabase._DbConnect &lt;&gt; DBCONNECTBASE Then Goto Error_NotApplicable
If _CollType = COLLTABLEDEFS Then Set oColl = odbDatabase.Connection.getTables() Else Set oColl = odbDatabase.Connection.getQueries()
With oColl
vName = _InList(pvName, .getElementNames(), True)
If vName = False Then Goto trace_NotFound
.dropByName(vName)
End With
odbDatabase.Document.store()
Case Else
Goto Error_NotApplicable
End Select
_Count = _Count - 1
Delete = True
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
Error_NotApplicable:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
Goto Exit_Function
Trace_NotFound:
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, , Array(_GetLabel(Left(_CollType, 5)), pvName))
Goto Exit_Function
End Function &apos; Delete 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;Collection.getProperty&quot;)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(&quot;Collection.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 Remove(ByVal Optional pvName As Variant) As Boolean
&apos; Remove a TempVar from the TempVars collection
Const cstThisSub = &quot;Collection.Remove&quot;
Utils._SetCalledSub(cstThisSub)
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim oColl As Object, vName As Variant
Remove = False
If IsMissing(pvName) Then pvName = &quot;&quot;
If Not Utils._CheckArgument(pvName, 1, vbString) Then Goto Exit_Function
If pvName = &quot;&quot; Then Call _TraceArguments()
Select Case _CollType
Case COLLTEMPVARS
If Not _A2B_.hasItem(COLLTEMPVARS, pvName) Then Goto Error_Name
_A2B_.TempVars.Remove(UCase(pvName))
Case Else
Goto Error_NotApplicable
End Select
_Count = _Count - 1
Remove = True
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
Error_NotApplicable:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
Goto Exit_Function
Error_Name:
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), False, ,Array(1, pvName))
AddItem = False
Goto Exit_Function
End Function &apos; Remove V1.2.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function RemoveAll() As Boolean
&apos; Remove the whole TempVars collection
Const cstThisSub = &quot;Collection.Remove&quot;
Utils._SetCalledSub(cstThisSub)
If _ErrorHandler() Then On Local Error Goto Error_Function
Select Case _CollType
Case COLLTEMPVARS
Set _A2B_.TempVars = New Collection
_Count = 0
Case Else
Goto Error_NotApplicable
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
Error_NotApplicable:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
Goto Exit_Function
End Function &apos; RemoveAll V1.2.0
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
_PropertiesList = Array(&quot;Count&quot;, &quot;Item&quot;, &quot;ObjectType&quot;)
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;Collection.get&quot; &amp; psProperty)
_PropertyGet = Nothing
Select Case UCase(psProperty)
Case UCase(&quot;Count&quot;)
_PropertyGet = _Count
Case UCase(&quot;Item&quot;)
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;Collection.get&quot; &amp; psProperty)
Exit Function
Trace_Error:
TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, , psProperty)
_PropertyGet = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Collection._PropertyGet&quot;, Erl)
_PropertyGet = Nothing
GoTo Exit_Function
End Function &apos; _PropertyGet
</script:module>

View File

@@ -0,0 +1,396 @@
<?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="CommandBar" 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 COMMANDBAR
Private _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _Name As String
Private _ResourceURL As String
Private _Window As Object &apos; com.sun.star.frame.XFrame
Private _Module As String
Private _Toolbar As Object
Private _BarBuiltin As Integer &apos; 1 = builtin, 2 = custom stored in LO/AOO (Base), 3 = custom stored in document (Form)
Private _BarType As Integer &apos; See msoBarTypeXxx constants
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJCOMMANDBAR
Set _This = Nothing
Set _Parent = Nothing
_Name = &quot;&quot;
_ResourceURL = &quot;&quot;
Set _Window = Nothing
_Module = &quot;&quot;
Set _Toolbar = Nothing
_BarBuiltin = 0
_BarType = -1
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 -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Property Get BuiltIn() As Boolean
BuiltIn = _PropertyGet(&quot;BuiltIn&quot;)
End Property &apos; BuiltIn (get)
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 Parent() As Object
Parent = _Parent
End Function &apos; Parent (get) V6.4.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, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, 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 -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Public Function CommandBarControls(Optional ByVal pvIndex As Variant) As Variant
&apos; Return an object of type CommandBarControl indicated by its index
&apos; Index is different from UNO index: separators do not count
&apos; If no pvIndex argument, return a Collection type
If _ErrorHandler() Then On Local Error Goto Error_Function
Const cstThisSub = &quot;CommandBar.CommandBarControls&quot;
Utils._SetCalledSub(cstThisSub)
Dim oLayout As Object, vElements() As Variant, iIndexToolbar As Integer, oToolbar As Object
Dim i As Integer, iItemsCount As Integer, oSettings As Object, vItem() As Variant, bSeparator As Boolean
Dim oObject As Object
Set oObject = Nothing
If Not IsMissing(pvIndex) Then
If Not Utils._CheckArgument(pvIndex, 1, Utils._AddNumeric()) Then Goto Exit_Function
If pvIndex &lt; 0 Then Goto Trace_IndexError
End If
Select Case _BarType
Case msoBarTypeNormal, msoBarTypeMenuBar
Case Else : Goto Error_NotApplicable &apos; Status bar not supported
End Select
Set oLayout = _Window.LayoutManager
vElements = oLayout.getElements()
iIndexToolbar = _FindElement(vElements())
If iIndexToolbar &lt; 0 Then Goto Error_NotApplicable &apos; Toolbar not visible
Set oToolbar = vElements(iIndexToolbar)
iItemsCount = 0
Set oSettings = oToolbar.getSettings(False)
bSeparator = False
For i = 0 To oSettings.getCount() - 1
Set vItem() = oSettings.getByIndex(i)
If _GetPropertyValue(vItem, &quot;Type&quot;, 1) &lt;&gt; 1 Then &apos; Type = 1 indicates separator
iItemsCount = iItemsCount + 1
If Not IsMissing(pvIndex) Then
If pvIndex = iItemsCount - 1 Then
Set oObject = New CommandBarControl
With oObject
Set ._This = oObject
Set ._Parent = _This
._ParentCommandBarName = _Name
._ParentCommandBar = oToolbar
._ParentBuiltin = ( _BarBuiltin = 1 )
._Element = vItem()
._InternalIndex = i
._Index = iItemsCount &apos; Indexes start at 1
._BeginGroup = bSeparator
End With
End If
bSeparator = False
End If
Else
bSeparator = True
End If
Next i
If IsNull(oObject) Then
Select Case True
Case IsMissing(pvIndex)
Set oObject = New Collect
Set oObject._This = oObject
oObject._CollType = COLLCOMMANDBARCONTROLS
Set oObject._Parent = _This
oObject._Count = iItemsCount
Case Else &apos; pvIndex is numeric
Goto Trace_IndexError
End Select
End If
Exit_Function:
Set CommandBarControls = oObject
Set oObject = Nothing
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
Trace_IndexError:
TraceError(TRACEFATAL, ERRCOLLECTION, Utils._CalledSub(), 0)
Goto Exit_Function
Error_NotApplicable:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
Goto Exit_Function
End Function &apos; CommandBarControls V1,3,0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Controls(Optional ByVal pvIndex As Variant) As Variant
&apos; Alias for CommandBarControls (VBA)
If _ErrorHandler() Then On Local Error Goto Error_Function
Const cstThisSub = &quot;CommandBar.Controls&quot;
Utils._SetCalledSub(cstThisSub)
Dim oObject As Object
If IsMissing(pvIndex) Then Set oObject = CommandBarControls() Else Set oObject = CommandBarControls(pvIndex)
Exit_Function:
Set Controls = oObject
Set oObject = Nothing
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
End Function &apos; Controls V1,3,0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos; Return property value of psProperty property name
Utils._SetCalledSub(&quot;CommandBar.getProperty&quot;)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(&quot;CommandBar.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 Reset() As Boolean
&apos; Reset a whole command bar to its initial values
If _ErrorHandler() Then On Local Error Goto Error_Function
Const cstThisSub = &quot;CommandBar.Reset&quot;
Utils._SetCalledSub(cstThisSub)
_Toolbar.reload()
Exit_Function:
Reset = True
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
Reset = False
GoTo Exit_Function
End Function &apos; Reset V1.3.0
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _FindElement(pvElements As Variant) As Integer
&apos; Return -1 if not found, otherwise return index in elements table of LayoutManager
Dim i As Integer
_FindElement = -1
If Not IsArray(pvElements) Then Exit Function
For i = 0 To UBound(pvElements)
If _ResourceURL = pvElements(i).ResourceURL Then
_FindElement = i
Exit Function
End If
Next i
End Function
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
_PropertiesList = Array(&quot;BuiltIn&quot;, &quot;Name&quot;, &quot;ObjectType&quot;, &quot;Visible&quot;)
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
Dim cstThisSub As String
cstThisSub = &quot;CommandBar.get&quot; &amp; psProperty
Utils._SetCalledSub(cstThisSub)
_PropertyGet = Nothing
Dim oLayout As Object, iElementIndex As Integer
Select Case UCase(psProperty)
Case UCase(&quot;BuiltIn&quot;)
_PropertyGet = ( _BarBuiltin = 1 )
Case UCase(&quot;Name&quot;)
_PropertyGet = _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;Visible&quot;)
Set oLayout = _Window.LayoutManager
iElementIndex = _FindElement(oLayout.getElements())
If iElementIndex &lt; 0 Then _PropertyGet = False Else _PropertyGet = oLayout.isElementVisible(_ResourceURL)
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, Utils._CalledSub(), Erl)
_PropertyGet = Nothing
GoTo Exit_Function
End Function &apos; _PropertyGet
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean
&apos; Return True if property setting OK
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim cstThisSub As String
cstThisSub = &quot;CommandBar.set&quot; &amp; psProperty
Utils._SetCalledSub(cstThisSub)
_PropertySet = True
Dim iArgNr As Integer
Dim oLayout As Object, iElementIndex As Integer
Select Case UCase(_A2B_.CalledSub)
Case UCase(&quot;setProperty&quot;) : iArgNr = 3
Case UCase(&quot;CommandBar.setProperty&quot;) : iArgNr = 2
Case UCase(cstThisSub) : iArgNr = 1
End Select
If Not hasProperty(psProperty) Then Goto Trace_Error
Select Case UCase(psProperty)
Case UCase(&quot;Visible&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
Set oLayout = _Window.LayoutManager
With oLayout
iElementIndex = _FindElement(.getElements())
If iElementIndex &lt; 0 Then
If pvValue Then
.createElement(_ResourceURL)
.showElement(_ResourceURL)
End If
Else
If pvValue &lt;&gt; .isElementVisible(_ResourceURL) Then
If pvValue Then .showElement(_ResourceURL) Else .hideElement(_ResourceURL)
End If
End If
End With
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, , 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, cstThisSub, Erl)
_PropertySet = False
GoTo Exit_Function
End Function &apos; _PropertySet
</script:module>

View File

@@ -0,0 +1,339 @@
<?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="CommandBarControl" 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 COMMANDBARCONTROL
Private _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _InternalIndex As Integer &apos; Index in toolbar including separators
Private _Index As Integer &apos; Index in collection, starting at 1 !!
Private _ControlType As Integer &apos; 1 of the msoControl* constants
Private _ParentCommandBarName As String
Private _ParentCommandBar As Object &apos; com.sun.star.ui.XUIElement
Private _ParentBuiltin As Boolean
Private _Element As Variant
Private _BeginGroup As Boolean
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJCOMMANDBARCONTROL
Set _This = Nothing
Set _Parent = Nothing
_Index = -1
_ParentCommandBarName = &quot;&quot;
Set _ParentCommandBar = Nothing
_ParentBuiltin = False
_Element = Array()
_BeginGroup = False
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 -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Property Get BeginGroup() As Boolean
BeginGroup = _PropertyGet(&quot;BeginGroup&quot;)
End Property &apos; BeginGroup (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get BuiltIn() As Boolean
BuiltIn = _PropertyGet(&quot;BuiltIn&quot;)
End Property &apos; BuiltIn (get)
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 Index() As Integer
Index = _PropertyGet(&quot;Index&quot;)
End Property &apos; Index (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ObjectType() As String
ObjectType = _PropertyGet(&quot;ObjectType&quot;)
End Property &apos; ObjectType (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnAction() As Variant
OnAction = _PropertyGet(&quot;OnAction&quot;)
End Property &apos; OnAction (get)
Property Let OnAction(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnAction&quot;, pvValue)
End Property &apos; OnAction (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Parent() As Object
Parent = _PropertyGet(&quot;Parent&quot;)
End Property &apos; Parent (get)
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, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
End If
Exit_Function:
Set Properties = vProperty
Exit Function
End Function &apos; Properties
REM -----------------------------------------------------------------------------------------------------------------------
Property Get TooltipText() As Variant
TooltipText = _PropertyGet(&quot;TooltipText&quot;)
End Property &apos; TooltipText (get)
Property Let TooltipText(ByVal pvValue As Variant)
Call _PropertySet(&quot;TooltipText&quot;, pvValue)
End Property &apos; TooltipText (set)
REM -----------------------------------------------------------------------------------------------------------------------
Public Function pType() As Integer
pType = _PropertyGet(&quot;Type&quot;)
End Function &apos; Type (get)
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 -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Execute()
&apos; Execute the command stored in a toolbar button
If _ErrorHandler() Then On Local Error Goto Error_Function
Const cstThisSub = &quot;CommandBarControl.Execute&quot;
Utils._SetCalledSub(cstThisSub)
Dim sExecute As String
Execute = True
sExecute = _GetPropertyValue(_Element, &quot;CommandURL&quot;, &quot;&quot;)
Select Case True
Case sExecute = &quot;&quot; : Execute = False
Case _IsLeft(sExecute, &quot;.uno:&quot;)
Execute = DoCmd.RunCommand(sExecute)
Case _IsLeft(sExecute, &quot;vnd.sun.star.script:&quot;)
Execute = Utils._RunScript(sExecute, Array(Nothing))
Case Else
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
Execute = False
GoTo Exit_Function
End Function &apos; Execute V1.3.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos; Return property value of psProperty property name
Utils._SetCalledSub(&quot;CommandBarControl.getProperty&quot;)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(&quot;CommandBar.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 -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
_PropertiesList = Array(&quot;BeginGroup&quot;, &quot;BuiltIn&quot;, &quot;Caption&quot;, &quot;Index&quot; _
, &quot;ObjectType&quot;, &quot;OnAction&quot;, &quot;Parent&quot; _
, &quot;TooltipText&quot;, &quot;Type&quot;, &quot;Visible&quot; _
)
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
Dim cstThisSub As String
cstThisSub = &quot;CommandBarControl.get&quot; &amp; psProperty
Utils._SetCalledSub(cstThisSub)
_PropertyGet = Null
Dim oLayout As Object, iElementIndex As Integer
Dim sValue As String
Const cstUnoPrefix = &quot;.uno:&quot;
Select Case UCase(psProperty)
Case UCase(&quot;BeginGroup&quot;)
_PropertyGet = _BeginGroup
Case UCase(&quot;BuiltIn&quot;)
sValue = _GetPropertyValue(_Element, &quot;CommandURL&quot;, &quot;&quot;)
_PropertyGet = ( _IsLeft(sValue, cstUnoPrefix) )
Case UCase(&quot;Caption&quot;)
_PropertyGet = _GetPropertyValue(_Element, &quot;Label&quot;, &quot;&quot;)
Case UCase(&quot;Index&quot;)
_PropertyGet = _Index
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;OnAction&quot;)
_PropertyGet = _GetPropertyValue(_Element, &quot;CommandURL&quot;, &quot;&quot;)
Case UCase(&quot;Parent&quot;)
Set _PropertyGet = _Parent
Case UCase(&quot;TooltipText&quot;)
sValue = _GetPropertyValue(_Element, &quot;Tooltip&quot;, &quot;&quot;)
If sValue &lt;&gt; &quot;&quot; Then _PropertyGet = sValue Else _PropertyGet = _GetPropertyValue(_Element, &quot;Label&quot;, &quot;&quot;)
Case UCase(&quot;Type&quot;)
_PropertyGet = msoControlButton
Case UCase(&quot;Visible&quot;)
_PropertyGet = _GetPropertyValue(_Element, &quot;IsVisible&quot;, &quot;&quot;)
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, Utils._CalledSub(), Erl)
_PropertyGet = Nothing
GoTo Exit_Function
End Function &apos; _PropertyGet
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean
&apos; Return True if property setting OK
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim cstThisSub As String
cstThisSub = &quot;CommandBarControl.set&quot; &amp; psProperty
Utils._SetCalledSub(cstThisSub)
_PropertySet = True
Dim iArgNr As Integer
Dim oSettings As Object, sValue As String
Select Case UCase(_A2B_.CalledSub)
Case UCase(&quot;setProperty&quot;) : iArgNr = 3
Case UCase(&quot;CommandBar.setProperty&quot;) : iArgNr = 2
Case UCase(cstThisSub) : iArgNr = 1
End Select
If Not hasProperty(psProperty) Then Goto Trace_Error
If _ParentBuiltin Then Goto Trace_Error &apos; Modifications of individual controls forbidden for builtin toolbars (design choice)
Const cstUnoPrefix = &quot;.uno:&quot;
Const cstScript = &quot;vnd.sun.star.script:&quot;
Set oSettings = _ParentCommandBar.getSettings(True)
Select Case UCase(psProperty)
Case UCase(&quot;OnAction&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, _AddNumeric(vbString), , False) Then Goto Trace_Error_Value
Select Case VarType(pvValue)
Case vbString
If _IsLeft(pvValue, cstUnoPrefix) Then
sValue = pvValue
ElseIf _IsLeft(pvValue, cstScript) Then
sValue = pvValue
Else
sValue = DoCmd.RunCommand(pvValue, True)
End If
Case Else &apos; Numeric
sValue = DoCmd.RunCommand(pvValue, True)
End Select
_SetPropertyValue(_Element, &quot;CommandURL&quot;, sValue)
Case UCase(&quot;TooltipText&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
_SetPropertyValue(_Element, &quot;Tooltip&quot;, pvValue)
Case UCase(&quot;Visible&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
_SetPropertyValue(_Element, &quot;IsVisible&quot;, pvValue)
Case Else
Goto Trace_Error
End Select
oSettings.replaceByIndex(_InternalIndex, _Element)
_ParentCommandBar.setSettings(oSettings)
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, , 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, cstThisSub, Erl)
_PropertySet = False
GoTo Exit_Function
End Function &apos; _PropertySet
</script:module>

View File

@@ -0,0 +1,598 @@
<?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="DataDef" 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 TABLEDEF or QUERYDEF
Private _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _Name As String &apos; For tables: [[Catalog.]Schema.]Table
Private _ParentDatabase As Object
Private _ReadOnly As Boolean
Private Table As Object &apos; com.sun.star.sdb.dbaccess.ODBTable
Private CatalogName As String
Private SchemaName As String
Private TableName As String
Private Query As Object &apos; com.sun.star.sdb.dbaccess.OQuery
Private TableDescriptor As Object &apos; com.sun.star.sdb.dbaccess.ODBTable
Private TableFieldsCount As Integer
Private TableKeysCount As Integer
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = &quot;&quot;
Set _This = Nothing
Set _Parent = Nothing
_Name = &quot;&quot;
Set _ParentDatabase = Nothing
_ReadOnly = False
Set Table = Nothing
CatalogName = &quot;&quot;
SchemaName = &quot;&quot;
TableName = &quot;&quot;
Set Query = Nothing
Set TableDescriptor = Nothing
TableFieldsCount = 0
TableKeysCount = 0
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 Name() As String
Name = _PropertyGet(&quot;Name&quot;)
End Property &apos; Name (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ObjectType() As String
ObjectType = _PropertyGet(&quot;ObjectType&quot;)
End Property &apos; ObjectType (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get SQL() As Variant
SQL = _PropertyGet(&quot;SQL&quot;)
End Property &apos; SQL (get)
Property Let SQL(ByVal pvValue As Variant)
Call _PropertySet(&quot;SQL&quot;, pvValue)
End Property &apos; SQL (set)
REM -----------------------------------------------------------------------------------------------------------------------
Public Function pType() As Integer
pType = _PropertyGet(&quot;Type&quot;)
End Function &apos; Type (get)
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
REM -----------------------------------------------------------------------------------------------------------------------
Public Function CreateField(ByVal Optional pvFieldName As Variant _
, ByVal optional pvType As Variant _
, ByVal optional pvSize As Variant _
, ByVal optional pvAttributes As Variant _
) As Object
&apos;Return a Field object
Const cstThisSub = &quot;TableDef.CreateField&quot;
Utils._SetCalledSub(cstThisSub)
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim oTable As Object, oNewField As Object, oKeys As Object, oPrimaryKey As Object, oColumn As Object
Const cstMaxKeyLength = 30
CreateField = Nothing
If _ParentDatabase._DbConnect &lt;&gt; DBCONNECTBASE Then Goto Error_NotApplicable
If IsMissing(pvFieldName) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvFieldName, 1, vbString) Then Goto Exit_Function
If pvFieldName = &quot;&quot; Then Call _TraceArguments()
If IsMissing(pvType) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvType, 1, Utils._AddNumeric( _
dbInteger, dbLong, dbBigInt, dbFloat, vbSingle, dbDouble _
, dbNumeric, dbDecimal, dbText, dbChar, dbMemo _
, dbDate, dbTime, dbTimeStamp _
, dbBinary, dbVarBinary, dbLongBinary, dbBoolean _
)) Then Goto Exit_Function
If IsMissing(pvSize) Then pvSize = 0
If pvSize &lt; 0 Then pvSize = 0
If Not Utils._CheckArgument(pvSize, 1, Utils._AddNumeric()) Then Goto Exit_Function
If IsMissing(pvAttributes) Then pvAttributes = 0
If Not Utils._CheckArgument(pvAttributes, 1, Utils._AddNumeric(), Array(0, dbAutoIncrField)) Then Goto Exit_Function
If _Type &lt;&gt; OBJTABLEDEF Then Goto Error_NotApplicable
If IsNull(Table) And IsNull(TableDescriptor) Then Goto Error_NotApplicable
If _ReadOnly Then Goto Error_NoUpdate
Set oNewField = New Field
With oNewField
._This = oNewField
._Name = pvFieldName
._ParentName = _Name
._ParentType = OBJTABLEDEF
If IsNull(Table) Then Set oTable = TableDescriptor Else Set oTable = Table
Set .Column = oTable.Columns.createDataDescriptor()
End With
With oNewField.Column
.Name = pvFieldName
Select Case pvType
Case dbInteger : .Type = com.sun.star.sdbc.DataType.TINYINT
Case dbLong : .Type = com.sun.star.sdbc.DataType.INTEGER
Case dbBigInt : .Type = com.sun.star.sdbc.DataType.BIGINT
Case dbFloat : .Type = com.sun.star.sdbc.DataType.FLOAT
Case dbSingle : .Type = com.sun.star.sdbc.DataType.REAL
Case dbDouble : .Type = com.sun.star.sdbc.DataType.DOUBLE
Case dbNumeric, dbCurrency : .Type = com.sun.star.sdbc.DataType.NUMERIC
Case dbDecimal : .Type = com.sun.star.sdbc.DataType.DECIMAL
Case dbText : .Type = com.sun.star.sdbc.DataType.CHAR
Case dbChar : .Type = com.sun.star.sdbc.DataType.VARCHAR
Case dbMemo : .Type = com.sun.star.sdbc.DataType.LONGVARCHAR
Case dbDate : .Type = com.sun.star.sdbc.DataType.DATE
Case dbTime : .Type = com.sun.star.sdbc.DataType.TIME
Case dbTimeStamp : .Type = com.sun.star.sdbc.DataType.TIMESTAMP
Case dbBinary : .Type = com.sun.star.sdbc.DataType.BINARY
Case dbVarBinary : .Type = com.sun.star.sdbc.DataType.VARBINARY
Case dbLongBinary : .Type = com.sun.star.sdbc.DataType.LONGVARBINARY
Case dbBoolean : .Type = com.sun.star.sdbc.DataType.BOOLEAN
End Select
.Precision = Int(pvSize)
If pvType = dbNumeric Or pvType = dbDecimal Or pvType = dbCurrency Then .Scale = Int(pvSize * 10) - Int(pvSize) * 10
.IsNullable = com.sun.star.sdbc.ColumnValue.NULLABLE
If Utils._hasUNOProperty(oNewField.Column, &quot;CatalogName&quot;) Then .CatalogName = CatalogName
If Utils._hasUNOProperty(oNewField.Column, &quot;SchemaName&quot;) Then .SchemaName = SchemaName
If Utils._hasUNOProperty(oNewField.Column, &quot;TableName&quot;) Then .TableName = TableName
If Not IsNull(TableDescriptor) Then TableFieldsCount = TableFieldsCount + 1
If pvAttributes = dbAutoIncrField Then
If Not IsNull(Table) Then Goto Error_Sequence &apos; Do not accept adding an AutoValue field when table exists
Set oKeys = oTable.Keys
Set oPrimaryKey = oKeys.createDataDescriptor()
Set oColumn = oPrimaryKey.Columns.createDataDescriptor()
oColumn.Name = pvFieldName
oColumn.CatalogName = CatalogName
oColumn.SchemaName = SchemaName
oColumn.TableName = TableName
oColumn.IsAutoIncrement = True
oColumn.IsNullable = com.sun.star.sdbc.ColumnValue.NO_NULLS
oPrimaryKey.Columns.appendByDescriptor(oColumn)
oPrimaryKey.Name = Left(&quot;PK_&quot; &amp; Join(Split(TableName, &quot; &quot;), &quot;_&quot;) &amp; &quot;_&quot; &amp; Join(Split(pvFieldName, &quot; &quot;), &quot;_&quot;), cstMaxKeyLength)
oPrimaryKey.Type = com.sun.star.sdbcx.KeyType.PRIMARY
oKeys.appendByDescriptor(oPrimaryKey)
.IsAutoIncrement = True
.IsNullable = com.sun.star.sdbc.ColumnValue.NO_NULLS
oColumn.dispose()
Else
.IsAutoIncrement = False
End If
End With
oTable.Columns.appendByDescriptor(oNewfield.Column)
Set CreateField = oNewField
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
Error_NotApplicable:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
Goto Exit_Function
Error_Sequence:
TraceError(TRACEFATAL, ERRFIELDCREATION, Utils._CalledSub(), 0, 1, pvFieldName)
Goto Exit_Function
Error_NoUpdate:
TraceError(TRACEFATAL, ERRNOTUPDATABLE, Utils._CalledSub(), 0)
Goto Exit_Function
End Function &apos; CreateField V1.1.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Execute(ByVal Optional pvOptions As Variant) As Boolean
&apos;Execute a stored query. The query must be an ACTION query.
Dim cstThisSub As String
cstThisSub = Utils._PCase(_Type) &amp; &quot;.Execute&quot;
Utils._SetCalledSub(cstThisSub)
On Local Error Goto Error_Function
Const cstNull = -1
Execute = False
If _Type &lt;&gt; OBJQUERYDEF Then Goto Trace_Method
If IsMissing(pvOptions) Then
pvOptions = cstNull
Else
If Not Utils._CheckArgument(pvOptions, 1, Utils._AddNumeric(), dbSQLPassThrough) Then Goto Exit_Function
End If
&apos;Check action query
Dim oStatement As Object, vResult As Variant
Dim iType As Integer, sSql As String
iType = pType
If ( (iType And DBQAction) = 0 ) And ( (iType And DBQDDL) = 0 ) Then Goto Trace_Action
&apos;Execute action query
Set oStatement = _ParentDatabase.Connection.createStatement()
sSql = Query.Command
If pvOptions = dbSQLPassThrough Then oStatement.EscapeProcessing = False _
Else oStatement.EscapeProcessing = Query.EscapeProcessing
On Local Error Goto SQL_Error
vResult = oStatement.executeUpdate(_ParentDatabase._ReplaceSquareBrackets(sSql))
On Local Error Goto Error_Function
Execute = True
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Method:
TraceError(TRACEFATAL, ERRMETHOD, cstThisSub, 0, , cstThisSub)
Goto Exit_Function
Trace_Action:
TraceError(TRACEFATAL, ERRNOTACTIONQUERY, cstThisSub, 0, , _Name)
Goto Exit_Function
SQL_Error:
TraceError(TRACEFATAL, ERRSQLSTATEMENT, Utils._CalledSub(), 0, , sSql)
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
End Function &apos; Execute V1.1.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Fields(ByVal Optional pvIndex As Variant) As Object
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim cstThisSub As String
cstThisSub = Utils._PCase(_Type) &amp; &quot;.Fields&quot;
Utils._SetCalledSub(cstThisSub)
Set Fields = Nothing
If Not IsMissing(pvIndex) Then
If Not Utils._CheckArgument(pvIndex, 1, Utils._AddNumeric(vbString)) Then Goto Exit_Function
End If
Dim sObjects() As String, sObjectName As String, oObject As Object
Dim i As Integer, bFound As Boolean, oFields As Object
If _Type = OBJTABLEDEF Then Set oFields = Table.getColumns() Else Set oFields = Query.getColumns()
sObjects = oFields.ElementNames()
Select Case True
Case IsMissing(pvIndex)
Set oObject = New Collect
Set oObject._This = oObject
oObject._CollType = COLLFIELDS
Set oObject._Parent = _This
oObject._Count = UBound(sObjects) + 1
Goto Exit_Function
Case VarType(pvIndex) = vbString
bFound = False
&apos; Check existence of object and find its exact (case-sensitive) name
For i = 0 To UBound(sObjects)
If UCase(pvIndex) = UCase(sObjects(i)) Then
sObjectName = sObjects(i)
bFound = True
Exit For
End If
Next i
If Not bFound Then Goto Trace_NotFound
Case Else &apos; pvIndex is numeric
If pvIndex &lt; 0 Or pvIndex &gt; UBound(sObjects) Then Goto Trace_IndexError
sObjectName = sObjects(pvIndex)
End Select
Set oObject = New Field
Set oObject._This = oObject
oObject._Name = sObjectName
Set oObject.Column = oFields.getByName(sObjectName)
oObject._ParentName = _Name
oObject._ParentType = _Type
Set oObject._ParentDatabase = _ParentDatabase
Exit_Function:
Set Fields = oObject
Set oObject = Nothing
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
Trace_NotFound:
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, , Array(_GetLabel(&quot;FIELD&quot;), pvIndex))
Goto Exit_Function
Trace_IndexError:
TraceError(TRACEFATAL, ERRCOLLECTION, Utils._CalledSub(), 0)
Goto Exit_Function
End Function &apos; Fields
REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos; Return property value of psProperty property name
Dim cstThisSub As String
cstThisSub = Utils._PCase(_Type) &amp; &quot;.getProperty&quot;
Utils._SetCalledSub(cstThisSub)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(cstThisSub)
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 !)
Dim cstThisSub As String
cstThisSub = Utils._PCase(_Type) &amp; &quot;.hasProperty&quot;
Utils._SetCalledSub(cstThisSub)
If IsMissing(pvProperty) Then hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList()) Else hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList(), pvProperty)
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; hasProperty
REM -----------------------------------------------------------------------------------------------------------------------
Public Function OpenRecordset(ByVal Optional pvType As Variant, ByVal Optional pvOptions As Variant, ByVal Optional pvLockEdit As Variant) As Object
&apos;Return a Recordset object based on current table- or querydef object
Dim cstThisSub As String
cstThisSub = Utils._PCase(_Type) &amp; &quot;.OpenRecordset&quot;
Utils._SetCalledSub(cstThisSub)
Const cstNull = -1
Dim lCommandType As Long, sCommand As String, oObject As Object,bPassThrough As Boolean
Dim iType As Integer, iOptions As Integer, iLockEdit As Integer
Set oObject = Nothing
If VarType(pvType) = vbError Then
iType = cstNull
ElseIf IsMissing(pvType) Then
iType = cstNull
Else
If Not Utils._CheckArgument(pvType, 1, Utils._AddNumeric(), Array(cstNull, dbOpenForwardOnly)) Then Goto Exit_Function
iType = pvType
End If
If VarType(pvOptions) = vbError Then
iOptions = cstNull
ElseIf IsMissing(pvOptions) Then
iOptions = cstNull
Else
If Not Utils._CheckArgument(pvOptions, 2, Utils._AddNumeric(), Array(cstNull, dbSQLPassThrough)) Then Goto Exit_Function
iOptions = pvOptions
End If
If VarType(pvLockEdit) = vbError Then
iLockEdit = cstNull
ElseIf IsMissing(pvLockEdit) Then
iLockEdit = cstNull
Else
If Not Utils._CheckArgument(pvLockEdit, 3, Utils._AddNumeric(), Array(cstNull, dbReadOnly)) Then Goto Exit_Function
iLockEdit = pvLockEdit
End If
Select Case _Type
Case OBJTABLEDEF
lCommandType = com.sun.star.sdb.CommandType.TABLE
sCommand = _Name
Case OBJQUERYDEF
lCommandType = com.sun.star.sdb.CommandType.QUERY
sCommand = _Name
If iOptions = dbSQLPassThrough Then bPassThrough = True Else bPassThrough = Not Query.EscapeProcessing
End Select
Set oObject = New Recordset
With oObject
._CommandType = lCommandType
._Command = sCommand
._ParentName = _Name
._ParentType = _Type
._ForwardOnly = ( iType = dbOpenForwardOnly )
._PassThrough = bPassThrough
._ReadOnly = ( (iLockEdit = dbReadOnly) Or _ReadOnly )
Set ._ParentDatabase = _ParentDatabase
Set ._This = oObject
Call ._Initialize()
End With
With _ParentDatabase
.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
Exit_Function:
Set OpenRecordset = oObject
Set oObject = Nothing
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
Set oObject = Nothing
GoTo Exit_Function
End Function &apos; OpenRecordset 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
Dim cstThisSub As String
cstThisSub = Utils._PCase(_Type) &amp; &quot;.Properties&quot;
Utils._SetCalledSub(cstThisSub)
vPropertiesList = _PropertiesList()
sObject = Utils._PCase(_Type)
If IsMissing(pvIndex) Then
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
End If
Set vProperty._ParentDatabase = _ParentDatabase
Exit_Function:
Set Properties = vProperty
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; Properties
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setProperty(ByVal Optional psProperty As String, ByVal Optional pvValue As Variant) As Boolean
&apos; Return True if property setting OK
Dim cstThisSub As String
cstThisSub = Utils._PCase(_Type) &amp; &quot;.setProperty&quot;
Utils._SetCalledSub(cstThisSub)
setProperty = _PropertySet(psProperty, pvValue)
Utils._ResetCalledSub(cstThisSub)
End Function
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
Select Case _Type
Case OBJTABLEDEF
_PropertiesList = Array(&quot;Name&quot;, &quot;ObjectType&quot;)
Case OBJQUERYDEF
_PropertiesList = Array(&quot;Name&quot;, &quot;ObjectType&quot;, &quot;SQL&quot;, &quot;Type&quot;)
Case Else
End Select
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
Dim cstThisSub As String
cstThisSub = Utils._PCase(_Type)
Utils._SetCalledSub(cstThisSub &amp; &quot;.get&quot; &amp; psProperty)
Dim sSql As String, sVerb As String, iType As Integer
_PropertyGet = EMPTY
If Not hasProperty(psProperty) Then Goto Trace_Error
Select Case UCase(psProperty)
Case UCase(&quot;Name&quot;)
_PropertyGet = _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;SQL&quot;)
_PropertyGet = Query.Command
Case UCase(&quot;Type&quot;)
iType = 0
sSql = Utils._Trim(UCase(Query.Command))
sVerb = Split(sSql, &quot; &quot;)(0)
If sVerb = &quot;SELECT&quot; Then iType = iType + dbQSelect
If sVerb = &quot;SELECT&quot; And InStr(sSql, &quot; INTO &quot;) &gt; 0 _
Or sVerb = &quot;CREATE&quot; And InStr(sSql, &quot; TABLE &quot;) &gt; 0 _
Then iType = iType + dbQMakeTable
If sVerb = &quot;SELECT&quot; And InStr(sSql, &quot; UNION &quot;) &gt; 0 Then iType = iType + dbQSetOperation
If Not Query.EscapeProcessing Then iType = iType + dbQSQLPassThrough
If sVerb = &quot;INSERT&quot; Then iType = iType + dbQAppend
If sVerb = &quot;DELETE&quot; Then iType = iType + dbQDelete
If sVerb = &quot;UPDATE&quot; Then iType = iType + dbQUpdate
If sVerb = &quot;CREATE&quot; _
Or sVerb = &quot;ALTER&quot; _
Or sVerb = &quot;DROP&quot; _
Or sVerb = &quot;RENAME&quot; _
Or sVerb = &quot;TRUNCATE&quot; _
Then iType = iType + dbQDDL
&apos; dbQAction implied by dbQMakeTable, dbQAppend, dbQDelete and dbQUpdate
&apos; To check Type use: If (iType And dbQxxx) &lt;&gt; 0 Then ...
_PropertyGet = iType
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub &amp; &quot;.get&quot; &amp; psProperty)
Exit Function
Trace_Error:
TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, , psProperty)
_PropertyGet = EMPTY
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub &amp; &quot;._PropertyGet&quot;, Erl)
_PropertyGet = EMPTY
GoTo Exit_Function
End Function &apos; _PropertyGet
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean
&apos; Return True if property setting OK
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim cstThisSub As String
cstThisSub = Utils._PCase(_Type)
Utils._SetCalledSub(cstThisSub &amp; &quot;.set&quot; &amp; psProperty)
&apos;Execute
Dim iArgNr As Integer
_PropertySet = True
Select Case UCase(_A2B_.CalledSub)
Case UCase(&quot;setProperty&quot;) : iArgNr = 3
Case UCase(cstThisSub &amp; &quot;.setProperty&quot;) : iArgNr = 2
Case UCase(cstThisSub &amp; &quot;.set&quot; &amp; psProperty) : iArgNr = 1
End Select
If Not hasProperty(psProperty) Then Goto Trace_Error
If _ReadOnly Then Goto Error_NoUpdate
Select Case UCase(psProperty)
Case UCase(&quot;SQL&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
Query.Command = pvValue
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub &amp; &quot;.set&quot; &amp; psProperty)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, , 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_NoUpdate:
TraceError(TRACEFATAL, ERRNOTUPDATABLE, Utils._CalledSub(), 0)
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub &amp; &quot;._PropertySet&quot;, Erl)
_PropertySet = False
GoTo Exit_Function
End Function &apos; _PropertySet
</script:module>

View File

@@ -0,0 +1,818 @@
<?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 DIALOG
Private _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _Name As String
Private _Shortcut As String
Private _Dialog As Object &apos; com.sun.star.io.XInputStreamProvider
Private _Storage As String &apos; GLOBAL or DOCUMENT
Private _Library As String
Private UnoDialog As Object &apos; com.sun.star.awt.XControl
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJDIALOG
Set _This = Nothing
Set _Parent = Nothing
_Name = &quot;&quot;
Set _Dialog = Nothing
_Storage = &quot;&quot;
_Library = &quot;&quot;
Set UnoDialog = 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 -----------------------------------------------------------------------------------------------------------------------
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 -----------------------------------------------------------------------------------------------------------------------
Property Get OnFocusGained() As Variant
OnFocusGained = _PropertyGet(&quot;OnFocusGained&quot;)
End Property &apos; OnFocusGained (get)
Property Let OnFocusGained(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnFocusGained&quot;, pvValue)
End Property &apos; OnFocusGained (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnFocusLost() As Variant
OnFocusLost = _PropertyGet(&quot;OnFocusLost&quot;)
End Property &apos; OnFocusLost (get)
Property Let OnFocusLost(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnFocusLost&quot;, pvValue)
End Property &apos; OnFocusLost (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnKeyPressed() As Variant
OnKeyPressed = _PropertyGet(&quot;OnKeyPressed&quot;)
End Property &apos; OnKeyPressed (get)
Property Let OnKeyPressed(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnKeyPressed&quot;, pvValue)
End Property &apos; OnKeyPressed (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnKeyReleased() As Variant
OnKeyReleased = _PropertyGet(&quot;OnKeyReleased&quot;)
End Property &apos; OnKeyReleased (get)
Property Let OnKeyReleased(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnKeyReleased&quot;, pvValue)
End Property &apos; OnKeyReleased (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnMouseDragged() As Variant
OnMouseDragged = _PropertyGet(&quot;OnMouseDragged&quot;)
End Property &apos; OnMouseDragged (get)
Property Let OnMouseDragged(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnMouseDragged&quot;, pvValue)
End Property &apos; OnMouseDragged (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnMouseEntered() As Variant
OnMouseEntered = _PropertyGet(&quot;OnMouseEntered&quot;)
End Property &apos; OnMouseEntered (get)
Property Let OnMouseEntered(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnMouseEntered&quot;, pvValue)
End Property &apos; OnMouseEntered (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnMouseExited() As Variant
OnMouseExited = _PropertyGet(&quot;OnMouseExited&quot;)
End Property &apos; OnMouseExited (get)
Property Let OnMouseExited(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnMouseExited&quot;, pvValue)
End Property &apos; OnMouseExited (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnMouseMoved() As Variant
OnMouseMoved = _PropertyGet(&quot;OnMouseMoved&quot;)
End Property &apos; OnMouseMoved (get)
Property Let OnMouseMoved(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnMouseMoved&quot;, pvValue)
End Property &apos; OnMouseMoved (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnMousePressed() As Variant
OnMousePressed = _PropertyGet(&quot;OnMousePressed&quot;)
End Property &apos; OnMousePressed (get)
Property Let OnMousePressed(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnMousePressed&quot;, pvValue)
End Property &apos; OnMousePressed (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnMouseReleased() As Variant
OnMouseReleased = _PropertyGet(&quot;OnMouseReleased&quot;)
End Property &apos; OnMouseReleased (get)
Property Let OnMouseReleased(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnMouseReleased&quot;, pvValue)
End Property &apos; OnMouseReleased (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
&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 preceding 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
._This = 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 Parent() As Object
Parent = _Parent
End Function &apos; Parent (get) V6.4.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
Const cstThisSub = &quot;Dialog.Properties&quot;
Utils._SetCalledSub(cstThisSub)
Dim vProperty As Variant, vPropertiesList() As Variant, sObject As String
vPropertiesList = _PropertiesList()
sObject = Utils._PCase(_Type)
If IsMissing(pvIndex) Then
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
End If
Exit_Function:
Set Properties = vProperty
Utils._ResetCalledSub(cstThisSub)
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
Set ocControl._This = ocControl
Set ocControl._Parent = _This
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
Set oCounter._This = oCounter
oCounter._CollType = COLLCONTROLS
oCounter._Count = iControlCount
Set oCounter._Parent = _This
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, , Array(iArg, pvIndex))
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;)
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 pvLeft = -1
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 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
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
With _A2B_
If .hasItem(COLLALLDIALOGS, _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
_A2B_.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 _GetListener(ByVal psProperty As String) As String
&apos; Return the X...Listener corresponding with the property in argument
Select Case UCase(psProperty)
Case UCase(&quot;OnFocusGained&quot;), UCase(&quot;OnFocusLost&quot;)
_GetListener = &quot;XFocusListener&quot;
Case UCase(&quot;OnKeyPressed&quot;), UCase(&quot;OnKeyReleased&quot;)
_GetListener = &quot;XKeyListener&quot;
Case UCase(&quot;OnMouseDragged&quot;), UCase(&quot;OnMouseMoved&quot;)
_GetListener = &quot;XMouseMotionListener&quot;
Case UCase(&quot;OnMouseEntered&quot;), UCase(&quot;OnMouseExited&quot;), UCase(&quot;OnMousePressed&quot;), UCase(&quot;OnMouseReleased&quot;)
_GetListener = &quot;XMouseListener&quot;
End Select
End Function &apos; _GetListener V1.7.0
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
If IsLoaded Then
_PropertiesList = Array(&quot;Caption&quot;, &quot;Height&quot;, &quot;IsLoaded&quot;, &quot;Name&quot; _
, &quot;OnFocusGained&quot;, &quot;OnFocusLost&quot;, &quot;OnKeyPressed&quot;, &quot;OnKeyReleased&quot;, &quot;OnMouseDragged&quot; _
, &quot;OnMouseEntered&quot;, &quot;OnMouseExited&quot;, &quot;OnMouseMoved&quot;, &quot;OnMousePressed&quot;, &quot;OnMouseReleased&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)
Dim oDialogEvents As Object, sEventName As String
&apos;Execute
_PropertyGet = EMPTY
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;)
_PropertyGet = _A2B_.hasItem(COLLALLDIALOGS, _Name)
Case UCase(&quot;Name&quot;)
_PropertyGet = _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;OnFocusGained&quot;), UCase(&quot;OnFocusLost&quot;), UCase(&quot;OnKeyPressed&quot;), UCase(&quot;OnKeyReleased&quot;) _
, UCase(&quot;OnMouseDragged&quot;), UCase(&quot;OnMouseEntered&quot;), UCase(&quot;OnMouseExited&quot;), UCase(&quot;OnMouseMoved&quot;) _
, UCase(&quot;OnMousePressed&quot;), UCase(&quot;OnMouseReleased&quot;)
Set oDialogEvents = unoDialog.Model.getEvents()
sEventName = &quot;com.sun.star.awt.&quot; &amp; _GetListener(psProperty) &amp; &quot;::&quot; &amp; Utils._GetEventName(psProperty)
If oDialogEvents.hasByName(sEventName) Then
_PropertyGet = oDialogEvents.getByName(sEventName).ScriptCode
Else
_PropertyGet = &quot;&quot;
End If
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 = EMPTY
Goto Exit_Function
Trace_Error_Dialog:
TraceError(TRACEFATAL, ERRDIALOGNOTSTARTED, Utils._CalledSub(), 0, 1, _Name)
_PropertyGet = EMPTY
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Dialog._PropertyGet&quot;, Erl)
_PropertyGet = EMPTY
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
Dim oDialogEvents As Object, sEventName As String, oEvent As Object, sListener As String, sEvent As String
&apos;Execute
Dim iArgNr As Integer
If _IsLeft(_A2B_.CalledSub, &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;OnFocusGained&quot;), UCase(&quot;OnFocusLost&quot;), UCase(&quot;OnKeyPressed&quot;), UCase(&quot;OnKeyReleased&quot;) _
, UCase(&quot;OnMouseDragged&quot;), UCase(&quot;OnMouseEntered&quot;), UCase(&quot;OnMouseExited&quot;), UCase(&quot;OnMouseMoved&quot;) _
, UCase(&quot;OnMousePressed&quot;), UCase(&quot;OnMouseReleased&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
If Not Utils._RegisterDialogEventScript(UnoDialog.Model _
, psProperty _
, _GetListener(psProperty) _
, pvValue _
) Then GoTo Trace_Error_Dialog
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
</script:module>

View File

@@ -0,0 +1,493 @@
<?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="Event" 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 EVENT
Private _EventSource As Object
Private _EventType As String
Private _EventName As String
Private _SubComponentName As String
Private _SubComponentType As Long
Private _ContextShortcut As String
Private _ButtonLeft As Boolean &apos; com.sun.star.awt.MouseButton.XXX
Private _ButtonRight As Boolean
Private _ButtonMiddle As Boolean
Private _XPos As Variant &apos; Null or Long
Private _YPos As Variant &apos; Null or Long
Private _ClickCount As Long
Private _KeyCode As Integer &apos; com.sun.star.awt.Key.XXX
Private _KeyChar As String
Private _KeyFunction As Integer &apos; com.sun.star.awt.KeyFunction.XXX
Private _KeyAlt As Boolean
Private _KeyCtrl As Boolean
Private _KeyShift As Boolean
Private _FocusChangeTemporary As Boolean &apos; False if user action in same window
Private _RowChangeAction As Long &apos; com.sun.star.sdb.RowChangeAction.XXX
Private _Recommendation As String &apos; &quot;IGNORE&quot; or &quot;&quot;
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJEVENT
_EventSource = Nothing
_EventType = &quot;&quot;
_EventName = &quot;&quot;
_SubComponentName = &quot;&quot;
_SubComponentType = -1
_ContextShortcut = &quot;&quot;
_ButtonLeft = False &apos; See com.sun.star.awt.MouseButton.XXX
_ButtonRight = False
_ButtonMiddle = False
_XPos = Null
_YPos = Null
_ClickCount = 0
_KeyCode = 0
_KeyChar = &quot;&quot;
_KeyFunction = com.sun.star.awt.KeyFunction.DONTKNOW
_KeyAlt = False
_KeyCtrl = False
_KeyShift = False
_FocusChangeTemporary = False
_RowChangeAction = 0
_Recommendation = &quot;&quot;
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 ButtonLeft() As Variant
ButtonLeft = _PropertyGet(&quot;ButtonLeft&quot;)
End Property &apos; ButtonLeft (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ButtonMiddle() As Variant
ButtonMiddle = _PropertyGet(&quot;ButtonMiddle&quot;)
End Property &apos; ButtonMiddle (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ButtonRight() As Variant
ButtonRight = _PropertyGet(&quot;ButtonRight&quot;)
End Property &apos; ButtonRight (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ClickCount() As Variant
ClickCount = _PropertyGet(&quot;ClickCount&quot;)
End Property &apos; ClickCount (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ContextShortcut() As Variant
ContextShortcut = _PropertyGet(&quot;ContextShortcut&quot;)
End Property &apos; ContextShortcut (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get EventName() As Variant
EventName = _PropertyGet(&quot;EventName&quot;)
End Property &apos; EventName (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get EventSource() As Variant
EventSource = _PropertyGet(&quot;EventSource&quot;)
End Property &apos; EventSource (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get EventType() As Variant
EventType = _PropertyGet(&quot;EventType&quot;)
End Property &apos; EventType (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get FocusChangeTemporary() As Variant
FocusChangeTemporary = _PropertyGet(&quot;FocusChangeTemporary&quot;)
End Property &apos; FocusChangeTemporary (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get KeyAlt() As Variant
KeyAlt = _PropertyGet(&quot;KeyAlt&quot;)
End Property &apos; KeyAlt (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get KeyChar() As Variant
KeyChar = _PropertyGet(&quot;KeyChar&quot;)
End Property &apos; KeyChar (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get KeyCode() As Variant
KeyCode = _PropertyGet(&quot;KeyCode&quot;)
End Property &apos; KeyCode (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get KeyCtrl() As Variant
KeyCtrl = _PropertyGet(&quot;KeyCtrl&quot;)
End Property &apos; KeyCtrl (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get KeyFunction() As Variant
KeyFunction = _PropertyGet(&quot;KeyFunction&quot;)
End Property &apos; KeyFunction (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get KeyShift() As Variant
KeyShift = _PropertyGet(&quot;KeyShift&quot;)
End Property &apos; KeyShift (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ObjectType() As String
ObjectType = _PropertyGet(&quot;ObjectType&quot;)
End Property &apos; ObjectType (get)
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, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
End If
Exit_Function:
Set Properties = vProperty
Exit Function
End Function &apos; Properties
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Recommendation() As Variant
Recommendation = _PropertyGet(&quot;Recommendation&quot;)
End Property &apos; Recommendation (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get RowChangeAction() As Variant
RowChangeAction = _PropertyGet(&quot;RowChangeAction&quot;)
End Property &apos; RowChangeAction (get)
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Source() As Variant
&apos; Return the object having fired the event: Form, Control or SubForm
&apos; Else return the root Database object
Source = _PropertyGet(&quot;Source&quot;)
End Function &apos; Source (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get SubComponentName() As String
SubComponentName = _PropertyGet(&quot;SubComponentName&quot;)
End Property &apos; SubComponentName (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get SubComponentType() As Long
SubComponentType = _PropertyGet(&quot;SubComponentType&quot;)
End Property &apos; SubComponentType (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get XPos() As Variant
XPos = _PropertyGet(&quot;XPos&quot;)
End Property &apos; XPos (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get YPos() As Variant
YPos = _PropertyGet(&quot;YPos&quot;)
End Property &apos; YPos (get)
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
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 -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub _Initialize(poEvent As Object)
Dim oObject As Object, i As Integer
Dim sShortcut As String, sAddShortcut As String, sArray() As String
Dim sImplementation As String, oSelection As Object
Dim iCurrentDoc As Integer, oDoc As Object
Dim vPersistent As Variant
Const cstDatabaseForm = &quot;com.sun.star.comp.forms.ODatabaseForm&quot;
If _ErrorHandler() Then On Local Error Goto Error_Function
Set oObject = poEvent.Source
_EventSource = oObject
sArray = Split(Utils._getUNOTypeName(poEvent), &quot;.&quot;)
_EventType = UCase(sArray(UBound(sArray)))
If Utils._hasUNOProperty(poEvent, &quot;EventName&quot;) Then _EventName = poEvent.EventName
Select Case _EventType
Case &quot;DOCUMENTEVENT&quot;
&apos;SubComponent processing
Select Case UCase(_EventName)
Case UCase(&quot;OnSubComponentClosed&quot;), UCase(&quot;OnSubComponentOpened&quot;)
Set oSelection = poEvent.ViewController.getSelection()(0)
_SubComponentName = oSelection.Name
With com.sun.star.sdb.application.DatabaseObject
Select Case oSelection.Type
Case .TABLE : _SubComponentType = acTable
Case .QUERY : _SubComponentType = acQuery
Case .FORM : _SubComponentType = acForm
Case .REPORT : _SubComponentType = acReport
Case Else
End Select
End With
Case Else
End Select
Case &quot;EVENTOBJECT&quot;
Case &quot;ACTIONEVENT&quot;
Case &quot;FOCUSEVENT&quot;
_FocusChangeTemporary = poEvent.Temporary
Case &quot;ITEMEVENT&quot;
Case &quot;INPUTEVENT&quot;, &quot;KEYEVENT&quot;
_KeyCode = poEvent.KeyCode
_KeyChar = poEvent.KeyChar
_KeyFunction = poEvent.KeyFunc
_KeyAlt = Utils._BitShift(poEvent.Modifiers, com.sun.star.awt.KeyModifier.MOD2)
_KeyCtrl = Utils._BitShift(poEvent.Modifiers, com.sun.star.awt.KeyModifier.MOD1)
_KeyShift = Utils._BitShift(poEvent.Modifiers, com.sun.star.awt.KeyModifier.SHIFT)
Case &quot;MOUSEEVENT&quot;
_ButtonLeft = Utils._BitShift(poEvent.Buttons, com.sun.star.awt.MouseButton.LEFT)
_ButtonRight = Utils._BitShift(poEvent.Buttons, com.sun.star.awt.MouseButton.RIGHT)
_ButtonMiddle = Utils._BitShift(poEvent.Buttons, com.sun.star.awt.MouseButton.MIDDLE)
_XPos = poEvent.X
_YPos = poEvent.Y
_ClickCount = poEvent.ClickCount
Case &quot;ROWCHANGEEVENT&quot;
_RowChangeAction = poEvent.Action
Case &quot;TEXTEVENT&quot;
Case &quot;ADJUSTMENTEVENT&quot;, &quot;DOCKINGEVENT&quot;, &quot;ENDDOCKINGEVENT&quot;, &quot;ENDPOPUPMODEEVENT&quot;, &quot;ENHANCEDMOUSEEVENT&quot; _
, &quot;MENUEVENT&quot;, &quot;PAINTEVENT&quot;, &quot;SPINEVENT&quot;, &quot;VCLCONTAINEREVENT&quot;, &quot;WINDOWEVENT&quot;
Goto Exit_Function
Case Else
Goto Exit_Function
End Select
&apos; Evaluate ContextShortcut
sShortcut = &quot;&quot;
sImplementation = Utils._ImplementationName(oObject)
Select Case True
Case sImplementation = &quot;stardiv.Toolkit.UnoDialogControl&quot; &apos; Dialog
_ContextShortcut = &quot;Dialogs!&quot; &amp; _EventSource.Model.Name
Goto Exit_Function
Case Left(sImplementation, 16) = &quot;stardiv.Toolkit.&quot; &apos; Control in Dialog
_ContextShortcut = &quot;Dialogs!&quot; &amp; _EventSource.Context.Model.Name _
&amp; &quot;!&quot; &amp; _EventSource.Model.Name
Goto Exit_Function
Case Else
End Select
iCurrentDoc = _A2B_.CurrentDocIndex(, False)
If iCurrentDoc &lt; 0 Then Goto Exit_Function
Set oDoc = _A2B_.CurrentDocument(iCurrentDoc)
&apos; To manage 2x triggers of &quot;Before record action&quot; form event
If _EventType = &quot;ROWCHANGEEVENT&quot; And sImplementation &lt;&gt; &quot;com.sun.star.comp.forms.ODatabaseForm&quot; Then _Recommendation = &quot;IGNORE&quot;
Do While sImplementation &lt;&gt; &quot;SwXTextDocument&quot;
sAddShortcut = &quot;&quot;
Select Case sImplementation
Case &quot;com.sun.star.comp.forms.OFormsCollection&quot; &apos; Do nothing
Case Else
If Utils._hasUNOProperty(oObject, &quot;Model&quot;) Then
If oObject.Model.Name &lt;&gt; &quot;MainForm&quot; And oObject.Model.Name &lt;&gt; &quot;Form&quot; Then sAddShortcut = Utils._Surround(oObject.Model.Name)
ElseIf Utils._hasUNOProperty(oObject, &quot;Name&quot;) Then
If oObject.Name &lt;&gt; &quot;MainForm&quot; And oObject.Name &lt;&gt; &quot;Form&quot; Then sAddShortcut = Utils._Surround(oObject.Name)
End If
If sAddShortcut &lt;&gt; &quot;&quot; Then
If sImplementation = cstDatabaseForm And oDoc.DbConnect = DBCONNECTBASE Then sAddShortcut = sAddShortcut &amp; &quot;.Form&quot;
sShortcut = sAddShortcut &amp; Iif(Len(sShortcut) &gt; 0, &quot;!&quot; &amp; sShortcut, &quot;&quot;)
End If
End Select
Select Case True
Case Utils._hasUNOProperty(oObject, &quot;Model&quot;)
Set oObject = oObject.Model.Parent
Case Utils._hasUNOProperty(oObject, &quot;Parent&quot;)
Set oObject = oObject.Parent
Case Else
Goto Exit_Function
End Select
sImplementation = Utils._ImplementationName(oObject)
Loop
&apos; Add Forms! prefix
Select Case oDoc.DbConnect
Case DBCONNECTBASE
vPersistent = Split(oObject.StringValue, &quot;/&quot;)
sAddShortcut = Utils._Surround(_GetHierarchicalName(vPersistent(UBound(vPersistent) - 1)))
sShortcut = &quot;Forms!&quot; &amp; sAddShortcut &amp; &quot;!&quot; &amp; sShortcut
Case DBCONNECTFORM
sShortcut = &quot;Forms!0!&quot; &amp; sShortcut
End Select
sArray = Split(sShortcut, &quot;!&quot;)
&apos; If presence of &quot;Forms!myform!myform.Form&quot;, eliminate 2nd element
&apos; Eliminate anyway blanco subcomponents (e.g. Forms!!myForm)
If UBound(sArray) &gt;= 2 Then
If UCase(sArray(1)) &amp; &quot;.FORM&quot; = UCase(sArray(2)) Then sArray(1) = &quot;&quot;
sArray = Utils._TrimArray(sArray)
End If
&apos; If first element ends with .Form, remove suffix
If UBound(sArray) &gt;= 1 Then
If Len(sArray(1)) &gt; 5 And Right(sArray(1), 5) = &quot;.Form&quot; Then sArray(1) = left(sArray(1), Len(sArray(1)) - 5)
sShortcut = Join(sArray, &quot;!&quot;)
End If
If Len(sShortcut) &gt;= 2 Then
If Right(sShortcut, 1) = &quot;!&quot; Then
_ContextShortcut = Left(sShortcut, Len(sShortcut) - 1)
Else
_ContextShortcut = sShortcut
End If
End If
Exit_Function:
Exit Sub
Error_Function:
TraceError(TRACEWARNING, Err, &quot;Event.Initialize&quot;, Erl)
GoTo Exit_Function
End Sub &apos; _Initialize V0.9.1
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
Dim sSubComponentName As String, sSubComponentType As String
sSubComponentName = Iif(_SubComponentType &gt; -1, &quot;SubComponentName&quot;, &quot;&quot;)
sSubComponentType = Iif(_SubComponentType &gt; -1, &quot;SubComponentType&quot;, &quot;&quot;)
Dim sXPos As String, sYPos As String
sXPos = Iif(IsNull(_XPos), &quot;&quot;, &quot;XPos&quot;)
sYPos = Iif(IsNull(_YPos), &quot;&quot;, &quot;YPos&quot;)
_PropertiesList = Utils._TrimArray(Array( _
&quot;ButtonLeft&quot;, &quot;ButtonRight&quot;, &quot;ButtonMiddle&quot;, &quot;ClickCount&quot; _
, &quot;ContextShortcut&quot;, &quot;EventName&quot;, &quot;EventType&quot;, &quot;FocusChangeTemporary&quot;, _
, &quot;KeyAlt&quot;, &quot;KeyChar&quot;, &quot;KeyCode&quot;, &quot;KeyCtrl&quot;, &quot;KeyFunction&quot;, &quot;KeyShift&quot; _
, &quot;ObjectType&quot;, &quot;Recommendation&quot;, &quot;RowChangeAction&quot;, &quot;Source&quot; _
, sSubComponentName, sSubComponentType, sXPos, sYPos _
))
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;Event.get&quot; &amp; psProperty)
_PropertyGet = EMPTY
Select Case UCase(psProperty)
Case UCase(&quot;ButtonLeft&quot;)
_PropertyGet = _ButtonLeft
Case UCase(&quot;ButtonMiddle&quot;)
_PropertyGet = _ButtonMiddle
Case UCase(&quot;ButtonRight&quot;)
_PropertyGet = _ButtonRight
Case UCase(&quot;ClickCount&quot;)
_PropertyGet = _ClickCount
Case UCase(&quot;ContextShortcut&quot;)
_PropertyGet = _ContextShortcut
Case UCase(&quot;FocusChangeTemporary&quot;)
_PropertyGet = _FocusChangeTemporary
Case UCase(&quot;EventName&quot;)
_PropertyGet = _EventName
Case UCase(&quot;EventSource&quot;)
_PropertyGet = _EventSource
Case UCase(&quot;EventType&quot;)
_PropertyGet = _EventType
Case UCase(&quot;KeyAlt&quot;)
_PropertyGet = _KeyAlt
Case UCase(&quot;KeyChar&quot;)
_PropertyGet = _KeyChar
Case UCase(&quot;KeyCode&quot;)
_PropertyGet = _KeyCode
Case UCase(&quot;KeyCtrl&quot;)
_PropertyGet = _KeyCtrl
Case UCase(&quot;KeyFunction&quot;)
_PropertyGet = _KeyFunction
Case UCase(&quot;KeyShift&quot;)
_PropertyGet = _KeyShift
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;Recommendation&quot;)
_PropertyGet = _Recommendation
Case UCase(&quot;RowChangeAction&quot;)
_PropertyGet = _RowChangeAction
Case UCase(&quot;Source&quot;)
If _ContextShortcut = &quot;&quot; Then
_PropertyGet = _EventSource
Else
_PropertyGet = getObject(_ContextShortcut)
End If
Case UCase(&quot;SubComponentName&quot;)
_PropertyGet = _SubComponentName
Case UCase(&quot;SubComponentType&quot;)
_PropertyGet = _SubComponentType
Case UCase(&quot;XPos&quot;)
If IsNull(_XPos) Then Goto Trace_Error
_PropertyGet = _XPos
Case UCase(&quot;YPos&quot;)
If IsNull(_YPos) Then Goto Trace_Error
_PropertyGet = _YPos
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;Event.get&quot; &amp; psProperty)
Exit Function
Trace_Error:
&apos; Errors are not displayed to avoid display infinite cycling
TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, False, psProperty)
_PropertyGet = EMPTY
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Event._PropertyGet&quot;, Erl)
_PropertyGet = EMPTY
GoTo Exit_Function
End Function &apos; _PropertyGet V1.1.0
</script:module>

View File

@@ -0,0 +1,923 @@
<?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="Field" 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 FIELD
Private _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _Name As String
Private _Precision As Long
Private _ParentName As String
Private _ParentType As String
Private _ParentDatabase As Object
Private _ParentRecordset As Object
Private _DefaultValue As String
Private _DefaultValueSet As Boolean
Private Column As Object &apos; com.sun.star.sdb.OTableColumnWrapper
&apos; or org.openoffice.comp.dbaccess.OQueryColumn
&apos; or com.sun.star.sdb.ODataColumn
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJFIELD
Set _This = Nothing
Set _Parent = Nothing
_Name = &quot;&quot;
_ParentName = &quot;&quot;
_ParentType = &quot;&quot;
_DefaultValue = &quot;&quot;
_DefaultValueSet = False
Set Column = 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 DataType() As Long &apos; AOO/LibO type
DataType = _PropertyGet(&quot;DataType&quot;)
End Property &apos; DataType (get)
Property Get DataUpdatable() As Boolean
DataUpdatable = _PropertyGet(&quot;DataUpdatable&quot;)
End Property &apos; DataUpdatable (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get DbType() As Long &apos; MSAccess type
DbType = _PropertyGet(&quot;DbType&quot;)
End Property &apos; DbType (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get DefaultValue() As Variant
DefaultValue = _PropertyGet(&quot;DefaultValue&quot;)
End Property &apos; DefaultValue (get)
Property Let DefaultValue(ByVal pvDefaultValue As Variant)
Call _PropertySet(&quot;DefaultValue&quot;, pvDefaultValue)
End Property &apos; DefaultValue (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Description() As Variant
Description = _PropertyGet(&quot;Description&quot;)
End Property &apos; Description (get)
Property Let Description(ByVal pvDescription As Variant)
Call _PropertySet(&quot;Description&quot;, pvDescription)
End Property &apos; Description (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get FieldSize() As Long
FieldSize = _PropertyGet(&quot;FieldSize&quot;)
End Property &apos; FieldSize (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Name() As String
Name = _PropertyGet(&quot;Name&quot;)
End Property &apos; Name (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ObjectType() As String
ObjectType = _PropertyGet(&quot;ObjectType&quot;)
End Property &apos; ObjectType (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Size() As Long
Size = _PropertyGet(&quot;Size&quot;)
End Property &apos; Size (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get SourceField() As String
SourceField = _PropertyGet(&quot;SourceField&quot;)
End Property &apos; SourceField (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get SourceTable() As String
SourceTable = _PropertyGet(&quot;SourceTable&quot;)
End Property &apos; SourceTable (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get TypeName() As String
TypeName = _PropertyGet(&quot;TypeName&quot;)
End Property &apos; TypeName (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Value() As Variant
Value = _PropertyGet(&quot;Value&quot;)
End Property &apos; Value (get)
Property Let Value(ByVal pvValue As Variant)
Call _PropertySet(&quot;Value&quot;, pvValue)
End Property &apos; Value (set)
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Public Function AppendChunk(ByRef Optional pvValue As Variant) As Boolean
&apos; Store a chunk of string or binary characters into the current field, presumably a large object (CLOB or BLOB)
If _ErrorHandler() Then On Local Error Goto Error_Function
Const cstThisSub = &quot;Field.AppendChunk&quot;
Utils._SetCalledSub(cstThisSub)
AppendChunk = False
If IsMissing(pvValue) Then Call _TraceArguments()
If _ParentType &lt;&gt; OBJRECORDSET Then Goto Trace_Error &apos; Not on table- or querydefs ... !
If Not Column.IsWritable Then Goto Trace_Error_Updatable
If Column.IsReadOnly Then Goto Trace_Error_Updatable
If _ParentDatabase.Recordsets(_ParentName)._EditMode = dbEditNone Then Goto Trace_Error_Update
Dim iChunkType As Integer
With com.sun.star.sdbc.DataType
Select Case Column.Type &apos; DOES NOT WORK FOR CHARACTER TYPES
&apos; Case .CHAR, .VARCHAR, .LONGVARCHAR, .CLOB
&apos; iChunkType = vbString
Case .BINARY, .VARBINARY, .LONGVARBINARY, .BLOB, .CHAR &apos; .CHAR added for Sqlite3
iChunkType = vbByte
Case Else
Goto Trace_Error
End Select
End With
AppendChunk = _ParentRecordset._AppendChunk(_Name, pvValue, iChunkType)
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Error_Update:
TraceError(TRACEFATAL, ERRUPDATESEQUENCE, Utils._CalledSub(), 0, 1)
_PropertySet = False
Goto Exit_Function
Trace_Error_Updatable:
TraceError(TRACEFATAL, ERRNOTUPDATABLE, Utils._CalledSub(), 0, 1)
_PropertySet = False
Goto Exit_Function
Trace_Error:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, , cstThisSub)
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
_PropertySet = False
GoTo Exit_Function
End Function &apos; AppendChunk V1.5.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function GetChunk(ByVal Optional pvOffset As Variant, ByVal Optional pvBytes As Variant) As Variant
&apos; Get a chunk of string or binary characters from the current field, presumably a large object (CLOB or BLOB)
If _ErrorHandler() Then On Local Error Goto Error_Function
Const cstThisSub = &quot;Field.GetChunk&quot;
Utils._SetCalledSub(cstThisSub)
Dim oValue As Object, bNullable As Boolean, bNull As Boolean, vValue() As Variant
Dim lLength As Long, lOffset As Long, lValue As Long
If IsMissing(pvOffset) Or IsMissing(pvBytes) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvOffset, 1, _AddNumeric()) Then Goto Exit_Function
If pvOffset &lt; 0 Then
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, , Array(1, pvOffset))
Goto Exit_Function
End If
If Not Utils._CheckArgument(pvBytes, 2, _AddNumeric()) Then Goto Exit_Function
If pvBytes &lt; 0 Then
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, , Array(2, pvBytes))
Goto Exit_Function
End If
bNullable = ( Column.IsNullable = com.sun.star.sdbc.ColumnValue.NULLABLE )
bNull = False
GetChunk = Null
vValue = Array()
With com.sun.star.sdbc.DataType
Select Case Column.Type &apos; DOES NOT WORK FOR CHARACTER TYPES
&apos; Case .CHAR, .VARCHAR, .LONGVARCHAR
&apos; Set oValue = Column.getCharacterStream()
&apos; Case .CLOB
&apos; Set oValue = Column.getClob.getCharacterStream()
Case .BINARY, .VARBINARY, .LONGVARBINARY
Set oValue = Column.getBinaryStream()
Case .BLOB
Set oValue = Column.getBlob.getBinaryStream()
Case Else
Goto Trace_Error
End Select
If bNullable Then bNull = Column.wasNull()
If Not bNull Then
lOffset = CLng(pvOffset)
If lOffset &gt; 0 Then oValue.skipBytes(lOffset)
lValue = oValue.readBytes(vValue, pvBytes)
End If
oValue.closeInput()
End With
GetChunk = vValue
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, , cstThisSub)
Goto Exit_Function
Trace_Argument:
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, , Array(iArg, pvIndex))
Set vForms = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
GoTo Exit_Function
End Function &apos; GetChunk V1.5.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos; Return property value of psProperty property name
Const cstThisSub = &quot;Field.getProperty&quot;
Utils._SetCalledSub(cstThisSub)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(cstThisSub)
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 !)
Const cstThisSub = &quot;Field.hasProperty&quot;
Utils._SetCalledSub(cstThisSub)
If IsMissing(pvProperty) Then hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList()) Else hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList(), pvProperty)
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; hasProperty
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, sName As String
Const cstThisSub = &quot;Field.Properties&quot;
Utils._SetCalledSub(cstThisSub)
vPropertiesList = _PropertiesList()
sObject = Utils._PCase(_Type)
sName = _ParentType &amp; &quot;/&quot; &amp; _ParentName &amp; &quot;/&quot; &amp; _Name
If IsMissing(pvIndex) Then
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
Set vProperty._ParentDatabase = _ParentDatabase
End If
Exit_Function:
Set Properties = vProperty
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; Properties
REM -----------------------------------------------------------------------------------------------------------------------
Public Function ReadAllBytes(ByVal Optional pvFile As Variant) As Boolean
&apos; Read the whole content of a file into Long Binary Field object
Const cstThisSub = &quot;Field.ReadAllBytes&quot;
Utils._SetCalledSub(cstThisSub)
If Not Utils._CheckArgument(pvFile, 1, vbString) Then Goto Exit_Function
ReadAllBytes = _ReadAll(pvFile, &quot;ReadAllBytes&quot;)
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; ReadAllBytes
REM -----------------------------------------------------------------------------------------------------------------------
Public Function ReadAllText(ByVal Optional pvFile As Variant) As Boolean
&apos; Read the whole content of a file into a Long Char Field object
Const cstThisSub = &quot;Field.ReadAllText&quot;
Utils._SetCalledSub(cstThisSub)
If Not Utils._CheckArgument(pvFile, 1, vbString) Then Goto Exit_Function
ReadAllText = _ReadAll(pvFile, &quot;ReadAllText&quot;)
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; ReadAllText
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setProperty(ByVal Optional psProperty As String, ByVal Optional pvValue As Variant) As Boolean
&apos; Return True if property setting OK
Const cstThisSub = &quot;Field.setProperty&quot;
Utils._SetCalledSub(cstThisSub)
setProperty = _PropertySet(psProperty, pvValue)
Utils._ResetCalledSub(cstThisSub)
End Function
REM -----------------------------------------------------------------------------------------------------------------------
Public Function WriteAllBytes(ByVal Optional pvFile As Variant) As Boolean
&apos; Write the whole content of a Long Binary Field object to a file
Const cstThisSub = &quot;Field.WriteAllBytes&quot;
Utils._SetCalledSub(cstThisSub)
If Not Utils._CheckArgument(pvFile, 1, vbString) Then Goto Exit_Function
WriteAllBytes = _WriteAll(pvFile, &quot;WriteAllBytes&quot;)
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; WriteAllBytes
REM -----------------------------------------------------------------------------------------------------------------------
Public Function WriteAllText(ByVal Optional pvFile As Variant) As Boolean
&apos; Write the whole content of a Long Char Field object to a file
Const cstThisSub = &quot;Field.WriteAllText&quot;
Utils._SetCalledSub(cstThisSub)
If Not Utils._CheckArgument(pvFile, 1, vbString) Then Goto Exit_Function
WriteAllText = _WriteAll(pvFile, &quot;WriteAllText&quot;)
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; WriteAllText
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
Select Case _ParentType
Case OBJTABLEDEF
_PropertiesList =Array(&quot;DataType&quot;, &quot;dbType&quot;, &quot;DefaultValue&quot; _
, &quot;Description&quot;, &quot;Name&quot;, &quot;ObjectType&quot;, &quot;Size&quot;, &quot;SourceField&quot;, &quot;SourceTable&quot; _
, &quot;TypeName&quot; _
)
Case OBJQUERYDEF
_PropertiesList = Array(&quot;DataType&quot;, &quot;dbType&quot;, &quot;DefaultValue&quot; _
, &quot;Description&quot;, &quot;Name&quot;, &quot;ObjectType&quot;, &quot;Size&quot;, &quot;SourceField&quot;, &quot;SourceTable&quot; _
, &quot;TypeName&quot; _
)
Case OBJRECORDSET
_PropertiesList = Array(&quot;DataType&quot;, &quot;DataUpdatable&quot;, &quot;dbType&quot;, &quot;DefaultValue&quot; _
, &quot;Description&quot; , &quot;FieldSize&quot;, &quot;Name&quot;, &quot;ObjectType&quot; _
, &quot;Size&quot;, &quot;SourceTable&quot;, &quot;TypeName&quot;, &quot;Value&quot; _
)
End Select
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
Dim cstThisSub As String
cstThisSub = &quot;Field.get&quot; &amp; psProperty
Utils._SetCalledSub(cstThisSub)
If Not hasProperty(psProperty) Then Goto Trace_Error
Dim bCond1 As Boolean, bCond2 As Boolean, vValue As Variant, oValue As Object, sValue As String
Dim oSize As Object, lSize As Long, bNullable As Boolean, bNull As Boolean
Const cstMaxBinlength = 2 * 65535
_PropertyGet = EMPTY
Select Case UCase(psProperty)
Case UCase(&quot;DataType&quot;)
_PropertyGet = Column.Type
Case UCase(&quot;DbType&quot;)
With com.sun.star.sdbc.DataType
Select Case Column.Type
Case .BIT : _PropertyGet = dbBoolean
Case .TINYINT : _PropertyGet = dbInteger
Case .SMALLINT : _PropertyGet = dbLong
Case .INTEGER : _PropertyGet = dbLong
Case .BIGINT : _PropertyGet = dbBigInt
Case .FLOAT : _PropertyGet = dbFloat
Case .REAL : _PropertyGet = dbSingle
Case .DOUBLE : _PropertyGet = dbDouble
Case .NUMERIC : _PropertyGet = dbNumeric
Case .DECIMAL : _PropertyGet = dbDecimal
Case .CHAR : _PropertyGet = dbChar
Case .VARCHAR : _PropertyGet = dbText
Case .LONGVARCHAR : _PropertyGet = dbMemo
Case .CLOB : _PropertyGet = dbMemo
Case .DATE : _PropertyGet = dbDate
Case .TIME : _PropertyGet = dbTime
Case .TIMESTAMP : _PropertyGet = dbTimeStamp
Case .BINARY : _PropertyGet = dbBinary
Case .VARBINARY : _PropertyGet = dbVarBinary
Case .LONGVARBINARY : _PropertyGet = dbLongBinary
Case .BLOB : _PropertyGet = dbLongBinary
Case .BOOLEAN : _PropertyGet = dbBoolean
Case Else : _PropertyGet = dbUndefined
End Select
End With
Case UCase(&quot;DataUpdatable&quot;)
If Utils._hasUNOProperty(Column, &quot;IsWritable&quot;) Then
_PropertyGet = Column.IsWritable
ElseIf Utils._hasUNOProperty(Column, &quot;IsReadOnly&quot;) Then
_PropertyGet = Not Column.IsReadOnly
ElseIf Utils._hasUNOProperty(Column, &quot;IsDefinitelyWritable&quot;) Then
_PropertyGet = Column.IsDefinitelyWritable
Else
_PropertyGet = False
End If
If Utils._hasUNOProperty(Column, &quot;IsAutoIncrement&quot;) Then
If Column.IsAutoIncrement Then _PropertyGet = False &apos; Forces False if auto-increment (MSAccess)
End If
Case UCase(&quot;DefaultValue&quot;)
&apos; default value buffered to avoid multiple calls
If Not _DefaultValueSet Then
If Utils._hasUNOProperty(Column, &quot;DefaultValue&quot;) Then &apos; Default value in database set via SQL statement
_DefaultValue = Column.DefaultValue
ElseIf Utils._hasUNOProperty(Column, &quot;ControlDefault&quot;) Then &apos; Default value set in Base via table edition
If IsEmpty(Column.ControlDefault) Then _DefaultValue = &quot;&quot; Else _DefaultValue = Column.ControlDefault
Else
_DefaultValue = &quot;&quot;
End If
_DefaultValueSet = True
End If
_PropertyGet = _DefaultValue
Case UCase(&quot;Description&quot;)
bCond1 = Utils._hasUNOProperty(Column, &quot;Description&quot;)
bCond2 = Utils._hasUNOProperty(Column, &quot;HelpText&quot;)
Select Case True
Case ( bCond1 And bCond2 )
If IsEmpty(Column.HelpText) Then _PropertyGet = Column.Description Else _PropertyGet = Column.HelpText
Case ( bCond1 And ( Not bCond2 ) )
_PropertyGet = Column.Description
Case ( ( Not bCond1 ) And bCond2 )
_PropertyGet = Column.HelpText
Case Else
_PropertyGet = &quot;&quot;
End Select
Case UCase(&quot;FieldSize&quot;)
With com.sun.star.sdbc.DataType
Select Case Column.Type
Case .VARCHAR, .LONGVARCHAR, .CLOB
Set oSize = Column.getCharacterStream
Case .LONGVARBINARY, .VARBINARY, .BINARY, .BLOB
Set oSize = Column.getBinaryStream
Case Else
Set oSize = Nothing
End Select
End With
If Not IsNull(oSize) Then
bNullable = ( Column.IsNullable = com.sun.star.sdbc.ColumnValue.NULLABLE )
If bNullable Then
If Column.wasNull() Then _PropertyGet = 0 Else _PropertyGet = CLng(oSize.getLength())
Else
_PropertyGet = CLng(oSize.getLength())
End If
oSize.closeInput()
Else
_PropertyGet = EMPTY
End If
Case UCase(&quot;Name&quot;)
_PropertyGet = _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;Size&quot;)
With com.sun.star.sdbc.DataType
Select Case Column.Type
Case .LONGVARCHAR, .LONGVARBINARY, .VARBINARY, .BINARY, .BLOB, .CLOB
_PropertyGet = 0 &apos; Always 0 (MSAccess)
Case Else
If Utils._hasUNOProperty(Column, &quot;Precision&quot;) Then _PropertyGet = Column.Precision Else _PropertyGet = 0
End Select
End With
Case UCase(&quot;SourceField&quot;)
Select Case _ParentType
Case OBJTABLEDEF
_PropertyGet = _Name
Case OBJQUERYDEF &apos; RealName = not documented ?!?
If Utils._hasUNOProperty(Column, &quot;RealName&quot;) Then _PropertyGet = Column.RealName Else _PropertyGet = _Name
End Select
Case UCase(&quot;SourceTable&quot;)
Select Case _ParentType
Case OBJTABLEDEF
_PropertyGet = _ParentName
Case OBJQUERYDEF, OBJRECORDSET
_PropertyGet = Column.TableName
End Select
Case UCase(&quot;TypeName&quot;)
_PropertyGet = Column.TypeName
Case UCase(&quot;Value&quot;)
bNullable = ( Column.IsNullable = com.sun.star.sdbc.ColumnValue.NULLABLE )
bNull = False
With com.sun.star.sdbc.DataType
Select Case Column.Type
Case .BIT, .BOOLEAN : vValue = Column.getBoolean() &apos; vbBoolean
Case .TINYINT : vValue = Column.getShort() &apos; vbInteger
Case .SMALLINT, .INTEGER: vValue = Column.getInt() &apos; vbLong
Case .BIGINT : vValue = Column.getLong() &apos; vbBigint
Case .FLOAT : vValue = Column.getFloat() &apos; vbSingle
Case .REAL, .DOUBLE : vValue = Column.getDouble() &apos; vbDouble
Case .NUMERIC, .DECIMAL
If Utils._hasUNOProperty(Column, &quot;Scale&quot;) Then
If Column.Scale &gt; 0 Then
vValue = Column.getDouble()
Else &apos; Try Long otherwise Double (CDec not implemented anymore in LO ?!?)
On Local Error Resume Next &apos; Avoid overflow error
&apos; CLng checks local decimal point, getString does not !
sValue = Join(Split(Column.getString(), &quot;.&quot;), Utils._DecimalPoint())
vValue = CLng(sValue)
If Err &lt;&gt; 0 Then
vValue = CDbl(sValue)
Err.Clear
On Local Error Goto Error_Function
End If
End If
Else
vValue = CDbl(Column.getString())
End If
Case .CHAR : vValue = Column.getString()
Case .VARCHAR : vValue = Column.getString() &apos; vbString
Case .LONGVARCHAR, .CLOB
Set oValue = Column.getCharacterStream()
If bNullable Then bNull = Column.wasNull()
If Not bNull Then
lSize = CLng(oValue.getLength())
oValue.closeInput()
vValue = Column.getString() &apos; vbString
Else
oValue.closeInput()
End If
Case .DATE : Set oValue = Column.getDate() &apos; vbObject with members VarType Unsigned Short = 18
If bNullable Then bNull = Column.wasNull()
If Not bNull Then vValue = DateSerial(CInt(oValue.Year), CInt(oValue.Month), CInt(oValue.Day))
Case .TIME : Set oValue = Column.getTime() &apos; vbObject with members VarType Unsigned Short = 18
If bNullable Then bNull = Column.wasNull()
If Not bNull Then vValue = TimeSerial(oValue.Hours, oValue.Minutes, oValue.Seconds)&apos;, oValue.HundredthSeconds)
Case .TIMESTAMP : Set oValue = Column.getTimeStamp()
If bNullable Then bNull = Column.wasNull()
If Not bNull Then vValue = DateSerial(CInt(oValue.Year), CInt(oValue.Month), CInt(oValue.Day)) _
+ TimeSerial(oValue.Hours, oValue.Minutes, oValue.Seconds)&apos;, oValue.HundredthSeconds)
Case .BINARY, .VARBINARY, .LONGVARBINARY, .BLOB
Set oValue = Column.getBinaryStream()
If bNullable Then bNull = Column.wasNull()
If Not bNull Then
lSize = CLng(oValue.getLength()) &apos; vbLong =&gt; equivalent to FieldSize
If lSize &gt; cstMaxBinlength Then Goto Trace_Length
vValue = Array()
oValue.readBytes(vValue, lSize)
End If
oValue.closeInput()
Case Else
vValue = Column.getString() &apos;GIVE STRING A TRY
If IsNumeric(vValue) Then vValue = Val(vValue) &apos;Required when type = &quot;&quot;, sometimes numeric fields are returned as strings (query/MSAccess)
End Select
If bNullable Then
If Column.wasNull() Then vValue = Null &apos;getXXX must precede wasNull()
End If
End With
_PropertyGet = vValue
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Error:
TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, , psProperty)
_PropertyGet = EMPTY
Goto Exit_Function
Trace_Length:
TraceError(TRACEFATAL, ERROVERFLOW, Utils._CalledSub(), 0, , Array(lSize, &quot;GetChunk&quot;))
_PropertyGet = EMPTY
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
_PropertyGet = EMPTY
GoTo Exit_Function
End Function &apos; _PropertyGet V1.1.0
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean
&apos; Return True if property setting OK
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim cstThisSub As String
cstThisSub = &quot;Field.set&quot; &amp; psProperty
Utils._SetCalledSub(cstThisSub)
_PropertySet = True
Dim iArgNr As Integer, vTemp As Variant
Dim oParent As Object
Select Case UCase(_A2B_.CalledSub)
Case UCase(&quot;setProperty&quot;) : iArgNr = 3
Case UCase(&quot;Field.setProperty&quot;) : iArgNr = 2
Case UCase(cstThisSub) : iArgNr = 1
End Select
If Not hasProperty(psProperty) Then Goto Trace_Error
Select Case UCase(psProperty)
Case UCase(&quot;DefaultValue&quot;)
If _ParentType &lt;&gt; OBJTABLEDEF Then Goto Trace_Error
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
If Utils._hasUNOProperty(Column, &quot;ControlDefault&quot;) Then &apos; Default value set in Base via table edition
Column.ControlDefault = pvValue
_DefaultValue = pvValue
_DefaultValueSet = True
End If
Case UCase(&quot;Description&quot;)
If _ParentType &lt;&gt; OBJTABLEDEF Then Goto Trace_Error
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
Column.HelpText = pvValue
Case UCase(&quot;Value&quot;)
If _ParentType &lt;&gt; OBJRECORDSET Then Goto Trace_Error &apos; Not on table- or querydefs ... !
If Not Column.IsWritable Then Goto Trace_Error_Updatable
If Column.IsReadOnly Then Goto Trace_Error_Updatable
If _ParentDatabase.Recordsets(_ParentName)._EditMode = dbEditNone Then Goto Trace_Error_Update
With com.sun.star.sdbc.DataType
If IsNull(pvValue) Then
If Column.IsNullable = com.sun.star.sdbc.ColumnValue.NULLABLE Then Column.updateNull() Else Goto Trace_Null
Else
Select Case Column.Type
Case .BIT, .BOOLEAN
If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
Column.updateBoolean(pvValue)
Case .TINYINT
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
If pvValue &lt; -128 Or pvValue &gt; +127 Then Goto Trace_Error_Value
Column.updateShort(CInt(pvValue))
Case .SMALLINT
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
If pvValue &lt; -32768 Or pvValue &gt; 32767 Then Goto trace_Error_Value
Column.updateInt(CLng(pvValue))
Case .INTEGER
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
If pvValue &lt; -2147483648 Or pvValue &gt; 2147483647 Then Goto trace_Error_Value
Column.updateInt(CLng(pvValue))
Case .BIGINT
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
Column.updateLong(pvValue) &apos; No proper type conversion for HYPER data type
Case .FLOAT
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
If Abs(pvValue) &lt; 3.402823E38 And Abs(pvValue) &gt; 1.401298E-45 Then Column.updateFloat(CSng(pvValue)) Else Goto trace_Error_Value
Case .REAL, .DOUBLE
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
&apos;If Abs(pvValue) &lt; 1.79769313486232E308 And Abs(pvValue) &gt; 4.94065645841247E-307 Then Column.updateDouble(CDbl(pvValue)) Else Goto trace_Error_Value
Column.updateDouble(CDbl(pvValue))
Case .NUMERIC, .DECIMAL
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
If Utils._hasUNOProperty(Column, &quot;Scale&quot;) Then
If Column.Scale &gt; 0 Then
&apos;If Abs(pvValue) &lt; 1.79769313486232E308 And Abs(pvValue) &gt; 4.94065645841247E-307 Then Column.updateDouble(CDbl(pvValue)) Else Goto trace_Error_Value
Column.updateDouble(CDbl(pvValue))
Else
Column.updateString(CStr(pvValue))
End If
Else
Column.updateString(CStr(pvValue))
End If
Case .CHAR, .VARCHAR, .LONGVARCHAR, .CLOB
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
If _Precision &gt; 0 And Len(pvValue) &gt; _Precision Then Goto Trace_Error_Length
Column.updateString(pvValue) &apos; vbString
Case .DATE
If Not Utils._CheckArgument(pvValue, iArgNr, vbDate, , False) Then Goto Trace_Error_Value
vTemp = New com.sun.star.util.Date
With vTemp
.Day = Day(pvValue)
.Month = Month(pvValue)
.Year = Year(pvValue)
End With
Column.updateDate(vTemp)
Case .TIME
If Not Utils._CheckArgument(pvValue, iArgNr, vbDate, , False) Then Goto Trace_Error_Value
vTemp = New com.sun.star.util.Time
With vTemp
.Hours = Hour(pvValue)
.Minutes = Minute(pvValue)
.Seconds = Second(pvValue)
&apos;.HundredthSeconds = 0 &apos; replaced with Long nanoSeconds in LO 4.1 ??
End With
Column.updateTime(vTemp)
Case .TIMESTAMP
If Not Utils._CheckArgument(pvValue, iArgNr, vbDate, , False) Then Goto Trace_Error_Value
vTemp = New com.sun.star.util.DateTime
With vTemp
.Day = Day(pvValue)
.Month = Month(pvValue)
.Year = Year(pvValue)
.Hours = Hour(pvValue)
.Minutes = Minute(pvValue)
.Seconds = Second(pvValue)
&apos;.HundredthSeconds = 0
End With
Column.updateTimestamp(vTemp)
Case .BINARY, .VARBINARY, .LONGVARBINARY, .BLOB
If Not IsArray(pvValue) Then Goto Trace_Error_Value
If UBound(pvValue) &lt; LBound(pvValue) Then Goto Trace_Error_Value
If Not Utils._CheckArgument(pvValue(LBound(pvValue)), iArgNr, vbInteger, , False) Then Goto Trace_Error_Value
Column.updateBytes(pvValue)
Case Else
Goto trace_Error
End Select
End If
End With
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, , psProperty)
_PropertySet = False
Goto Exit_Function
Trace_Error_Value:
TraceError(TRACEFATAL, ERRPROPERTYVALUE, Utils._CalledSub(), 0, 1, Array(pvValue, psProperty))
_PropertySet = False
Goto Exit_Function
Trace_Null:
TraceError(TRACEFATAL, ERRNOTNULLABLE, Utils._CalledSub(), 0, 1, _Name)
_PropertySet = False
Goto Exit_Function
Trace_Error_Update:
TraceError(TRACEFATAL, ERRUPDATESEQUENCE, Utils._CalledSub(), 0, 1)
_PropertySet = False
Goto Exit_Function
Trace_Error_Updatable:
TraceError(TRACEFATAL, ERRNOTUPDATABLE, Utils._CalledSub(), 0, 1)
_PropertySet = False
Goto Exit_Function
Trace_Error_Length:
TraceError(TRACEFATAL, ERROVERFLOW, Utils._CalledSub(), 0, , Array(Len(pvValue), &quot;AppendChunk&quot;))
_PropertySet = False
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, cstThisSub, Erl)
_PropertySet = False
GoTo Exit_Function
End Function &apos; _PropertySet
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _ReadAll(ByVal psFile As String, ByVal psMethod As String) As Boolean
&apos; Write the whole content of a file into a stream object
If _ErrorHandler() Then On Local Error Goto Error_Function
_ReadAll = False
If _ParentType &lt;&gt; OBJRECORDSET Then Goto Trace_Error &apos; Not on table- or querydefs ... !
If Not Column.IsWritable Then Goto Trace_Error_Updatable
If Column.IsReadOnly Then Goto Trace_Error_Updatable
If _ParentDatabase.Recordsets(_ParentName)._EditMode = dbEditNone Then Goto Trace_Error_Update
Dim sFile As String, oSimpleFileAccess As Object, sMethod As String, oStream As Object
Dim lFileLength As Long, sBuffer As String, sMemo As String, iFile As Integer
Const cstMaxLength = 64000
sFile = ConvertToURL(psFile)
oSimpleFileAccess = CreateUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
If Not oSimpleFileAccess.exists(sFile) Then Goto Trace_File
With com.sun.star.sdbc.DataType
Select Case Column.Type
Case .BINARY, .VARBINARY, .LONGVARBINARY, .BLOB
If psMethod &lt;&gt; &quot;ReadAllBytes&quot; Then Goto Trace_Error
Set oStream = oSimpleFileAccess.openFileRead(sFile)
lFileLength = oStream.getLength()
If lFileLength = 0 Then Goto Trace_File
Column.updateBinaryStream(oStream, lFileLength)
oStream.closeInput()
Case .VARCHAR, .LONGVARCHAR, .CLOB
If psMethod &lt;&gt; &quot;ReadAllText&quot; Then Goto Trace_Error
sMemo = &quot;&quot;
lFileLength = 0
iFile = FreeFile()
Open sFile For Input Access Read Shared As iFile
Do While Not Eof(iFile)
Line Input #iFile, sBuffer
lFileLength = lFileLength + Len(sBuffer) + 1
If lFileLength &gt; cstMaxLength Then Exit Do
sMemo = sMemo &amp; sBuffer &amp; vbNewLine
Loop
If lFileLength = 0 Or lFileLength &gt; cstMaxLength Then
Close #iFile
Goto Trace_File
End If
sMemo = Left(sMemo, lFileLength - 1)
Column.updateString(sMemo)
&apos;Column.updateCharacterStream(oStream, lFileLength) &apos; DOES NOT WORK ?!?
Case Else
Goto Trace_Error
End Select
End With
_ReadAll = True
Exit_Function:
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, , psMethod)
Goto Exit_Function
Trace_File:
TraceError(TRACEFATAL, ERRFILEACCESS, Utils._CalledSub(), 0, , sFile)
If Not IsNull(oStream) Then oStream.closeInput()
Goto Exit_Function
Trace_Error_Update:
TraceError(TRACEFATAL, ERRUPDATESEQUENCE, Utils._CalledSub(), 0, 1)
If Not IsNull(oStream) Then oStream.closeInput()
Goto Exit_Function
Trace_Error_Updatable:
TraceError(TRACEFATAL, ERRNOTUPDATABLE, Utils._CalledSub(), 0, 1)
If Not IsNull(oStream) Then oStream.closeInput()
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, _CalledSub, Erl)
GoTo Exit_Function
End Function &apos; ReadAll
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _WriteAll(ByVal psFile As String, ByVal psMethod As String) As Boolean
&apos; Write the whole content of a stream object to a file
If _ErrorHandler() Then On Local Error Goto Error_Function
_WriteAll = False
Dim sFile As String, oSimpleFileAccess As Object, sMethod As String, oStream As Object
sFile = ConvertToURL(psFile)
oSimpleFileAccess = CreateUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
With com.sun.star.sdbc.DataType
Select Case Column.Type
Case .BINARY, .VARBINARY, .LONGVARBINARY, .BLOB
If psMethod &lt;&gt; &quot;WriteAllBytes&quot; Then Goto Trace_Error
Set oStream = Column.getBinaryStream()
Case .VARCHAR, .LONGVARCHAR, .CLOB
If psMethod &lt;&gt; &quot;WriteAllText&quot; Then Goto Trace_Error
Set oStream = Column.getCharacterStream()
Case Else
Goto Trace_Error
End Select
End With
If Column.IsNullable = com.sun.star.sdbc.ColumnValue.NULLABLE Then
If Column.wasNull() Then Goto Trace_Null
End If
If oStream.getLength() = 0 Then Goto Trace_Null
On Local Error Goto Trace_File
If oSimpleFileAccess.exists(sFile) Then oSimpleFileAccess.kill(sFile)
oSimpleFileAccess.writeFile(sFile, oStream)
On Local Error Goto Error_Function
oStream.closeInput()
_WriteAll = True
Exit_Function:
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, , psMethod)
Goto Exit_Function
Trace_File:
TraceError(TRACEFATAL, ERRFILEACCESS, Utils._CalledSub(), 0, , sFile)
If Not IsNull(oStream) Then oStream.closeInput()
Goto Exit_Function
Trace_Null:
TraceError(TRACEFATAL, ERRFIELDNULL, _CalledSub, 0)
If Not IsNull(oStream) Then oStream.closeInput()
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, _CalledSub, Erl)
GoTo Exit_Function
End Function &apos; WriteAll
</script:module>

View File

@@ -0,0 +1,540 @@
<?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="L10N" 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 Explicit
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _GetLabel(ByVal psShortlabel As String, Optional ByVal psLocale As String) As String
&apos; Return the localized label corresponding with ShortLabel
If IsMissing(psLocale) Then psLocale = UCase(Left(_A2B_.Locale, 2)) Else psLocale = UCase(psLocale)
On Local Error Goto Error_Function
If Not Utils._InList(psLocale, Array( _
&quot;EN&quot;, &quot;FR&quot;, &quot;ES&quot;, &quot;DE&quot; _
)) Then psLocale = &quot;DEFAULT&quot; &apos; If list incomplete a recursive call will be provided anyway
Dim sLocal As String
sLocal = psShortLabel
Select Case psLocale
Case &quot;EN&quot;, &quot;DEFAULT&quot;
Select Case UCase(psShortlabel)
Case &quot;ERR&quot; &amp; ERRDBNOTCONNECTED : sLocal = &quot;No active connection to a database found&quot;
Case &quot;ERR&quot; &amp; ERRMISSINGARGUMENTS : sLocal = &quot;Arguments are missing or are not initialized&quot;
Case &quot;ERR&quot; &amp; ERRWRONGARGUMENT : sLocal = &quot;Argument nr. %0 [Value = &apos;%1&apos;] is invalid&quot;
Case &quot;ERR&quot; &amp; ERRMAINFORM : sLocal = &quot;Document &apos;%0&apos; does not contain any form&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTIDENTIFIED : sLocal = &quot;Form &apos;%0&apos; not identified in database Forms set&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTFOUND : sLocal = &quot;Form &apos;%0&apos; not found&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTOPEN : sLocal = &quot;Form &apos;%0&apos; is currently not open&quot;
Case &quot;ERR&quot; &amp; ERRDFUNCTION : sLocal = &quot;DFunction execution failed, SQL=%0&quot;
Case &quot;ERR&quot; &amp; ERROPENFORM : sLocal = &quot;Form &apos;%0&apos; could not be opened&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTY : sLocal = &quot;Property &apos;%0&apos; not applicable in this context&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYVALUE : sLocal = &quot;Value &apos;%0&apos; is invalid for property &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRINDEXVALUE : sLocal = &quot;Out of array range or incorrect array size for property &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRCOLLECTION : sLocal = &quot;Out of array range&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYNOTARRAY : sLocal = &quot;Argument nr.%0 should be an array&quot;
Case &quot;ERR&quot; &amp; ERRCONTROLNOTFOUND : sLocal = &quot;Control &apos;%0&apos; not found in parent (form, grid or dialog) &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOACTIVEFORM : sLocal = &quot;No active form or control found&quot;
Case &quot;ERR&quot; &amp; ERRDATABASEFORM : sLocal = &quot;Form &apos;%0&apos; has no underlying dataset&quot;
Case &quot;ERR&quot; &amp; ERRFOCUSINGRID : sLocal = &quot;Control &apos;%0&apos; not found in gridcontrol &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOGRIDINFORM : sLocal = &quot;No gridcontrol found in form &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRFINDRECORD : sLocal = &quot;FindNext() must be preceded by a successful FindRecord(...) call&quot;
Case &quot;ERR&quot; &amp; ERRSQLSTATEMENT : sLocal = &quot;SQL Error, SQL statement = &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERROBJECTNOTFOUND : sLocal = &quot;%0 &apos;%1&apos; not found&quot;
Case &quot;ERR&quot; &amp; ERROPENOBJECT : sLocal = &quot;%0 &apos;%1&apos; could not be opened&quot;
Case &quot;ERR&quot; &amp; ERRCLOSEOBJECT : sLocal = &quot;%0 &apos;%1&apos; could not be closed&quot;
Case &quot;ERR&quot; &amp; ERRACTION : sLocal = &quot;Action not applicable in this context&quot;
Case &quot;ERR&quot; &amp; ERRSENDMAIL : sLocal = &quot;Mail service could not be activated&quot;
Case &quot;ERR&quot; &amp; ERRFORMYETOPEN : sLocal = &quot;Form %0 is already open&quot;
Case &quot;ERR&quot; &amp; ERRMETHOD : sLocal = &quot;Method &apos;%0&apos; not applicable in this context&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYINIT : sLocal = &quot;Property &apos;%0&apos; applicable but not initialized&quot;
Case &quot;ERR&quot; &amp; ERRFILENOTCREATED : sLocal = &quot;File &apos;%0&apos; could not be created&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGNOTFOUND : sLocal = &quot;Dialog &apos;%0&apos; not found in the currently loaded libraries&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGUNDEFINED : sLocal = &quot;Dialog unknown&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGSTARTED : sLocal = &quot;Dialog already started&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGNOTSTARTED : sLocal = &quot;Dialog &apos;%0&apos; not active&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETNODATA : sLocal = &quot;Recordset delivered no data. Action on current record rejected&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETCLOSED : sLocal = &quot;Recordset has been closed. Recordset action rejected&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETRANGE : sLocal = &quot;Current record out of range&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETFORWARD : sLocal = &quot;Action rejected in a forward-only or not bookmarkable recordset&quot;
Case &quot;ERR&quot; &amp; ERRFIELDNULL : sLocal = &quot;Field is null or empty. Action rejected&quot;
Case &quot;ERR&quot; &amp; ERRFILEACCESS : sLocal = &quot;File access error on file &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERROVERFLOW : sLocal = &quot;Field length (%0) exceeds maximum length. Use the &apos;%1&apos; method instead&quot;
Case &quot;ERR&quot; &amp; ERRNOTACTIONQUERY : sLocal = &quot;Query &apos;%0&apos; is not an action query&quot;
Case &quot;ERR&quot; &amp; ERRNOTUPDATABLE : sLocal = &quot;Database, recordset or field is read only&quot;
Case &quot;ERR&quot; &amp; ERRUPDATESEQUENCE : sLocal = &quot;Recordset update sequence error&quot;
Case &quot;ERR&quot; &amp; ERRNOTNULLABLE : sLocal = &quot;Field &apos;%0&apos; must not contain a NULL value&quot;
Case &quot;ERR&quot; &amp; ERRROWDELETED : sLocal = &quot;Current row has been deleted by another process or user&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETCLONE : sLocal = &quot;Cloning a cloned Recordset is forbidden&quot;
Case &quot;ERR&quot; &amp; ERRQUERYDEFDELETED : sLocal = &quot;Pre-existing query &apos;%0&apos; has been deleted&quot;
Case &quot;ERR&quot; &amp; ERRTABLEDEFDELETED : sLocal = &quot;Pre-existing table &apos;%0&apos; has been deleted&quot;
Case &quot;ERR&quot; &amp; ERRTABLECREATION : sLocal = &quot;Table &apos;%0&apos; could not be created&quot;
Case &quot;ERR&quot; &amp; ERRFIELDCREATION : sLocal = &quot;Field &apos;%0&apos; could not be created&quot;
Case &quot;ERR&quot; &amp; ERRSUBFORMNOTFOUND : sLocal = &quot;Subform &apos;%0&apos; not found in parent form &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRWINDOW : sLocal = &quot;Current window is not a document&quot;
Case &quot;ERR&quot; &amp; ERRCOMPATIBILITY : sLocal = &quot;Field &apos;%0&apos; could not be converted due to incompatibility of field types between the respective database systems&quot;
Case &quot;ERR&quot; &amp; ERRPRECISION : sLocal = &quot;Field &apos;%0&apos; could not be loaded in record #%1 due to capacity shortage&quot;
Case &quot;ERR&quot; &amp; ERRMODULENOTFOUND : sLocal = &quot;Module &apos;%0&apos; not found in the currently loaded libraries&quot;
Case &quot;ERR&quot; &amp; ERRPROCEDURENOTFOUND : sLocal = &quot;Procedure &apos;%0&apos; not found in module &apos;%1&apos;&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;OBJECT&quot; : sLocal = &quot;Object&quot;
Case &quot;TABLE&quot; : sLocal = &quot;Table&quot;
Case &quot;QUERY&quot; : slocal = &quot;Query&quot;
Case &quot;FORM&quot; : sLocal = &quot;Form&quot;
Case &quot;REPORT&quot; : sLocal = &quot;Report&quot;
Case &quot;RECORDSET&quot; : sLocal = &quot;Recordset&quot;
Case &quot;FIELD&quot; : sLocal = &quot;Field&quot;
Case &quot;TEMPVAR&quot; : sLocal = &quot;Temporary variable&quot;
Case &quot;COMMANDBAR&quot; : sLocal = &quot;Command bar&quot;
Case &quot;COMMANDBARCONTROL&quot; : sLocal = &quot;Command bar control&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;ERR#&quot; : sLocal = &quot;Error #&quot;
Case &quot;ERROCCUR&quot; : sLocal = &quot;occurred&quot;
Case &quot;ERRLINE&quot; : sLocal = &quot;at line&quot;
Case &quot;ERRIN&quot; : sLocal = &quot;in&quot;
Case &quot;CALLTO&quot; : sLocal = &quot;a call to function&quot;
Case &quot;SAVECONSOLE&quot; : sLocal = &quot;Save console&quot;
Case &quot;SAVECONSOLEENTRIES&quot; : sLocal = &quot;The console entries have been saved successfully.&quot;
Case &quot;QUITSHORT&quot; : sLocal = &quot;Quit&quot;
Case &quot;QUIT&quot; : sLocal = &quot;Do you really want to quit the application ? Changed data will be saved.&quot;
Case &quot;ENTERING&quot; : sLocal = &quot;Entering&quot;
Case &quot;EXITING&quot; : sLocal = &quot;Exiting&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;DLGTRACE_HELP&quot; : sLocal = &quot;Manage the console buffer and its entries&quot;
Case &quot;DLGTRACE_TITLE&quot; : sLocal = &quot;Console&quot;
Case &quot;DLGTRACE_LBLENTRIES_HELP&quot; : sLocal = &quot;Clear the list and resize the circular buffer&quot;
Case &quot;DLGTRACE_LBLENTRIES_LABEL&quot; : sLocal = &quot;Set max number of entries&quot;
Case &quot;DLGTRACE_TXTTRACELOG_HELP&quot; : sLocal = &quot;Text can be selected, copied, ...&quot;
Case &quot;DLGTRACE_TXTTRACELOG_TEXT&quot; : sLocal = &quot;--- Log file is empty ---&quot;
Case &quot;DLGTRACE_CMDCANCEL_HELP&quot; : sLocal = &quot;Cancel and close the dialog&quot;
Case &quot;DLGTRACE_CMDCANCEL_LABEL&quot; : sLocal = &quot;Cancel&quot;
Case &quot;DLGTRACE_LBLCLEAR_HELP&quot; : sLocal = &quot;Clear the list&quot;
Case &quot;DLGTRACE_LBLCLEAR_LABEL&quot; : sLocal = &quot;Clear the list&quot;
Case &quot;DLGTRACE_LBLMINLEVEL_HELP&quot; : sLocal = &quot;Register only logging requests above given level&quot;
Case &quot;DLGTRACE_LBLMINLEVEL_LABEL&quot; : sLocal = &quot;Set minimal trace level&quot;
Case &quot;DLGTRACE_CMDOK_HELP&quot; : sLocal = &quot;Validate&quot;
Case &quot;DLGTRACE_CMDOK_LABEL&quot; : sLocal = &quot;OK&quot;
Case &quot;DLGTRACE_CMDDUMP_HELP&quot; : sLocal = &quot;Choose a file and dump the actual list content in it&quot;
Case &quot;DLGTRACE_CMDDUMP_LABEL&quot; : sLocal = &quot;Dump to file&quot;
Case &quot;DLGTRACE_LBLNBENTRIES_HELP&quot; : sLocal = &quot;Actual size of list&quot;
Case &quot;DLGTRACE_LBLNBENTRIES_LABEL&quot; : sLocal = &quot;Actual number of entries:&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;DLGFORMAT_HELP&quot; : sLocal = &quot;Export the form&quot;
Case &quot;DLGFORMAT_TITLE&quot; : sLocal = &quot;OutputTo&quot;
Case &quot;DLGFORMAT_LBLFORMAT_HELP&quot; : sLocal = &quot;Format in which the form should be exported&quot;
Case &quot;DLGFORMAT_LBLFORMAT_LABEL&quot; : sLocal = &quot;Select the output format&quot;
Case &quot;DLGFORMAT_CMDOK_HELP&quot; : sLocal = &quot;Validate your choice&quot;
Case &quot;DLGFORMAT_CMDOK_LABEL&quot; : sLocal = &quot;OK&quot;
Case &quot;DLGFORMAT_CMDCANCEL_HELP&quot; : sLocal = &quot;Cancel and close the dialog&quot;
Case &quot;DLGFORMAT_CMDCANCEL_LABEL&quot; : sLocal = &quot;Cancel&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case Else : sLocal = &quot;&quot;
End Select
Case &quot;FR&quot;
Select Case UCase(psShortlabel)
Case &quot;ERR&quot; &amp; ERRDBNOTCONNECTED : sLocal = &quot;Pas de connexion active trouvée à une banque de données&quot;
Case &quot;ERR&quot; &amp; ERRMISSINGARGUMENTS : sLocal = &quot;Des arguments sont manquants ou non initialisés&quot;
Case &quot;ERR&quot; &amp; ERRWRONGARGUMENT : sLocal = &quot;L&apos;argument n° %0 [Valeur = &apos;%1&apos;] n&apos;est pas valable&quot;
Case &quot;ERR&quot; &amp; ERRMAINFORM : sLocal = &quot;Le document &apos;%0&apos; ne contient aucun formulaire&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTIDENTIFIED : sLocal = &quot;Le formulaire &apos;%0&apos; n&apos;a pas pu être identifié parmi l&apos;ensemble des formulaires de la Database&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTFOUND : sLocal = &quot;Formulaire &apos;%0&apos; non trouvé&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTOPEN : sLocal = &quot;Le formulaire &apos;%0&apos; n&apos;est actuellement pas ouvert&quot;
Case &quot;ERR&quot; &amp; ERRDFUNCTION : sLocal = &quot;L&apos;exécution de la &quot;&quot;fonction database&quot;&quot; a échoué, SQL=%0&quot;
Case &quot;ERR&quot; &amp; ERROPENFORM : sLocal = &quot;Le formulaire &apos;%0&apos; n&apos;a pas pu être ouvert&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTY : sLocal = &quot;La propriété &apos;%0&apos; n&apos;est pas applicable dans ce contexte&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYVALUE : sLocal = &quot;La valeur &apos;%0&apos; est invalide pour la propriété &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRINDEXVALUE : sLocal = &quot;Indice invalide ou dimension erronée du tableau pour la propriété &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRCOLLECTION : sLocal = &quot;Indice de tableau invalide&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYNOTARRAY : sLocal = &quot;L&apos;argument n°%0 doit être un tableau&quot;
Case &quot;ERR&quot; &amp; ERRCONTROLNOTFOUND : sLocal = &quot;Contrôle &apos;%0&apos; non trouvé dans le parent (formulaire, contrôle de table ou dialogue) &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOACTIVEFORM : sLocal = &quot;Pas de formulaire ou de contrôle actif&quot;
Case &quot;ERR&quot; &amp; ERRDATABASEFORM : sLocal = &quot;Le formulaire &apos;%0&apos; n&apos;a pas de données sous-jacentes&quot;
Case &quot;ERR&quot; &amp; ERRFOCUSINGRID : sLocal = &quot;Contrôle &apos;%0&apos; non trouvé dans le contrôle de table &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOGRIDINFORM : sLocal = &quot;Aucun contrôle de table trouvé dans le formulaire &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRFINDRECORD : sLocal = &quot;FindNext() doit être précédé par un appel réussi à FindRecord(...)&quot;
Case &quot;ERR&quot; &amp; ERRSQLSTATEMENT : sLocal = &quot;Erreur SQL, instruction SQL = &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERROBJECTNOTFOUND : sLocal = &quot;%0 &apos;%1&apos; non trouvé(e)&quot;
Case &quot;ERR&quot; &amp; ERROPENOBJECT : sLocal = &quot;%0 &apos;%1&apos;: ouverture en échec&quot;
Case &quot;ERR&quot; &amp; ERRCLOSEOBJECT : sLocal = &quot;%0 &apos;%1&apos;: fermeture en échec&quot;
Case &quot;ERR&quot; &amp; ERRACTION : sLocal = &quot;Action non applicable dans ce contexte&quot;
Case &quot;ERR&quot; &amp; ERRSENDMAIL : sLocal = &quot;Le service de messagerie n&apos;a pas pu être activé&quot;
Case &quot;ERR&quot; &amp; ERRFORMYETOPEN : sLocal = &quot;Le formulaire %0 est déjà ouvert&quot;
Case &quot;ERR&quot; &amp; ERRMETHOD : sLocal = &quot;La méthode &apos;%0&apos; n&apos;est pas applicable dans ce contexte&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYINIT : sLocal = &quot;Propriété &apos;%0&apos; applicable mais non initialisée&quot;
Case &quot;ERR&quot; &amp; ERRFILENOTCREATED : sLocal = &quot;Erreur de création du fichier &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGNOTFOUND : sLocal = &quot;Dialogue &apos;%0&apos; introuvable dans les librairies chargées actuellement&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGUNDEFINED : sLocal = &quot;Boîte de dialogue inconnue&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGSTARTED : sLocal = &quot;Dialogue déjà initialisé précédemment&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGNOTSTARTED : sLocal = &quot;Dialogue &apos;%0&apos; non initialisé&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETNODATA : sLocal = &quot;Recordset n&apos;a pas fourni de données. Toute action sur les enregistrements est rejetée&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETCLOSED : sLocal = &quot;Recordset a été clôturé. Action sur l&apos;enregistrement courant est rejetée&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETRANGE : sLocal = &quot;L&apos;enregistrement courant est hors cadre&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETFORWARD : sLocal = &quot;Action rejetée car recordset lisible seulement vers l&apos;avant ou n&apos;acceptant pas de signets&quot;
Case &quot;ERR&quot; &amp; ERRFIELDNULL : sLocal = &quot;Champ nul ou vide. Action rejetée&quot;
Case &quot;ERR&quot; &amp; ERRFILEACCESS : sLocal = &quot;Erreur d&apos;accès au fichier &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERROVERFLOW : sLocal = &quot;La longueur du champ (%0) dépasse la taille maximale autorisée. Utiliser de préférence la méthode &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOTACTIONQUERY : sLocal = &quot;La requête &apos;%0&apos; n&apos;est pas une requête d&apos;action&quot;
Case &quot;ERR&quot; &amp; ERRNOTUPDATABLE : sLocal = &quot;La banque de données, le recordset ou le champ sont en lecture seulement&quot;
Case &quot;ERR&quot; &amp; ERRUPDATESEQUENCE : sLocal = &quot;Erreur de séquence lors de la mise à jour d&apos;un Recordset&quot;
Case &quot;ERR&quot; &amp; ERRNOTNULLABLE : sLocal = &quot;Le champ &apos;%0&apos; ne peut pas recevoir une valeur NULLe&quot;
Case &quot;ERR&quot; &amp; ERRROWDELETED : sLocal = &quot;L&apos;enregistrement courant a été effacé par un autre processus ou un autre utilisateur&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETCLONE : sLocal = &quot;Le clonage d&apos;un Recordset cloné est interdit&quot;
Case &quot;ERR&quot; &amp; ERRQUERYDEFDELETED : sLocal = &quot;La requête existante &apos;%0&apos; a été supprimée&quot;
Case &quot;ERR&quot; &amp; ERRTABLEDEFDELETED : sLocal = &quot;La table existante &apos;%0&apos; a été supprimée&quot;
Case &quot;ERR&quot; &amp; ERRTABLECREATION : sLocal = &quot;La table &apos;%0&apos; n&apos;a pas pu être créée&quot;
Case &quot;ERR&quot; &amp; ERRFIELDCREATION : sLocal = &quot;Le champ &apos;%0&apos; n&apos;a pas pu être créé&quot;
Case &quot;ERR&quot; &amp; ERRSUBFORMNOTFOUND : sLocal = &quot;Sous-formulaire &apos;%0&apos; non trouvé dans le formulaire parent &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRWINDOW : sLocal = &quot;La fenêtre courante n&apos;est pas un document&quot;
Case &quot;ERR&quot; &amp; ERRCOMPATIBILITY : sLocal = &quot;Le champ &apos;%0&apos; n&apos;a pas pu être converti à cause d&apos;une incompatibilité entre les types de champs supportés par les systèmes de bases de données respectifs&quot;
Case &quot;ERR&quot; &amp; ERRPRECISION : sLocal = &quot;Le champ &apos;%0&apos; n&apos;a pas pu être chargé dans l&apos;enregistrement #%1 par manque de capacité&quot;
Case &quot;ERR&quot; &amp; ERRMODULENOTFOUND : sLocal = &quot;Le module &apos;%0&apos; est introuvable dans les librairies chargées actuellement&quot;
Case &quot;ERR&quot; &amp; ERRPROCEDURENOTFOUND : sLocal = &quot;La procédure &apos;%0&apos; est introuvable dans le module &apos;%1&apos;&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;OBJECT&quot; : sLocal = &quot;Objet&quot;
Case &quot;TABLE&quot; : sLocal = &quot;Table&quot;
Case &quot;QUERY&quot; : slocal = &quot;Requête&quot;
Case &quot;FORM&quot; : sLocal = &quot;Formulaire&quot;
Case &quot;REPORT&quot; : sLocal = &quot;Rapport&quot;
Case &quot;RECORDSET&quot; : sLocal = &quot;Recordset&quot;
Case &quot;FIELD&quot; : sLocal = &quot;Champ&quot;
Case &quot;TEMPVAR&quot; : sLocal = &quot;Variable temporaire&quot;
Case &quot;COMMANDBAR&quot; : sLocal = &quot;Barre de commande&quot;
Case &quot;COMMANDBARCONTROL&quot; : sLocal = &quot;Elément de barre de commande&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;ERR#&quot; : sLocal = &quot;L&apos;erreur #&quot;
Case &quot;ERROCCUR&quot; : sLocal = &quot;s&apos;est produite&quot;
Case &quot;ERRLINE&quot; : sLocal = &quot;à la ligne&quot;
Case &quot;ERRIN&quot; : sLocal = &quot;dans&quot;
Case &quot;CALLTO&quot; : sLocal = &quot;un appel à la fonction&quot;
Case &quot;SAVECONSOLE&quot; : sLocal = &quot;Sauver console&quot;
Case &quot;SAVECONSOLEENTRIES&quot; : sLocal = &quot;Les entrées de la console ont été sauvées avec succès.&quot;
Case &quot;QUITSHORT&quot; : sLocal = &quot;Quitter&quot;
Case &quot;QUIT&quot; : sLocal = &quot;Voulez-vous réellement quitter l&apos;application ? Les données modifiées seront sauvées.&quot;
Case &quot;ENTERING&quot; : sLocal = &quot;Entrée dans&quot;
Case &quot;EXITING&quot; : sLocal = &quot;Sortie de&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;DLGTRACE_HELP&quot; : sLocal = &quot;Gestion du tampon de la console et toutes ses entrées&quot;
Case &quot;DLGTRACE_TITLE&quot; : sLocal = &quot;Console&quot;
Case &quot;DLGTRACE_LBLENTRIES_HELP&quot; : sLocal = &quot;Effacer la liste et redimensionner le tampon circulaire&quot;
Case &quot;DLGTRACE_LBLENTRIES_LABEL&quot; : sLocal = &quot;Définir le nombre maximum d&apos;entrées&quot;
Case &quot;DLGTRACE_TXTTRACELOG_HELP&quot; : sLocal = &quot;Le texte peut être sélectionné, copié, ...&quot;
Case &quot;DLGTRACE_TXTTRACELOG_TEXT&quot; : sLocal = &quot;--- Le fichier journal est vide ---&quot;
Case &quot;DLGTRACE_CMDCANCEL_HELP&quot; : sLocal = &quot;Annuler et fermer la boîte de dialogue&quot;
Case &quot;DLGTRACE_CMDCANCEL_LABEL&quot; : sLocal = &quot;Annuler&quot;
Case &quot;DLGTRACE_LBLCLEAR_HELP&quot; : sLocal = &quot;Effacer la liste&quot;
Case &quot;DLGTRACE_LBLCLEAR_LABEL&quot; : sLocal = &quot;Effacer la liste&quot;
Case &quot;DLGTRACE_LBLMINLEVEL_HELP&quot; : sLocal = &quot;N&apos;enregistrer que les demandes de journalisation à partir du niveau indiqué&quot;
Case &quot;DLGTRACE_LBLMINLEVEL_LABEL&quot; : sLocal = &quot;Définir le niveau minimal d&apos;enregistrement&quot;
Case &quot;DLGTRACE_CMDOK_HELP&quot; : sLocal = &quot;Valider&quot;
Case &quot;DLGTRACE_CMDOK_LABEL&quot; : sLocal = &quot;OK&quot;
Case &quot;DLGTRACE_CMDDUMP_HELP&quot; : sLocal = &quot;Sélectionner un fichier et y vider le contenu actuel des traces enregistrées&quot;
Case &quot;DLGTRACE_CMDDUMP_LABEL&quot; : sLocal = &quot;Vider dans fichier&quot;
Case &quot;DLGTRACE_LBLNBENTRIES_HELP&quot; : sLocal = &quot;Taille actuelle de la liste&quot;
Case &quot;DLGTRACE_LBLNBENTRIES_LABEL&quot; : sLocal = &quot;Nombre actuel d&apos;entrées:&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;DLGFORMAT_HELP&quot; : sLocal = &quot;Exporter le formulaire&quot;
Case &quot;DLGFORMAT_TITLE&quot; : sLocal = &quot;OutputTo&quot;
Case &quot;DLGFORMAT_LBLFORMAT_HELP&quot; : sLocal = &quot;Format dans lequel le formulaire sera exporté&quot;
Case &quot;DLGFORMAT_LBLFORMAT_LABEL&quot; : sLocal = &quot;Selectionner le format de sortie&quot;
Case &quot;DLGFORMAT_CMDOK_HELP&quot; : sLocal = &quot;Valider votre choix&quot;
Case &quot;DLGFORMAT_CMDOK_LABEL&quot; : sLocal = &quot;OK&quot;
Case &quot;DLGFORMAT_CMDCANCEL_HELP&quot; : sLocal = &quot;Annuler et fermer la boîte de dialogue&quot;
Case &quot;DLGFORMAT_CMDCANCEL_LABEL&quot; : sLocal = &quot;Annuler&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case Else : sLocal = _Getlabel(psShortLabel, &quot;DEFAULT&quot;)
End Select
&apos;********************************************************
&apos;Translated by Iñigo Zuluaga
&apos;********************************************************
Case &quot;ES&quot; &apos;(España)
Select Case UCase(psShortlabel)
Case &quot;ERR&quot; &amp; ERRDBNOTCONNECTED : sLocal = &quot;No se ha encontrado una conexión activa a una base de datos&quot;
Case &quot;ERR&quot; &amp; ERRMISSINGARGUMENTS : sLocal = &quot;Faltan argumentos o no están inicializados&quot;
Case &quot;ERR&quot; &amp; ERRWRONGARGUMENT : sLocal = &quot;El argumento nr. %0 [Value = &apos;%1&apos;] no es válido&quot;
Case &quot;ERR&quot; &amp; ERRMAINFORM : sLocal = &quot;El documento &apos;%0&apos; no contiene ningún formulario&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTIDENTIFIED : sLocal = &quot;No se ha identificado el formulario &apos;%0&apos; en el conjunto de formularios de la base de datos&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTFOUND : sLocal = &quot;No se ha encontrado el formulario &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTOPEN : sLocal = &quot;El formulario &apos;%0&apos; no está abierto&quot;
Case &quot;ERR&quot; &amp; ERRDFUNCTION : sLocal = &quot;La ejecución de DFunction falló, SQL=%0&quot;
Case &quot;ERR&quot; &amp; ERROPENFORM : sLocal = &quot;El formulario &apos;%0&apos; no se puede abrir&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTY : sLocal = &quot;La propiedad &apos;%0&apos; no es aplicable en este contexto&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYVALUE : sLocal = &quot;El valor &apos;%0&apos; es inválido para la propiedad &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRINDEXVALUE : sLocal = &quot;Fuera del rango de la matriz o tamaño incorrecto de la matriz para la propiedad &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRCOLLECTION : sLocal = &quot;Fuera del rango de la matriz&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYNOTARRAY : sLocal = &quot;El argumento nr.%0 debería ser una matriz&quot;
Case &quot;ERR&quot; &amp; ERRCONTROLNOTFOUND : sLocal = &quot;El control &apos;%0&apos; not found in parent (formulario, control de tabla or diálogo) &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOACTIVEFORM : sLocal = &quot;No se ha encontrado un formulario o control activo&quot;
Case &quot;ERR&quot; &amp; ERRDATABASEFORM : sLocal = &quot;El formulario &apos;%0&apos; no tiene datos subyacentes&quot;
Case &quot;ERR&quot; &amp; ERRFOCUSINGRID : sLocal = &quot;No se ha encontrado el control &apos;%0&apos; en el control de tabla &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOGRIDINFORM : sLocal = &quot;No se ha encontrado un control de tabla en el formulario &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRFINDRECORD : sLocal = &quot;FindNext() tiene que ser precedido por una llamada exitosa de FindRecord(...)&quot;
Case &quot;ERR&quot; &amp; ERRSQLSTATEMENT : sLocal = &quot;Error SQL, instrución SQL = &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERROBJECTNOTFOUND : sLocal = &quot;%0 &apos;%1&apos; no encontrado&quot;
Case &quot;ERR&quot; &amp; ERROPENOBJECT : sLocal = &quot;%0 &apos;%1&apos; no se puede abrir&quot;
Case &quot;ERR&quot; &amp; ERRCLOSEOBJECT : sLocal = &quot;%0 &apos;%1&apos; no se puede abrir&quot;
Case &quot;ERR&quot; &amp; ERRACTION : sLocal = &quot;Acción no aplicable en este contexto&quot;
Case &quot;ERR&quot; &amp; ERRSENDMAIL : sLocal = &quot;No se puede activar el servicio de correo&quot;
Case &quot;ERR&quot; &amp; ERRFORMYETOPEN : sLocal = &quot;El formulario %0 ya está abierto&quot;
Case &quot;ERR&quot; &amp; ERRMETHOD : sLocal = &quot;El método &apos;%0&apos; no es aplicable en este contexto&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYINIT : sLocal = &quot;Propiedad &apos;%0&apos; aplicable pero no inicializada&quot;
Case &quot;ERR&quot; &amp; ERRFILENOTCREATED : sLocal = &quot;No se ha podido crear el archivo &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGNOTFOUND : sLocal = &quot;No se ha encontrado el diálogo &apos;%0&apos; en las bibliotecas cargadas actualmente&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGUNDEFINED : sLocal = &quot;Diálogo desconocido&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGSTARTED : sLocal = &quot;El diálogo ya está iniciado&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGNOTSTARTED : sLocal = &quot;El diálogo &apos;%0&apos; no está activo&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETNODATA : sLocal = &quot;El Recordset no suministra datos. La acción en el registro actual rechazada&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETCLOSED : sLocal = &quot;El recorset se ha cerrado. Acción con el Recordset rechazada&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETRANGE : sLocal = &quot;Registro actual fuera de rango&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETFORWARD : sLocal = &quot;Acción rechazada en un recorset legible sólo hacia adelante o que no admita marcadores&quot;
Case &quot;ERR&quot; &amp; ERRFIELDNULL : sLocal = &quot;El campo es nulo o vacío. Acción rechazada&quot;
Case &quot;ERR&quot; &amp; ERRFILEACCESS : sLocal = &quot;Error durante el acceso al archivo &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERROVERFLOW : sLocal = &quot;La longitud del campo (%0) excede la longitud máxima. Reemplazar por el método &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOTACTIONQUERY : sLocal = &quot;La consulta &apos;%0&apos; no es una consulta de acción&quot;
Case &quot;ERR&quot; &amp; ERRNOTUPDATABLE : sLocal = &quot;La base de datos, el Recordset o el Campo es de sólo lectura&quot;
Case &quot;ERR&quot; &amp; ERRUPDATESEQUENCE : sLocal = &quot;Error durante la secuencia de actualización del Recordset&quot;
Case &quot;ERR&quot; &amp; ERRNOTNULLABLE : sLocal = &quot;El campo &apos;%0&apos; no puede contener un valor NULL&quot;
Case &quot;ERR&quot; &amp; ERRROWDELETED : sLocal = &quot;La fila actual ha sido borrada por otro proceso o usuario&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETCLONE : sLocal = &quot;No se puede clonar un Recordset clonado&quot;
Case &quot;ERR&quot; &amp; ERRQUERYDEFDELETED : sLocal = &quot;Se ha borrado la consulta pre-existente &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRTABLEDEFDELETED : sLocal = &quot;Se ha borrado la tabla pre-existente &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRTABLECREATION : sLocal = &quot;No se ha podido crear la Tabla &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRFIELDCREATION : sLocal = &quot;No se ha podido crear el campo &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRSUBFORMNOTFOUND : sLocal = &quot;No se ha encontrado el Subformulario &apos;%0&apos; en el subformulario padre &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRWINDOW : sLocal = &quot;La ventana actual no es un documento&quot;
Case &quot;ERR&quot; &amp; ERRCOMPATIBILITY : sLocal = &quot;El campo &apos;%0&apos; no se ha convertido debido a una incompatibilidad de los tipos de campo soportados entre las dos bases de datos&quot;
Case &quot;ERR&quot; &amp; ERRPRECISION : sLocal = &quot;El campo &apos;%0&apos; no se ha cargado en el registro #%1 por falta de capacidad&quot;
Case &quot;ERR&quot; &amp; ERRMODULENOTFOUND : sLocal = &quot;Module &apos;%0&apos; not found in the currently loaded libraries&quot;
Case &quot;ERR&quot; &amp; ERRPROCEDURENOTFOUND : sLocal = &quot;Procedure &apos;%0&apos; not found in module &apos;%1&apos;&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;OBJECT&quot; : sLocal = &quot;Objeto&quot;
Case &quot;TABLE&quot; : sLocal = &quot;Tabla&quot;
Case &quot;QUERY&quot; : slocal = &quot;Consulta&quot;
Case &quot;FORM&quot; : sLocal = &quot;Formulario&quot;
Case &quot;REPORT&quot; : sLocal = &quot;Informe&quot;
Case &quot;RECORDSET&quot; : sLocal = &quot;Recordset&quot;
Case &quot;FIELD&quot; : sLocal = &quot;Campo&quot;
Case &quot;TEMPVAR&quot; : sLocal = &quot;Variable temporal&quot;
Case &quot;COMMANDBAR&quot; : sLocal = &quot;Barra de comandos&quot;
Case &quot;COMMANDBARCONTROL&quot; : sLocal = &quot;Control de barra de comandos&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;ERR#&quot; : sLocal = &quot;Error #&quot;
Case &quot;ERROCCUR&quot; : sLocal = &quot;ocurrido&quot;
Case &quot;ERRLINE&quot; : sLocal = &quot;en línea&quot;
Case &quot;ERRIN&quot; : sLocal = &quot;en&quot;
Case &quot;CALLTO&quot; : sLocal = &quot;una llamada a la función&quot;
Case &quot;SAVECONSOLE&quot; : sLocal = &quot;Guardar consola&quot;
Case &quot;SAVECONSOLEENTRIES&quot; : sLocal = &quot;Las entradas de la consola han sido guardadas correctamente.&quot;
Case &quot;QUITSHORT&quot; : sLocal = &quot;Cerrar&quot;
Case &quot;QUIT&quot; : sLocal = &quot;Quieres realmente cerrar la aplicación? los datos cambiados se guardarán.&quot;
Case &quot;ENTERING&quot; : sLocal = &quot;Entrando&quot;
Case &quot;EXITING&quot; : sLocal = &quot;Saliendo&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;DLGTRACE_HELP&quot; : sLocal = &quot;Gestión del buffer de la consola y sus entradas&quot;
Case &quot;DLGTRACE_TITLE&quot; : sLocal = &quot;Consola&quot;
Case &quot;DLGTRACE_LBLENTRIES_HELP&quot; : sLocal = &quot;Limpiar la lista y redimensionar el buffer circular&quot;
Case &quot;DLGTRACE_LBLENTRIES_LABEL&quot; : sLocal = &quot;Definir el número máximo de entradas&quot;
Case &quot;DLGTRACE_TXTTRACELOG_HELP&quot; : sLocal = &quot;El texto puede ser seleccionado, copiado, ...&quot;
Case &quot;DLGTRACE_TXTTRACELOG_TEXT&quot; : sLocal = &quot;--- El archivo Histórico está vacío ---&quot;
Case &quot;DLGTRACE_CMDCANCEL_HELP&quot; : sLocal = &quot;Cancelar y cerrar el diálogo&quot;
Case &quot;DLGTRACE_CMDCANCEL_LABEL&quot; : sLocal = &quot;Cancelar&quot;
Case &quot;DLGTRACE_LBLCLEAR_HELP&quot; : sLocal = &quot;Limpiar la lista&quot;
Case &quot;DLGTRACE_LBLCLEAR_LABEL&quot; : sLocal = &quot;Limpiar la lista&quot;
Case &quot;DLGTRACE_LBLMINLEVEL_HELP&quot; : sLocal = &quot;No registrar más que las peticiones de registro a partir de un nivel indicado&quot;
Case &quot;DLGTRACE_LBLMINLEVEL_LABEL&quot; : sLocal = &quot;Definir el nivel mínimo de registro&quot;
Case &quot;DLGTRACE_CMDOK_HELP&quot; : sLocal = &quot;Validar&quot;
Case &quot;DLGTRACE_CMDOK_LABEL&quot; : sLocal = &quot;Aceptar&quot;
Case &quot;DLGTRACE_CMDDUMP_HELP&quot; : sLocal = &quot;Elegir un archivo y guardar en él el contenido de la lista actual&quot;
Case &quot;DLGTRACE_CMDDUMP_LABEL&quot; : sLocal = &quot;Guardar en a archivo&quot;
Case &quot;DLGTRACE_LBLNBENTRIES_HELP&quot; : sLocal = &quot;Tamaño actual de la lista&quot;
Case &quot;DLGTRACE_LBLNBENTRIES_LABEL&quot; : sLocal = &quot;Numero actual de entradas:&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;DLGFORMAT_HELP&quot; : sLocal = &quot;Exportar el formulario&quot;
Case &quot;DLGFORMAT_TITLE&quot; : sLocal = &quot;Exportar como&quot;
Case &quot;DLGFORMAT_LBLFORMAT_HELP&quot; : sLocal = &quot;Formato en el que será ser exportado el formulario&quot;
Case &quot;DLGFORMAT_LBLFORMAT_LABEL&quot; : sLocal = &quot;Seleccionar el formato de salida&quot;
Case &quot;DLGFORMAT_CMDOK_HELP&quot; : sLocal = &quot;Validar su elección&quot;
Case &quot;DLGFORMAT_CMDOK_LABEL&quot; : sLocal = &quot;Aceptar&quot;
Case &quot;DLGFORMAT_CMDCANCEL_HELP&quot; : sLocal = &quot;Cancelar y cerrar el diálogo&quot;
Case &quot;DLGFORMAT_CMDCANCEL_LABEL&quot; : sLocal = &quot;Cancelar&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case Else : sLocal = _Getlabel(psShortLabel, &quot;DEFAULT&quot;)
End Select
&apos;********************************************************
&apos;Translated by Gisbert Friege
&apos;********************************************************
Case &quot;DE&quot;
Select Case UCase(psShortlabel)
Case &quot;ERR&quot; &amp; ERRDBNOTCONNECTED : sLocal = &quot;Keine aktive Verbindung zu einer Datenbank gefunden&quot;
Case &quot;ERR&quot; &amp; ERRMISSINGARGUMENTS : sLocal = &quot;Argumente fehlen oder sind nicht initialisiert&quot;
Case &quot;ERR&quot; &amp; ERRWRONGARGUMENT : sLocal = &quot;Argument Nr. %0 [Wert = &apos;%1&apos;] ist ungültig&quot;
Case &quot;ERR&quot; &amp; ERRMAINFORM : sLocal = &quot;Dokument &apos;%0&apos; enthält kein Formular&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTIDENTIFIED : sLocal = &quot;Formular &apos;%0&apos; nicht bei den Datenbank-Formularen erkannt&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTFOUND : sLocal = &quot;Formular &apos;%0&apos; nicht gefunden&quot;
Case &quot;ERR&quot; &amp; ERRFORMNOTOPEN : sLocal = &quot;Formular &apos;%0&apos; ist zur Zeit nicht offen&quot;
Case &quot;ERR&quot; &amp; ERRDFUNCTION : sLocal = &quot;DFunction Ausführung misslungen, SQL=%0&quot;
Case &quot;ERR&quot; &amp; ERROPENFORM : sLocal = &quot;Formular &apos;%0&apos; konnte nicht geöffnet werden&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTY : sLocal = &quot;Eigenschaft &apos;%0&apos; in diesem Kontext nicht anwendbar&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYVALUE : sLocal = &quot;Wert &apos;%0&apos; ist ungültig für die Eigenschaft &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRINDEXVALUE : sLocal = &quot;Außerhalb des Array-Bereichs oder falsche Array-Größe für Eigenschaft &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERRCOLLECTION : sLocal = &quot;Außerhalb des Array-Bereichs&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYNOTARRAY : sLocal = &quot;Argument Nr.%0 sollte ein Array sein&quot;
Case &quot;ERR&quot; &amp; ERRCONTROLNOTFOUND : sLocal = &quot;Steuerelement &apos;%0&apos; nicht gefunden in parent (Formular, Tabelle oder Dialog) &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOACTIVEFORM : sLocal = &quot;Kein aktives Formular oder Steuerelement gefunden&quot;
Case &quot;ERR&quot; &amp; ERRDATABASEFORM : sLocal = &quot;Formular &apos;%0&apos; basiert nicht auf einem Datensatz&quot;
Case &quot;ERR&quot; &amp; ERRFOCUSINGRID : sLocal = &quot;Steuerelement &apos;%0&apos; im Tabellen-Steuerelement &apos;%1&apos; nicht gefunden&quot;
Case &quot;ERR&quot; &amp; ERRNOGRIDINFORM : sLocal = &quot;Kein Tabellen-Steuerelement im Formular &apos;%0&apos; gefunden&quot;
Case &quot;ERR&quot; &amp; ERRFINDRECORD : sLocal = &quot;Bei FindNext() muss ein erfolgreicher FindRecord(...)-Aufruf vorhergehen&quot;
Case &quot;ERR&quot; &amp; ERRSQLSTATEMENT : sLocal = &quot;SQL Error, SQL statement = &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERROBJECTNOTFOUND : sLocal = &quot;%0 &apos;%1&apos; nicht gefunden&quot;
Case &quot;ERR&quot; &amp; ERROPENOBJECT : sLocal = &quot;%0 &apos;%1&apos; konnte nicht geöffnet werden&quot;
Case &quot;ERR&quot; &amp; ERRCLOSEOBJECT : sLocal = &quot;%0 &apos;%1&apos; konnte nicht geschlossen werden&quot;
Case &quot;ERR&quot; &amp; ERRACTION : sLocal = &quot;Aktion in diesem Kontext nicht anwendbar&quot;
Case &quot;ERR&quot; &amp; ERRSENDMAIL : sLocal = &quot;Email-Dienst konnte nicht aktiviert werden&quot;
Case &quot;ERR&quot; &amp; ERRFORMYETOPEN : sLocal = &quot;Formular %0 ist schon offen&quot;
Case &quot;ERR&quot; &amp; ERRMETHOD : sLocal = &quot;Methode &apos;%0&apos; in diesem Kontext nicht anwendbar&quot;
Case &quot;ERR&quot; &amp; ERRPROPERTYINIT : sLocal = &quot;Eigenschaft &apos;%0&apos; anwendbar aber nicht initialisiert&quot;
Case &quot;ERR&quot; &amp; ERRFILENOTCREATED : sLocal = &quot;Datei &apos;%0&apos; konnte nicht erzeugt werden&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGNOTFOUND : sLocal = &quot;Dialog &apos;%0&apos; nicht in den aktuell geladenen Bibliotheken gefunden&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGUNDEFINED : sLocal = &quot;Dialog unbekannt&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGSTARTED : sLocal = &quot;Dialog schon gestartet&quot;
Case &quot;ERR&quot; &amp; ERRDIALOGNOTSTARTED : sLocal = &quot;Dialog &apos;%0&apos; nicht aktiv&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETNODATA : sLocal = &quot;Datensatz ergab keine Daten. Aktion auf aktuellem Datensatz verweigert&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETCLOSED : sLocal = &quot;Datensatz wurde geschlossen. Datensatz-Aktion verweigert&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETRANGE : sLocal = &quot;Aktueller Datensatz außerhalb des Bereichs&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETFORWARD : sLocal = &quot;Aktion verweigert auf einem nur vorwärts lesbaren oder keine Textmarken unterstützenden Datensatz&quot;
Case &quot;ERR&quot; &amp; ERRFIELDNULL : sLocal = &quot;Feld ist null oder leer. Aktion verweigert&quot;
Case &quot;ERR&quot; &amp; ERRFILEACCESS : sLocal = &quot;Dateizugriffs-Fehler bei Datei &apos;%0&apos;&quot;
Case &quot;ERR&quot; &amp; ERROVERFLOW : sLocal = &quot;Feldlänge (%0) überschreitet die maximale Länge. Verwende stattdessen die Methode &apos;%1&apos;&quot;
Case &quot;ERR&quot; &amp; ERRNOTACTIONQUERY : sLocal = &quot;Abfrage &apos;%0&apos; ist keine Aktionsabfrage&quot;
Case &quot;ERR&quot; &amp; ERRNOTUPDATABLE : sLocal = &quot;Datenbank, Datensatz oder Feld kann nur gelesen werden&quot;
Case &quot;ERR&quot; &amp; ERRUPDATESEQUENCE : sLocal = &quot;Datensatz-Update Folgefehler&quot;
Case &quot;ERR&quot; &amp; ERRNOTNULLABLE : sLocal = &quot;Feld &apos;%0&apos; darf keinen NULL-Wert haben&quot;
Case &quot;ERR&quot; &amp; ERRROWDELETED : sLocal = &quot;Aktuelle Zeile wurde durch einen anderen Prozess oder Benutzer gelösch&quot;
Case &quot;ERR&quot; &amp; ERRRECORDSETCLONE : sLocal = &quot;Ein geklonter Datensatz kann nicht geklont werden&quot;
Case &quot;ERR&quot; &amp; ERRQUERYDEFDELETED : sLocal = &quot;Bereits vorhandene Abfrage &apos;%0&apos; wurde gelöscht&quot;
Case &quot;ERR&quot; &amp; ERRTABLEDEFDELETED : sLocal = &quot;Bereits vorhandene Tabelle &apos;%0&apos; wurde gelöscht&quot;
Case &quot;ERR&quot; &amp; ERRTABLECREATION : sLocal = &quot;Tabelle &apos;%0&apos; konnte nicht erzeugt werden&quot;
Case &quot;ERR&quot; &amp; ERRFIELDCREATION : sLocal = &quot;Feld &apos;%0&apos; konnte nicht erzeugt werden&quot;
Case &quot;ERR&quot; &amp; ERRSUBFORMNOTFOUND : sLocal = &quot;Unterformular &apos;%0&apos; nicht im Eltern-Formular &apos;%1‘ gefunden&quot;
Case &quot;ERR&quot; &amp; ERRWINDOW : sLocal = &quot;Aktuelles Fenster ist kein Dokument&quot;
Case &quot;ERR&quot; &amp; ERRCOMPATIBILITY : sLocal = &quot;Feld &apos;%0&apos; konnte wegen inkompatibler Feldtypen der Datenbanksysteme nicht konvertiert werden&quot;
Case &quot;ERR&quot; &amp; ERRPRECISION : sLocal = &quot;Feld &apos;%0&apos; konnte wegen fehlender Speicherkapazität nicht in den Datensatz #%1 geladen werden&quot;
Case &quot;ERR&quot; &amp; ERRMODULENOTFOUND : sLocal = &quot;Modul &apos;%0&apos; nicht gefunden in den aktuell geladen Bibliotheken&quot;
Case &quot;ERR&quot; &amp; ERRPROCEDURENOTFOUND : sLocal = &quot;Prozedur &apos;%0&apos; im Modul &apos;%1&apos; nicht gefunden&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;OBJECT&quot; : sLocal = &quot;Objekt&quot;
Case &quot;TABLE&quot; : sLocal = &quot;Tabelle&quot;
Case &quot;QUERY&quot; : slocal = &quot;Abfrage&quot;
Case &quot;FORM&quot; : sLocal = &quot;Formular&quot;
Case &quot;REPORT&quot; : sLocal = &quot;Report&quot;
Case &quot;RECORDSET&quot; : sLocal = &quot;Datensatz&quot;
Case &quot;FIELD&quot; : sLocal = &quot;Feld&quot;
Case &quot;TEMPVAR&quot; : sLocal = &quot;Temporäre Variable&quot;
Case &quot;COMMANDBAR&quot; : sLocal = &quot;Befehlsleiste&quot;
Case &quot;COMMANDBARCONTROL&quot; : sLocal = &quot;Befehlsleisten-Steuerelement&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;ERR#&quot; : sLocal = &quot;Error #&quot;
Case &quot;ERROCCUR&quot; : sLocal = &quot;aufgetreten&quot;
Case &quot;ERRLINE&quot; : sLocal = &quot;in Zeile&quot;
Case &quot;ERRIN&quot; : sLocal = &quot;in&quot;
Case &quot;CALLTO&quot; : sLocal = &quot;ein Funktionsaufruf&quot;
Case &quot;SAVECONSOLE&quot; : sLocal = &quot;Konsoleneingaben sichern&quot;
Case &quot;SAVECONSOLEENTRIES&quot; : sLocal = &quot;Die Konsoleneingaben wurden erfolgreich gesichert.&quot;
Case &quot;QUITSHORT&quot; : sLocal = &quot;Beenden&quot;
Case &quot;QUIT&quot; : sLocal = &quot;Wollen Sie wirklich die Anwendung beenden? Geänderte Daten werden gesichert.&quot;
Case &quot;ENTERING&quot; : sLocal = &quot;Beginne mit&quot;
Case &quot;EXITING&quot; : sLocal = &quot;Verlasse&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;DLGTRACE_HELP&quot; : sLocal = &quot;Verwalte den Konsolenpuffer und seine Eingaben&quot;
Case &quot;DLGTRACE_TITLE&quot; : sLocal = &quot;Konsole&quot;
Case &quot;DLGTRACE_LBLENTRIES_HELP&quot; : sLocal = &quot;Leere die Liste und ändere die Größe des Umlaufpuffers&quot;
Case &quot;DLGTRACE_LBLENTRIES_LABEL&quot; : sLocal = &quot;Setze maximale Anzahl von Eingaben&quot;
Case &quot;DLGTRACE_TXTTRACELOG_HELP&quot; : sLocal = &quot;Text kann ausgewählt, kopiert, ... werden&quot;
Case &quot;DLGTRACE_TXTTRACELOG_TEXT&quot; : sLocal = &quot;--- Log Datei ist leer ---&quot;
Case &quot;DLGTRACE_CMDCANCEL_HELP&quot; : sLocal = &quot;Abbrechen und den Dialog schließen&quot;
Case &quot;DLGTRACE_CMDCANCEL_LABEL&quot; : sLocal = &quot;Abbrechen&quot;
Case &quot;DLGTRACE_LBLCLEAR_HELP&quot; : sLocal = &quot;Leere die Liste&quot;
Case &quot;DLGTRACE_LBLCLEAR_LABEL&quot; : sLocal = &quot;Leere die Liste&quot;
Case &quot;DLGTRACE_LBLMINLEVEL_HELP&quot; : sLocal = &quot;Registriere nur Logging-Anfragen oberhalb des gegebenen Levels&quot;
Case &quot;DLGTRACE_LBLMINLEVEL_LABEL&quot; : sLocal = &quot;Setze minimalen Fehlerbehandlungs-Level&quot;
Case &quot;DLGTRACE_CMDOK_HELP&quot; : sLocal = &quot;Übernehmen&quot;
Case &quot;DLGTRACE_CMDOK_LABEL&quot; : sLocal = &quot;OK&quot;
Case &quot;DLGTRACE_CMDDUMP_HELP&quot; : sLocal = &quot;Wähle eine Datei und speichere darin den aktuellen Listeninhalt&quot;
Case &quot;DLGTRACE_CMDDUMP_LABEL&quot; : sLocal = &quot;Ausgabe in Datei&quot;
Case &quot;DLGTRACE_LBLNBENTRIES_HELP&quot; : sLocal = &quot;Aktuelle Länge der Liste&quot;
Case &quot;DLGTRACE_LBLNBENTRIES_LABEL&quot; : sLocal = &quot;Aktuelle Anzahl von Einträgen:&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case &quot;DLGFORMAT_HELP&quot; : sLocal = &quot;Exportiere das Formular&quot;
Case &quot;DLGFORMAT_TITLE&quot; : sLocal = &quot;Export&quot;
Case &quot;DLGFORMAT_LBLFORMAT_HELP&quot; : sLocal = &quot;Format, in dem das Formular exportiert werden soll&quot;
Case &quot;DLGFORMAT_LBLFORMAT_LABEL&quot; : sLocal = &quot;Wähle das Ausgabe-Format&quot;
Case &quot;DLGFORMAT_CMDOK_HELP&quot; : sLocal = &quot;Auswahl übernehmen&quot;
Case &quot;DLGFORMAT_CMDOK_LABEL&quot; : sLocal = &quot;OK&quot;
Case &quot;DLGFORMAT_CMDCANCEL_HELP&quot; : sLocal = &quot;Abbrechen und den Dialog schließen&quot;
Case &quot;DLGFORMAT_CMDCANCEL_LABEL&quot; : sLocal = &quot;Abbrechen&quot;
&apos;----------------------------------------------------------------------------------------------------------------------
Case Else : sLocal = _Getlabel(psShortLabel, &quot;DEFAULT&quot;)
End Select
REM *******************************************************************************************************************************************
REM *** ***
REM *** ANY OTHER LANGUAGE TO BE INSERTED HERE ***
REM *** ***
REM *******************************************************************************************************************************************
Case Else
sLocal = _Getlabel(psShortLabel, &quot;DEFAULT&quot;)
End Select
Exit_Function:
_Getlabel = sLocal
Exit Function
Error_Function:
sLocal = psShortLabel
GoTo Exit_Function
End Function &apos; GetLabel V0.8.9
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _GetLabelArray(ByVal pvShortlabel As Variant, Optional ByVal psLocale As String) As Variant
&apos; Return the localized label corresponding with the ShortLabel array of strings
If IsMissing(psLocale) Then psLocale = UCase(Left(_GetLocale(), 2)) Else psLocale = UCase(psLocale)
On Local Error Goto Error_Function
Dim vLocal() As Variant, i As integer
vLocal = Array()
If Not IsArray(pvShortLabel) Then
vLocal = _GetLabel(pvShortLabel, psLocale)
Goto Exit_Function
End If
ReDim vLocal(LBound(pvShortLabel) To UBound(pvShortlabel))
For i = LBound(pvShortLabel) To UBound(pvShortlabel)
vLocal(i) = _GetLabel(pvShortLabel(i), psLocale)
Next i
Exit_Function:
_GetlabelArray = vLocal()
Exit Function
Error_Function:
vLocal = Array()
GoTo Exit_Function
End Function &apos; GetLabelArray V0.8.9
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _GetLocale() as String
&apos;Return OO localization
&apos;Derived from Tools library
Dim oLocale as Object
oLocale = _GetRegistryKeyContent(&quot;org.openoffice.Setup/L10N&quot;)
_GetLocale = oLocale.getByName(&quot;ooLocale&quot;)
End Function &apos; GetLocale V0.8.9
</script:module>

View File

@@ -0,0 +1,300 @@
<?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="Methods" 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 Explicit
REM -----------------------------------------------------------------------------------------------------------------------
Public Function AddItem(Optional pvBox As Variant, ByVal Optional pvItem As Variant, ByVal Optional pvIndex) As Boolean
&apos; Add an item in a Listbox
Utils._SetCalledSub(&quot;AddItem&quot;)
If _ErrorHandler() Then On Local Error Goto Error_Function
If IsMissing(pvBox) Or IsMissing(pvItem) Then Call _TraceArguments()
If IsMissing(pvIndex) Then pvIndex = -1
If Not Utils._CheckArgument(pvBox, 1, Array(CTLLISTBOX, CTLCOMBOBOX)) Then Goto Exit_Function
AddItem = pvBox.AddItem(pvItem, pvIndex)
Exit_Function:
Utils._ResetCalledSub(&quot;AddItem&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;AddItem&quot;, Erl)
AddItem = False
GoTo Exit_Function
End Function &apos; AddItem V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function hasProperty(Optional pvObject As Variant, ByVal Optional pvProperty As Variant) As Boolean
&apos; Return True if pvObject has a valid property called pvProperty (case-insensitive comparison !)
Dim vPropertiesList As Variant
Utils._SetCalledSub(&quot;hasProperty&quot;)
If IsMissing(pvObject) Or IsMissing(pvProperty) Then Call _TraceArguments()
hasProperty = False
If Not Utils._CheckArgument(pvObject, 1, Array(OBJCOLLECTION, OBJFORM, OBJSUBFORM, OBJCONTROL, OBJOPTIONGROUP, OBJEVENT _
, OBJPROPERTY, OBJDATABASE, OBJQUERYDEF, OBJTABLEDEF, OBJRECORDSET _
)) Then Goto Exit_Function
If Not Utils._CheckArgument(pvProperty, 2, vbString) Then Goto Exit_Function
hasProperty = pvObject.hasProperty(pvProperty)
Exit_Function:
Utils._ResetCalledSub(&quot;hasProperty&quot;)
Exit Function
End Function &apos; hasProperty V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Move(Optional pvObject As Object _
, 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;Move&quot;)
If IsMissing(pvObject) Then Call _TraceArguments()
If _ErrorHandler() Then On Local Error Goto Error_Function
Move = False
If Not Utils._CheckArgument(pvObject, 1, Array(OBJFORM, OBJDIALOG)) Then Goto Exit_Function
If IsMissing(pvLeft) Then Call _TraceArguments()
If IsMissing(pvTop) Then pvTop = -1
If IsMissing(pvWidth) Then pvWidth = -1
If IsMissing(pvHeight) Then pvHeight = -1
Move = pvObject.Move(pvLeft, pvTop, pvWidth, pvHeight)
Exit_Function:
Utils._ResetCalledSub(&quot;Move&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Move&quot;, Erl)
GoTo Exit_Function
End Function &apos; Move V.0.9.1
REM -----------------------------------------------------------------------------------------------------------------------
Public Function OpenHelpFile()
&apos; Open the help file from the Help menu (IDE only)
Const cstHelpFile = &quot;http://www.access2base.com/access2base.html&quot;
On Local Error Resume Next
Call _ShellExecute(cstHelpFile)
End Function &apos; OpenHelpFile V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Properties(Optional pvObject As Variant, ByVal Optional pvIndex As Variant) As Variant
&apos; Return
&apos; a Collection object if pvIndex absent
&apos; a Property object otherwise
Dim vProperties As Variant, oCounter As Variant, opProperty As Variant
Dim vPropertiesList() As Variant
If IsMissing(pvObject) Or IsEmpty(pvObject) Then Call _TraceArguments()
Utils._SetCalledSub(&quot;Properties&quot;)
Set vProperties = Nothing
If Not Utils._CheckArgument(pvObject, 1, Array(OBJCOLLECTION, OBJFORM, OBJSUBFORM, OBJCONTROL, OBJOPTIONGROUP, OBJEVENT _
, OBJPROPERTY, OBJDATABASE, OBJQUERYDEF, OBJTABLEDEF, OBJRECORDSET _
)) Then Goto Exit_Function
If IsMissing(pvIndex) Then vProperties = pvObject.Properties Else vProperties = pvObject.Properties(pvIndex)
Exit_Function:
Set Properties = vProperties
Utils._ResetCalledSub(&quot;Properties&quot;)
Exit Function
End Function &apos; Properties V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Refresh(Optional pvObject As Variant) As Boolean
&apos; Refresh data with its most recent value in the database in a form or subform
Utils._SetCalledSub(&quot;Refresh&quot;)
If IsMissing(pvObject) Then Call _TraceArguments()
If _ErrorHandler() Then On Local Error Goto Error_Function
Refresh = False
If Not Utils._CheckArgument(pvObject, 1, Array(OBJFORM, OBJSUBFORM)) Then Goto Exit_Function
Refresh = pvObject.Refresh()
Exit_Function:
Utils._ResetCalledSub(&quot;Refresh&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Refresh&quot;, Erl)
GoTo Exit_Function
End Function &apos; Refresh V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function RemoveItem(Optional pvBox As Variant,ByVal Optional pvIndex) As Boolean
&apos; Remove an item from a Listbox
&apos; Index may be a string value or an index-position
Utils._SetCalledSub(&quot;RemoveItem&quot;)
If _ErrorHandler() Then On Local Error Goto Error_Function
If IsMissing(pvBox) Or IsMissing(pvIndex) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvBox, 1, Array(CTLLISTBOX, CTLCOMBOBOX)) Then Goto Exit_Function
RemoveItem = pvBox.RemoveItem(pvIndex)
Exit_Function:
Utils._ResetCalledSub(&quot;RemoveItem&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;RemoveItem&quot;, Erl)
RemoveItem = False
GoTo Exit_Function
End Function &apos; RemoveItem V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Requery(Optional pvObject As Variant) As Boolean
&apos; Refresh data displayed in a form, subform, combobox or listbox
Utils._SetCalledSub(&quot;Requery&quot;)
If IsMissing(pvObject) Then Call _TraceArguments()
If _ErrorHandler() Then On Local Error Goto Error_Function
If Not Utils._CheckArgument(pvObject, 1, Array(OBJFORM, OBJCONTROL, OBJSUBFORM)) Then Goto Exit_Function
Requery = pvObject.Requery()
Exit_Function:
Utils._ResetCalledSub(&quot;Requery&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Requery&quot;, Erl)
GoTo Exit_Function
End Function &apos; Requery V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function SetFocus(Optional pvObject As Variant) As Boolean
&apos; Execute SetFocus method
Utils._SetCalledSub(&quot;setFocus&quot;)
If IsMissing(pvObject) Then Call _TraceArguments()
If _ErrorHandler() Then On Local Error Goto Error_Function
If Not Utils._CheckArgument(pvObject, 1, Array(OBJFORM, OBJCONTROL)) Then Goto Exit_Function
SetFocus = pvObject.setFocus()
Exit_Function:
Utils._ResetCalledSub(&quot;SetFocus&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;SetFocus&quot;, Erl)
Goto Exit_Function
Error_Grid:
TraceError(TRACEFATAL, ERRFOCUSINGRID, Utils._CalledSub(), 0, 1, Array(pvObject._Name, ocGrid._Name))
Goto Exit_Function
End Function &apos; SetFocus V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _OptionGroup(ByVal pvGroupName As Variant _
, ByVal psParentType As String _
, poComponent As Object _
, poParent As Object _
) As Variant
&apos; Return either an error or an object of type OPTIONGROUP based on its name
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 ogGroup As Variant, i As Integer, j As Integer, bFound As Boolean
Dim vOptionButtons() As Variant, sGroupName As String
Dim lXY() As Long, iIndex() As Integer &apos; Two indexes X-Y coordinates
Dim oView As Object, oDatabaseForm As Object, vControls As Variant
Const cstPixels = 10 &apos; Tolerance on coordinates when drawn approximately
bFound = False
Select Case psParentType
Case CTLPARENTISFORM
&apos;poParent is a forms collection, find the appropriate database form
For i = 0 To poParent.Count - 1
Set oDatabaseForm = poParent.getByIndex(i)
If Not IsNull(oDatabaseForm) Then
For j = 0 To oDatabaseForm.GroupCount - 1 &apos; Does a group with the right name exist ?
oDatabaseForm.getGroup(j, vOptionButtons, sGroupName)
If UCase(sGroupName) = UCase(Utils._Trim(pvGroupName)) Then
bFound = True
Exit For
End If
Next j
If bFound Then Exit For
End If
If bFound Then Exit For
Next i
Case CTLPARENTISSUBFORM
&apos;poParent is already a database form
Set oDatabaseForm = poParent
For j = 0 To oDatabaseForm.GroupCount - 1 &apos; Does a group with the right name exist ?
oDatabaseForm.getGroup(j, vOptionButtons, sGroupName)
If UCase(sGroupName) = UCase(Utils._Trim(pvGroupName)) Then
bFound = True
Exit For
End If
Next j
End Select
If bFound Then
ogGroup = New Optiongroup
ogGroup._This = ogGroup
ogGroup._Name = sGroupName
ogGroup._ButtonsGroup = vOptionButtons
ogGroup._Count = UBound(vOptionButtons) + 1
ogGroup._ParentType = psParentType
ogGroup._MainForm = oDatabaseForm.Name
Set ogGroup._ParentComponent = poComponent
ReDim lXY(1, ogGroup._Count - 1)
ReDim iIndex(ogGroup._Count - 1)
For i = 0 To ogGroup._Count - 1 &apos; Find the position of each radiobutton
Set oView = poComponent.CurrentController.getControl(ogGroup._ButtonsGroup(i))
lXY(0, i) = oView.PosSize.X
lXY(1, i) = oView.PosSize.Y
Next i
For i = 0 To ogGroup._Count - 1 &apos; Sort them on XY coordinates
If i = 0 Then
iIndex(0) = 0
Else
iIndex(i) = i
For j = i - 1 To 0 Step -1
If lXY(1, i) - lXY(1, j) &lt; - cstPixels Or ( Abs(lXY(1, i) - lXY(1, j)) &lt;= cstPixels And lXY(0, i) - lXY(0, j) &lt; - cstPixels ) Then
iIndex(i) = iIndex(j)
iIndex(j) = iIndex(j) + 1
End If
Next j
End If
Next i
ogGroup._ButtonsIndex = iIndex()
Set _OptionGroup = ogGroup
Else
Set _OptionGroup = Nothing
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, , Array(1, pvGroupName))
End If
Exit_Function:
Exit Function
Error_Function:
TraceError(TRACEABORT, Err,&quot;_OptionGroup&quot;, Erl)
GoTo Exit_Function
End Function &apos; _OptionGroup V1.1.0
</script:module>

View File

@@ -0,0 +1,722 @@
<?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="Module" 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 MODULE
Private _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _Name As String
Private _Library As Object &apos; com.sun.star.container.XNameAccess
Private _LibraryName As String
Private _Storage As String &apos; GLOBAL or DOCUMENT
Private _Script As String &apos; Full script (string with vbLf&apos;s)
Private _Lines As Variant &apos; Array of script lines
Private _CountOfLines As Long
Private _ProcsParsed As Boolean &apos; To test before use of proc arrays
Private _ProcNames() As Variant &apos; All procedure names
Private _ProcDecPositions() As Variant &apos; All procedure declarations
Private _ProcEndPositions() As Variant &apos; All end procedure statements
Private _ProcTypes() As Variant &apos; One of the vbext_pk_* constants
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJMODULE
Set _This = Nothing
Set _Parent = Nothing
_Name = &quot;&quot;
Set _Library = Nothing
_LibraryName = &quot;&quot;
_Storage = &quot;&quot;
_Script = &quot;&quot;
_Lines = Array()
_CountOfLines = 0
_ProcsParsed = False
_ProcNames = Array()
_ProcDecPositions = Array()
_ProcEndPositions = Array()
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 -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Property Get CountOfDeclarationLines() As Long
CountOfDeclarationLines = _PropertyGet(&quot;CountOfDeclarationLines&quot;)
End Property &apos; CountOfDeclarationLines (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get CountOfLines() As Long
CountOfLines = _PropertyGet(&quot;CountOfLines&quot;)
End Property &apos; CountOfLines (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Name() As String
Name = _PropertyGet(&quot;Name&quot;)
End Property &apos; Name (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ObjectType() As String
ObjectType = _PropertyGet(&quot;ObjectType&quot;)
End Property &apos; ObjectType (get)
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Lines(Optional ByVal pvLine As Variant, Optional ByVal pvNumLines As Variant) As String
&apos; Returns a string containing the contents of a specified line or lines in a standard module or a class module
Const cstThisSub = &quot;Module.Lines&quot;
Utils._SetCalledSub(cstThisSub)
Dim sLines As String, lLine As Long
sLines = &quot;&quot;
If IsMissing(pvLine) Or IsMissing(pvNumLines) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvLine, 1, _AddNumeric()) Then GoTo Exit_Function
If Not Utils._CheckArgument(pvNumLines, 1, _AddNumeric()) Then GoTo Exit_Function
lLine = pvLine
Do While lLine &lt; _CountOfLines And lLine &lt; pvLine + pvNumLines
sLines = sLines &amp; _Lines(lLine - 1) &amp; vbLf
lLine = lLine + 1
Loop
If Len(sLines) &gt; 0 Then sLines = Left(sLines, Len(sLines) - 1)
Exit_Function:
Lines = sLines
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; Lines
REM -----------------------------------------------------------------------------------------------------------------------
Public Function ProcBodyLine(Optional ByVal pvProc As Variant, Optional ByVal pvProcType As Variant) As Long
&apos; Return the number of the line at which the body of a specified procedure begins
Const cstThisSub = &quot;Module.ProcBodyLine&quot;
Utils._SetCalledSub(cstThisSub)
Dim iIndex As Integer
If IsMissing(pvProc) Or IsMissing(pvProcType) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvProc, 1, vbString) Then GoTo Exit_Function
If Not Utils._CheckArgument(pvProcType, 2, _AddNumeric()) Then GoTo Exit_Function
iIndex = _FindProcIndex(pvProc, pvProcType)
If iIndex &gt;= 0 Then ProcBodyLine = _LineOfPosition(_ProcDecPositions(iIndex)) Else ProcBodyLine = iIndex
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; ProcBodyline
REM -----------------------------------------------------------------------------------------------------------------------
Public Function ProcCountLines(Optional ByVal pvProc As Variant, Optional ByVal pvProcType As Variant) As Long
&apos; Return the number of lines in the specified procedure
Const cstThisSub = &quot;Module.ProcCountLines&quot;
Utils._SetCalledSub(cstThisSub)
Dim iIndex As Integer, lStart As Long, lEnd As Long
If IsMissing(pvProc) Or IsMissing(pvProcType) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvProc, 1, vbString) Then GoTo Exit_Function
If Not Utils._CheckArgument(pvProcType, 2, _AddNumeric()) Then GoTo Exit_Function
iIndex = _FindProcIndex(pvProc, pvProcType)
lStart = ProcStartLine(pvProc, pvProcType)
lEnd = _LineOfPosition(_ProcEndPositions(iIndex))
ProcCountLines = lEnd - lStart + 1
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; ProcCountLines
REM -----------------------------------------------------------------------------------------------------------------------
Public Function ProcOfLine(Optional ByVal pvLine As Variant, Optional ByRef pvProcType As Variant) As String
&apos; Return the name and type of the procedure containing line pvLine
Const cstThisSub = &quot;Module.ProcOfLine&quot;
Utils._SetCalledSub(cstThisSub)
Dim sProcedure As String, iProc As Integer, lLineDec As Long, lLineEnd As Long
If IsMissing(pvLine) Or IsMissing(pvProcType) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvLine, 1, _AddNumeric()) Then GoTo Exit_Function
If Not Utils._CheckArgument(pvProcType, 2, _AddNumeric()) Then GoTo Exit_Function
If Not _ProcsParsed Then _ParseProcs()
sProcedure = &quot;&quot;
For iProc = 0 To UBound(_ProcNames)
lLineEnd = _LineOfPosition(_ProcEndPositions(iProc))
If pvLine &lt;= lLineEnd Then
lLineDec = _LineOfPosition(_ProcDecPositions(iProc))
If pvLine &lt; lLineDec Then &apos; Line between 2 procedures
sProcedure = &quot;&quot;
Else
sProcedure = _ProcNames(iProc)
pvProcType = _ProcTypes(iProc)
End If
Exit For
End If
Next iProc
Exit_Function:
ProcOfLine = sProcedure
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; ProcOfline
REM -----------------------------------------------------------------------------------------------------------------------
Public Function ProcStartLine(Optional ByVal pvProc As Variant, Optional ByVal pvProcType As Variant) As Long
&apos; Return the number of the line at which the specified procedure begins
Const cstThisSub = &quot;Module.ProcStartLine&quot;
Utils._SetCalledSub(cstThisSub)
Dim lLine As Long, lIndex As Long, sLine As String
If IsMissing(pvProc) Or IsMissing(pvProcType) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvProc, 1, vbString) Then GoTo Exit_Function
If Not Utils._CheckArgument(pvProcType, 2, _AddNumeric()) Then GoTo Exit_Function
lLine = ProcBodyLine(pvProc, pvProcType)
&apos; Search baclIndexward for comment lines
lIndex = lLine - 1
Do While lIndex &gt; 0
sLine = _Trim(_Lines(lIndex - 1))
If UCase(Left(sLine, 4)) = &quot;REM &quot; Or Left(sLine, 1) = &quot;&apos;&quot; Then
lLine = lIndex
Else
Exit Do
End If
lIndex = lIndex - 1
Loop
ProcStartLine = lLine
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; ProcStartLine
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
Const cstThisSub = &quot;Module.Properties&quot;
Utils._SetCalledSub(cstThisSub)
Dim vProperty As Variant, vPropertiesList() As Variant, sObject As String
vPropertiesList = _PropertiesList()
sObject = Utils._PCase(_Type)
If IsMissing(pvIndex) Then
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
End If
Exit_Function:
Set Properties = vProperty
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; Properties
REM -----------------------------------------------------------------------------------------------------------------------
Property Get pType() As String
pType = _PropertyGet(&quot;Type&quot;)
End Property &apos; Type (get)
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Find(Optional ByVal pvTarget As Variant _
, Optional ByRef pvStartLine As Variant _
, Optional ByRef pvStartColumn As Variant _
, Optional ByRef pvEndLine As Variant _
, Optional ByRef pvEndColumn As Variant _
, Optional ByVal pvWholeWord As Boolean _
, Optional ByVal pvMatchCase As Boolean _
, Optional ByVal pvPatternSearch As Boolean _
) As Boolean
&apos; Finds specified text in the module
&apos; xxLine and xxColumn arguments are mainly to return the position of the found string
&apos; If they are initialized but nonsense, the function returns False
Const cstThisSub = &quot;Module.Find&quot;
Utils._SetCalledSub(cstThisSub)
If _ErrorHandler() Then On Local Error Goto Error_Function
Dim bFound As Boolean, lPosition As Long, lStartLine As Long, lStartColumn As Long, lStartPosition As Long
Dim lEndLine As Long, lEndColumn As Long, lEndPosition As Long
Dim sMatch As String, vOptions As Variant, sPattern As String
Dim i As Integer, sSpecChar As String
Const cstSpecialCharacters = &quot;\[^$.|?*+()&quot;
bFound = False
If IsMissing(pvTarget) Or IsMissing(pvStartLine) Or IsMissing(pvStartColumn) Or IsMissing(pvEndLine) Or IsMissing(pvEndColumn) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvTarget, 1, vbString) Then GoTo Exit_Function
If Len(pvTarget) = 0 Then GoTo Exit_Function
If Not IsEmpty(pvStartLine) Then
If Not Utils._CheckArgument(pvStartLine, 2, _AddNumeric()) Then GoTo Exit_Function
End If
If Not IsEmpty(pvStartColumn) Then
If Not Utils._CheckArgument(pvStartColumn, 3, _AddNumeric()) Then GoTo Exit_Function
End If
If Not IsEmpty(pvEndLine) Then
If Not Utils._CheckArgument(pvEndLine, 4, _AddNumeric()) Then GoTo Exit_Function
End If
If Not IsEmpty(pvEndColumn) Then
If Not Utils._CheckArgument(pvEndColumn, 5, _AddNumeric()) Then GoTo Exit_Function
End If
If IsMissing(pvWholeWord) Then pvWholeWord = False
If Not Utils._CheckArgument(pvWholeWord, 6, vbBoolean) Then GoTo Exit_Function
If IsMissing(pvMatchCase) Then pvMatchCase = False
If Not Utils._CheckArgument(pvMatchCase, 7, vbBoolean) Then GoTo Exit_Function
If IsMissing(pvPatternSearch) Then pvPatternSearch = False
If Not Utils._CheckArgument(pvPatternSearch, 8, vbBoolean) Then GoTo Exit_Function
&apos; Initialize starting values
If IsEmpty(pvStartLine) Then lStartLine = 1 Else lStartLine = pvStartLine
If lStartLine &lt;= 0 Or lStartLine &gt; UBound(_Lines) + 1 Then GoTo Exit_Function
If IsEmpty(pvStartColumn) Then lStartColumn = 1 Else lStartColumn = pvStartColumn
If lStartColumn &lt;= 0 Then GoTo Exit_Function
If lStartColumn &gt; 1 And lStartColumn &gt; Len(_Lines(lStartLine + 1)) Then GoTo Exit_Function
lStartPosition = _PositionOfLine(lStartline) + lStartColumn - 1
If IsEmpty(pvEndLine) Then lEndLine = UBound(_Lines) + 1 Else lEndLine = pvEndLine
If lEndLine &lt; lStartLine Or lEndLine &gt; UBound(_Lines) + 1 Then GoTo Exit_Function
If IsEmpty(pvEndColumn) Then lEndColumn = Len(_Lines(lEndLine - 1)) Else lEndColumn = pvEndColumn
If lEndColumn &lt; 0 Then GoTo Exit_Function
If lEndColumn = 0 Then lEndColumn = 1
If lEndColumn &gt; Len(_Lines(lEndLine - 1)) + 1 Then GoTo Exit_Function
lEndPosition = _PositionOfLine(lEndline) + lEndColumn - 1
If pvMatchCase Then
Set vOptions = _A2B_.SearchOptions
vOptions.transliterateFlags = 0
End If
&apos; Define pattern to search for
sPattern = pvTarget
&apos; Protect special characters in regular expressions
For i = 1 To Len(cstSpecialCharacters)
sSpecChar = Mid(cstSpecialCharacters, i, 1)
sPattern = Replace(sPattern, sSpecChar, &quot;\&quot; &amp; sSpecChar)
Next i
If pvPatternSearch Then sPattern = Replace(Replace(sPattern, &quot;\*&quot;, &quot;.*&quot;), &quot;\?&quot;, &quot;.&quot;)
If pvWholeWord Then sPattern = &quot;\b&quot; &amp; sPattern &amp; &quot;\b&quot;
lPosition = lStartPosition
sMatch = Utils._RegexSearch(_Script, sPattern, lPosition)
&apos; Re-establish default options for later searches
If pvMatchCase Then vOptions.transliterateFlags = com.sun.star.i18n.TransliterationModules.IGNORE_CASE
&apos; Found within requested bounds ?
If sMatch &lt;&gt; &quot;&quot; And lPosition &gt;= lStartPosition And lPosition &lt;= lEndPosition Then
pvStartLine = _LineOfPosition(lPosition)
pvStartColumn = lPosition - _PositionOfLine(pvStartLine) + 1
pvEndLine = _LineOfPosition(lPosition + Len(sMatch) - 1)
If pvEndLine &gt; pvStartLine Then
pvEndColumn = lPosition + Len(sMatch) - 1 - _PositionOfLine(pvEndLine)
Else
pvEndColumn = pvStartColumn + Len(sMatch) - 1
End If
bFound = True
End If
Exit_Function:
Find = bFound
Utils._ResetCalledSub(cstThisSub)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Module.Find&quot;, Erl)
bFound = False
GoTo Exit_Function
End Function &apos; Find
REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos; Return property value of psProperty property name
Const cstThisSub = &quot;Module.Properties&quot;
Utils._SetCalledSub(cstThisSub)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(cstThisSub)
End Function &apos; getProperty
REM --------------------------------Mid(a._Script, iCtl, 25)---------------------------------------------------------------------------------------
Public Function hasProperty(ByVal Optional pvProperty As Variant) As Boolean
&apos; Return True if object has a valid property called pvProperty (case-insensitive comparison !)
Const cstThisSub = &quot;Module.hasProperty&quot;
Utils._SetCalledSub(cstThisSub)
If IsMissing(pvProperty) Then hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList()) Else hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList(), pvProperty)
Utils._ResetCalledSub(cstThisSub)
Exit Function
End Function &apos; hasProperty
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _BeginStatement(ByVal plStart As Long) As Long
&apos; Return the position in _Script of the beginning of the current statement as defined by plStart
Dim sProc As String, iProc As Integer, iType As Integer
Dim lPosition As Long, lPrevious As Long, sFind As String
sProc = ProcOfLine(_LineOfPosition(plStart), iType)
iProc = _FindProcIndex(sProc, iType)
If iProc &lt; 0 Then lPosition = 1 Else lPosition = _ProcDecPositions(iProc)
sFind = &quot;Any&quot;
Do While lPosition &lt; plStart And sFind &lt;&gt; &quot;&quot;
lPrevious = lPosition
sFind = _FindPattern(&quot;%^\w&quot;, lPosition)
If sFind = &quot;&quot; Then Exit Do
Loop
_BeginStatement = lPrevious
End Function &apos; _EndStatement
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _EndStatement(ByVal plStart As Long) As Long
&apos; Return the position in _Script of the end of the current statement as defined by plStart
&apos; plStart is assumed not to be in the middle of a comment or a string
Dim sMatch As String, lPosition As Long
lPosition = plStart
sMatch = _FindPattern(&quot;%$&quot;, lPosition)
_EndStatement = lPosition
End Function &apos; _EndStatement
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _FindPattern(ByVal psPattern As Variant, Optional ByRef plStart As Long) As String
&apos; Find first occurrence of any of the patterns in |-delimited string psPattern
&apos; Special escapes
&apos; - for word breaks: &quot;%B&quot; (f.i. for searching &quot;END%BFUNCTION&quot;)
&apos; - for statement start: &quot;%^&quot; (f.i. for searching &quot;%^END%BFUNCTION&quot;). Necessarily first 2 characters of pattern
&apos; - for statement end: &quot;%$&quot;. Pattern should not contain anything else
&apos; If quoted string searched, pattern should start and end with a double quote
&apos; Return &quot;&quot; if none found, otherwise returns the matching string
&apos; plStart = start position of _Script to search (starts at 1)
&apos; In output plStart contains the first position of the matching string or is left unchanged
&apos; To search again the same or another pattern =&gt; plStart = plStart + Len(matching string)
&apos; Comments and strings are skipped
&apos; Common patterns
Const cstComment = &quot;(&apos;|\bREM\b)[^\n]*$&quot;
Const cstString = &quot;&quot;&quot;[^&quot;&quot;\n]*&quot;&quot;&quot;
Const cstBeginStatement = &quot;(^|:|\bthen\b|\belse\b|\n)[ \t]*&quot;
Const cstEndStatement = &quot;[ \t]*($|:|\bthen\b|\belse\b|\n)&quot;
Const cstContinuation = &quot;[ \t]_\n&quot;
Const cstWordBreak = &quot;\b[ \t]+(_\n[ \t]*)?\b&quot;
Const cstAlt = &quot;|&quot;
Dim sRegex As String, lStart As Long, bContinue As Boolean, sMatch As String
Dim bEndStatement As Boolean, bQuote As Boolean
If psPattern = &quot;%$&quot; Then
sRegex = cstEndStatement
Else
sRegex = psPattern
If Left(psPattern, 2) = &quot;%^&quot; Then sRegex = cstBeginStatement &amp; Right(sRegex, Len(sregex) - 2)
sregex = Replace(sregex, &quot;%B&quot;, cstWordBreak)
End If
&apos; Add all to ignore patterns to regex. If pattern = quoted string do not add cstString
If Len(psPattern) &gt; 2 And Left(psPattern, 1) = &quot;&quot;&quot;&quot; And Right(psPattern, 1) = &quot;&quot;&quot;&quot; Then
bQuote = True
sRegex = sRegex &amp; cstAlt &amp; cstComment &amp; cstAlt &amp; cstContinuation
Else
bQuote = False
sRegex = sRegex &amp; cstAlt &amp; cstComment &amp; cstAlt &amp; cstString &amp; cstAlt &amp; cstContinuation
End If
If IsMissing(plStart) Then plStart = 1
lStart = plStart
bContinue = True
Do While bContinue
bEndStatement = False
sMatch = Utils._RegexSearch(_Script, sRegex, lStart)
Select Case True
Case sMatch = &quot;&quot;
bContinue = False
Case Left(sMatch, 1) = &quot;&apos;&quot;
bEndStatement = True
Case Left(sMatch, 1) = &quot;&quot;&quot;&quot;
If bQuote Then
plStart = lStart
bContinue = False
End If
Case Left(smatch, 1) = &quot;:&quot; Or Left(sMatch, 1) = vbLf
If psPattern = &quot;%$&quot; Then
bEndStatement = True
Else
bContinue = False
plStart = lStart + 1
sMatch = Right(sMatch, Len(sMatch) - 1)
End If
Case UCase(Left(sMatch, 4)) = &quot;REM &quot; Or UCase(Left(sMatch, 4)) = &quot;REM&quot; &amp; vbTab Or UCase(Left(sMatch, 4)) = &quot;REM&quot; &amp; vbNewLine
bEndStatement = True
Case UCase(Left(sMatch, 4)) = &quot;THEN&quot; Or UCase(Left(sMatch, 4)) = &quot;ELSE&quot;
If psPattern = &quot;%$&quot; Then
bEndStatement = True
Else
bContinue = False
plStart = lStart + 4
sMatch = Right(sMatch, Len(sMatch) - 4)
End If
Case sMatch = &quot; _&quot; &amp; vbLf
Case Else &apos; Found
plStart = lStart
bContinue = False
End Select
If bEndStatement And psPattern = &quot;%$&quot; Then
bContinue = False
plStart = lStart - 1
sMatch = &quot;&quot;
End If
lStart = lStart + Len(sMatch)
Loop
_FindPattern = sMatch
End Function &apos; _FindPattern
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _FindProcIndex(ByVal psProc As String, ByVal piType As Integer) As Integer
&apos; Return index of entry in _Procnames corresponding with pvProc
Dim i As Integer, iIndex As Integer
If Not _ProcsParsed Then _ParseProcs
iIndex = -1
For i = 0 To UBound(_ProcNames)
If UCase(psProc) = UCase(_ProcNames(i)) And piType = _ProcTypes(i) Then
iIndex = i
Exit For
End If
Next i
If iIndex &lt; 0 Then TraceError(TRACEFATAL, ERRPROCEDURENOTFOUND, Utils._CalledSub(), 0, , Array(psProc, _Name))
Exit_Function:
_FindProcIndex = iIndex
Exit Function
End Function &apos; _FindProcIndex
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub _Initialize()
_Script = Replace(_Script, vbCr, &quot;&quot;)
_Lines = Split(_Script, vbLf)
_CountOfLines = UBound(_Lines) + 1
End Sub &apos; _Initialize
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _LineOfPosition(ByVal plPosition) As Long
&apos; Return the line number of a position in _Script
Dim lLine As Long, lLength As Long
&apos; Start counting from start or end depending on how close position is
If plPosition &lt;= Len(_Script) / 2 Then
lLength = 0
For lLine = 0 To UBound(_Lines)
lLength = lLength + Len(_Lines(lLine)) + 1 &apos; + 1 for line feed
If lLength &gt;= plPosition Then
_LineOfPosition = lLine + 1
Exit Function
End If
Next lLine
Else
If Right(_Script, 1) = vbLf Then lLength = Len(_Script) + 1 Else lLength = Len(_Script)
For lLine = UBound(_Lines) To 0 Step -1
lLength = lLength - Len(_Lines(lLine)) - 1 &apos; - 1 for line feed
If lLength &lt;= plPosition Then
_LineOfPosition = lLine + 1
Exit Function
End If
Next lLine
End If
End Function &apos; _LineOfPosition
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub _ParseProcs()
&apos; Fills the Proc arrays: name, start and end position
&apos; Executed at first request needing this processing
Dim lPosition As Long, iProc As Integer, sDecProc As String, sEndProc As String, sNameProc As String, sType As String
Const cstDeclaration = &quot;%^(private%B|public%B)?\b(property%Bget|property%Blet|property%Bset|function|sub)\b&quot;
Const cstEnd = &quot;%^end%B(property|function|sub)\b&quot;
Const cstName = &quot;\w*&quot; &apos;&quot;[A-Za-z_][A-Za-z_0-9]*&quot;
If _ProcsParsed Then Exit Sub &apos; Do not redo if already done
_ProcNames = Array()
_ProcDecPositions = Array()
_ProcEndPositions = Array()
_ProcTypes = Array()
lPosition = 1
iProc = -1
sDecProc = &quot;???&quot;
Do While sDecProc &lt;&gt; &quot;&quot;
&apos; Identify Function/Sub declaration string
sDecProc = _FindPattern(cstDeclaration, lPosition)
If sDecProc &lt;&gt; &quot;&quot; Then
iProc = iProc + 1
ReDim Preserve _ProcNames(0 To iProc)
ReDim Preserve _ProcDecPositions(0 To iProc)
ReDim Preserve _ProcEndPositions(0 To iProc)
ReDim Preserve _ProcTypes(0 To iProc)
_ProcDecPositions(iProc) = lPosition
lPosition = lPosition + Len(sDecProc)
&apos; Identify procedure type
Select Case True
Case InStr(UCase(sDecProc), &quot;FUNCTION&quot;) &gt; 0 : _ProcTypes(iProc) = vbext_pk_Proc
Case InStr(UCase(sDecProc), &quot;SUB&quot;) &gt; 0 : _ProcTypes(iProc) = vbext_pk_Proc
Case InStr(UCase(sDecProc), &quot;GET&quot;) &gt; 0 : _ProcTypes(iProc) = vbext_pk_Get
Case InStr(UCase(sDecProc), &quot;LET&quot;) &gt; 0 : _ProcTypes(iProc) = vbext_pk_Let
Case InStr(UCase(sDecProc), &quot;SET&quot;) &gt; 0 : _ProcTypes(iProc) = vbext_pk_Set
End Select
&apos; Identify name of Function/Sub
sNameProc = _FindPattern(cstName, lPosition)
If sNameProc = &quot;&quot; Then Exit Do &apos; Should never happen
_ProcNames(iProc) = sNameProc
lPosition = lPosition + Len(sNameProc)
&apos; Identify End statement
sEndProc = _FindPattern(cstEnd, lPosition)
If sEndProc = &quot;&quot; Then Exit Do &apos; Should never happen
_ProcEndPositions(iProc) = lPosition
lPosition = lPosition + Len(sEndProc)
End If
Loop
_ProcsParsed = True
End Sub
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PositionOfLine(ByVal plLine) As Long
&apos; Return the position of the first character of the given line in _Script
Dim lLine As Long, lPosition As Long
&apos; Start counting from start or end depending on how close line is
If plLine &lt;= (UBound(_Lines) + 1) / 2 Then
lPosition = 0
For lLine = 0 To plLine - 1
lPosition = lPosition + 1 &apos; + 1 for line feed
If lLine &lt; plLine - 1 Then lPosition = lPosition + Len(_Lines(lLine))
Next lLine
Else
lPosition = Len(_Script) + 2 &apos; Anticipate an ending null-string and a line feed
For lLine = UBound(_Lines) To plLine - 1 Step -1
lPosition = lPosition - Len(_Lines(lLine)) - 1 &apos; - 1 for line feed
Next lLine
End If
_PositionOfLine = lPosition
End Function &apos; _LineOfPosition
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
_PropertiesList = Array(&quot;CountOfDeclarationLines&quot;, &quot;CountOfLines&quot;, &quot;Name&quot;, &quot;ObjectType&quot;, &quot;Type&quot;)
End Function &apos; _PropertiesList
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertyGet(ByVal psProperty As String) As Variant
&apos; Return property value of the psProperty property name
Dim cstThisSub As String
Const cstDot = &quot;.&quot;
Dim sText As String
If _ErrorHandler() Then On Local Error Goto Error_Function
cstThisSub = &quot;Module.get&quot; &amp; psProperty
Utils._SetCalledSub(cstThisSub)
_PropertyGet = Null
Select Case UCase(psProperty)
Case UCase(&quot;CountOfDeclarationLines&quot;)
If Not _ProcsParsed Then _ParseProcs()
If UBound(_ProcNames) &gt;= 0 Then
_PropertyGet = ProcStartLine(_ProcNames(0), _ProcTypes(0)) - 1
Else
_PropertyGet = _CountOfLines
End If
Case UCase(&quot;CountOfLines&quot;)
_PropertyGet = _CountOfLines
Case UCase(&quot;Name&quot;)
_PropertyGet = _Storage &amp; cstDot &amp; _LibraryName &amp; cstDot &amp; _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;Type&quot;)
&apos; Find option statement before any procedure declaration
sText = _FindPattern(&quot;%^option%Bclassmodule\b|\bfunction\b|\bsub\b|\bproperty\b&quot;)
If UCase(Left(sText, 6)) = &quot;OPTION&quot; Then _PropertyGet = acClassModule Else _PropertyGet = acStandardModule
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(cstThisSub)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Module._PropertyGet&quot;, Erl)
_PropertyGet = Null
GoTo Exit_Function
End Function &apos; _PropertyGet
</script:module>

View File

@@ -0,0 +1,315 @@
<?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="OptionGroup" 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 _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _Name As String
Private _ParentType As String
Private _ParentComponent As Object
Private _MainForm As String
Private _DocEntry As Integer
Private _DbEntry As Integer
Private _ButtonsGroup() As Variant
Private _ButtonsIndex() As Variant
Private _Count As Long
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJOPTIONGROUP
Set _This = Nothing
Set _Parent = Nothing
_Name = &quot;&quot;
_ParentType = &quot;&quot;
_ParentComponent = Nothing
_DocEntry = -1
_DbEntry = -1
_ButtonsGroup = Array()
_ButtonsIndex = Array()
_Count = 0
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 Count() As Variant
Count = _PropertyGet(&quot;Count&quot;)
End Property &apos; Count (get)
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 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, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
End If
Exit_Function:
Set Properties = vProperty
Exit Function
End Function &apos; Properties
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Value() As Variant
Value = _PropertyGet(&quot;Value&quot;)
End Property &apos; Value (get)
Property Let Value(ByVal pvValue As Variant)
Call _PropertySet(&quot;Value&quot;, pvValue)
End Property &apos; Value (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;OptionGroup.Controls&quot;)
Dim ocControl As Variant, iArgNr As Integer, i As Integer
Dim oCounter As Object
Set ocControl = Nothing
If IsMissing(pvIndex) Then &apos; No argument, return Collection object
Set oCounter = New Collect
Set oCounter._This = oCounter
oCounter._CollType = COLLCONTROLS
Set oCounter._Parent = _This
oCounter._Count = _Count
Set Controls = oCounter
Goto Exit_Function
End If
If _IsLeft(_A2B_.CalledSub, &quot;OptionGroup.&quot;) Then iArgNr = 1 Else iArgNr = 2
If Not Utils._CheckArgument(pvIndex, iArgNr, Utils._AddNumeric()) Then Goto Exit_Function
If pvIndex &lt; 0 Or pvIndex &gt; _Count - 1 Then Goto Trace_Error_Index
&apos; Start building the ocControl object
&apos; Determine exact name
Set ocControl = New Control
Set ocControl._This = ocControl
Set ocControl._Parent = _This
ocControl._ParentType = CTLPARENTISGROUP
ocControl._Shortcut = &quot;&quot;
For i = 0 To _Count - 1
If _ButtonsIndex(i) = pvIndex Then
Set ocControl.ControlModel = _ButtonsGroup(i)
Select Case _ParentType
Case CTLPARENTISDIALOG : ocControl._Name = _ButtonsGroup(i).Name
Case Else : ocControl._Name = _Name &apos; OptionGroup and individual radio buttons share the same name
End Select
ocControl._ImplementationName = ocControl.ControlModel.getImplementationName()
Exit For
End If
Next i
ocControl._FormComponent = _ParentComponent
ocControl._ClassId = acRadioButton
Select Case _ParentType
Case CTLPARENTISDIALOG : Set ocControl.ControlView = _ParentComponent.getControl(ocControl._Name)
Case Else : Set ocControl.ControlView = _ParentComponent.CurrentController.getControl(ocControl.ControlModel)
End Select
ocControl._Initialize()
ocControl._DocEntry = _DocEntry
ocControl._DbEntry = _DbEntry
Set Controls = ocControl
Exit_Function:
Utils._ResetCalledSub(&quot;OptionGroup.Controls&quot;)
Exit Function
Trace_Error_Index:
TraceError(TRACEFATAL, ERRCOLLECTION, Utils._CalledSub(), 0, 1)
Set Controls = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;OptionGroup.Controls&quot;, Erl)
Set Controls = Nothing
GoTo Exit_Function
End Function &apos; Controls
REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos; Return property value of psProperty property name
Utils._SetCalledSub(&quot;OptionGroup.getProperty&quot;)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(&quot;OptionGroup.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 setProperty(ByVal Optional psProperty As String, ByVal Optional pvValue As Variant) As Boolean
&apos; Return True if property setting OK
Utils._SetCalledSub(&quot;OptionGroup.setProperty&quot;)
setProperty = _PropertySet(psProperty, pvValue)
Utils._ResetCalledSub(&quot;OptionGroup.setProperty&quot;)
End Function
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
_PropertiesList = Array(&quot;Count&quot;, &quot;Name&quot;, &quot;ObjectType&quot;, &quot;Value&quot;)
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;OptionGroup.get&quot; &amp; psProperty)
&apos;Execute
Dim oDatabase As Object, vBookmark As Variant
Dim iValue As Integer, i As Integer
_PropertyGet = EMPTY
Select Case UCase(psProperty)
Case UCase(&quot;Count&quot;)
_PropertyGet = _Count
Case UCase(&quot;Name&quot;)
_PropertyGet = _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;Value&quot;)
iValue = -1
For i = 0 To _Count - 1 &apos; Find the selected RadioButton
If _ButtonsGroup(i).State = 1 Then
iValue = _ButtonsIndex(i)
Exit For
End If
Next i
_PropertyGet = iValue
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;OptionGroup.get&quot; &amp; psProperty)
Exit Function
Trace_Error:
TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = EMPTY
Goto Exit_Function
Trace_Error_Index:
TraceError(TRACEFATAL, ERRINDEXVALUE, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = EMPTY
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;OptionGroup._PropertyGet&quot;, Erl)
_PropertyGet = EMPTY
GoTo Exit_Function
End Function &apos; _PropertyGet
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean
Utils._SetCalledSub(&quot;OptionGroup.set&quot; &amp; psProperty)
If _ErrorHandler() Then On Local Error Goto Error_Function
_PropertySet = True
&apos;Execute
Dim i As Integer, iRadioIndex As Integer, oModel As Object, iArgNr As Integer
If _IsLeft(_A2B_.CalledSub, &quot;OptionGroup.&quot;) Then iArgNr = 1 Else iArgNr = 2
Select Case UCase(psProperty)
Case UCase(&quot;Value&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
If pvValue &lt; 0 Or pvValue &gt; _Count - 1 Then Goto Trace_Error_Value
For i = 0 To _Count - 1
_ButtonsGroup(i).State = 0
If _ButtonsIndex(i) = pvValue Then iRadioIndex = i
Next i
_ButtonsGroup(iRadioIndex).State = 1
Set oModel = _ButtonsGroup(iRadioIndex)
If Utils._hasUNOProperty(oModel, &quot;DataField&quot;) Then
If Not IsNull(oModel.Datafield) And Not IsEmpty(oModel.Datafield) Then
If oModel.Datafield &lt;&gt; &quot;&quot; And Utils._hasUNOMethod(oModel, &quot;commit&quot;) Then oModel.commit() &apos; f.i. checkboxes have no commit method ?? [PASTIM]
End If
End If
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;OptionGroup.set&quot; &amp; psProperty)
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;OptionGroup._PropertySet&quot;, Erl)
_PropertySet = False
GoTo Exit_Function
End Function &apos; _PropertySet
</script:module>

View File

@@ -0,0 +1,577 @@
<?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="PropertiesSet" 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 Explicit
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setAbsolutePosition(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setAbsolutePosition&quot;)
setAbsolutePosition = PropertiesSet._setProperty(pvObject, &quot;AbsolutePosition&quot;, pvValue)
End Function &apos; setAbsolutePosition
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setAllowAdditions(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setAllowAdditions&quot;)
setAllowAdditions = PropertiesSet._setProperty(pvObject, &quot;AllowAdditions&quot;, pvValue)
End Function &apos; setAllowAdditions
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setAllowDeletions(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setAllowDeletions&quot;)
setAllowDeletions = PropertiesSet._setProperty(pvObject, &quot;AllowDeletions&quot;, pvValue)
End Function &apos; setAllowDeletions
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setAllowEdits(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setAllowEdits&quot;)
setAllowEdits = PropertiesSet._setProperty(pvObject, &quot;AllowEdits&quot;, pvValue)
End Function &apos; setAllowEdits
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setBackColor(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setBackColor&quot;)
setBackColor = PropertiesSet._setProperty(pvObject, &quot;BackColor&quot;, pvValue)
End Function &apos; setBackColor
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setBookmark(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setBookmark&quot;)
setBookmark = PropertiesSet._setProperty(pvObject, &quot;Bookmark&quot;, pvValue)
End Function &apos; setBookmark
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setBorderColor (Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setBorderColor&quot;)
setBorderColor = PropertiesSet._setProperty(pvObject, &quot;BorderColor&quot;, pvValue)
End Function &apos; setBorderColor
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setBorderStyle(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setBorderStyle&quot;)
setBorderStyle = PropertiesSet._setProperty(pvObject, &quot;BorderStyle&quot;, pvValue)
End Function &apos; setBorderStyle
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setCancel(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setCancel&quot;)
setCancel = PropertiesSet._setProperty(pvObject, &quot;Cancel&quot;, pvValue)
End Function &apos; setCancel
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setCaption(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setCaption&quot;)
setCaption = PropertiesSet._setProperty(pvObject, &quot;Caption&quot;, pvValue)
End Function &apos; setCaption
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setControlTipText(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setControlTipText&quot;)
setControlTipText = PropertiesSet._setProperty(pvObject, &quot;ControlTipText&quot;, pvValue)
End Function &apos; setControlTipText
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setCurrentRecord(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setCurrentRecord&quot;)
setCurrentRecord = PropertiesSet._setProperty(pvObject, &quot;CurrentRecord&quot;, pvValue)
End Function &apos; setCurrentRecord
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setDefault(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setDefault&quot;)
setDefault = PropertiesSet._setProperty(pvObject, &quot;Default&quot;, pvValue)
End Function &apos; setDefault
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setDefaultValue(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setDefaultValue&quot;)
setDefaultValue = PropertiesSet._setProperty(pvObject, &quot;DefaultValue&quot;, pvValue)
End Function &apos; setDefaultValue
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setDescription(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setDescription&quot;)
setDescription = PropertiesSet._setProperty(pvObject, &quot;Description&quot;, pvValue)
End Function &apos; setDescription
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setEnabled(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setEnabled&quot;)
setEnabled = PropertiesSet._setProperty(pvObject, &quot;Enabled&quot;, pvValue)
End Function &apos; setEnabled
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setFilter(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setFilter&quot;)
setFilter = PropertiesSet._setProperty(pvObject, &quot;Filter&quot;, pvValue)
End Function &apos; setFilter
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setFilterOn(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setFilterOn&quot;)
setFilterOn = PropertiesSet._setProperty(pvObject, &quot;FilterOn&quot;, pvValue)
End Function &apos; setFilterOn
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setFontBold(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setFontBold&quot;)
setFontBold = PropertiesSet._setProperty(pvObject, &quot;FontBold&quot;, pvValue)
End Function &apos; setFontBold
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setFontItalic(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setFontItalic&quot;)
setFontItalic = PropertiesSet._setProperty(pvObject, &quot;FontItalic&quot;, pvValue)
End Function &apos; setFontItalic
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setFontName(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setFontName&quot;)
setFontName = PropertiesSet._setProperty(pvObject, &quot;FontName&quot;, pvValue)
End Function &apos; setFontName
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setFontSize(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setFontSize&quot;)
setFontSize = PropertiesSet._setProperty(pvObject, &quot;FontSize&quot;, pvValue)
End Function &apos; setFontSize
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setFontUnderline(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setFontUnderline&quot;)
setFontUnderline = PropertiesSet._setProperty(pvObject, &quot;FontUnderline&quot;, pvValue)
End Function &apos; setFontUnderline
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setFontWeight(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setFontWeight&quot;)
setFontWeight = PropertiesSet._setProperty(pvObject, &quot;FontWeight&quot;, pvValue)
End Function &apos; setFontWeight
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setForeColor(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setForeColor&quot;)
setForeColor = PropertiesSet._setProperty(pvObject, &quot;ForeColor&quot;, pvValue)
End Function &apos; setForeColor
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setHeight(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setHeight&quot;)
setHeight = PropertiesSet._setProperty(pvObject, &quot;Height&quot;, pvValue)
End Function &apos; setHeight
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setListIndex(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setListIndex&quot;)
setListIndex = PropertiesSet._setProperty(pvObject, &quot;ListIndex&quot;, pvValue)
End Function &apos; setListIndex
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setLocked(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setLocked&quot;)
setLocked = PropertiesSet._setProperty(pvObject, &quot;Locked&quot;, pvValue)
End Function &apos; setLocked
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setMultiSelect(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setMultiSelect&quot;)
setMultiSelect = PropertiesSet._setProperty(pvObject, &quot;MultiSelect&quot;, pvValue)
End Function &apos; setMultiSelect
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setOnAction(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setOnAction&quot;)
setOnAction = PropertiesSet._setProperty(pvObject, &quot;OnAction&quot;, pvValue)
End Function &apos; setOnAction
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setOptionValue(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setOptionValue&quot;)
setOptionValue = PropertiesSet._setProperty(pvObject, &quot;OptionValue&quot;, pvValue)
End Function &apos; setOptionValue
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setOrderBy(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setOrderBy&quot;)
setOrderBy = PropertiesSet._setProperty(pvObject, &quot;OrderBy&quot;, pvValue)
End Function &apos; setOrderBy
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setOrderByOn(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setOrderByOn&quot;)
setOrderByOn = PropertiesSet._setProperty(pvObject, &quot;OrderByOn&quot;, pvValue)
End Function &apos; setOrderByOn
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setPage(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setPage&quot;)
setPage = PropertiesSet._setProperty(pvObject, &quot;Page&quot;, pvValue)
End Function &apos; setPage V0.9.1
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setProperty(Optional pvItem As Variant, ByVal Optional psProperty As String, ByVal Optional pvValue As Variant, ByVal Optional pvIndex As Variant) As Variant
&apos; Return True if property setting OK
Utils._SetCalledSub(&quot;setProperty&quot;)
If IsMissing(pvItem) Or IsMissing(psProperty) Or IsMissing(pvValue) Or IsEmpty(pvItem) Then Call _TraceArguments()
If IsMissing(pvIndex) Then
setProperty = PropertiesSet._setProperty(pvItem, psProperty, pvValue)
Else
setProperty = PropertiesSet._setProperty(pvItem, psProperty, pvValue, pvIndex)
End If
Utils._ResetCalledSub(&quot;setProperty&quot;)
End Function
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setRecordSource(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setRecordSource&quot;)
setRecordSource = PropertiesSet._setProperty(pvObject, &quot;RecordSource&quot;, pvValue)
End Function &apos; setRecordSource
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setRequired(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setRequired&quot;)
setRequired = PropertiesSet._setProperty(pvObject, &quot;Required&quot;, pvValue)
End Function &apos; setRequired
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setRowSource(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setRowSource&quot;)
setRowSource = PropertiesSet._setProperty(pvObject, &quot;RowSource&quot;, pvValue)
End Function &apos; setRowSource
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setRowSourceType(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setRowSourceType&quot;)
setRowSourceType = PropertiesSet._setProperty(pvObject, &quot;RowSourceType&quot;, pvValue)
End Function &apos; setRowSourceType
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setSelected(Optional pvObject As Variant, ByVal Optional pvValue As Variant, ByVal Optional pvIndex As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Then Call _TraceArguments(&quot;setSelected&quot;)
If IsEmpty(pvObject) Then Call _TraceArguments(&quot;setSelected&quot;)
If IsMissing(pvIndex) Then
setSelected = PropertiesSet._setProperty(pvObject, &quot;Selected&quot;, pvValue)
Else
setSelected = PropertiesSet._setProperty(pvObject, &quot;Selected&quot;, pvValue, pvIndex)
End If
End Function &apos; setSelected
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setSelLength(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setSelLength&quot;)
setSelLength = PropertiesSet._setProperty(pvObject, &quot;SelLength&quot;, pvValue)
End Function &apos; setSelLength
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setSelStart(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setSelStart&quot;)
setSelStart = PropertiesSet._setProperty(pvObject, &quot;SelStart&quot;, pvValue)
End Function &apos; setSelStart
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setSelText(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setSelText&quot;)
setSelText = PropertiesSet._setProperty(pvObject, &quot;SelText&quot;, pvValue)
End Function &apos; setSelText
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setSpecialEffect(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setSpecialEffect&quot;)
setSpecialEffect = PropertiesSet._setProperty(pvObject, &quot;SpecialEffect&quot;, pvValue)
End Function &apos; setSpecialEffect
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setTabIndex(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setTabIndex&quot;)
setTabIndex = PropertiesSet._setProperty(pvObject, &quot;TabIndex&quot;, pvValue)
End Function &apos; setTabIndex
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setTabStop(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setTabStop&quot;)
setTabStop = PropertiesSet._setProperty(pvObject, &quot;TabStop&quot;, pvValue)
End Function &apos; setTabStop
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setTag(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setTag&quot;)
setTag = PropertiesSet._setProperty(pvObject, &quot;Tag&quot;, pvValue)
End Function &apos; setTag
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setTextAlign(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setTextAlign&quot;)
setTextAlign = PropertiesSet._setProperty(pvObject, &quot;TextAlign&quot;, pvValue)
End Function &apos; setTextAlign
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setTooltipText(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setTooltipText&quot;)
setTooltipText = PropertiesSet._setProperty(pvObject, &quot;TooltipText&quot;, pvValue)
End Function &apos; setTooltipText
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setTripleState(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setTripleState&quot;)
setTripleState = PropertiesSet._setProperty(pvObject, &quot;TripleState&quot;, pvValue)
End Function &apos; setTripleState
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setVisible(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms and controls
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setVisible&quot;)
setVisible = PropertiesSet._setProperty(pvObject, &quot;Visible&quot;, pvValue)
End Function &apos; setVisible
REM -----------------------------------------------------------------------------------------------------------------------
Public Function setWidth(Optional pvObject As Variant, ByVal Optional pvValue As Variant) As Boolean
&apos; Only for open forms
If IsMissing(pvObject) Or IsMissing(pvValue) Or IsEmpty(pvObject) Then Call _TraceArguments(&quot;setWidth&quot;)
setWidth = PropertiesSet._setProperty(pvObject, &quot;Width&quot;, pvValue)
End Function &apos; setWidth
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _CheckProperty(pvObject As Object, ByVal psProperty As String) As Boolean
&apos; Return False if psProperty not within the PropertyValues set of pvItem
Dim i As Integer, oPropertyValues As Variant, oProperty As Variant
oPropertyValues = pvObject.PropertyValues
For i = LBound(oPropertyValues) To UBound(oPropertyValues)
oProperty = oPropertyValues(i)
If UCase(oProperty.Name) = UCase(psProperty) Then
_CheckProperty = True
Exit Function
End If
Next i
_CheckProperty = False
Exit Function
End Function &apos; CheckProperty V0.7.5
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _setProperty(pvItem As Variant, ByVal psProperty As String, ByVal pvValue As Variant, ByVal Optional pvIndex As Variant) As Boolean
&apos; Return True if property setting OK
Utils._SetCalledSub(&quot;set&quot; &amp; psProperty)
If _ErrorHandler() Then On Local Error Goto Error_Function
&apos;pvItem must be an object and have the requested property
If Not Utils._CheckArgument(pvItem, 1, vbObject) Then Goto Exit_Function
&apos;Check Index argument
If Not IsMissing(pvIndex) Then
If Not Utils._CheckArgument(pvIndex, 4, Utils._AddNumeric()) Then Goto Exit_Function
End If
&apos;Execute
Dim iArgNr As Integer, lFormat As Long
Dim i As Integer, iCount As Integer, iSelectedItems() As Integer, bListboxBound As Boolean
Dim odbDatabase As Object, vNames As Variant, bFound As Boolean, sName As String, oModel As Object
Dim ocButton As Variant, iRadioIndex As Integer
_setProperty = True
If _A2B_.CalledSub = &quot;setProperty&quot; Then iArgNr = 3 Else iArgNr = 2
If Not PropertiesGet._hasProperty(pvItem._Type, pvItem._PropertiesList(), psProperty) Then Goto Trace_Error_Control
Select Case UCase(psProperty)
Case UCase(&quot;AbsolutePosition&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJRECORDSET) Then Goto Exit_Function
pvItem.AbsolutePosition = pvValue
Case UCase(&quot;AllowAdditions&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJSUBFORM)) Then Goto Exit_Function
pvItem.AllowAdditions = pvValue
Case UCase(&quot;AllowDeletions&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJSUBFORM)) Then Goto Exit_Function
pvItem.AllowDeletions = pvValue
Case UCase(&quot;AllowEdits&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJSUBFORM)) Then Goto Exit_Function
pvItem.AllowEdits = pvValue
Case UCase(&quot;BackColor&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.BackColor = pvValue
Case UCase(&quot;Bookmark&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJRECORDSET)) Then Goto Exit_Function
pvItem.Bookmark = pvValue
Case UCase(&quot;BorderColor&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.BorderColor = pvValue
Case UCase(&quot;BorderStyle&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.BorderColor = pvValue
Case UCase(&quot;Cancel&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.Cancel = pvValue
Case UCase(&quot;Caption&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJDIALOG, OBJCONTROL)) Then Goto Exit_Function
pvItem.Caption = pvValue
Case UCase(&quot;ControlTipText&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.ControlTipText = pvValue
Case UCase(&quot;CurrentRecord&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJSUBFORM)) Then Goto Exit_Function
pvItem.CurrentRecord = pvValue
Case UCase(&quot;Default&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.Default = pvValue
Case UCase(&quot;DefaultValue&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJCONTROL, OBJFIELD)) Then Goto Exit_Function
pvItem.DefaultValue = pvValue
Case UCase(&quot;Description&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJFIELD) Then Goto Exit_Function
pvItem.DefaultValue = pvValue
Case UCase(&quot;Enabled&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.Enabled = pvValue
Case UCase(&quot;Filter&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJSUBFORM, OBJRECORDSET)) Then Goto Exit_Function
pvItem.Filter = pvValue
Case UCase(&quot;FilterOn&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJSUBFORM)) Then Goto Exit_Function
pvItem.FilterOn = pvValue
Case UCase(&quot;FontBold&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.FontBold = pvValue
Case UCase(&quot;FontItalic&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.FontItalic = pvValue
Case UCase(&quot;FontName&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.FontName = pvValue
Case UCase(&quot;FontSize&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.FontSize = pvValue
Case UCase(&quot;FontUnderline&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.FontUnderline = pvValue
Case UCase(&quot;FontWeight&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.FontWeight = pvValue
Case UCase(&quot;ForeColor&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.ForeColor = pvValue
Case UCase(&quot;Height&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJDIALOG)) Then Goto Exit_Function
pvItem.Height = pvValue
Case UCase(&quot;ListIndex&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.ListIndex = pvValue
Case UCase(&quot;Locked&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.Locked = pvValue
Case UCase(&quot;MultiSelect&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.MultiSelect = pvValue
Case UCase(&quot;OnAction&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCOMMANDBARCONTROL) Then Goto Exit_Function
pvItem.OnAction = pvValue
Case UCase(&quot;OptionValue&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.OptionValue = pvValue
Case UCase(&quot;OrderBy&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJSUBFORM)) Then Goto Exit_Function
pvItem.OrderBy = pvValue
Case UCase(&quot;OrderByOn&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJSUBFORM)) Then Goto Exit_Function
pvItem.OrderByOn = pvValue
Case UCase(&quot;Page&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJDIALOG, OBJCONTROL)) Then Goto Exit_Function
pvItem.Page = pvValue
Case UCase(&quot;RecordSource&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJSUBFORM)) Then Goto Exit_Function
pvItem.RecordSource = pvValue
Case UCase(&quot;Required&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.Required = pvValue
Case UCase(&quot;RowSource&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.RowSource = pvValue
Case UCase(&quot;RowSourceType&quot;) &apos; Refresh done when RowSource changes, not RowSourceType
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.RowSourceType = pvValue
Case UCase(&quot;Selected&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
If IsMissing(pvIndex) Then pvItem.Selected = pvValue Else pvItem.SelectedI(pvValue, pvIndex)
Case UCase(&quot;SelLength&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.SelLength = pvValue
Case UCase(&quot;SelStart&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.SelStart = pvValue
Case UCase(&quot;SelText&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.SelText = pvValue
Case UCase(&quot;SpecialEffect&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.SpecialEffect = pvValue
Case UCase(&quot;TabIndex&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.TabIndex = pvValue
Case UCase(&quot;TabStop&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.TabStop = pvValue
Case UCase(&quot;Tag&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.Tag = pvValue
Case UCase(&quot;TextAlign&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.TextAlign = pvValue
Case UCase(&quot;TooltipText&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCOMMANDBARCONTROL) Then Goto Exit_Function
pvItem.TooltipText = pvValue
Case UCase(&quot;TripleState&quot;)
If Not Utils._CheckArgument(pvItem, 1, OBJCONTROL) Then Goto Exit_Function
pvItem.TripleState = pvValue
Case UCase(&quot;Value&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJCONTROL, OBJOPTIONGROUP, OBJFIELD, OBJTEMPVAR)) Then Goto Exit_Function
pvItem.Value = pvValue
Case UCase(&quot;Visible&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJDIALOG, OBJCONTROL, OBJCOMMANDBAR, OBJCOMMANDBARCONTROL)) Then Goto Exit_Function
pvItem.Visible = pvValue
Case UCase(&quot;Width&quot;)
If Not Utils._CheckArgument(pvItem, 1, Array(OBJFORM, OBJDIALOG)) Then Goto Exit_Function
pvItem.Width = pvValue
Case Else
Goto Trace_Error_Control
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;set&quot; &amp; psProperty)
Exit Function
Trace_Error_Form:
TraceError(TRACEFATAL, ERRFORMNOTFOUND, Utils._CalledSub(), 0, 1, pvItem._Name)
_setProperty = False
Goto Exit_Function
Trace_Error_Control:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
_setProperty = False
Goto Exit_Function
Trace_Error_Value:
TraceError(TRACEFATAL, ERRPROPERTYVALUE, Utils._CalledSub(), 0, 1, Array(pvValue, psProperty))
_setProperty = False
Goto Exit_Function
Trace_Error_Index:
TraceError(TRACEFATAL, ERRINDEXVALUE, Utils._CalledSub(), 0, 1, psProperty)
_setProperty = Nothing
Goto Exit_Function
Trace_Error_Array:
TraceError(TRACEFATAL, ERRPROPERTYNOTARRAY, Utils._CalledSub(), 0, 1, iArgNr)
_setProperty = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;_setProperty&quot;, Erl)
GoTo Exit_Function
End Function &apos; _setProperty V0.9.1
</script:module>

View File

@@ -0,0 +1,152 @@
<?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="Property" 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 PROPERTY
Private _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _Name As String
Private _Value As Variant
Private _ParentDatabase As Object
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJPROPERTY
Set _This = Nothing
Set _Parent = Nothing
_Name = &quot;&quot;
_Value = Null
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 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 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, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
End If
Exit_Function:
Set Properties = vProperty
Exit Function
End Function &apos; Properties
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Value() As Variant
Value = _PropertyGet(&quot;Value&quot;)
End Property &apos; Value (get)
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos; Return property value of psProperty property name
Utils._SetCalledSub(&quot;Property.getProperty&quot;)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(&quot;Property.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 -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
_PropertiesList = Array(&quot;Name&quot;, &quot;ObjectType&quot;, &quot;Value&quot;)
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;Property.get&quot; &amp; psProperty)
_PropertyGet = Nothing
Select Case UCase(psProperty)
Case UCase(&quot;Name&quot;)
_PropertyGet = _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;Value&quot;)
_PropertyGet = _Value
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;Property.get&quot; &amp; psProperty)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Property._PropertyGet&quot;, Erl)
_PropertyGet = Nothing
GoTo Exit_Function
End Function &apos; _PropertyGet
</script:module>

View File

@@ -0,0 +1,613 @@
<?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="Python" 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 Explicit
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub DebugPrint(ParamArray pvArgs() As Variant)
&apos;Print arguments unconditionally in console
&apos;Arguments are separated by a TAB (simulated by spaces)
&apos;Some pvArgs might be missing: a TAB is still generated
Dim vVarTypes() As Variant, i As Integer
Const cstTab = 5
On Local Error Goto Exit_Sub &apos; Never interrupt processing
Utils._SetCalledSub(&quot;DebugPrint&quot;)
vVarTypes = Utils._AddNumeric(Array(vbEmpty, vbNull, vbDate, vbString, vbBoolean, vbObject, vbVariant, vbByte, vbArray + vbByte))
If UBound(pvArgs) &gt;= 0 Then
For i = 0 To UBound(pvArgs)
If Not Utils._CheckArgument(pvArgs(i), i + 1, vVarTypes(), , False) Then pvArgs(i) = &quot;[TYPE?]&quot;
Next i
End If
Dim sOutput As String, sArg As String
sOutput = &quot;&quot;
For i = 0 To UBound(pvArgs)
sArg = Replace(Utils._CStr(pvArgs(i), _A2B_.DebugPrintShort), &quot;\;&quot;, &quot;;&quot;)
&apos; Add argument to output
If i = 0 Then
sOutput = sArg
Else
sOutput = sOutput &amp; Space(cstTab - (Len(sOutput) Mod cstTab)) &amp; sArg
End If
Next i
TraceLog(TRACEANY, sOutput, False)
Exit_Sub:
Utils._ResetCalledSub(&quot;DebugPrint&quot;)
Exit Sub
End Sub &apos; DebugPrint V0.9.5
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PYTHON WRAPPERS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PythonEventsWrapper(Optional poEvent As Variant) As Variant
&apos; Python wrapper when Application.Events() method is invoked
&apos; The ParamArray mechanism empties UNO objects when they are member of the arguments list
&apos; As a workaround, the Application.Events function is executed directly
If _ErrorHandler() Then On Local Error GoTo Exit_Function &apos; Do never interrupt
PythonEventsWrapper = Null
Dim vReturn As Variant, vArray As Variant
Const cstObject = 1
vReturn = Application.Events(poEvent)
vArray = Array(cstObject, _A2B_.AddPython(vReturn), vReturn._Type)
PythonEventsWrapper = vArray
Exit_Function:
Exit Function
End Function &apos; PythonEventsWrapper V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PythonWrapper(ByVal pvCallType As Variant _
, ByVal pvObject As Variant _
, ByVal pvScript As Variant _
, ParamArray pvArgs() As Variant _
) As Variant
&apos; Called from Python to apply
&apos; - on object with entry pvObject in PythonCache
&apos; Conventionally: -1 = Application
&apos; -2 = DoCmd
&apos; - a script pvScript which type is described by pvCallType
&apos; - with arguments pvArgs(0)... (max. 8 for object methods)
&apos; The value returned by the method/property is encapsulated in an array
&apos; [0] =&gt; 0 = scalar or array returned by the method
&apos; =&gt; 1 = basic object returned by the method
&apos; =&gt; 2 = a null value
&apos; [1] =&gt; the object reference or the returned value (complemented with arguments passed by reference, if any) or Null
&apos; [2] =&gt; the object type or Null
&apos; [3] =&gt; the object name, if any
&apos; or, when pvCallType == vbUNO, as the UNO object returned by the property
Dim vReturn As Variant, vArray As Variant
Dim vObject As Variant, sScript As String, sModule As String
Dim i As Integer, iNbArgs As Integer, vArg As Variant, vArgs() As Variant
Const cstApplication = -1, cstDoCmd = -2
Const cstScalar = 0, cstObject = 1, cstNull = 2, cstUNO = 3
&apos;Conventional special values
Const cstNoArgs = &quot;+++NOARGS+++&quot;, cstSymEmpty = &quot;+++EMPTY+++&quot;, cstSymNull = &quot;+++NULL+++&quot;, cstSymMissing = &quot;+++MISSING+++&quot;
&apos;https://support.office.com/en-us/article/CallByName-fonction-49ce9475-c315-4f13-8d35-e98cfe98729a
&apos;Determines the pvCallType
Const vbGet = 2, vbLet = 4, vbMethod = 1, vbSet = 8, vbUNO = 16
If _ErrorHandler() Then On Local Error GoTo Error_Function
PythonWrapper = Null
&apos;Reinterpret arguments one by one into vArgs, examine iso-dates and conventional NoArgs/Empty/Null values
iNbArgs = -1
vArgs = Array()
If UBound(pvArgs) &gt;= 0 Then
For i = 0 To UBound(pvArgs)
vArg = pvArgs(i)
If i = 0 And VarType(vArg) = vbString Then
If vArg = cstNoArgs Then Exit For
End If
If VarType(vArg) = vbString Then
If vArg = cstSymEmpty Then
vArg = Empty
ElseIf vArg = cstSymNull Then
vArg = Null
ElseIf vArg = cstSymMissing Then
Exit For &apos; Next arguments must be missing also
Else
vArg = _CDate(vArg)
End If
End If
iNbArgs = iNbArgs + 1
ReDim Preserve vArgs(iNbArgs)
vArgs(iNbArgs) = vArg
Next i
End If
&apos;Check pvObject
Select Case pvObject &apos; Always numeric
Case cstApplication
sModule = &quot;Application&quot;
Select Case pvScript
Case &quot;AllDialogs&quot; : If iNbArgs &lt; 0 Then vReturn = Application.AllDialogs() Else vReturn = Application.AllDialogs(vArgs(0))
Case &quot;AllForms&quot; : If iNbArgs &lt; 0 Then vReturn = Application.AllForms() Else vReturn = Application.AllForms(vArgs(0))
Case &quot;AllModules&quot; : If iNbArgs &lt; 0 Then vReturn = Application.AllModules() Else vReturn = Application.AllModules(vArgs(0))
Case &quot;CloseConnection&quot;
vReturn = Application.CloseConnection()
Case &quot;CommandBars&quot; : If iNbArgs &lt; 0 Then vReturn = Application.CommandBars() Else vReturn = Application.CommandBars(vArgs(0))
Case &quot;CurrentDb&quot; : vReturn = Application.CurrentDb()
Case &quot;CurrentUser&quot; : vReturn = Application.CurrentUser()
Case &quot;DAvg&quot; : vReturn = Application.DAvg(vArgs(0), vArgs(1), vArgs(2))
Case &quot;DCount&quot; : vReturn = Application.DCount(vArgs(0), vArgs(1), vArgs(2))
Case &quot;DLookup&quot; : vReturn = Application.DLookup(vArgs(0), vArgs(1), vArgs(2), vArgs(3))
Case &quot;DMax&quot; : vReturn = Application.DMax(vArgs(0), vArgs(1), vArgs(2))
Case &quot;DMin&quot; : vReturn = Application.DMin(vArgs(0), vArgs(1), vArgs(2))
Case &quot;DStDev&quot; : vReturn = Application.DStDev(vArgs(0), vArgs(1), vArgs(2))
Case &quot;DStDevP&quot; : vReturn = Application.DStDevP(vArgs(0), vArgs(1), vArgs(2))
Case &quot;DSum&quot; : vReturn = Application.DSum(vArgs(0), vArgs(1), vArgs(2))
Case &quot;DVar&quot; : vReturn = Application.DVar(vArgs(0), vArgs(1), vArgs(2))
Case &quot;DVarP&quot; : vReturn = Application.DVarP(vArgs(0), vArgs(1), vArgs(2))
Case &quot;Forms&quot; : If iNbArgs &lt; 0 Then vReturn = Application.Forms() Else vReturn = Application.Forms(vArgs(0))
Case &quot;getObject&quot; : vReturn = Application.getObject(vArgs(0))
Case &quot;getValue&quot; : vReturn = Application.getValue(vArgs(0))
Case &quot;HtmlEncode&quot; : vReturn = Application.HtmlEncode(vArgs(0), vArgs(1))
Case &quot;OpenDatabase&quot; : vReturn = Application.OpenDatabase(vArgs(0), vArgs(1), vArgs(2), vArgs(3))
Case &quot;ProductCode&quot; : vReturn = Application.ProductCode()
Case &quot;setValue&quot; : vReturn = Application.setValue(vArgs(0), vArgs(1))
Case &quot;SysCmd&quot; : vReturn = Application.SysCmd(vArgs(0), vArgs(1), vARgs(2))
Case &quot;TempVars&quot; : If iNbArgs &lt; 0 Then vReturn = Application.TempVars() Else vReturn = Application.TempVars(vArgs(0))
Case &quot;Version&quot; : vReturn = Application.Version()
Case Else
GoTo Error_Proc
End Select
Case cstDoCmd
sModule = &quot;DoCmd&quot;
Select Case pvScript
Case &quot;ApplyFilter&quot; : vReturn = DoCmd.ApplyFilter(vArgs(0), vArgs(1), vArgs(2))
Case &quot;Close&quot; : vReturn = DoCmd.mClose(vArgs(0), vArgs(1), vArgs(2))
Case &quot;CopyObject&quot; : vReturn = DoCmd.CopyObject(vArgs(0), vArgs(1), vArgs(2), vArgs(3))
Case &quot;FindNext&quot; : vReturn = DoCmd.FindNext()
Case &quot;FindRecord&quot; : vReturn = DoCmd.FindRecord(vArgs(0), vArgs(1), vArgs(2), vArgs(3), vArgs(4), vArgs(5), vArgs(6))
Case &quot;GetHiddenAttribute&quot;
vReturn = DoCmd.GetHiddenAttribute(vArgs(0), vArgs(1))
Case &quot;GoToControl&quot; : vReturn = DoCmd.GoToControl(vArgs(0))
Case &quot;GoToRecord&quot; : vReturn = DoCmd.GoToRecord(vArgs(0), vArgs(1), vArgs(2), vArgs(3))
Case &quot;Maximize&quot; : vReturn = DoCmd.Maximize()
Case &quot;Minimize&quot; : vReturn = DoCmd.Minimize()
Case &quot;MoveSize&quot; : vReturn = DoCmd.MoveSize(vArgs(0), vArgs(1), vArgs(2), vArgs(3))
Case &quot;OpenForm&quot; : vReturn = DoCmd.OpenForm(vArgs(0), vArgs(1), vArgs(2), vArgs(3), vArgs(4), vArgs(5), vArgs(6))
Case &quot;OpenQuery&quot; : vReturn = DoCmd.OpenQuery(vArgs(0), vArgs(1), vArgs(2))
Case &quot;OpenReport&quot; : vReturn = DoCmd.OpenReport(vArgs(0), vArgs(1))
Case &quot;OpenSQL&quot; : vReturn = DoCmd.OpenSQL(vArgs(0), vArgs(1))
Case &quot;OpenTable&quot; : vReturn = DoCmd.OpenTable(vArgs(0), vArgs(1), vArgs(2))
Case &quot;OutputTo&quot; : vReturn = DoCmd.OutputTo(vArgs(0), vArgs(1), vArgs(2), vArgs(3), vArgs(4), vArgs(5), vArgs(6), vArgs(7))
Case &quot;Quit&quot; : _A2B_.CalledSub = &quot;Quit&quot; : GoTo Error_Action
Case &quot;RunApp&quot; : vReturn = DoCmd.RunApp(vArgs(0))
Case &quot;RunCommand&quot; : vReturn = DoCmd.RunCommand(vArgs(0))
Case &quot;RunSQL&quot; : vReturn = DoCmd.RunSQL(vArgs(0), vArgs(1))
Case &quot;SelectObject&quot; : vReturn = DoCmd.SelectObject(vArgs(0), vArgs(1), vArgs(2))
Case &quot;SendObject&quot; : vReturn = DoCmd.SendObject(vArgs(0), vArgs(1), vArgs(2), vArgs(3), vArgs(4), vArgs(5), vArgs(6), vArgs(7), vArgs(8), vArgs(9))
Case &quot;SetHiddenAttribute&quot;
vReturn = DoCmd.SetHiddenAttribute(vArgs(0), vArgs(1), vArgs(2))
Case &quot;SetOrderBy&quot; : vReturn = DoCmd.SetOrderBy(vArgs(0), vArgs(1))
Case &quot;ShowAllRecords&quot;
vReturn = DoCmd.ShowAllRecords()
Case Else
GoTo Error_Proc
End Select
Case Else
&apos; Locate targeted object
If pvObject &gt; UBound(_A2B_.PythonCache) Or pvObject &lt; 0 Then GoTo Error_Object
Set vObject = _A2B_.PythonCache(pvObject)
If IsNull(vObject) Then
If pvScript = &quot;Dispose&quot; Then GoTo Exit_Function Else GoTo Error_Object
End If
&apos; Preprocessing
sScript = pvScript
sModule = vObject._Type
Select Case sScript
Case &quot;Add&quot;
If vObject._Type = &quot;COLLECTION&quot; And vObject._CollType = COLLTABLEDEFS Then vArgs = Array(_A2B_.PythonCache(vArgs(0)))
Case &quot;Close&quot;
sSCript = &quot;mClose&quot;
Case &quot;Type&quot;
sScript = &quot;pType&quot;
Case Else
End Select
&apos; Execute method
Select Case UBound(vArgs) &apos; Dirty but ... CallByName does not support an array of arguments or return values
Case -1
If pvCallType = vbUNO Then
With vObject
Select Case sScript &apos; List all properties that should be called directly (UNO)
Case &quot;BoundField&quot; : vReturn = .BoundField
Case &quot;Column&quot; : vReturn = .Column
Case &quot;Connection&quot; : vReturn = .Connection
case &quot;ContainerWindow&quot; : vReturn = .ContainerWindow
Case &quot;ControlModel&quot; : vReturn = .ControlModel
Case &quot;ControlView&quot; : vReturn = .ControlView
Case &quot;DatabaseForm&quot; : vReturn = .DatabaseForm
Case &quot;Document&quot; : vReturn = .Document
Case &quot;FormsCollection&quot; : vReturn = .FormsCollection
Case &quot;LabelControl&quot; : vReturn = .LabelControl
Case &quot;MetaData&quot; : vReturn = .MetaData
Case &quot;ParentComponent&quot; : vReturn = .ParentComponent
Case &quot;Query&quot; : vReturn = .Query
Case &quot;RowSet&quot; : vReturn = .RowSet
Case &quot;Table&quot; : vReturn = .Table
Case &quot;UnoDialog&quot; : vReturn = .UnoDialog
Case Else
End Select
End With
ElseIf sScript = &quot;ItemData&quot; Then &apos; List all properties that should be called directly (arrays not supported by CallByName)
vReturn = vObject.ItemData
ElseIf sScript = &quot;LinkChildFields&quot; Then
vReturn = vObject.LinkChildFields
ElseIf sScript = &quot;LinkMasterFields&quot; Then
vReturn = vObject.LinkMasterFields
ElseIf sScript = &quot;OpenArgs&quot; Then
vReturn = vObject.OpenArgs
ElseIf sScript = &quot;Selected&quot; Then
vReturn = vObject.Selected
ElseIf sScript = &quot;Value&quot; Then
vReturn = vObject.Value
Else
vReturn = CallByName(vObject, sScript, pvCallType)
End If
Case 0
Select Case sScript
Case &quot;AppendChunk&quot; &apos; Arg is a vector, not supported by CallByName
vReturn = vObject.GetChunk(vArgs(0), vArgs(1))
Case &quot;GetRows&quot; &apos; Returns an array, not supported by CallByName
vReturn = vObject.GetRows(vArgs(0), True) &apos; Force iso dates
Case Else
vReturn = CallByName(vObject, sScript, pvCallType, vArgs(0))
End Select
Case 1
Select Case sScript
Case &quot;GetChunk&quot; &apos; Returns a vector, not supported by CallByName
vReturn = vObject.GetChunk(vArgs(0), vArgs(1))
Case Else
vReturn = CallByName(vObject, sScript, pvCallType, vArgs(0), vArgs(1))
End Select
Case 2 : vReturn = CallByName(vObject, sScript, pvCallType, vArgs(0), vArgs(1), vArgs(2))
Case 3 : vReturn = CallByName(vObject, sScript, pvCallType, vArgs(0), vArgs(1), vArgs(2), vArgs(3))
Case 4 : vReturn = CallByName(vObject, sScript, pvCallType, vArgs(0), vArgs(1), vArgs(2), vArgs(3), vArgs(4))
Case 5 : vReturn = CallByName(vObject, sScript, pvCallType, vArgs(0), vArgs(1), vArgs(2), vArgs(3), vArgs(4), vArgs(5))
Case 6 : vReturn = CallByName(vObject, sScript, pvCallType, vArgs(0), vArgs(1), vArgs(2), vArgs(3), vArgs(4), vArgs(5), vArgs(6))
Case 7 : vReturn = CallByName(vObject, sScript, pvCallType, vArgs(0), vArgs(1), vArgs(2), vArgs(3), vArgs(4), vArgs(5), vArgs(6), vArgs(7))
End Select
&apos; Postprocessing
Select Case pvScript
Case &quot;Close&quot;, &quot;Dispose&quot;, &quot;Terminate&quot;
Set _A2B_.PythonCache(pvObject) = Nothing
Case &quot;Move&quot;, &quot;MoveFirst&quot;, &quot;MoveLast&quot;, &quot;MoveNext&quot;, &quot;MovePrevious&quot; &apos; Pass the new BOF, EOF values (binary format)
If vObject._Type = &quot;RECORDSET&quot; Then
vReturn = (Iif(vObject.BOF, 1, 0) * 2 + Iif(vObject.EOF, 1, 0)) * Iif(vReturn, 1, -1)
End If
Case &quot;Find&quot; &apos; Store in array the arguments passed by reference
If vObject._Type = &quot;MODULE&quot; And vReturn = True Then
vReturn = Array(vReturn, vArgs(1), vArgs(2), vArgs(3), vArgs(4))
End If
Case &quot;ProcOfLine&quot; &apos; Store in array the arguments passed by reference
vReturn = Array(vReturn, vArgs(1))
Case Else
End Select
End Select
&apos; Structure the returned array
If pvCallType = vbUNO Then
vArray = vReturn
Else
If IsNull(vReturn) Then
vArray = Array(cstNull, Null, Null)
ElseIf IsObject(vReturn) Then
Select Case vReturn._Type
Case &quot;COLLECTION&quot;, &quot;COMMANDBARCONTROL&quot;, &quot;EVENT&quot;
vArray = Array(cstObject, _A2B_.AddPython(vReturn), vReturn._Type)
Case Else
vArray = Array(cstObject, _A2B_.AddPython(vReturn), vReturn._Type, vReturn.Name)
End Select
Else
If VarType(vReturn) = vbDate Then
vArray = Array(cstScalar, _CStr(vReturn), Null)
ElseIf VarType(vReturn) = vbBigint Then &apos; Could happen for big integer database fields
vArray = Array(cstScalar, CLng(vReturn), Null)
Else
vArray = Array(cstScalar, vReturn, Null)
End If
End If
End If
PythonWrapper = vArray
Exit_Function:
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;PythonWrapper&quot;, Erl)
GoTo Exit_Function
Error_Object:
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, &quot;Python Wrapper (&quot; &amp; pvScript &amp; &quot;)&quot;, 0, , Array(_GetLabel(&quot;OBJECT&quot;), &quot;#&quot; &amp; pvObject))
GoTo Exit_Function
Error_Action:
TraceError(TRACEFATAL, ERRACTION, Utils._CalledSub(), 0)
GoTo Exit_Function
Error_Proc:
TraceError(TRACEFATAL, ERRPROCEDURENOTFOUND, &quot;Python Wrapper&quot;, 0, , Array(pvScript, sModule))
GoTo Exit_Function
End Function &apos; PythonWrapper V6.4
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PYTHON HELPER FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyConvertFromUrl(ByVal pvFile As Variant) As String
&apos; Convenient function to have common conversions of filenames from/to url notations both in Python and Basic
On Local Error GoTo Exit_Function
PyConvertFromUrl = &quot;&quot;
If Not Utils._CheckArgument(pvFile, 1, vbString) Then Goto Exit_Function
PyConvertFromUrl = ConvertFromUrl(pvFile)
Exit_Function:
Exit Function
End Function &apos; PyConvertFromUrl V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyConvertToUrl(ByVal pvFile As Variant) As String
&apos; Convenient function to have common conversions of filenames from/to url notations both in Python and Basic
On Local Error GoTo Exit_Function
PyConvertToUrl = &quot;&quot;
If Not Utils._CheckArgument(pvFile, 1, vbString) Then Goto Exit_Function
PyConvertToUrl = ConvertToUrl(pvFile)
Exit_Function:
Exit Function
End Function &apos; PyConvertToUrl V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyCreateUnoService(ByVal pvService As Variant) As Variant
&apos; Convenient function to create a UNO service in Python
On Local Error GoTo Exit_Function
Set PyCreateUnoService = Nothing
If Not Utils._CheckArgument(pvService, 1, vbString) Then Goto Exit_Function
Set PyCreateUnoService = CreateUnoService(pvService)
Exit_Function:
Exit Function
End Function &apos; PyCreateUnoService V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyDateAdd(ByVal pvAdd As Variant _
, ByVal pvCount As Variant _
, ByVal pvDate As Variant _
) As Variant
&apos; Convenient shortcut to useful and easy-to-use Basic date functions
Dim vDate As Variant, vNewDate As Variant
On Local Error GoTo Exit_Function
PyDateAdd = Null
If Not Utils._CheckArgument(pvAdd, 1, vbString) Then Goto Exit_Function
If Not Utils._CheckArgument(pvCount, 2, Utils._AddNumeric()) Then Goto Exit_Function
If Not Utils._CheckArgument(pvDate, 3, vbString) Then Goto Exit_Function
vDate = _CDate(pvDate)
vNewDate = DateAdd(pvAdd, pvCount, vDate)
If VarType(vNewDate) = vbDate Then PyDateAdd = _CStr(vNewDate) Else PyDateAdd = vNewDate
Exit_Function:
Exit Function
End Function &apos; PyDateAdd V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyDateDiff(ByVal pvAdd As Variant _
, ByVal pvDate1 As Variant _
, ByVal pvDate2 As Variant _
, ByVal pvWeekStart As Variant _
, ByVal pvYearStart As Variant _
) As Variant
&apos; Convenient shortcut to useful and easy-to-use Basic date functions
Dim vDate1 As Variant, vDate2 As Variant
On Local Error GoTo Exit_Function
PyDateDiff = Null
If Not Utils._CheckArgument(pvAdd, 1, vbString) Then Goto Exit_Function
If Not Utils._CheckArgument(pvDate1, 2, vbString) Then Goto Exit_Function
If Not Utils._CheckArgument(pvDate2, 3, vbString) Then Goto Exit_Function
If Not Utils._CheckArgument(pvWeekStart, 4, Utils._AddNumeric()) Then Goto Exit_Function
If Not Utils._CheckArgument(pvWeekStart, 5, Utils._AddNumeric()) Then Goto Exit_Function
vDate1 = _CDate(pvDate1)
vDate2 = _CDate(pvDate2)
PyDateDiff = DateDiff(pvAdd, vDate1, vDate2, pvWeekStart, pvYearStart)
Exit_Function:
Exit Function
End Function &apos; PyDateDiff V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyDatePart(ByVal pvAdd As Variant _
, ByVal pvDate As Variant _
, ByVal pvWeekStart As Variant _
, ByVal pvYearStart As Variant _
) As Variant
&apos; Convenient shortcut to useful and easy-to-use Basic date functions
Dim vDate As Variant
On Local Error GoTo Exit_Function
PyDatePart = Null
If Not Utils._CheckArgument(pvAdd, 1, vbString) Then Goto Exit_Function
If Not Utils._CheckArgument(pvDate, 2, vbString) Then Goto Exit_Function
If Not Utils._CheckArgument(pvWeekStart, 3, Utils._AddNumeric()) Then Goto Exit_Function
If Not Utils._CheckArgument(pvWeekStart, 4, Utils._AddNumeric()) Then Goto Exit_Function
vDate = _CDate(pvDate)
PyDatePart = DatePart(pvAdd, vDate, pvWeekStart, pvYearStart)
Exit_Function:
Exit Function
End Function &apos; PyDatePart V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyDateValue(ByVal pvDate As Variant) As Variant
&apos; Convenient shortcut to useful and easy-to-use Basic date functions
Dim vDate As Variant
On Local Error GoTo Exit_Function
PyDateValue = Null
If Not Utils._CheckArgument(pvDate, 1, vbString) Then Goto Exit_Function
vDate = DateValue(pvDate)
If VarType(vDate) = vbDate Then PyDateValue = _CStr(vDate) Else PyDateValue = vDate
Exit_Function:
Exit Function
End Function &apos; PyDateValue V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyFormat(ByVal pvValue As Variant, pvFormat As Variant) As String
&apos; Convenient function to format numbers or dates
On Local Error GoTo Exit_Function
PyFormat = &quot;&quot;
If Not Utils._CheckArgument(pvValue, 1, Utils._AddNumeric(vbString)) Then Goto Exit_Function
pvValue = _CDate(pvValue)
If IsEmpty(pvFormat) Then
PyFormat = Str(pvValue)
Else
If Not Utils._CheckArgument(pvFormat, 2, vbString) Then Goto Exit_Function
PyFormat = Format(pvValue, pvFormat)
End If
Exit_Function:
Exit Function
End Function &apos; PyFormat V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyGetGUIType() As Variant
PyGetGUIType = GetGUIType()
End Function &apos; PyGetGUIType V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyGetSystemTicks() As Variant
PyGetSystemTicks = GetSystemTicks()
End Function &apos; PyGetSystemTicks V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyGlobalScope(ByVal pvLib As Variant) As Variant
Select Case pvLib
Case &quot;Basic&quot;
PyGlobalScope = GlobalScope.BasicLibraries()
Case &quot;Dialog&quot;
PyGlobalScope = GlobalScope.DialogLibraries()
Case Else
End Select
End Function &apos; PyGlobalScope V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyInputBox(ByVal pvText As Variant _
, ByVal pvTitle As Variant _
, ByVal pvDefault As Variant _
, ByVal pvXPos As Variant _
, ByVal pvYPos As Variant _
) As Variant
&apos; Convenient function to open input box from Python
On Local Error GoTo Exit_Function
PyInputBox = Null
If Not Utils._CheckArgument(pvText, 1, vbString) Then Goto Exit_Function
If IsEmpty(pvTitle) Then pvTitle = &quot;&quot;
If Not Utils._CheckArgument(pvTitle, 2, vbString) Then Goto Exit_Function
If IsEmpty(pvDefault) Then pvDefault = &quot;&quot;
If Not Utils._CheckArgument(pvDefault, 3, vbString) Then Goto Exit_Function
If IsEmpty(pvXPos) Or IsEmpty(pvYPos) Then
PyInputBox = InputBox(pvText, pvTitle, pvDefault)
Else
If Not Utils._CheckArgument(pvXPos, 4, Utils._AddNumeric()) Then Goto Exit_Function
If Not Utils._CheckArgument(pvYPos, 5, Utils._AddNumeric()) Then Goto Exit_Function
PyInputBox = InputBox(pvText, pvTitle, pvDefault, pvXPos, pvYPos)
End If
Exit_Function:
Exit Function
End Function &apos; PyInputBox V6.4.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyMsgBox(ByVal pvText As Variant _
, ByVal pvType As Variant _
, ByVal pvDialogTitle As Variant _
) As Variant
&apos; Convenient function to open message box from Python
On Local Error GoTo Exit_Function
PyMsgBox = Null
If Not Utils._CheckArgument(pvText, 1, vbString) Then Goto Exit_Function
If IsEmpty(pvType) Then pvType = 0
If Not Utils._CheckArgument(pvType, 2, Utils._AddNumeric()) Then Goto Exit_Function
If IsEmpty(pvDialogTitle) Then
PyMsgBox = MsgBox(pvText, pvType)
Else
If Not Utils._CheckArgument(pvDialogTitle, 3, vbString) Then Goto Exit_Function
PyMsgBox = MsgBox(pvText, pvType, pvDialogTitle)
End If
Exit_Function:
Exit Function
End Function &apos; PyMsgBox V6.4.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function PyTimer() As Long
&apos; Convenient function to call Timer from Python
PyTimer = Timer
End Function &apos; PyTimer V6.4
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _CDate(ByVal pvValue As Variant) As Variant
&apos; Return a Date type if iso date, otherwise return input
Dim vValue As Variant
vValue = pvValue
If VarType(pvValue) = vbString Then
If pvValue &lt;&gt; &quot;&quot; And IsDate(pvValue) Then vValue = CDate(pvValue) &apos; IsDate(&quot;&quot;) gives True !?
End If
_CDate = vValue
End Function
</script:module>

View File

@@ -0,0 +1,311 @@
<?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="Root_" 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 --- FOR INTERNAL USE ONLY ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS ROOT FIELDS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private ErrorHandler As Boolean
Private MinimalTraceLevel As Integer
Private TraceLogs() As Variant
Private TraceLogCount As Integer
Private TraceLogLast As Integer
Private TraceLogMaxEntries As Integer
Private LastErrorCode As Integer
Private LastErrorLevel As String
Private ErrorText As String
Private ErrorLongText As String
Private CalledSub As String
Private DebugPrintShort As Boolean
Private Introspection As Object &apos; com.sun.star.beans.Introspection
Private VersionNumber As String &apos; Actual Access2Base version number
Private Locale As String
Private ExcludeA2B As Boolean
Private TextSearch As Object
Private SearchOptions As Variant
Private FindRecord As Object
Private StatusBar As Object
Private Dialogs As Object &apos; Collection
Private TempVars As Object &apos; Collection
Private CurrentDoc() As Variant &apos; Array of document containers - [0] = Base document, [1 ... N] = other documents
Private PythonCache() As Variant &apos; Array of objects created in Python scripts
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
VersionNumber = Access2Base_Version
ErrorHandler = True
MinimalTraceLevel = 0
TraceLogs() = Array()
TraceLogCount = 0
TraceLogLast = 0
TraceLogMaxEntries = 0
LastErrorCode = 0
LastErrorLevel = &quot;&quot;
ErrorText = &quot;&quot;
ErrorLongText = &quot;&quot;
CalledSub = &quot;&quot;
DebugPrintShort = True
Locale = L10N._GetLocale()
ExcludeA2B = True
Set Introspection = CreateUnoService(&quot;com.sun.star.beans.Introspection&quot;)
Set TextSearch = CreateUnoService(&quot;com.sun.star.util.TextSearch&quot;)
SearchOptions = New com.sun.star.util.SearchOptions
With SearchOptions
.algorithmType = com.sun.star.util.SearchAlgorithms.REGEXP
.searchFlag = 0
.transliterateFlags = com.sun.star.i18n.TransliterationModules.IGNORE_CASE
End With
Set FindRecord = Nothing
Set StatusBar = Nothing
Set Dialogs = New Collection
Set TempVars = New Collection
CurrentDoc = Array()
ReDim CurrentDoc(0 To 0)
Set CurrentDoc(0) = Nothing
PythonCache = Array()
End Sub &apos; Constructor
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Terminate()
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 -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Public Function AddPython(ByRef pvObject As Variant) As Long
&apos; Store the object as a new entry in PythonCache and return its entry number
Dim lVars As Long, vObject As Variant
lVars = UBound(PythonCache) + 1
ReDim Preserve PythonCache(0 To lVars)
PythonCache(lVars) = pvObject
AddPython = lVars
End Function &apos; AddPython V6.4
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub CloseConnection()
&apos; Close all connections established by current document to free memory.
&apos; - if Base document =&gt; close the one concerned database connection
&apos; - if non-Base documents =&gt; close the connections of each individual standalone form
Dim i As Integer, iCurrentDoc As Integer
Dim vDbContainer As Variant, vDbContainers() As Variant, vDocContainer As Variant
If ErrorHandler Then On Local Error Goto Error_Sub
If Not IsArray(CurrentDoc) Then Goto Exit_Sub
If UBound(CurrentDoc) &lt; 0 Then Goto Exit_Sub
iCurrentDoc = CurrentDocIndex( , False) &apos; False prevents error raising if not found
If iCurrentDoc &lt; 0 Then GoTo Exit_Sub &apos; If not found ignore
vDocContainer = CurrentDocument(iCurrentDoc)
With vDocContainer
If Not .Active Then GoTo Exit_Sub &apos; e.g. if multiple calls to CloseConnection()
For i = 0 To UBound(.DbContainers)
If Not IsNull(.DbContainers(i).Database) Then
.DbContainers(i).Database.Dispose()
Set .DbContainers(i).Database = Nothing
End If
TraceLog(TRACEANY, UCase(CalledSub) &amp; &quot; &quot; &amp; .URL &amp; Iif(i = 0, &quot;&quot;, &quot; Form=&quot; &amp; .DbContainers(i).FormName), False)
Set .DbContainers(i) = Nothing
Next i
.DbContainers = Array()
.URL = &quot;&quot;
.DbConnect = 0
.Active = False
Set .Document = Nothing
End With
CurrentDoc(iCurrentDoc) = vDocContainer
Exit_Sub:
Exit Sub
Error_Sub:
TraceError(TRACEABORT, Err, CalledSub, Erl, False) &apos; No error message addressed to the user, only stored in console
GoTo Exit_Sub
End Sub &apos; CloseConnection
REM -----------------------------------------------------------------------------------------------------------------------
Public Function CurrentDb() As Object
&apos; Returns _A2B_.CurrentDocument().Database as an object to allow access to its properties
Dim iCurrentDoc As Integer
Set CurrentDb = Nothing
If Not IsArray(CurrentDoc) Then Goto Exit_Function
If UBound(CurrentDoc) &lt; 0 Then Goto Exit_Function
iCurrentDoc = CurrentDocIndex(, False) &apos; False = no abort
If iCurrentDoc &gt;= 0 Then
If UBound(CurrentDoc(iCurrentDoc).DbContainers) &gt;= 0 Then Set CurrentDb = CurrentDoc(iCurrentDoc).DbContainers(0).Database
End If
Exit_Function:
Exit Function
End Function &apos; CurrentDb
REM -----------------------------------------------------------------------------------------------------------------------
Public Function CurrentDocIndex(Optional pvURL As Variant, Optional pbAbort As Variant) As Integer
&apos; Returns the entry in CurrentDoc(...) referring to the current document
Dim i As Integer, bFound As Boolean, sURL As String
Const cstBase = &quot;com.sun.star.comp.dba.ODatabaseDocument&quot;
bFound = False
CurrentDocIndex = -1
If Not IsArray(CurrentDoc) Then Goto Trace_Error
If UBound(CurrentDoc) &lt; 0 Then Goto Trace_Error
For i = 1 To UBound(CurrentDoc) &apos; [0] reserved to database .odb document
If IsMissing(pvURL) Then &apos; Not on 1 single line ?!?
If Utils._hasUNOProperty(ThisComponent, &quot;URL&quot;) Then
sURL = ThisComponent.URL
Else
Exit For &apos; f.i. ThisComponent = Basic IDE ...
End If
Else
sURL = pvURL &apos; To support the SelectObject action
End If
If CurrentDoc(i).Active And CurrentDoc(i).URL = sURL Then
CurrentDocIndex = i
bFound = True
Exit For
End If
Next i
If Not bFound Then
If IsNull(CurrentDoc(0)) Then GoTo Trace_Error
With CurrentDoc(0)
If Not .Active Then GoTo Trace_Error
If IsNull(.Document) Then GoTo Trace_Error
End With
CurrentDocIndex = 0
End If
Exit_Function:
Exit Function
Trace_Error:
If IsMissing(pbAbort) Then pbAbort = True
If pbAbort Then TraceError(TRACEABORT, ERRDBNOTCONNECTED, Utils._CalledSub(), 0, 1) Else CurrentDocIndex = -1
Goto Exit_Function
End Function &apos; CurrentDocIndex
REM -----------------------------------------------------------------------------------------------------------------------
Public Function CurrentDocument(ByVal Optional piDocIndex As Integer) As Variant
&apos; Returns the CurrentDoc(...) referring to the current document or to the argument
Dim iDocIndex As Integer
If IsMissing(piDocIndex) Then iDocIndex = CurrentDocIndex(, False) Else iDocIndex = piDocIndex
If iDocIndex &gt;= 0 And iDocIndex &lt;= UBound(CurrentDoc) Then Set CurrentDocument = CurrentDoc(iDocIndex) Else Set CurrentDocument = Nothing
End Function
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub Dump()
&apos; For debugging purposes
Dim i As Integer, j As Integer, vCurrentDoc As Variant
On Local Error Resume Next
DebugPrint &quot;Version&quot;, VersionNumber
DebugPrint &quot;TraceLevel&quot;, MinimalTraceLevel
DebugPrint &quot;TraceCount&quot;, TraceLogCount
DebugPrint &quot;CalledSub&quot;, CalledSub
If IsArray(CurrentDoc) Then
For i = 0 To UBound(CurrentDoc)
vCurrentDoc = CurrentDoc(i)
If Not IsNull(vCurrentDoc) Then
DebugPrint i, &quot;URL&quot;, vCurrentDoc.URL
For j = 0 To UBound(vCurrentDoc.DbContainers)
DebugPrint i, j, &quot;Form&quot;, vCurrentDoc.DbContainers(j).FormName
DebugPrint i, j, &quot;Database&quot;, vCurrentDoc.DbContainers(j).Database.Title
Next j
End If
Next i
End If
End Sub
REM -----------------------------------------------------------------------------------------------------------------------
Public Function hasItem(psCollType As String, ByVal psName As String) As Boolean
&apos; Return True if psName if in the collection
Dim oItem As Object
On Local Error Goto Error_Function &apos; Whatever ErrorHandler !
hasItem = True
Select Case psCollType
Case COLLALLDIALOGS
Set oItem = Dialogs.Item(UCase(psName))
Case COLLTEMPVARS
Set oItem = TempVars.Item(UCase(psName))
Case Else
hasItem = False
End Select
Exit_Function:
Exit Function
Error_Function: &apos; Item by key aborted
hasItem = False
GoTo Exit_Function
End Function &apos; hasItem
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _CurrentDb(ByVal Optional piDocEntry As Integer, ByVal Optional piDbEntry As Integer) As Variant
REM Without arguments same as CurrentDb() except that it generates an error if database not connected (internal use)
REM With 2 arguments return the corresponding entry in Root
Dim odbDatabase As Variant
If IsMissing(piDocEntry) Then
Set odbDatabase = CurrentDb()
Else
If Not IsArray(CurrentDoc) Then Goto Trace_Error
If piDocEntry &lt; 0 Or piDbEntry &lt; 0 Then Goto Trace_Error
If piDocEntry &gt; UBound(CurrentDoc) Then Goto Trace_Error
If piDbEntry &gt; UBound(CurrentDoc(piDocEntry).DbContainers) Then Goto Trace_Error
Set odbDatabase = CurrentDoc(piDocEntry).DbContainers(piDbEntry).Database
End If
If IsNull(odbDatabase) Then GoTo Trace_Error
Exit_Function:
Set _CurrentDb = odbDatabase
Exit Function
Trace_Error:
TraceError(TRACEABORT, ERRDBNOTCONNECTED, Utils._CalledSub(), 0, 1)
Goto Exit_Function
End Function &apos; _CurrentDb
</script:module>

View File

@@ -0,0 +1,757 @@
<?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="SubForm" 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 SUBFORM
Private _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _Shortcut As String
Private _Name As String
Private _MainForm As String
Private _DocEntry As Integer
Private _DbEntry As Integer
Private _OrderBy As String
Public ParentComponent As Object &apos; com.sun.star.text.TextDocument
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 = OBJSUBFORM
Set _This = Nothing
Set _Parent = Nothing
_Shortcut = &quot;&quot;
_Name = &quot;&quot;
_MainForm = &quot;&quot;
_DocEntry = -1
_DbEntry = -1
_OrderBy = &quot;&quot;
Set ParentComponent = 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 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 LinkChildFields(ByVal Optional pvIndex As Variant) As Variant
If IsMissing(pvIndex) Then LinkChildFields = _PropertyGet(&quot;LinkChildFields&quot;) Else LinkChildFields = _PropertyGet(&quot;LinkChildFields&quot;, pvIndex)
End Property &apos; LinkChildFields (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get LinkMasterFields(ByVal Optional pvIndex As Variant) As Variant
If IsMissing(pvIndex) Then LinkMasterFields = _PropertyGet(&quot;LinkMasterFields&quot;) Else LinkMasterFields = _PropertyGet(&quot;LinkMasterFields&quot;, pvIndex)
End Property &apos; LinkMasterFields (get)
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 OnApproveCursorMove() As Variant
OnApproveCursorMove = _PropertyGet(&quot;OnApproveCursorMove&quot;)
End Property &apos; OnApproveCursorMove (get)
Property Let OnApproveCursorMove(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnApproveCursorMove&quot;, pvValue)
End Property &apos; OnApproveCursorMove (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnApproveParameter() As Variant
OnApproveParameter = _PropertyGet(&quot;OnApproveParameter&quot;)
End Property &apos; OnApproveParameter (get)
Property Let OnApproveParameter(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnApproveParameter&quot;, pvValue)
End Property &apos; OnApproveParameter (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnApproveReset() As Variant
OnApproveReset = _PropertyGet(&quot;OnApproveReset&quot;)
End Property &apos; OnApproveReset (get)
Property Let OnApproveReset(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnApproveReset&quot;, pvValue)
End Property &apos; OnApproveReset (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnApproveRowChange() As Variant
OnApproveRowChange = _PropertyGet(&quot;OnApproveRowChange&quot;)
End Property &apos; OnApproveRowChange (get)
Property Let OnApproveRowChange(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnApproveRowChange&quot;, pvValue)
End Property &apos; OnApproveRowChange (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnApproveSubmit() As Variant
OnApproveSubmit = _PropertyGet(&quot;OnApproveSubmit&quot;)
End Property &apos; OnApproveSubmit (get)
Property Let OnApproveSubmit(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnApproveSubmit&quot;, pvValue)
End Property &apos; OnApproveSubmit (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnConfirmDelete() As Variant
OnConfirmDelete = _PropertyGet(&quot;OnConfirmDelete&quot;)
End Property &apos; OnConfirmDelete (get)
Property Let OnConfirmDelete(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnConfirmDelete&quot;, pvValue)
End Property &apos; OnConfirmDelete (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnCursorMoved() As Variant
OnCursorMoved = _PropertyGet(&quot;OnCursorMoved&quot;)
End Property &apos; OnCursorMoved (get)
Property Let OnCursorMoved(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnCursorMoved&quot;, pvValue)
End Property &apos; OnCursorMoved (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnErrorOccurred() As Variant
OnErrorOccurred = _PropertyGet(&quot;OnErrorOccurred&quot;)
End Property &apos; OnErrorOccurred (get)
Property Let OnErrorOccurred(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnErrorOccurred&quot;, pvValue)
End Property &apos; OnErrorOccurred (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnLoaded() As Variant
OnLoaded = _PropertyGet(&quot;OnLoaded&quot;)
End Property &apos; OnLoaded (get)
Property Let OnLoaded(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnLoaded&quot;, pvValue)
End Property &apos; OnLoaded (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnReloaded() As Variant
OnReloaded = _PropertyGet(&quot;OnReloaded&quot;)
End Property &apos; OnReloaded (get)
Property Let OnReloaded(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnReloaded&quot;, pvValue)
End Property &apos; OnReloaded (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnReloading() As Variant
OnReloading = _PropertyGet(&quot;OnReloading&quot;)
End Property &apos; OnReloading (get)
Property Let OnReloading(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnReloading&quot;, pvValue)
End Property &apos; OnReloading (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnResetted() As Variant
OnResetted = _PropertyGet(&quot;OnResetted&quot;)
End Property &apos; OnResetted (get)
Property Let OnResetted(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnResetted&quot;, pvValue)
End Property &apos; OnResetted (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnRowChanged() As Variant
OnRowChanged = _PropertyGet(&quot;OnRowChanged&quot;)
End Property &apos; OnRowChanged (get)
Property Let OnRowChanged(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnRowChanged&quot;, pvValue)
End Property &apos; OnRowChanged (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnUnloaded() As Variant
OnUnloaded = _PropertyGet(&quot;OnUnloaded&quot;)
End Property &apos; OnUnloaded (get)
Property Let OnUnloaded(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnUnloaded&quot;, pvValue)
End Property &apos; OnUnloaded (set)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get OnUnloading() As Variant
OnUnloading = _PropertyGet(&quot;OnUnloading&quot;)
End Property &apos; OnUnloading (get)
Property Let OnUnloading(ByVal pvValue As Variant)
Call _PropertySet(&quot;OnUnloading&quot;, pvValue)
End Property &apos; OnUnloading (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;SubForm.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, CTLPARENTISSUBFORM, ParentComponent, 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, cstThisSub, Erl)
GoTo Exit_Function
End Function &apos; OptionGroup V1.1.0
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 Parent() As Object
Utils._SetCalledSub(&quot;SubForm.getParent&quot;)
On Error Goto Error_Function
Set Parent = _Parent
Exit_Function:
Utils._ResetCalledSub(&quot;SubForm.getParent&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;SubForm.getParent&quot;, Erl)
Set Parent = Nothing
GoTo Exit_Function
End Function &apos; Parent
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, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, 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 -----------------------------------------------------------------------------------------------------------------------
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;SubForm.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
iControlCount = DatabaseForm.getCount()
If IsMissing(pvIndex) Then &apos; No argument, return Collection pseudo-object
Set oCounter = New Collect
Set oCounter._This = oCounter
oCounter._CollType = COLLCONTROLS
oCounter._Parent = _This
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
Set ocControl = New Control
Set ocControl._This = ocControl
Set ocControl._Parent = _This
ocControl._ParentType = CTLPARENTISSUBFORM
sParentShortcut = _Shortcut
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
With ocControl
._Shortcut = sParentShortcut &amp; &quot;!&quot; &amp; Utils._Surround(._Name)
Set .ControlModel = DatabaseForm.getByName(._Name)
._ImplementationName = .ControlModel.getImplementationName()
._FormComponent = ParentComponent
If Utils._hasUNOProperty(.ControlModel, &quot;ClassId&quot;) Then ._ClassId = .ControlModel.ClassId
If ._ClassId &gt; 0 And ._ClassId &lt;&gt; acHiddenControl Then
Set .ControlView = ParentComponent.CurrentController.getControl(.ControlModel)
End If
._Initialize()
._DocEntry = _DocEntry
._DbEntry = _DbEntry
End With
Set Controls = ocControl
Exit_Function:
Utils._ResetCalledSub(&quot;SubForm.Controls&quot;)
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, _Name))
Set Controls = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;SubForm.Controls&quot;, Erl)
Set Controls = Nothing
GoTo Exit_Function
End Function &apos; Controls 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;SubForm.getProperty&quot;)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(&quot;SubForm.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 Refresh() As Boolean
&apos; Refresh data with its most recent value in the database in a form or subform
Utils._SetCalledSub(&quot;SubForm.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;SubForm.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;SubForm.Requery&quot;)
If _ErrorHandler() Then On Local Error Goto Error_Function
Requery = False
DatabaseForm.reload()
Requery = True
Exit_Function:
Utils._ResetCalledSub(&quot;SubForm.Requery&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;SubForm.Requery&quot;, Erl)
GoTo Exit_Function
End Function &apos; Requery
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;SubForm.setProperty&quot;)
setProperty = _PropertySet(psProperty, pvValue)
Utils._ResetCalledSub(&quot;SubForm.setProperty&quot;)
End Function
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _GetListener(ByVal psProperty As String) As String
&apos; Return the X...Listener corresponding with the property in argument
Select Case UCase(psProperty)
Case UCase(&quot;OnApproveCursorMove&quot;)
_GetListener = &quot;XRowSetApproveListener&quot;
Case UCase(&quot;OnApproveParameter&quot;)
_GetListener = &quot;XDatabaseParameterListener&quot;
Case UCase(&quot;OnApproveReset&quot;), UCase(&quot;OnResetted&quot;)
_GetListener = &quot;XResetListener&quot;
Case UCase(&quot;OnApproveRowChange&quot;)
_GetListener = &quot;XRowSetApproveListener&quot;
Case UCase(&quot;OnApproveSubmit&quot;)
_GetListener = &quot;XSubmitListener&quot;
Case UCase(&quot;OnConfirmDelete&quot;)
_GetListener = &quot;XConfirmDeleteListener&quot;
Case UCase(&quot;OnCursorMoved&quot;), UCase(&quot;OnRowChanged&quot;)
_GetListener = &quot;XRowSetListener&quot;
Case UCase(&quot;OnErrorOccurred&quot;)
_GetListener = &quot;XSQLErrorListener&quot;
Case UCase(&quot;OnLoaded&quot;), UCase(&quot;OnReloaded&quot;), UCase(&quot;OnReloading&quot;), UCase(&quot;OnUnloaded&quot;), UCase(&quot;OnUnloading&quot;)
_GetListener = &quot;XLoadListener&quot;
End Select
End Function &apos; _GetListener V1.7.0
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
_PropertiesList = Array(&quot;AllowAdditions&quot;, &quot;AllowDeletions&quot;, &quot;AllowEdits&quot;, &quot;CurrentRecord&quot; _
, &quot;Filter&quot;, &quot;FilterOn&quot;, &quot;LinkChildFields&quot;, &quot;LinkMasterFields&quot;, &quot;Name&quot; _
, &quot;ObjectType&quot;, &quot;OnApproveCursorMove&quot;, &quot;OnApproveParameter&quot; _
, &quot;OnApproveReset&quot;, &quot;OnApproveRowChange&quot;, &quot;OnApproveSubmit&quot;, &quot;OnConfirmDelete&quot; _
, &quot;OnCursorMoved&quot;, &quot;OnErrorOccurred&quot;, &quot;OnLoaded&quot;, &quot;OnReloaded&quot;, &quot;OnReloading&quot; _
, &quot;OnResetted&quot;, &quot;OnRowChanged&quot;, &quot;OnUnloaded&quot;, &quot;OnUnloading&quot;, &quot;OrderBy&quot; _
, &quot;OrderByOn&quot;, &quot;Parent&quot;, &quot;RecordSource&quot; _
) &apos; Recordset removed
End Function &apos; _PropertiesList
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertyGet(ByVal psProperty As String, ByVal Optional pvIndex As Variant) As Variant
&apos; Return property value of the psProperty property name
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;SubForm.get&quot; &amp; psProperty)
Dim iArgNr As Integer
If Not IsMissing(pvIndex) Then
Select Case UCase(_A2B_.CalledSub)
Case UCase(&quot;getProperty&quot;) : iArgNr = 3
Case UCase(&quot;SubForm.getProperty&quot;) : iArgNr = 2
Case UCase(&quot;SubForm.get&quot; &amp; psProperty) : iArgNr = 1
End Select
If Not Utils._CheckArgument(pvIndex, iArgNr, Utils._AddNumeric()) Then Goto Exit_Function
End If
&apos;Execute
Dim oDatabase As Object, vBookmark As Variant, oObject As Object
_PropertyGet = EMPTY
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;CurrentRecord&quot;)
_PropertyGet = DatabaseForm.Row
Case UCase(&quot;Filter&quot;)
_PropertyGet = DatabaseForm.Filter
Case UCase(&quot;FilterOn&quot;)
_PropertyGet = DatabaseForm.ApplyFilter
Case UCase(&quot;LinkChildFields&quot;)
If Utils._hasUNOProperty(DatabaseForm, &quot;DetailFields&quot;) Then
If IsMissing(pvIndex) Then
_PropertyGet = DatabaseForm.DetailFields
Else
If pvIndex &lt; 0 Or pvIndex &gt; UBound(DatabaseForm.DetailFields) Then Goto trace_Error_Index
_PropertyGet = DatabaseForm.DetailFields(pvIndex)
End If
End If
Case UCase(&quot;LinkMasterFields&quot;)
If Utils._hasUNOProperty(DatabaseForm, &quot;MasterFields&quot;) Then
If IsMissing(pvIndex) Then
_PropertyGet = DatabaseForm.MasterFields
Else
If pvIndex &lt; 0 Or pvIndex &gt; UBound(DatabaseForm.MasterFields) Then Goto trace_Error_Index
_PropertyGet = DatabaseForm.MasterFields(pvIndex)
End If
End If
Case UCase(&quot;Name&quot;)
_PropertyGet = _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;OnApproveCursorMove&quot;), UCase(&quot;OnApproveParameter&quot;), UCase(&quot;OnApproveReset&quot;), UCase(&quot;OnApproveRowChange&quot;) _
, UCase(&quot;OnApproveSubmit&quot;), UCase(&quot;OnConfirmDelete&quot;), UCase(&quot;OnCursorMoved&quot;), UCase(&quot;OnErrorOccurred&quot;) _
, UCase(&quot;OnLoaded&quot;), UCase(&quot;OnReloaded&quot;), UCase(&quot;OnReloading&quot;), UCase(&quot;OnResetted&quot;), UCase(&quot;OnRowChanged&quot;) _
, UCase(&quot;OnUnloaded&quot;), UCase(&quot;OnUnloading&quot;)
_PropertyGet = Utils._GetEventScriptCode(DatabaseForm, psProperty, _Name)
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;Parent&quot;) &apos; Only for indirect access from property object
_PropertyGet = Parent
Case UCase(&quot;Recordset&quot;)
If DatabaseForm.Command = &quot;&quot; Then Goto Trace_Error &apos; No underlying data ??
Set oObject = New Recordset
With DatabaseForm
Set oObject._This = oObject
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
Set _PropertyGet = oObject
Case UCase(&quot;RecordSource&quot;)
_PropertyGet = DatabaseForm.Command
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;SubForm.get&quot; &amp; psProperty)
Exit Function
Trace_Error:
TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = EMPTY
Goto Exit_Function
Trace_Error_Index:
TraceError(TRACEFATAL, ERRINDEXVALUE, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = EMPTY
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;SubForm._PropertyGet&quot;, Erl)
_PropertyGet = EMPTY
GoTo Exit_Function
End Function &apos; _PropertyGet
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean
Utils._SetCalledSub(&quot;SubForm.set&quot; &amp; psProperty)
If _ErrorHandler() Then On Local Error Goto Error_Function
_PropertySet = True
&apos;Execute
Dim iArgNr As Integer
If _IsLeft(_A2B_.CalledSub, &quot;SubForm.&quot;) Then iArgNr = 1 Else iArgNr = 2
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;CurrentRecord&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) 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;OnApproveCursorMove&quot;), UCase(&quot;OnApproveParameter&quot;), UCase(&quot;OnApproveReset&quot;), UCase(&quot;OnApproveRowChange&quot;) _
, UCase(&quot;OnApproveSubmit&quot;), UCase(&quot;OnConfirmDelete&quot;), UCase(&quot;OnCursorMoved&quot;), UCase(&quot;OnErrorOccurred&quot;) _
, UCase(&quot;OnLoaded&quot;), UCase(&quot;OnReloaded&quot;), UCase(&quot;OnReloading&quot;), UCase(&quot;OnResetted&quot;), UCase(&quot;OnRowChanged&quot;) _
, UCase(&quot;OnUnloaded&quot;), UCase(&quot;OnUnloading&quot;)
If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
If Not Utils._RegisterEventScript(DatabaseForm _
, psProperty _
, _GetListener(psProperty) _
, pvValue, _Name _
) Then GoTo Trace_Error
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 Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;SubForm.set&quot; &amp; psProperty)
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;SubForm._PropertySet&quot;, Erl)
_PropertySet = False
GoTo Exit_Function
End Function &apos; _PropertySet
</script:module>

View File

@@ -0,0 +1,195 @@
<?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="TempVar" 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 TEMPVAR
Private _This As Object &apos; Workaround for absence of This builtin function
Private _Parent As Object
Private _Name As String
Private _Value As Variant
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CONSTRUCTORS / DESTRUCTORS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
_Type = OBJTEMPVAR
Set _This = Nothing
Set _Parent = Nothing
_Name = &quot;&quot;
_Value = Null
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 Name() As String
Name = _PropertyGet(&quot;Name&quot;)
End Property &apos; Name (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get ObjectType() As String
ObjectType = _PropertyGet(&quot;ObjectType&quot;)
End Property &apos; ObjectType (get)
REM -----------------------------------------------------------------------------------------------------------------------
Property Get Value() As Variant
Value = _PropertyGet(&quot;Value&quot;)
End Property &apos; Value (get)
Property Let Value(ByVal pvValue As Variant)
Call _PropertySet(&quot;Value&quot;, pvValue)
End Property &apos; Value (set)
REM -----------------------------------------------------------------------------------------------------------------------
REM --- CLASS METHODS ---
REM -----------------------------------------------------------------------------------------------------------------------
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
&apos; Return property value of psProperty property name
Utils._SetCalledSub(&quot;TempVar.getProperty&quot;)
If IsMissing(pvProperty) Then Call _TraceArguments()
getProperty = _PropertyGet(pvProperty)
Utils._ResetCalledSub(&quot;TempVar.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 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, _This, vPropertiesList)
Else
vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
End If
Exit_Function:
Set Properties = vProperty
Exit Function
End Function &apos; Properties
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;TempVar.getProperty&quot;)
setProperty = _PropertySet(psProperty, pvValue)
Utils._ResetCalledSub(&quot;TempVar.getProperty&quot;)
End Function
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertiesList() As Variant
_PropertiesList = Array(&quot;Name&quot;, &quot;ObjectType&quot;, &quot;Value&quot;)
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;TempVar.get&quot; &amp; psProperty)
_PropertyGet = Nothing
Select Case UCase(psProperty)
Case UCase(&quot;Name&quot;)
_PropertyGet = _Name
Case UCase(&quot;ObjectType&quot;)
_PropertyGet = _Type
Case UCase(&quot;Value&quot;)
_PropertyGet = _Value
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;TempVar.get&quot; &amp; psProperty)
Exit Function
Trace_Error:
TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, 1, psProperty)
_PropertyGet = Nothing
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;TempVar._PropertyGet&quot;, Erl)
_PropertyGet = Nothing
GoTo Exit_Function
End Function &apos; _PropertyGet
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean
Utils._SetCalledSub(&quot;TempVar.set&quot; &amp; psProperty)
If _ErrorHandler() Then On Local Error Goto Error_Function
_PropertySet = True
&apos;Execute
Dim iArgNr As Integer
If _IsLeft(_A2B_.CalledSub, &quot;TempVar.&quot;) Then iArgNr = 1 Else iArgNr = 2
Select Case UCase(psProperty)
Case UCase(&quot;Value&quot;)
_Value = pvValue
_A2B_.TempVars.Item(UCase(_Name)).Value = pvValue
Case Else
Goto Trace_Error
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;TempVar.set&quot; &amp; psProperty)
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;TempVar._PropertySet&quot;, Erl)
_PropertySet = False
GoTo Exit_Function
End Function &apos; _PropertySet
</script:module>

View File

@@ -0,0 +1,14 @@
<?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="Test" script:language="StarBasic">Option Explicit
&apos;Option Compatible
Sub Main
Dim a, b()
_ErrorHandler(False)
&apos; DebugPrint vbLF
&apos; TraceConsole()
exit sub
End Sub
</script:module>

View File

@@ -0,0 +1,438 @@
<?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="Trace" 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 Explicit
Public Const cstLogMaxEntries = 99
REM Typical Usage
REM TraceLog(&quot;INFO&quot;, &quot;The OK button was pressed&quot;)
REM
REM Typical Usage for error logging
REM Sub MySub()
REM On Local Error GoTo Error_Sub
REM ...
REM Exit_Sub:
REM Exit Sub
REM Error_Sub:
REM TraceError(&quot;ERROR&quot;, Err, &quot;MySub&quot;, Erl)
REM GoTo Exit_Sub
REM End Sub
REM
REM To display the current logged traces and/or to set parameters
REM TraceConsole()
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub TraceConsole()
&apos; Display the Trace dialog with current trace log values and parameter choices
If _ErrorHandler() Then On Local Error Goto Error_Sub
Dim sLineBreak As String, oTraceDialog As Object
sLineBreak = vbNewLine
Set oTraceDialog = CreateUnoDialog(Utils._GetDialogLib().dlgTrace)
oTraceDialog.Title = _GetLabel(&quot;DLGTRACE_TITLE&quot;)
oTraceDialog.Model.HelpText = _GetLabel(&quot;DLGTRACE_HELP&quot;)
Dim oEntries As Object, oTraceLog As Object, oClear As Object, oMinLevel As Object, oNbEntries As Object, oDump As Object
Dim oControl As Object
Dim i As Integer, sText As String, iOKCancel As Integer
Set oNbEntries = oTraceDialog.Model.getByName(&quot;numNbEntries&quot;)
oNbEntries.Value = _A2B_.TraceLogCount
oNbEntries.HelpText = _GetLabel(&quot;DLGTRACE_LBLNBENTRIES_HELP&quot;)
Set oControl = oTraceDialog.Model.getByName(&quot;lblNbEntries&quot;)
oControl.Label = _GetLabel(&quot;DLGTRACE_LBLNBENTRIES_LABEL&quot;)
oControl.HelpText = _GetLabel(&quot;DLGTRACE_LBLNBENTRIES_HELP&quot;)
Set oEntries = oTraceDialog.Model.getByName(&quot;numEntries&quot;)
If _A2B_.TraceLogMaxEntries = 0 Then _A2B_.TraceLogMaxEntries = cstLogMaxEntries
oEntries.Value = _A2B_.TraceLogMaxEntries
oEntries.HelpText = _GetLabel(&quot;DLGTRACE_LBLENTRIES_HELP&quot;)
Set oControl = oTraceDialog.Model.getByName(&quot;lblEntries&quot;)
oControl.Label = _GetLabel(&quot;DLGTRACE_LBLENTRIES_LABEL&quot;)
oControl.HelpText = _GetLabel(&quot;DLGTRACE_LBLENTRIES_HELP&quot;)
Set oDump = oTraceDialog.Model.getByName(&quot;cmdDump&quot;)
oDump.Enabled = 0
oDump.Label = _GetLabel(&quot;DLGTRACE_CMDDUMP_LABEL&quot;)
oDump.HelpText = _GetLabel(&quot;DLGTRACE_CMDDUMP_HELP&quot;)
Set oTraceLog = oTraceDialog.Model.getByName(&quot;txtTraceLog&quot;)
oTraceLog.HelpText = _GetLabel(&quot;DLGTRACE_TXTTRACELOG_HELP&quot;)
If UBound(_A2B_.TraceLogs) &gt;= 0 Then &apos; Array yet initialized
oTraceLog.HardLineBreaks = True
sText = &quot;&quot;
If _A2B_.TraceLogCount &gt; 0 Then
If _A2B_.TraceLogCount &lt; _A2B_.TraceLogMaxEntries Then i = -1 Else i = _A2B_.TraceLogLast
Do
If i &lt; _A2B_.TraceLogMaxEntries - 1 Then i = i + 1 Else i = 0
If Len(_A2B_.TraceLogs(i)) &gt; 11 Then
sText = sText &amp; Right(_A2B_.TraceLogs(i), Len(_A2B_.TraceLogs(i)) - 11) &amp; sLineBreak &apos; Skip date in display
End If
Loop While i &lt;&gt; _A2B_.TraceLogLast
oDump.Enabled = 1 &apos; Enable DumpToFile only if there is something to dump
End If
If Len(sText) &gt; 0 Then sText = Left(sText, Len(sText) - Len(sLineBreak)) &apos; Skip last linefeed
oTraceLog.Text = sText
Else
oTraceLog.Text = _GetLabel(&quot;DLGTRACE_TXTTRACELOG_TEXT&quot;)
End If
Set oClear = oTraceDialog.Model.getByName(&quot;chkClear&quot;)
oClear.State = 0 &apos; Unchecked
oClear.HelpText = _GetLabel(&quot;DLGTRACE_LBLCLEAR_HELP&quot;)
Set oControl = oTraceDialog.Model.getByName(&quot;lblClear&quot;)
oControl.Label = _GetLabel(&quot;DLGTRACE_LBLCLEAR_LABEL&quot;)
oControl.HelpText = _GetLabel(&quot;DLGTRACE_LBLCLEAR_HELP&quot;)
Set oMinLevel = oTraceDialog.Model.getByName(&quot;cboMinLevel&quot;)
If _A2B_.MinimalTraceLevel = 0 Then _A2B_.MinimalTraceLevel = _TraceLevel(TRACEERRORS)
oMinLevel.Text = _TraceLevel(_A2B_.MinimalTraceLevel)
oMinLevel.HelpText = _GetLabel(&quot;DLGTRACE_LBLMINLEVEL_HELP&quot;)
Set oControl = oTraceDialog.Model.getByName(&quot;lblMinLevel&quot;)
oControl.Label = _GetLabel(&quot;DLGTRACE_LBLMINLEVEL_LABEL&quot;)
oControl.HelpText = _GetLabel(&quot;DLGTRACE_LBLMINLEVEL_HELP&quot;)
Set oControl = oTraceDialog.Model.getByName(&quot;cmdOK&quot;)
oControl.Label = _GetLabel(&quot;DLGTRACE_CMDOK_LABEL&quot;)
oControl.HelpText = _GetLabel(&quot;DLGTRACE_CMDOK_HELP&quot;)
Set oControl = oTraceDialog.Model.getByName(&quot;cmdCancel&quot;)
oControl.Label = _GetLabel(&quot;DLGTRACE_CMDCANCEL_LABEL&quot;)
oControl.HelpText = _GetLabel(&quot;DLGTRACE_CMDCANCEL_HELP&quot;)
iOKCancel = oTraceDialog.Execute()
Select Case iOKCancel
Case 1 &apos; OK
If oClear.State = 1 Then
_A2B_.TraceLogs() = Array() &apos; Erase logged traces
_A2B_.TraceLogCount = 0
End If
If oMinLevel.Text &lt;&gt; &quot;&quot; Then _A2B_.MinimalTraceLevel = _TraceLevel(oMinLevel.Text)
If oEntries.Value &lt;&gt; 0 And oEntries.Value &lt;&gt; _A2B_.TraceLogMaxEntries Then
_A2B_.TraceLogs() = Array()
_A2B_.TraceLogMaxEntries = oEntries.Value
End If
Case 0 &apos; Cancel
Case Else
End Select
Exit_Sub:
If Not IsNull(oTraceDialog) Then oTraceDialog.Dispose()
Exit Sub
Error_Sub:
With _A2B_
.TraceLogs() = Array()
.TraceLogCount = 0
.TraceLogLast = 0
End With
GoTo Exit_Sub
End Sub &apos; TraceConsole V1.1.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub TraceError(ByVal psErrorLevel As String _
, ByVal piErrorCode As Integer _
, ByVal psErrorProc As String _
, ByVal piErrorLine As Integer _
, ByVal Optional pvMsgBox As Variant _
, ByVal Optional pvArgs As Variant _
)
&apos; Store error code and description in trace rolling buffer
&apos; Display error message if errorlevel &gt;= ERROR
&apos; Stop program execution if errorlevel = FATAL or ABORT
On Local Error Resume Next
If IsEmpty(_A2B_) Then Call Application._RootInit() &apos; First use of Access2Base in current LibO/AOO session
Dim sErrorText As String, sErrorDesc As String, oDb As Object, bMsgBox As Boolean
sErrorDesc = _ErrorMessage(piErrorCode, pvArgs)
sErrorText = _GetLabel(&quot;ERR#&quot;) &amp; CStr(piErrorCode) _
&amp; &quot; (&quot; &amp; sErrorDesc &amp; &quot;) &quot; &amp; _GetLabel(&quot;ERROCCUR&quot;) _
&amp; Iif(piErrorLine &gt; 0, &quot; &quot; &amp; _GetLabel(&quot;ERRLINE&quot;) &amp; &quot; &quot; &amp; CStr(piErrorLine), &quot;&quot;) _
&amp; Iif(psErrorProc &lt;&gt; &quot;&quot;, &quot; &quot; &amp; _GetLabel(&quot;ERRIN&quot;) &amp; &quot; &quot; &amp; psErrorProc, Iif(_A2B_.CalledSub = &quot;&quot;, &quot;&quot;, &quot; &quot; &amp; _Getlabel(&quot;ERRIN&quot;) &amp; &quot; &quot; &amp; _A2B_.CalledSub))
With _A2B_
.LastErrorCode = piErrorCode
.LastErrorLevel = psErrorLevel
.ErrorText = sErrorDesc
.ErrorLongText = sErrorText
.CalledSub = &quot;&quot;
End With
If VarType(pvMsgBox) = vbError Then
bMsgBox = ( psErrorLevel = TRACEERRORS Or psErrorLevel = TRACEFATAL Or psErrorLevel = TRACEABORT )
ElseIf IsMissing(pvMsgBox) Then
bMsgBox = ( psErrorLevel = TRACEERRORS Or psErrorLevel = TRACEFATAL Or psErrorLevel = TRACEABORT )
Else
bMsgBox = pvMsgBox
End If
TraceLog(psErrorLevel, sErrorText, bMsgBox)
&apos; Unexpected error detected in user program or in Access2Base
If psErrorLevel = TRACEFATAL Or psErrorLevel = TRACEABORT Then
If psErrorLevel = TRACEFATAL Then
Set oDb = _A2B_.CurrentDb()
If Not IsNull(oDb) Then oDb.CloseAllrecordsets()
End If
Stop
End If
End Sub &apos; TraceError V0.9.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function TraceErrorCode() As Variant
&apos; Return the last encountered error code, level, description in an array
&apos; UNPUBLISHED
Dim vError As Variant
With _A2B_
vError = Array( _
.LastErrorCode _
, .LastErrorLevel _
, .ErrorText _
, .ErrorLongText _
)
End With
TraceErrorCode = vError
End Function &apos; TraceErrorCode V6.3
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub TraceLevel(ByVal Optional psTraceLevel As String)
&apos; Set trace level to argument
If _ErrorHandler() Then On Local Error Goto Error_Sub
Select Case True
Case IsMissing(psTraceLevel) : psTraceLevel = &quot;ERROR&quot;
Case psTraceLevel = &quot;&quot; : psTraceLevel = &quot;ERROR&quot;
Case Utils._InList(UCase(psTraceLevel), Array( _
TRACEDEBUG, TRACEINFO, TRACEWARNING, TRACEERRORS, TRACEFATAL, TRACEABORT _
))
Case Else : Goto Exit_Sub
End Select
_A2B_.MinimalTraceLevel = _TraceLevel(psTraceLevel)
Exit_Sub:
Exit Sub
Error_Sub:
With _A2B_
.TraceLogs() = Array()
.TraceLogCount = 0
.TraceLogLast = 0
End With
GoTo Exit_Sub
End Sub &apos; TraceLevel V0.9.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub TraceLog(ByVal psTraceLevel As String _
, ByVal psText As String _
, ByVal Optional pbMsgBox As Boolean _
)
&apos; Store Text in trace log (circular buffer)
If _ErrorHandler() Then On Local Error Goto Error_Sub
Dim vTraceLogs() As String, sTraceLevel As String
With _A2B_
If .MinimalTraceLevel = 0 Then .MinimalTraceLevel = _TraceLevel(TRACEERRORS)
If _TraceLevel(psTraceLevel) &lt; .MinimalTraceLevel Then Exit Sub
If UBound(.TraceLogs) = -1 Then &apos; Initialize TraceLog
If .TraceLogMaxEntries = 0 Then .TraceLogMaxEntries = cstLogMaxEntries
Redim vTraceLogs(0 To .TraceLogMaxEntries - 1)
.TraceLogs = vTraceLogs
.TraceLogCount = 0
.TraceLogLast = -1
If .MinimalTraceLevel = 0 Then .MinimalTraceLevel = _TraceLevel(TRACEERRORS) &apos; Set default value
End If
.TraceLogLast = .TraceLogLast + 1
If .TraceLogLast &gt; UBound(.TraceLogs) Then .TraceLogLast = LBound(.TraceLogs) &apos; Circular buffer
If Len(psTraceLevel) &gt; 7 Then sTraceLevel = Left(psTraceLevel, 7) Else sTraceLevel = psTraceLevel &amp; Spc(8 - Len(psTraceLevel))
.TraceLogs(.TraceLogLast) = Format(Now(), &quot;YYYY-MM-DD hh:mm:ss&quot;) &amp; &quot; &quot; &amp; sTraceLevel &amp; psText
If .TraceLogCount &lt;= UBound(.TraceLogs) Then .TraceLogCount = .TraceLogCount + 1 &apos; # of active entries
End With
If IsMissing(pbMsgBox) Then pbMsgBox = True
Dim iMsgBox As Integer
If pbMsgBox Then
Select Case psTraceLevel
Case TRACEINFO: iMsgBox = vbInformation
Case TRACEERRORS, TRACEWARNING: iMsgBox = vbExclamation
Case TRACEFATAL, TRACEABORT: iMsgBox = vbCritical
Case Else: iMsgBox = vbInformation
End Select
MsgBox psText, vbOKOnly + iMsgBox, psTraceLevel
End If
Exit_Sub:
Exit Sub
Error_Sub:
With _A2B_
.TraceLogs() = Array()
.TraceLogCount = 0
.TraceLogLast = 0
End With
GoTo Exit_Sub
End Sub &apos; TraceLog V0.9.5
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub _DumpToFile(oEvent As Object)
&apos; Execute the Dump To File command from the Trace dialog
&apos; Modified from Andrew Pitonyak&apos;s Base Macro Programming §10.4
If _ErrorHandler() Then On Local Error GoTo Error_Sub
Dim sPath as String, iFileNumber As Integer, i As Integer
sPath = _PromptFilePicker(&quot;txt&quot;)
If sPath &lt;&gt; &quot;&quot; Then &apos; Save button pressed
If UBound(_A2B_.TraceLogs) &gt;= 0 Then &apos; Array yet initialized
iFileNumber = FreeFile()
Open sPath For Append Access Write Lock Read As iFileNumber
If _A2B_.TraceLogCount &gt; 0 Then
If _A2B_.TraceLogCount &lt; _A2B_.TraceLogMaxEntries Then i = -1 Else i = _A2B_.TraceLogLast
Do
If i &lt; _A2B_.TraceLogMaxEntries - 1 Then i = i + 1 Else i = 0
Print #iFileNumber _A2B_.TraceLogs(i)
Loop While i &lt;&gt; _A2B_.TraceLogLast
End If
Close iFileNumber
MsgBox _GetLabel(&quot;SAVECONSOLEENTRIES&quot;), vbOK + vbInformation, _GetLabel(&quot;SAVECONSOLE&quot;)
End If
End If
Exit_Sub:
Exit Sub
Error_Sub:
TraceError(&quot;ERROR&quot;, Err, &quot;DumpToFile&quot;, Erl)
GoTo Exit_Sub
End Sub &apos; DumpToFile V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _ErrorHandler(Optional ByVal pbCheck As Boolean) As Boolean
&apos; Indicate if error handler is activated or not
&apos; When argument present set error handler
If IsEmpty(_A2B_) Then Call Application._RootInit() &apos; First use of Access2Base in current LibO/AOO session
If Not IsMissing(pbCheck) Then _A2B_.ErrorHandler = pbCheck
_ErrorHandler = _A2B_.ErrorHandler
Exit Function
End Function
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _ErrorMessage(ByVal piErrorNumber As Integer, Optional ByVal pvArgs As Variant) As String
&apos; Return error message corresponding to ErrorNumber (standard or not)
&apos; and replaces %0, %1, ... , %9 by psArgs(0), psArgs(1), ...
Dim sErrorMessage As String, i As Integer, sErrLabel
_ErrorMessage = &quot;&quot;
If piErrorNumber &gt; ERRINIT Then
sErrLabel = &quot;ERR&quot; &amp; piErrorNumber
sErrorMessage = _Getlabel(sErrLabel)
If Not IsMissing(pvArgs) Then
If Not IsArray(pvArgs) Then
sErrorMessage = Join(Split(sErrorMessage, &quot;%0&quot;), Utils._CStr(pvArgs, False))
Else
For i = LBound(pvArgs) To UBound(pvArgs)
sErrorMessage = Join(Split(sErrorMessage, &quot;%&quot; &amp; i), Utils._CStr(pvArgs(i), False))
Next i
End If
End If
Else
sErrorMessage = Error(piErrorNumber)
&apos; Most (or all?) error messages terminate with a &quot;.&quot;
If Len(sErrorMessage) &gt; 1 And Right(sErrorMessage, 1) = &quot;.&quot; Then sErrorMessage = Left(sErrorMessage, Len(sErrorMessage)-1)
End If
_ErrorMessage = sErrorMessage
Exit Function
End Function &apos; ErrorMessage V0.8.9
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _PromptFilePicker(ByVal psSuffix As String) As String
&apos; Prompt for output file name
&apos; Return &quot;&quot; if Cancel
&apos; Modified from Andrew Pitonyak&apos;s Base Macro Programming §10.4
If _ErrorHandler() Then On Local Error GoTo Error_Function
Dim oFileDialog as Object, oUcb as object, oPath As Object
Dim iAccept as Integer, sInitPath as String
Set oFileDialog = CreateUnoService(&quot;com.sun.star.ui.dialogs.FilePicker&quot;)
oFileDialog.Initialize(Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION))
Set oUcb = createUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
oFileDialog.appendFilter(&quot;*.&quot; &amp; psSuffix, &quot;*.&quot; &amp; psSuffix)
oFileDialog.appendFilter(&quot;*.*&quot;, &quot;*.*&quot;)
oFileDialog.setCurrentFilter(&quot;*.&quot; &amp; psSuffix)
Set oPath = createUnoService(&quot;com.sun.star.util.PathSettings&quot;)
sInitPath = oPath.Work &apos; Probably My Documents
If oUcb.Exists(sInitPath) Then oFileDialog.SetDisplayDirectory(sInitPath)
iAccept = oFileDialog.Execute()
_PromptFilePicker = &quot;&quot;
If iAccept = 1 Then &apos; Save button pressed
_PromptFilePicker = oFileDialog.Files(0)
End If
Exit_Function:
If Not IsEmpty(oFileDialog) And Not IsNull(oFileDialog) Then oFileDialog.Dispose()
Exit Function
Error_Function:
TraceError(&quot;ERROR&quot;, Err, &quot;PromptFilePicker&quot;, Erl)
GoTo Exit_Function
End Function &apos; PromptFilePicker V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub _TraceArguments(Optional psCall As String)
&apos; Process the ERRMISSINGARGUMENTS error
&apos; psCall is present if error detected before call to _SetCalledSub
If Not IsMissing(psCall) Then Utils._SetCalledSub(psCall)
TraceError(TRACEFATAL, ERRMISSINGARGUMENTS, Utils._CalledSub(), 0)
Exit Sub
End Sub &apos; TraceArguments
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _TraceLevel(ByVal pvTraceLevel As Variant) As Variant
&apos; Convert string trace level to numeric value or the opposite
Dim vTraces As Variant, i As Integer
vTraces = Array(TRACEDEBUG, TRACEINFO, TRACEWARNING, TRACEERRORS, TRACEFATAL, TRACEABORT, TRACEANY)
Select Case VarType(pvTraceLevel)
Case vbString
_TraceLevel = 4 &apos; 4 = Default
For i = 0 To UBound(vTraces)
If UCase(pvTraceLevel) = UCase(vTraces(i)) Then
_TraceLevel = i + 1
Exit For
End If
Next i
Case vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbBigint, vbDecimal
If pvTraceLevel &lt; 1 Or pvTraceLevel &gt; UBound(vTraces) + 1 Then _TraceLevel = TRACEERRORS Else _TraceLevel = vTraces(pvTraceLevel - 1)
End Select
End Function &apos; TraceLevel
</script:module>

View File

@@ -0,0 +1,331 @@
<?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="UtilProperty" 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 =======================================================================================================================
&apos;**********************************************************************
&apos; UtilProperty module
&apos;
&apos; Module of utilities to manipulate arrays of PropertyValue&apos;s.
&apos;**********************************************************************
&apos;**********************************************************************
&apos; Copyright (c) 2003-2004 Danny Brewer
&apos; d29583@groovegarden.com
&apos;**********************************************************************
&apos;**********************************************************************
&apos; If you make changes, please append to the change log below.
&apos;
&apos; Change Log
&apos; Danny Brewer Revised 2004-02-25-01
&apos; Jean-Pierre Ledure Adapted to Access2Base coding conventions
&apos; PropValuesToStr rewritten and addition of StrToPropValues
&apos; Bug corrected on date values
&apos; Addition of support of 2-dimensional arrays
&apos; Support of empty arrays to allow JSON conversions
&apos;**********************************************************************
Option Explicit
Private Const cstHEADER = &quot;### PROPERTYVALUES ###&quot;
Private Const cstEMPTYARRAY = &quot;### EMPTY ARRAY ###&quot;
REM =======================================================================================================================
Public Function _MakePropertyValue(ByVal Optional psName As String, Optional pvValue As Variant) As com.sun.star.beans.PropertyValue
&apos; Create and return a new com.sun.star.beans.PropertyValue.
Dim oPropertyValue As New com.sun.star.beans.PropertyValue
If Not IsMissing(psName) Then oPropertyValue.Name = psName
If Not IsMissing(pvValue) Then oPropertyValue.Value = _CheckPropertyValue(pvValue)
_MakePropertyValue() = oPropertyValue
End Function &apos; _MakePropertyValue V1.3.0
REM =======================================================================================================================
Public Function _CheckPropertyValue(ByRef pvValue As Variant) As Variant
&apos; Date BASIC variables give error. Change them to strings
&apos; Empty arrays should be replaced by cstEMPTYARRAY
If VarType(pvValue) = vbDate Then
_CheckPropertyValue = Utils._CStr(pvValue, False)
ElseIf IsArray(pvValue) Then
If UBound(pvValue, 1) &lt; LBound(pvValue, 1) Then _CheckPropertyValue = cstEMPTYARRAY Else _CheckPropertyValue = pvValue
Else
_CheckPropertyValue = pvValue
End If
End Function &apos; _CheckPropertyValue
REM =======================================================================================================================
Public Function _NumPropertyValues(ByRef pvPropertyValuesArray As Variant) As Integer
&apos; Return the number of PropertyValue&apos;s in an array.
&apos; Parameters:
&apos; pvPropertyValuesArray - an array of PropertyValue&apos;s, that is an array of com.sun.star.beans.PropertyValue.
&apos; Returns zero if the array contains no elements.
Dim iNumProperties As Integer
If Not IsArray(pvPropertyValuesArray) Then iNumProperties = 0 Else iNumProperties = UBound(pvPropertyValuesArray) + 1
_NumPropertyValues() = iNumProperties
End Function &apos; _NumPropertyValues V1.3.0
REM =======================================================================================================================
Public Function _FindPropertyIndex(ByRef pvPropertyValuesArray As Variant, ByVal psPropName As String ) As Integer
&apos; Find a particular named property from an array of PropertyValue&apos;s.
&apos; Finds the index in the array of PropertyValue&apos;s and returns it, or returns -1 if it was not found.
Dim iNumProperties As Integer, i As Integer, vProp As Variant
iNumProperties = _NumPropertyValues(pvPropertyValuesArray)
For i = 0 To iNumProperties - 1
vProp = pvPropertyValuesArray(i)
If UCase(vProp.Name) = UCase(psPropName) Then
_FindPropertyIndex() = i
Exit Function
EndIf
Next i
_FindPropertyIndex() = -1
End Function &apos; _FindPropertyIndex V1.3.0
REM =======================================================================================================================
Public Function _FindProperty(ByRef pvPropertyValuesArray As Variant, ByVal psPropName As String) As com.sun.star.beans.PropertyValue
&apos; Find a particular named property from an array of PropertyValue&apos;s.
&apos; Finds the PropertyValue and returns it, or returns Null if not found.
Dim iPropIndex As Integer, vProp As Variant
iPropIndex = _FindPropertyIndex(pvPropertyValuesArray, psPropName)
If iPropIndex &gt;= 0 Then
vProp = pvPropertyValuesArray(iPropIndex) &apos; access array subscript
_FindProperty() = vProp
EndIf
End Function &apos; _FindProperty V1.3.0
REM =======================================================================================================================
Public Function _GetPropertyValue(ByRef pvPropertyValuesArray As Variant, ByVal psPropName As String, Optional pvDefaultValue) As Variant
&apos; Get the value of a particular named property from an array of PropertyValue&apos;s.
&apos; vDefaultValue - This value is returned if the property is not found in the array.
Dim iPropIndex As Integer, vProp As Variant, vValue As Variant, vMatrix As Variant, i As Integer, j As Integer
iPropIndex = _FindPropertyIndex(pvPropertyValuesArray, psPropName)
If iPropIndex &gt;= 0 Then
vProp = pvPropertyValuesArray(iPropIndex) &apos; access array subscript
vValue = vProp.Value &apos; get the value from the PropertyValue
If VarType(vValue) = vbString Then
If vValue = cstEMPTYARRAY Then _GetPropertyValue() = Array() Else _GetPropertyValue() = vValue
ElseIf IsArray(vValue) Then
If IsArray(vValue(0)) Then &apos; Array of arrays
vMatrix = Array()
ReDim vMatrix(0 To UBound(vValue), 0 To UBound(vValue(0)))
For i = 0 To UBound(vValue)
For j = 0 To UBound(vValue(0))
vMatrix(i, j) = vValue(i)(j)
Next j
Next i
_GetPropertyValue() = vMatrix
Else
_GetPropertyValue() = vValue &apos; Simple vector OK
End If
Else
_GetPropertyValue() = vValue
End If
Else
If IsMissing(pvDefaultValue) Then pvDefaultValue = Null
_GetPropertyValue() = pvDefaultValue
EndIf
End Function &apos; _GetPropertyValue V1.3.0
REM =======================================================================================================================
Public Sub _SetPropertyValue(ByRef pvPropertyValuesArray As Variant, ByVal psPropName As String, ByVal pvValue As Variant)
&apos; Set the value of a particular named property from an array of PropertyValue&apos;s.
Dim iPropIndex As Integer, vProp As Variant, iNumProperties As Integer
iPropIndex = _FindPropertyIndex(pvPropertyValuesArray, psPropName)
If iPropIndex &gt;= 0 Then
&apos; Found, the PropertyValue is already in the array. Just modify its value.
vProp = pvPropertyValuesArray(iPropIndex) &apos; access array subscript
vProp.Value = _CheckPropertyValue(pvValue) &apos; set the property value.
pvPropertyValuesArray(iPropIndex) = vProp &apos; put it back into array
Else
&apos; Not found, the array contains no PropertyValue with this name. Append new element to array.
iNumProperties = _NumPropertyValues(pvPropertyValuesArray)
If iNumProperties = 0 Then
pvPropertyValuesArray = Array(_MakePropertyValue(psPropName, pvValue))
Else
&apos; Make array larger.
Redim Preserve pvPropertyValuesArray(iNumProperties)
&apos; Assign new PropertyValue
pvPropertyValuesArray(iNumProperties) = _MakePropertyValue(psPropName, pvValue)
EndIf
EndIf
End Sub &apos; _SetPropertyValue V1.3.0
REM =======================================================================================================================
Public Sub _DeleteProperty(ByRef pvPropertyValuesArray As Variant, ByVal psPropName As String)
&apos; Delete a particular named property from an array of PropertyValue&apos;s.
Dim iPropIndex As Integer
iPropIndex = _FindPropertyIndex(pvPropertyValuesArray, psPropName)
If iPropIndex &gt;= 0 Then _DeleteIndexedProperty(pvPropertyValuesArray, iPropIndex)
End Sub &apos; _DeletePropertyValue V1.3.0
REM =======================================================================================================================
Public Sub _DeleteIndexedProperty(ByRef pvPropertyValuesArray As Variant, ByVal piPropIndex As Integer)
&apos; Delete a particular indexed property from an array of PropertyValue&apos;s.
Dim iNumProperties As Integer, i As Integer
iNumProperties = _NumPropertyValues(pvPropertyValuesArray)
&apos; Did we find it?
If piPropIndex &lt; 0 Then
&apos; Do nothing
ElseIf iNumProperties = 1 Then
&apos; Just return a new empty array
pvPropertyValuesArray = Array()
Else
&apos; If it is NOT the last item in the array, then shift other elements down into it&apos;s position.
If piPropIndex &lt; iNumProperties - 1 Then
&apos; Bump items down lower in the array.
For i = piPropIndex To iNumProperties - 2
pvPropertyValuesArray(i) = pvPropertyValuesArray(i + 1)
Next i
EndIf
&apos; Redimension the array to have one fewer element.
Redim Preserve pvPropertyValuesArray(iNumProperties - 2)
EndIf
End Sub &apos; _DeleteIndexedProperty V1.3.0
REM =======================================================================================================================
Public Function _PropValuesToStr(ByRef pvPropertyValuesArray As Variant) As String
&apos; Return a string with dumped content of the array of PropertyValue&apos;s.
&apos; SYNTAX:
&apos; NameOfProperty = This is a string (or 12 or 2016-12-31 12:05 or 123.45 or -0.12E-05 ...)
&apos; NameOfArray = (10)
&apos; 1;2;3;4;5;6;7;8;9;10
&apos; NameOfMatrix = (2,10)
&apos; 1;2;3;4;5;6;7;8;9;10
&apos; A;B;C;D;E;F;G;H;I;J
&apos; Semicolons and backslashes are escaped with a backslash (see _CStr and _CVar functions)
Dim iNumProperties As Integer, sResult As String, i As Integer, j As Integer, vProp As Variant
Dim sName As String, vValue As Variant, iType As Integer
Dim cstLF As String
cstLF = vbLf()
iNumProperties = _NumPropertyValues(pvPropertyValuesArray)
sResult = cstHEADER &amp; cstLF
For i = 0 To iNumProperties - 1
vProp = pvPropertyValuesArray(i)
sName = vProp.Name
vValue = vProp.Value
iType = VarType(vValue)
Select Case iType
Case &lt; vbArray &apos; Scalar
sResult = sResult &amp; sName &amp; &quot; = &quot; &amp; Utils._CStr(vValue, False) &amp; cstLF
Case Else &apos; Vector or matrix
If uBound(vValue, 1) &lt; 0 Then
sResult = sResult &amp; sName &amp; &quot; = (0)&quot; &amp; cstLF
&apos; 1-dimension but vector of vectors must also be considered
ElseIf VarType(vValue(0)) &gt;= vbArray Then
sResult = sResult &amp; sName &amp; &quot; = (&quot; &amp; UBound(vValue) + 1 &amp; &quot;,&quot; &amp; UBound(vValue(0)) + 1 &amp; &quot;)&quot; &amp; cstLF
For j = 0 To UBound(vValue)
sResult = sResult &amp; Utils._CStr(vValue(j), False) &amp; cstLF
Next j
Else
sResult = sResult &amp; sName &amp; &quot; = (&quot; &amp; UBound(vValue, 1) + 1 &amp; &quot;)&quot; &amp; cstLF
sResult = sResult &amp; Utils._CStr(vValue, False) &amp; cstLF
End If
End Select
Next i
_PropValuesToStr() = Left(sResult, Len(sResult) - 1) &apos; Remove last LF
End Function &apos; _PropValuesToStr V1.3.0
REM =======================================================================================================================
Public Function _StrToPropValues(psString) As Variant
&apos; Return an array of PropertyValue&apos;s rebuilt from the string parameter
Dim vString() As Variant, i As Integer,iArray As Integer, iRows As Integer, iCols As Integer
Dim lPosition As Long, sName As String, vValue As Variant, vResult As Variant, sDim As String
Dim lSearch As Long
Dim cstLF As String
Const cstEqualArray = &quot; = (&quot;, cstEqual = &quot; = &quot;
cstLF = Chr(10)
_StrToPropValues = Array()
vResult = Array()
If psString = &quot;&quot; Then Exit Function
vString = Split(psString, cstLF)
If UBound(vString) &lt;= 0 Then Exit Function &apos; There must be at least one name-value pair
If vString(0) &lt;&gt; cstHEADER Then Exit Function &apos; Check origin
iArray = -1
For i = 1 To UBound(vString)
If vString(i) &lt;&gt; &quot;&quot; Then &apos; Skip empty lines
If iArray &lt; 0 Then &apos; Not busy with array row
lPosition = 1
sName = Utils._RegexSearch(vString(i), &quot;^\b\w+\b&quot;, lPosition) &apos; Identifier
If sName = &quot;&quot; Then Exit Function
If InStr(vString(i), cstEqualArray) = lPosition + Len(sName) Then &apos; Start array processing
lSearch = lPosition + Len(sName) + Len(cstEqualArray) - 1
sDim = Utils._RegexSearch(vString(i), &quot;\([0-9]+\)&quot;, lSearch) &apos; e.g. (10)
If sDim = &quot;(0)&quot; Then &apos; Empty array
iRows = -1
vValue = Array()
_SetPropertyValue(vResult, sName, vValue)
ElseIf sDim &lt;&gt; &quot;&quot; Then &apos; Vector with content
iCols = CInt(Mid(sDim, 2, Len(sDim) - 2))
iRows = 0
ReDim vValue(0 To iCols - 1)
iArray = 0
Else &apos; Matrix with content
lSearch = lPosition + Len(sName) + Len(cstEqualArray) - 1
sDim = Utils._RegexSearch(vString(i), &quot;\([0-9]+,&quot;, lSearch) &apos; e.g. (10,
iRows = CInt(Mid(sDim, 2, Len(sDim) - 2))
sDim = Utils._RegexSearch(vString(i), &quot;,[0-9]+\)&quot;, lSearch) &apos; e.g. ,20)
iCols = CInt(Mid(sDim, 2, Len(sDim) - 2))
ReDim vValue(0 To iRows - 1)
iArray = 0
End If
ElseIf InStr(vString(i), cstEqual) = lPosition + Len(sName) Then
vValue = Utils._CVar(Mid(vString(i), Len(sName) + Len(cstEqual) + 1))
_SetPropertyValue(vResult, sName, vValue)
Else
Exit Function
End If
Else &apos; Line is an array row
If iRows = 0 Then
vValue = Utils._CVar(vString(i), True) &apos; Keep dates as strings
iArray = -1
_SetPropertyValue(vResult, sName, vValue)
Else
vValue(iArray) = Utils._CVar(vString(i), True)
If iArray &lt; iRows - 1 Then
iArray = iArray + 1
Else
iArray = -1
_SetPropertyValue(vResult, sName, vValue)
End If
End If
End If
End If
Next i
_StrToPropValues = vResult
End Function
</script:module>

View File

@@ -0,0 +1,25 @@
<?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="_License" script:language="StarBasic">
&apos; Copyright 2012-2017 Jean-Pierre LEDURE
REM =======================================================================================================================
REM === The Access2Base library is a part of the LibreOffice project. ===
REM === Full documentation is available on http://www.access2base.com ===
REM =======================================================================================================================
&apos; Access2Base is distributed in the hope that it will be useful,
&apos; but WITHOUT ANY WARRANTY; without even the implied warranty of
&apos; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
&apos; Access2Base is free software; you can redistribute it and/or modify it under the terms of either (at your option):
&apos;
&apos; 1) The Mozilla Public License, v. 2.0. If a copy of the MPL was not
&apos; distributed with this file, you can obtain one at http://mozilla.org/MPL/2.0/ .
&apos;
&apos; 2) The GNU Lesser General Public License as published by
&apos; the Free Software Foundation, either version 3 of the License, or
&apos; (at your option) any later version. If a copy of the LGPL was not
&apos; distributed with this file, see http://www.gnu.org/licenses/ .
</script:module>

View File

@@ -0,0 +1,395 @@
<?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="acConstants" 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 Explicit
REM Access2Base -----------------------------------------------------
Global Const Access2Base_Version = &quot;7.1.0&quot; &apos; Alignment on LibreOffice versions
REM AcCloseSave
REM -----------------------------------------------------------------
Global Const acSaveNo = 2
Global Const acSavePrompt = 0
Global Const acSaveYes = 1
REM AcFormView
REM -----------------------------------------------------------------
Global Const acDesign = 1
Global Const acNormal = 0
Global Const acPreview = 2
REM AcFormOpenDataMode
REM -----------------------------------------------------------------
Global Const acFormAdd = 0
Global Const acFormEdit = 1
Global Const acFormPropertySettings = -1
Global Const acFormReadOnly = 2
REM acView
REM -----------------------------------------------------------------
Global Const acViewDesign = 1
Global Const acViewNormal = 0
Global Const acViewPreview = 2
REM acOpenDataMode
REM -----------------------------------------------------------------
Global Const acAdd = 0
Global Const acEdit = 1
Global Const acReadOnly = 2
REM AcObjectType
REM -----------------------------------------------------------------
Global Const acDefault = -1
Global Const acDiagram = 8
Global Const acForm = 2
Global Const acQuery = 1
Global Const acReport = 3
Global Const acTable = 0
&apos; Unexisting in MS/Access
Global Const acBasicIDE = 101
Global Const acDatabaseWindow = 102
Global Const acDocument = 111
Global Const acWelcome = 112
&apos; Subtype if acDocument
Global Const docWriter = &quot;Writer&quot;
Global Const docCalc = &quot;Calc&quot;
Global Const docImpress = &quot;Impress&quot;
Global Const docDraw = &quot;Draw&quot;
Global Const docMath = &quot;Math&quot;
REM AcWindowMode
REM -----------------------------------------------------------------
Global Const acDialog = 3
Global Const acHidden = 1
Global Const acIcon = 2
Global Const acWindowNormal = 0
REM VarType constants
REM -----------------------------------------------------------------
Global Const vbEmpty = 0
Global Const vbNull = 1
Global Const vbInteger = 2
Global Const vbLong = 3
Global Const vbSingle = 4
Global Const vbDouble = 5
Global Const vbCurrency = 6
Global Const vbDate = 7
Global Const vbString = 8
Global Const vbObject = 9
Global Const vbError = 10
Global Const vbBoolean = 11
Global Const vbVariant = 12
Global Const vbByte = 17
Global Const vbUShort = 18
Global Const vbULong = 19
Global Const vbBigint = 35
Global Const vbDecimal = 37
Global Const vbArray = 8192
REM MsgBox constants
REM -----------------------------------------------------------------
Global Const vbOKOnly = 0 &apos; OK button only (default)
Global Const vbOKCancel = 1 &apos; OK and Cancel buttons
Global Const vbAbortRetryIgnore = 2 &apos; Abort, Retry, and Ignore buttons
Global Const vbYesNoCancel = 3 &apos; Yes, No, and Cancel buttons
Global Const vbYesNo = 4 &apos; Yes and No buttons
Global Const vbRetryCancel = 5 &apos; Retry and Cancel buttons
Global Const vbCritical = 16 &apos; Critical message
Global Const vbQuestion = 32 &apos; Warning query
Global Const vbExclamation = 48 &apos; Warning message
Global Const vbInformation = 64 &apos; Information message
Global Const vbDefaultButton1 = 128 &apos; First button is default (default) (VBA: 0)
Global Const vbDefaultButton2 = 256 &apos; Second button is default
Global Const vbDefaultButton3 = 512 &apos; Third button is default
Global Const vbApplicationModal = 0 &apos; Application modal message box (default)
REM MsgBox Return Values
REM -----------------------------------------------------------------
Global Const vbOK = 1 &apos; OK button pressed
Global Const vbCancel = 2 &apos; Cancel button pressed
Global Const vbAbort = 3 &apos; Abort button pressed
Global Const vbRetry = 4 &apos; Retry button pressed
Global Const vbIgnore = 5 &apos; Ignore button pressed
Global Const vbYes = 6 &apos; Yes button pressed
Global Const vbNo = 7 &apos; No button pressed
REM Dialogs Return Values
REM ------------------------------------------------------------------
Global Const dlgOK = 1 &apos; OK button pressed
Global Const dlgCancel = 0 &apos; Cancel button pressed
REM Control Types
REM -----------------------------------------------------------------
Global Const acCheckBox = 5
Global Const acComboBox = 7
Global Const acCommandButton = 2 : Global Const acToggleButton = 122
Global Const acCurrencyField = 18
Global Const acDateField = 15
Global Const acFileControl = 12
Global Const acFixedLine = 24 &apos; FREE ENTRY (USEFUL IN DIALOGS)
Global Const acFixedText = 10 : Global Const acLabel = 10
Global Const acFormattedField = 1 &apos; FREE ENTRY TAKEN TO NOT CONFUSE WITH acTextField
Global Const acGridControl = 11
Global Const acGroupBox = 8 : Global Const acOptionGroup = 8
Global Const acHiddenControl = 13
Global Const acImageButton = 4
Global Const acImageControl = 14 : Global Const acImage = 14
Global Const acListBox = 6
Global Const acNavigationBar = 22
Global Const acNumericField = 17
Global Const acPatternField = 19
Global Const acProgressBar = 23 &apos; FREE ENTRY (USEFUL IN DIALOGS)
Global Const acRadioButton = 3 : Global Const acOptionButton = 3
Global Const acScrollBar = 20
Global Const acSpinButton = 21
Global Const acSubform = 112
Global Const acTextField = 9 : Global Const acTextBox = 9
Global Const acTimeField = 16
REM AcRecord
REM -----------------------------------------------------------------
Global Const acFirst = 2
Global Const acGoTo = 4
Global Const acLast = 3
Global Const acNewRec = 5
Global Const acNext = 1
Global Const acPrevious = 0
REM FindRecord
REM -----------------------------------------------------------------
Global Const acAnywhere = 0
Global Const acEntire = 1
Global Const acStart = 2
Global Const acDown = 1
Global Const acSearchAll = 2
Global Const acUp = 0
Global Const acAll = 0
Global Const acCurrent = -1
REM AcDataObjectType
REM -----------------------------------------------------------------
Global Const acActiveDataObject = -1
Global Const acDataForm = 2
Global Const acDataQuery = 1
Global Const acDataServerView = 7
Global Const acDataStoredProcedure = 9
Global Const acDataTable = 0
REM AcQuitOption
REM -----------------------------------------------------------------
Global Const acQuitPrompt = 0
Global Const acQuitSaveAll = 1
Global Const acQuitSaveNone = 2
REM AcCommand
REM -----------------------------------------------------------------
Global Const acCmdAboutMicrosoftAccess = 35
Global Const acCmdAboutOpenOffice = 35
Global Const acCmdAboutLibreOffice = 35
Global Const acCmdVisualBasicEditor = 525
Global Const acCmdBringToFront = 52
Global Const acCmdClose = 58
Global Const acCmdToolbarsCustomize = 165
Global Const acCmdChangeToCommandButton = 501
Global Const acCmdChangeToCheckBox = 231
Global Const acCmdChangeToComboBox = 230
Global Const acCmdChangeToTextBox = 227
Global Const acCmdChangeToLabel = 228
Global Const acCmdChangeToImage = 234
Global Const acCmdChangeToListBox = 229
Global Const acCmdChangeToOptionButton = 233
Global Const acCmdCopy = 190
Global Const acCmdCut = 189
Global Const acCmdCreateRelationship = 150
Global Const acCmdDelete = 337
Global Const acCmdDatabaseProperties = 256
Global Const acCmdSQLView = 184
Global Const acCmdRemove = 366
Global Const acCmdDesignView = 183
Global Const acCmdFormView = 281
Global Const acCmdNewObjectForm = 136
Global Const acCmdNewObjectTable = 134
Global Const acCmdNewObjectView = 350
Global Const acCmdOpenDatabase = 25
Global Const acCmdNewObjectQuery = 135
Global Const acCmdShowAllRelationships = 149
Global Const acCmdNewObjectReport = 137
Global Const acCmdSelectAll = 333
Global Const acCmdRemoveTable = 84
Global Const acCmdOpenTable = 221
Global Const acCmdRename = 143
Global Const acCmdDeleteRecord = 223
Global Const acCmdApplyFilterSort = 93
Global Const acCmdSnapToGrid = 62
Global Const acCmdViewGrid = 63
Global Const acCmdInsertHyperlink = 259
Global Const acCmdMaximumRecords = 508
Global Const acCmdObjectBrowser = 200
Global Const acCmdPaste = 191
Global Const acCmdPasteSpecial = 64
Global Const acCmdPrint = 340
Global Const acCmdPrintPreview = 54
Global Const acCmdSaveRecord = 97
Global Const acCmdFind = 30
Global Const acCmdUndo = 292
Global Const acCmdRefresh = 18
Global Const acCmdRemoveFilterSort = 144
Global Const acCmdRunMacro = 31
Global Const acCmdSave = 20
Global Const acCmdSaveAs = 21
Global Const acCmdSelectAllRecords = 109
Global Const acCmdSendToBack = 53
Global Const acCmdSortDescending = 164
Global Const acCmdSortAscending = 163
Global Const acCmdTabOrder = 41
Global Const acCmdDatasheetView = 282
Global Const acCmdZoomSelection = 371
REM AcSendObjectType
REM -----------------------------------------------------------------
Global Const acSendForm = 2
Global Const acSendNoObject = -1
Global Const acSendQuery = 1
Global Const acSendReport = 3
Global Const acSendTable = 0
REM AcOutputObjectType
REM -----------------------------------------------------------------
Global Const acOutputTable = 0
Global Const acOutputQuery = 1
Global Const acOutputForm = 2
Global Const acOutputArray = -1
REM AcEncoding
REM -----------------------------------------------------------------
Global Const acUTF8Encoding = 76
REM AcFormat
REM -----------------------------------------------------------------
Global Const acFormatPDF = &quot;writer_pdf_Export&quot;
Global Const acFormatODT = &quot;writer8&quot;
Global Const acFormatDOC = &quot;MS Word 97&quot;
Global Const acFormatHTML = &quot;HTML&quot;
Global Const acFormatODS = &quot;calc8&quot;
Global Const acFormatXLS = &quot;MS Excel 97&quot;
Global Const acFormatXLSX = &quot;Calc MS Excel 2007 XML&quot;
Global Const acFormatTXT = &quot;Text - txt - csv (StarCalc)&quot;
REM AcExportQuality
REM -----------------------------------------------------------------
Global Const acExportQualityPrint = 0
Global Const acExportQualityScreen = 1
REM AcSysCmdAction
REM -----------------------------------------------------------------
Global Const acSysCmdAccessDir = 9
Global Const acSysCmdAccessVer = 7
Global Const acSysCmdClearHelpTopic = 11
Global Const acSysCmdClearStatus = 5
Global Const acSysCmdGetObjectState = 10
Global Const acSysCmdGetWorkgroupFile = 13
Global Const acSysCmdIniFile = 8
Global Const acSysCmdInitMeter = 1
Global Const acSysCmdProfile = 12
Global Const acSysCmdRemoveMeter = 3
Global Const acSysCmdRuntime = 6
Global Const acSysCmdSetStatus = 4
Global Const acSysCmdUpdateMeter = 2
REM Type property
REM -----------------------------------------------------------------
Global Const dbBigInt = 16
Global Const dbBinary = 9
Global Const dbBoolean = 1
Global Const dbByte = 2
Global Const dbChar = 18
Global Const dbCurrency = 5
Global Const dbDate = 8
Global Const dbDecimal = 20
Global Const dbDouble = 7
Global Const dbFloat = 21
Global Const dbGUID = 15
Global Const dbInteger = 3
Global Const dbLong = 4
Global Const dbLongBinary = 11 &apos; (OLE Object)
Global Const dbMemo= 12
Global Const dbNumeric = 19
Global Const dbSingle = 6
Global Const dbText = 10
Global Const dbTime = 22
Global Const dbTimeStamp = 23
Global Const dbVarBinary = 17
Global Const dbUndefined = -1
REM Attributes property
REM -----------------------------------------------------------------
Global Const dbAutoIncrField = 16
Global Const dbDescending = 1
Global Const dbFixedField = 1
Global Const dbHyperlinkField = 32768
Global Const dbSystemField = 8192
Global Const dbUpdatableField = 32
Global Const dbVariableField = 2
REM OpenRecordset
REM -----------------------------------------------------------------
Global Const dbOpenForwardOnly = 8
Global Const dbSQLPassThrough = 64
Global Const dbReadOnly = 4
REM Query types
REM -----------------------------------------------------------------
Global Const dbQAction = 240
Global Const dbQAppend = 64
Global Const dbQDDL = 4 &apos;96
Global Const dbQDelete = 32
Global Const dbQMakeTable = 128 &apos;80
Global Const dbQSelect = 0
Global Const dbQSetOperation = 8 &apos;128
Global Const dbQSQLPassThrough = 1 &apos;112
Global Const dbQUpdate = 16 &apos;48
REM Edit mode
REM -----------------------------------------------------------------
Global Const dbEditNone = 0
Global Const dbEditInProgress = 1
Global Const dbEditAdd = 2
REM Toolbars
REM -----------------------------------------------------------------
Global Const msoBarTypeNormal = 0 &apos; Usual toolbar
Global Const msoBarTypeMenuBar = 1 &apos; Menu bar
Global Const msoBarTypePopup = 2 &apos; Shortcut menu
Global Const msoBarTypeStatusBar = 11 &apos; Status bar
Global Const msoBarTypeFloater = 12 &apos; Floating window
Global Const msoControlButton = 1 &apos; Command button
Global Const msoControlPopup = 10 &apos; Popup, submenu
REM New Lines
REM -----------------------------------------------------------------
Public Function vbCr() As String : vbCr = Chr(13) : End Function
Public Function vbLf() As String : vbLf = Chr(10) : End Function
Public Function vbNewLine() As String
Const cstWindows = 1
If GetGuiType() = cstWindows Then vbNewLine = vbCR &amp; vbLF Else vbNewLine = vbLF
End Function &apos; vbNewLine V1.4.0
Public Function vbTab() As String : vbTab = Chr(9) : End Function
REM Module types
REM -----------------------------------------------------------------
Global Const acClassModule = 1
Global Const acStandardModule = 0
REM (Module) procedure types
REM -----------------------------------------------------------------
Global Const vbext_pk_Get = 1 &apos; A Property Get procedure
Global Const vbext_pk_Let = 2 &apos; A Property Let procedure
Global Const vbext_pk_Proc = 0 &apos; A Sub or Function procedure
Global Const vbext_pk_Set = 3 &apos; A Property Set procedure
</script:module>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Access2Base" library:readonly="false" library:passwordprotected="false">
<library:element library:name="dlgTrace"/>
<library:element library:name="dlgFormat"/>
</library:library>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="dlgFormat" dlg:left="246" dlg:top="119" dlg:width="153" dlg:height="40" dlg:help-text="Export the form" dlg:closeable="true" dlg:moveable="true" dlg:title="OutputTo">
<dlg:bulletinboard>
<dlg:combobox dlg:id="cboFormat" dlg:tab-index="0" dlg:left="4" dlg:top="18" dlg:width="71" dlg:height="8" dlg:help-text="Format in which the form should be exported" dlg:value="PDF" dlg:spin="true">
<dlg:menupopup>
<dlg:menuitem dlg:value="PDF"/>
<dlg:menuitem dlg:value="ODT"/>
<dlg:menuitem dlg:value="DOC"/>
<dlg:menuitem dlg:value="HTML"/>
</dlg:menupopup>
</dlg:combobox>
<dlg:text dlg:id="lblFormat" dlg:tab-index="1" dlg:left="4" dlg:top="7" dlg:width="100" dlg:height="9" dlg:help-text="Format in which the form should be exported" dlg:value="Select the output format"/>
<dlg:button dlg:id="cmdOK" dlg:tab-index="2" dlg:left="111" dlg:top="5" dlg:width="35" dlg:height="12" dlg:help-text="Validate your choice" dlg:default="true" dlg:value="OK" dlg:button-type="ok">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Access2Base.Trace._TraceOK?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="3" dlg:left="111" dlg:top="20" dlg:width="35" dlg:height="12" dlg:help-text="Cancel and close the dialog" dlg:value="Cancel" dlg:button-type="cancel"/>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="dlgTrace" dlg:left="81" dlg:top="63" dlg:width="438" dlg:height="154" dlg:help-text="Manage the console file and its entries" dlg:closeable="true" dlg:moveable="true" dlg:title="Console">
<dlg:styles>
<dlg:style dlg:style-id="0" dlg:font-name="Courier New" dlg:font-stylename="Regular" dlg:font-family="modern"/>
<dlg:style dlg:style-id="1" dlg:look="simple"/>
<dlg:style dlg:style-id="2" dlg:background-color="0xe6e6e6" dlg:border="none"/>
</dlg:styles>
<dlg:bulletinboard>
<dlg:text dlg:id="lblEntries" dlg:tab-index="3" dlg:left="265" dlg:top="134" dlg:width="130" dlg:height="9" dlg:help-text="Clear the list and resize the circular buffer" dlg:value="Set max number of entries" dlg:align="right"/>
<dlg:numericfield dlg:id="numEntries" dlg:tab-index="4" dlg:left="399" dlg:top="129" dlg:width="28" dlg:height="16" dlg:help-text="Clear the list and resize the circular buffer" dlg:decimal-accuracy="0" dlg:value="20" dlg:value-min="5" dlg:value-max="999" dlg:spin="true"/>
<dlg:textfield dlg:style-id="0" dlg:id="txtTraceLog" dlg:tab-index="0" dlg:left="9" dlg:top="20" dlg:width="360" dlg:height="105" dlg:help-text="Text can be selected, copied, ..." dlg:hscroll="true" dlg:vscroll="true" dlg:multiline="true" dlg:readonly="true" dlg:value="--- Log file is empty ---"/>
<dlg:checkbox dlg:style-id="1" dlg:id="chkClear" dlg:tab-index="5" dlg:left="58" dlg:top="133" dlg:width="6" dlg:height="9" dlg:help-text="Clear the list" dlg:value="Clear" dlg:checked="false"/>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="6" dlg:left="381" dlg:top="38" dlg:width="40" dlg:height="12" dlg:help-text="Cancel and close the dialog" dlg:value="Cancel" dlg:button-type="cancel"/>
<dlg:text dlg:id="lblClear" dlg:tab-index="7" dlg:left="9" dlg:top="133" dlg:width="46" dlg:height="9" dlg:help-text="Clear the list" dlg:value="Clear the list" dlg:align="right"/>
<dlg:text dlg:id="lblMinLevel" dlg:tab-index="8" dlg:left="74" dlg:top="133" dlg:width="130" dlg:height="9" dlg:help-text="Register only logging requests above given level" dlg:value="Set minimal trace level" dlg:align="right"/>
<dlg:combobox dlg:id="cboMinLevel" dlg:tab-index="9" dlg:left="209" dlg:top="133" dlg:width="50" dlg:height="9" dlg:help-text="Register only logging requests above given level" dlg:spin="true">
<dlg:menupopup>
<dlg:menuitem dlg:value="DEBUG"/>
<dlg:menuitem dlg:value="INFO"/>
<dlg:menuitem dlg:value="WARNING"/>
<dlg:menuitem dlg:value="ERROR"/>
<dlg:menuitem dlg:value="ABORT"/>
</dlg:menupopup>
</dlg:combobox>
<dlg:button dlg:id="cmdOK" dlg:tab-index="1" dlg:left="381" dlg:top="20" dlg:width="40" dlg:height="12" dlg:help-text="Validate" dlg:default="true" dlg:value="OK" dlg:button-type="ok"/>
<dlg:button dlg:id="cmdDump" dlg:tab-index="2" dlg:left="381" dlg:top="68" dlg:width="40" dlg:height="31" dlg:help-text="Choose a file and dump the actual list content in it" dlg:value="Dump to file" dlg:multiline="true">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Access2Base.Trace._DumpToFile?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:text dlg:id="lblNbEntries" dlg:tab-index="10" dlg:left="9" dlg:top="10" dlg:width="105" dlg:height="7" dlg:help-text="Actual size of list" dlg:value="Actual number of entries:"/>
<dlg:numericfield dlg:style-id="2" dlg:id="numNbEntries" dlg:tab-index="11" dlg:left="123" dlg:top="9" dlg:width="17" dlg:height="9" dlg:help-text="Actual size of list" dlg:readonly="true" dlg:decimal-accuracy="0" dlg:value="0"/>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Access2Base" library:readonly="false" library:passwordprotected="false">
<library:element library:name="Application"/>
<library:element library:name="Methods"/>
<library:element library:name="acConstants"/>
<library:element library:name="Test"/>
<library:element library:name="Trace"/>
<library:element library:name="DoCmd"/>
<library:element library:name="Utils"/>
<library:element library:name="Database"/>
<library:element library:name="PropertiesSet"/>
<library:element library:name="Collect"/>
<library:element library:name="PropertiesGet"/>
<library:element library:name="Form"/>
<library:element library:name="Python"/>
<library:element library:name="_License"/>
<library:element library:name="SubForm"/>
<library:element library:name="L10N"/>
<library:element library:name="OptionGroup"/>
<library:element library:name="Event"/>
<library:element library:name="Property"/>
<library:element library:name="Control"/>
<library:element library:name="Dialog"/>
<library:element library:name="Field"/>
<library:element library:name="DataDef"/>
<library:element library:name="Recordset"/>
<library:element library:name="TempVar"/>
<library:element library:name="Root_"/>
<library:element library:name="UtilProperty"/>
<library:element library:name="CommandBar"/>
<library:element library:name="CommandBarControl"/>
<library:element library:name="Module"/>
</library:library>

View File

@@ -0,0 +1,368 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="CommonLang" script:language="StarBasic">REM ***** BASIC *****
&apos; Column A has the index 1
Public Const SBCOLUMNNAME1 = 3 &apos; Stock names, sheet 1
Public Const SBCOLUMNID1 = 4 &apos; Stock ID, sheet 1
Public Const SBCOLUMNQUANTITY1 = 5 &apos; Stock quantity sheet 1
Public Const SBCOLUMNRATE1 = 7 &apos; Price for stocks, sheet 1
Public Const SBCOLUMNNAME2 = 3 &apos; Stock names, sheet 2
Public Const SBCOLUMNDATE2 = 4 &apos; Transaction dates, sheet 2
Public Const SBCOLUMNQUANTITY2 = 5 &apos; Transaction quantity, sheet 2
Public Const SBCOLUMNRATE2 = 6 &apos; Price for stocks, sheet 2
Public Const SBCOLUMNPROVPERCENT2 = 7 &apos; Provision in %, sheet 2
Public Const SBCOLUMNPROVMIN2 = 8 &apos; Minimum provision, sheet 2
Public Const SBCOLUMNPROVFIX2 = 9 &apos; Fixed provision, sheet 2
Public Const SBCOLUMNPROCEEDS2 = 12 &apos; Profit, sheet 2
Public Const SBCOLUMNQTYSOLD2 = 14 &apos; Quantity sold, sheet 2
Public Const SBCOLUMNQTYREST2 = 15 &apos; Quantity not sold yet, sheet 2
Public Const SBCOLUMNPRCREST2 = 16 &apos; Proportional price for quantity not sold yet, sheet 2
Public Const SBCOLUMNREALPROC2 = 17 &apos; Realized proceeds, sheet 2
Public Const SBCOLUMNDIVIDEND2 = 18 &apos; Dividend paid, sheet 2
Public Const SBCOLUMNREALPROFIT2 = 19 &apos; Realized profit, sheet 2
Public Const SBROWFIRSTTRANSACT2 = 8 &apos; First data row, sheet 2
Public Const SBROWHEADER1 = 6 &apos; Headline, sheet 1
Public Const SBMSGOK = 0
Public Const SBMSGYESNO = 4
Public Const SBMSGSTOP = 16
Public Const SBMSGQUESTION = 32
Public Const SBMSGDEFAULTBTN2 = 256
Public Const SBHASID = 1 &apos; 0 = no ID, 1 = stocks have an ID
Public Const SBDIALOGSELL = 1 &apos; Step for main dialog
Public Const SBDIALOGBUY = 2 &apos; Step for main dialog
Public Const SBBINARY = 0
Public TransactMode as Integer
Public Const LIFO = -1
Public Const FIFO = 1
Public Const HANDLEDIVIDEND = 1
Public Const HANDLESPLIT = 2
Global oDocument as Object
Global oDocFormats() as Object
Global oController as Object
Global oFirstSheet as Object
Global oBankSheet as Object
Global oMovementSheet as Object
Global sDocLanguage as String
Global sDocCountry as String
Global oSheets as Object
Global oDocLocale as New com.sun.star.lang.Locale
Global bEnableMarket as Boolean
Global bEnableInternet as Boolean
Global oMarketModel as Object
Global oInternetModel as Object
Global sCurCurrency$, sCurExtension$, sCurChartSource$, sCurStockIDLabel$, sCurSeparator$
Public oNumberFormatter as Object
Public bDebugmode as Boolean
Global GlobListindex as Integer
Public blabla() as String
Public SplitDate as Date
Public oChartSheet as Object
Public oBackgroundSheet as Object
Public Const SBDATECOLUMN = 3
Public Const SBVALUECOLUMN = 4
Public Const SBSTARTROW = 25
Public Const SBCHARTPERIOD = 14
Public Const SBINTERVAL = &quot;d&quot;
Public sColumnHeader as String
Public StartDate as Date
Public EndDate as Date
Public iCurRow as Integer
Public iMaxRow as Integer
Public iStartDay as Integer
Public iStartMonth as Integer
Public iStartYear as Integer
Public iEndDay as Integer
Public iEndMonth as Integer
Public iEndYear as Integer
Public oStatusLine as Object
Public Today as Date
Public sInterval as String
Public ShortMonths(11,1)
Public iStep as Integer
Public sDepotCurrency as String
Public iValueCol as Integer
Public DlgReference as Object
Public DlgTransaction as Object
Public DlgStockRates as Object
Public DlgStartUp as Object
Public TransactModel as Object
Public StockRatesModel as Object
Public StartUpModel as Object
Public StockRatesTitle(1 To 3)
Public TransactTitle(1 To 2)
Public NullList()
Public sStartupWelcome$, sStartupChooseMarket$, sStartupHint$
Public sMarket(7,10) as String
Public sCountryMarket(7,10) as String
Public cDlgCaption1$, cDlgCaption2$
Public sMsgError$, sMsgNoName$, sMsgNoQuantity$, sMsgNoDividend$, sMsgNoExchangeRate$
Public sMsgNoValidExchangeDate$, sMsgWrongExchangeDate$, sMsgSellTooMuch$, sMsgConfirm$
Public sMsgFreeStock$, sMsgTotalLoss$, sMsgEndDatebeforeNow$, sMsgStartDatebeforeEndDate$
Public sOk$, sCancel$
Public sMsgAuthorization$, sMsgDeleteAll$
Public SellMethod$
Public cSplit$
Global HistoryChartSource as String
Public DateCellStyle as String
Public CurrCellStyle as String
Public sStartDate$, sEndDate$, sHistory$
Public sInsertStockname$
Public sProductname$, sTitle$
Public sInsertStocks$, sStockname$, sNoInternetUpdate$, sMarketplace$, sNoInternetDataAvailable$
Public sCheckInternetSettings as String
Sub LoadLanguage()
LoadDepotDialogs()
Select Case sDocLanguage
Case &quot;de&quot;
LoadGermanLanguage()
Case &quot;en&quot;
LoadEnglishLanguage()
Case &quot;fr&quot;
LoadFrenchLanguage()
Case &quot;it&quot;
LoadItalianLanguage()
Case &quot;es&quot;
LoadSpanishLanguage()
Case &quot;sv&quot;
LoadSwedishLanguage()
Case &quot;ja&quot;
LoadJapaneseLanguage()
Case &quot;ko&quot;
LoadKoreanLanguage()
Case &quot;zh&quot;
If sDocCountry = &quot;CN&quot; Then
LoadChineseSimpleLanguage()
Else
LoadChineseTradLanguage()
End If
End Select
InitializeStartUpModel()
End Sub
Sub CompleteMarketList()
Dim EuroIndex as Integer
Dim LocCountry as String
Dim LocLanguage as String
Dim sLangList() as String
Dim sCountryList() as String
Dim sExtensionList() as String
Dim MaxIndex as Integer
Dim bIsLocale as Boolean
GlobListIndex = -1
For n = 0 To 5
LocLanguage = sMarket(n,6)
LocCountry = sMarket(n,7)
If Instr(1,LocLanguage,&quot;;&quot;,SBBINARY) = 0 Then
bIsLocale = CheckDocLocale(LocLanguage, LocCountry)
Else
EuroIndex = 0
sLangList() = ArrayoutofString(LocLanguage, &quot;;&quot;, MaxIndex)
sCountryList() = ArrayoutofString(LocCountry, &quot;;&quot;, MaxIndex)
sExtensionList() = ArrayoutofString(sMarket(n,8), &quot;;&quot;, MaxIndex)
For m = 0 To MaxIndex
bIsLocale = CheckDocLocale(sLangList(m), sCountryList(m))
If bIsLocale Then
EuroIndex = m
Exit For
End If
Next m
sMarket(n,6) = sLangList(EuroIndex)
sMarket(n,7) = sCountryList(EuroIndex)
sMarket(n,8) = sExtensionList(EuroIndex)
End If
If bIsLocale Then
GlobListIndex = n
Exit For
End If
Next n
End Sub
Sub LocalizedCurrencies()
If GlobListIndex = -1 Then
sCountryMarket(0,0) = &quot;Euro&quot;
sCountryMarket(0,1) = chr(8364)
sCountryMarket(0,2) = &quot;Paris&quot;
sCountryMarket(0,3) = &quot;http://fr.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.PA&amp;f=s4l1t1c1ghov&amp;e=.csv&quot;
sCountryMarket(0,5) = &quot;Code&quot;
sCountryMarket(0,6) = &quot;fr&quot;
sCountryMarket(0,7) = &quot;FR&quot;
sCountryMarket(0,8) = &quot;40C&quot;
sCountryMarket(0,9) = &quot;59/9&quot;
sCountryMarket(0,10) = &quot;1&quot;
sCountryMarket(1,0) = &quot;Euro&quot;
sCountryMarket(1,1) = chr(8364)
sCountryMarket(1,2) = &quot;Milano&quot;
sCountryMarket(1,3) = &quot;http://it.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.MI&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sCountryMarket(1,5) = &quot;Codice&quot;
sCountryMarket(1,6) = &quot;it&quot;
sCountryMarket(1,7) = &quot;IT&quot;
sCountryMarket(1,8) = &quot;410&quot;
sCountryMarket(1,9) = &quot;44&quot;
sCountryMarket(1,10) = &quot;1&quot;
sCountryMarket(2,0) = &quot;Euro&quot;
sCountryMarket(2,1) = chr(8364)
sCountryMarket(2,2) = &quot;Madrid&quot;
sCountryMarket(2,3) = &quot;http://es.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;m=MC&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sCountryMarket(2,5) = &quot;Simbolo&quot;
sCountryMarket(2,6) = &quot;es&quot;
sCountryMarket(2,7) = &quot;ES&quot;
sCountryMarket(2,8) = &quot;40A&quot;
sCountryMarket(2,9) = &quot;44&quot;
sCountryMarket(2,10) = &quot;1&quot;
sCountryMarket(3,0) = &quot;Dansk krone&quot;
sCountryMarket(3,1) = &quot;kr&quot;
sCountryMarket(3,2) = &quot;København&quot;
sCountryMarket(3,3) = &quot;http://dk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID.CO&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sCountryMarket(3,5) = &quot;Aktiesymbol&quot;
sCountryMarket(3,6) = &quot;da&quot;
sCountryMarket(3,7) = &quot;DK&quot;
sCountryMarket(3,8) = &quot;406&quot;
sCountryMarket(3,9) = &quot;44&quot;
sCountryMarket(3,10) = &quot;1&quot;
sCountryMarket(4,0) = &quot;Svensk krona&quot;
sCountryMarket(4,1) = &quot;kr&quot;
sCountryMarket(4,2) = &quot;Stockholm&quot;
sCountryMarket(4,3) = &quot;http://se.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;f=sl1d1t1c1ohgv&amp;e=.c&quot;
sCountryMarket(4,5) = &quot;Kod&quot;
sCountryMarket(4,6) = &quot;sv&quot;
sCountryMarket(4,7) = &quot;SE&quot;
sCountryMarket(4,8) = &quot;41D&quot;
sCountryMarket(4,9) = &quot;44&quot;
sCountryMarket(4,10) = &quot;1&quot;
&apos; Taiwan Dollar
sCountryMarket(5,0) = &quot;新臺幣&quot;
sCountryMarket(5,1) = &quot;¥&quot;
sCountryMarket(5,2) = &quot;代號&quot;
sCountryMarket(5,3) = &quot;http://tw.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.TW&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sCountryMarket(5,5) = &quot;代號&quot;
sCountryMarket(5,6) = &quot;zh&quot;
sCountryMarket(5,7) = &quot;TW&quot;
sCountryMarket(5,8) = &quot;404&quot;
sCountryMarket(5,9) = &quot;44&quot;
sCountryMarket(5,10) = &quot;1&quot;
&apos; Chinese Yuan
sCountryMarket(6,0) = &quot;人民币&quot;
sCountryMarket(6,1) = &quot;¥&quot;
sCountryMarket(6,2) = &quot;代号&quot;
sCountryMarket(6,3) = &quot;http://cn.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.SS&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sCountryMarket(6,5) = &quot;代号&quot;
sCountryMarket(6,6) = &quot;zh&quot;
sCountryMarket(6,7) = &quot;CN&quot;
sCountryMarket(6,8) = &quot;804&quot;
sCountryMarket(6,9) = &quot;44&quot;
sCountryMarket(6,10) = &quot;1&quot;
&apos; korean Won
sCountryMarket(7,0) = &quot;한국 원화&quot;
sCountryMarket(7,1) = &quot;₩&quot;
sCountryMarket(7,2) = &quot;서울&quot;
sCountryMarket(7,3) = &quot;http://kr.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.KS&amp;f=snl1d1t1c1ohgv&amp;e=.csv&quot;
sCountryMarket(7,5) = &quot;종목 코드&quot;
sCountryMarket(7,6) = &quot;ko&quot;
sCountryMarket(7,7) = &quot;KR&quot;
sCountryMarket(7,8) = &quot;412&quot;
sCountryMarket(7,9) = &quot;44&quot;
sCountryMarket(7,10) = &quot;2&quot;
&apos; sCountryMarket(5,0) = &quot;Российский рубль&quot;
&apos; sCountryMarket(5,1) = &quot;р.&quot;
&apos; sCountryMarket(5,2) = &quot;&quot;
&apos; sCountryMarket(5,3) = &quot;&quot;
&apos; sCountryMarket(5,5) = &quot;&quot;
&apos; sCountryMarket(5,6) = &quot;ru&quot;
&apos; sCountryMarket(5,7) = &quot;RU&quot;
&apos; sCountryMarket(5,8) = &quot;-419&quot;
&apos; sCountryMarket(5,9) = &quot;&quot;
&apos;
&apos; sCountryMarket(6,0) = &quot;Złoty polski&quot;
&apos; sCountryMarket(6,1) = &quot;zł&quot;
&apos; sCountryMarket(6,2) = &quot;&quot;
&apos; sCountryMarket(6,3) = &quot;&quot;
&apos; sCountryMarket(6,5) = &quot;&quot; &apos;Still Todo!!
&apos; sCountryMarket(6,6) = &quot;pl&quot;
&apos; sCountryMarket(6,7) = &quot;PL&quot;
&apos; sCountryMarket(6,8) = &quot;-415&quot;
&apos; sCountryMarket(6,9) = &quot;&quot;
&apos;
&apos; sCountryMarket(7,0) = &quot;Türkische Lira&quot;
&apos; sCountryMarket(7,1) = &quot;TL&quot;
&apos; sCountryMarket(7,2) = &quot;&quot;
&apos; sCountryMarket(7,3) = &quot;&quot;
&apos; sCountryMarket(7,5) = &quot;&quot; &apos;Still Todo!!
&apos; sCountryMarket(7,6) = &quot;tr&quot;
&apos; sCountryMarket(7,7) = &quot;TR&quot;
&apos; sCountryMarket(7,8) = &quot;-41F&quot;
&apos; sCountryMarket(7,9) = &quot;&quot;
Dim n as Integer
Dim m as Integer
&apos; Dim sCountryMarket(6,9) as String
For n = 0 To Ubound(sCountryMarket(),1)
If sDocLanguage = sCountryMarket(n,6) and sDocCountry = sCountryMarket(n,7) Then
GlobListIndex = 6
For m = 0 To 10
sMarket(6,m) = sCountryMarket(n,m)
Next m
Exit For
End If
Next n
End If
End Sub
Sub LoadDepotDialogs()
DlgTransaction = LoadDialog(&quot;Depot&quot;, &quot;Dialog2&quot;)
DlgStockRates = LoadDialog(&quot;Depot&quot;, &quot;Dialog3&quot;)
DlgStartUp = LoadDialog(&quot;Depot&quot;, &quot;Dialog4&quot;)
TransactModel = DlgTransaction.Model
StockRatesModel = DlgStockRates.Model
StartUpModel = DlgStartUp.Model
End Sub
Sub InitializeStartUpModel()
With StartUpModel
.lblWelcome.Label = sStartupWelcome &amp; Chr(13) &amp; chr(13) &amp; sStartUpChooseMarket
sStartUpHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
.lblHint.Label = sStartupHint
&apos; .cmdGoOn.Enabled = Ubound(StartUpModel.lstMarkets.SelectedItems()) &lt;&gt; -1
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
End Sub</script:module>

View File

@@ -0,0 +1,195 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Currency" script:language="StarBasic">REM ***** BASIC *****
Option Explicit
Dim bDoUnLoad as Boolean
Sub Startup()
Dim i as Integer
Dim a as Integer
Dim ListString as String
Dim MarketListBoxControl as Object
Initialize(False)
MarketListBoxControl = DlgStartUp.GetControl(&quot;lstMarkets&quot;)
a = 0
For i = 0 To Ubound(sMarket(),1)
ListString = sMarket(i,0)
If sMarket(i,0) &lt;&gt; &quot;&quot; Then
If sMarket(i,3) = &quot;&quot; Then
ListString = ListString &amp; &quot; (&quot; &amp; sNoInternetUpdate &amp; &quot;)&quot;
Else
ListString = ListString &amp; &quot; (&quot; &amp; sMarketplace &amp; &quot; &quot; &amp; sMarket(i,2) &amp; &quot;)&quot;
End If
MarketListBoxControl.AddItem(ListString, a)
a = a + 1
End If
Next i
MarketListBoxControl.SelectItemPos(GlobListIndex, True)
DlgStartUp.Title = sDepotCurrency
DlgStartUp.Model.cmdGoOn.DefaultButton = True
DlgStartUp.GetControl(&quot;lstMarkets&quot;).SetFocus()
DlgStartUp.Execute()
DlgStartUp.Dispose()
End Sub
Sub EnableGoOnButton()
StartUpModel.cmdGoOn.Enabled = True
StartUpModel.cmdGoOn.DefaultButton = True
End Sub
Sub CloseStartUpDialog()
DlgStartUp.EndExecute()
&apos; oDocument.Dispose()
End Sub
Sub DisposeDocument()
If bDoUnload Then
oDocument.Dispose()
End If
End Sub
Sub ChooseMarket(Optional aEvent)
Dim Index as Integer
Dim bIsDocLanguage as Boolean
Dim bIsDocCountry as Boolean
oInternetModel = GetControlModel(oDocument.Sheets(0), &quot;CmdInternet&quot;)
If Not IsMissing(aEvent) Then
Index = StartupModel.lstMarkets.SelectedItems(0)
oInternetModel.Tag = Index
Else
Index = oInternetModel.Tag
End If
oMarketModel = GetControlModel(oDocument.Sheets(0), &quot;CmdHistory&quot;)
sCurCurrency = sMarket(Index,1)
If Index = 0 Then
HistoryChartSource = sMarket(Index,4)
End If
sCurStockIDLabel = sMarket(Index,5)
sCurExtension = sMarket(Index,8)
iValueCol = Val(sMarket(Index,10))
If Instr(sCurExtension,&quot;;&quot;) &lt;&gt; 0 Then
&apos; Take the german extension as the stock place is Frankfurt
sCurExtension = &quot;407&quot;
End If
sCurChartSource = sMarket(Index,3)
bIsDocLanguage = Instr(1, sMarket(Index,6), sDocLanguage, SBBINARY) &lt;&gt; 0
bIsDocCountry = Instr(1, sMarket(Index,7), sDocCountry, SBBINARY) &lt;&gt; 0 OR SDocCountry = &quot;&quot;
sCurSeparator = sMarket(Index,9)
TransactModel.txtRate.CurrencySymbol = sCurCurrency
TransactModel.txtFix.CurrencySymbol = sCurCurrency
TransactModel.txtMinimum.CurrencySymbol = sCurCurrency
bEnableMarket = Index = 0
bEnableInternet = sCurChartSource &lt;&gt; &quot;&quot;
oMarketModel.Enabled = bEnableMarket
oInternetModel.Enabled = bEnableInternet
If Not IsMissing(aEvent) Then
ConvertStylesCurrencies()
bDoUnload = False
DlgStartUp.EndExecute()
End If
End Sub
Sub ConvertStylesCurrencies()
Dim m as integer
Dim aStyleFormat as Object
Dim StyleName as String
Dim bAddToList as Boolean
Dim oStyle as Object
Dim oStyles as Object
UnprotectSheets(oSheets)
oFirstSheet.GetCellByPosition(SBCOLUMNID1, SBROWHEADER1).SetString(sCurStockIDLabel)
oStyles = oDocument.StyleFamilies.GetbyIndex(0)
For m = 0 To oStyles.count-1
oStyle = oStyles.GetbyIndex(m)
StyleName = oStyle.Name
bAddToList = CheckFormatType(oStyle)
If bAddToList Then
SwitchNumberFormat(ostyle, oDocFormats, sCurCurrency, sCurExtension)
End If
Next m
ProtectSheets(oSheets)
End Sub
Sub SwitchNumberFormat(oObject as Object, oFormats as object, sNewSymbol as String, sNewExtension as String)
Dim nFormatLanguage as Integer
Dim nFormatDecimals as Integer
Dim nFormatLeading as Integer
Dim bFormatLeading as Integer
Dim bFormatNegRed as Integer
Dim bFormatThousands as Integer
Dim aNewStr as String
Dim iNumberFormat as Long
Dim sSimpleStr as String
Dim nSimpleKey as Long
Dim aFormat()
Dim oLocale as New com.sun.star.lang.Locale
&apos; Numberformat with the new Symbol as Base for new Format
sSimpleStr = &quot;0 [$&quot; &amp; sNewSymbol &amp; &quot;-&quot; &amp; sNewExtension &amp; &quot;]&quot;
nSimpleKey = Numberformat(oFormats, sSimpleStr, oDocLocale)
On Local Error Resume Next
iNumberFormat = oObject.NumberFormat
If Err &lt;&gt; 0 Then
Msgbox &quot;Error Reading the Number Format&quot;
Resume CLERROR
End If
On Local Error GoTo NOKEY
aFormat() = oFormats.getByKey(iNumberFormat)
On Local Error GoTo 0
&apos; set new currency format with according settings
nFormatDecimals = aFormat.Decimals
nFormatLeading = aFormat.LeadingZeros
bFormatNegRed = aFormat.NegativeRed
bFormatThousands = aFormat.ThousandsSeparator
oLocale = aFormat.Locale
aNewStr = oFormats.generateFormat(nSimpleKey, oLocale, bFormatThousands, bFormatNegRed, nFormatDecimals, nFormatLeading)
oObject.NumberFormat = Numberformat(oFormats, aNewStr, oLocale)
NOKEY:
If Err &lt;&gt; 0 Then
Resume CLERROR
End If
CLERROR:
End Sub
Function Numberformat( oFormats as Object, aFormatStr as String, oLocale as Variant )
Dim nRetkey
nRetKey = oFormats.queryKey(aFormatStr, oLocale, True)
If nRetKey = -1 Then
nRetKey = oFormats.addNew( aFormatStr, oLocale )
If nRetKey = -1 Then nRetKey = 0
End If
Numberformat = nRetKey
End Function
Function CheckFormatType(oStyle as Object)
Dim oFormatofObject as Object
oFormatofObject = oDocFormats.getByKey(oStyle.NumberFormat)
CheckFormatType = INT(oFormatOfObject.Type) AND com.sun.star.util.NumberFormat.CURRENCY
End Function</script:module>

View File

@@ -0,0 +1,517 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Depot" script:language="StarBasic">Option Explicit
Sub Initialize(Optional bChooseMarketPlace as Boolean)
Dim bEnableHistory as Boolean
GlobalScope.BasicLibraries.LoadLibrary(&quot;Tools&quot;)
&apos; oMarketModel = GetControlModel(oDocument.Sheets(0), &quot;CmdHistory&quot;)
&apos; bEnableHistory = oMarketModel.Enabled
ToggleWindow(False)
Today = Date()
bDebugmode = False
oDocument = ThisComponent
oController = oDocument.GetCurrentController
oSheets = oDocument.Sheets
oFirstSheet = oSheets(0)
oMovementSheet = oSheets(1)
oBankSheet = oSheets(2)
oDocFormats = oDocument.NumberFormats
oNumberFormatter = CreateUnoService(&quot;com.sun.star.util.NumberFormatter&quot;)
oNumberFormatter.AttachNumberFormatsSupplier(oDocument)
oDocLocale = oDocument.CharLocale
sDocLanguage = oDocLocale.Language
sDocCountry = oDocLocale.Country
LoadLanguage()
ToggleWindow(True)
&apos; oMarketModel.Enabled = bEnableHistory
If Not IsMissing(bChooseMarketPlace) Then
If bChoosemarketPlace Then
ChooseMarket()
End If
Else
ChooseMarket()
End If
If Not IsMissing(bChooseMarketPlace) Then
If bChooseMarketPlace Then
oMarketModel.Enabled = bEnableMarket
oInternetModel.Enabled = bEnableInternet
End If
End If
End Sub
Sub Buy()
Initialize(True)
FillListbox(DlgTransaction.GetControl(&quot;lstBuyStocks&quot;), TransactTitle(SBDIALOGBUY), False)
SetupTransactionControls(SBDIALOGBUY)
EnableTransactionControls(False)
DlgTransaction.Execute()
End Sub
Sub Sell()
Initialize(True)
If FillListbox(DlgTransaction.GetControl(&quot;lstSellStocks&quot;), TransactTitle(SBDIALOGSELL), True) Then
SetupTransactionControls(SBDIALOGSELL)
EnableTransactionControls(False)
DlgTransaction.Execute()
End If
End Sub
Sub Reset()
Dim TransactionCount as Integer
Dim StockCount, iStartRow, i as Integer
Dim oRows, oRange as Object
Dim StockName as String
Initialize(True)
&apos; Delete transactions and reset overview
If MsgBox(sMsgDeleteAll, SBMSGYESNO+SBMSGQUESTION+SBMSGDEFAULTBTN2, sMsgAuthorization) = 6 Then
&apos; Assumption: If and only if there is an overview, then there are transactions, too
UnprotectSheets(oSheets)
StockCount = GetStocksCount(iStartRow)
For i = 1 To StockCount
StockName = oFirstSheet.GetCellbyPosition(SBCOLUMNNAME1, iStartRow + i).String
If oSheets.HasbyName(StockName) Then
oSheets.RemoveByName(StockName)
End If
Next
oDocument.AddActionLock
RemoveStockRows(oFirstSheet, iStartRow + 1, StockCount)
TransactionCount = GetTransactionCount(iStartRow)
RemoveStockRows(oMovementSheet, iStartRow + 2, TransactionCount)
ProtectSheets(oSheets)
oDocument.RemoveActionLock
End If
End Sub
Sub TransactionOk
Dim Sold as Long
Dim RestQuantity, Value, PartialValue, Profit
Dim iNewRow as Integer, iRow as Integer
Dim iStockRow as Long, iRestQuantity as Long
Dim oNameCell as Object
Dim CellStockName as String, SelStockName as String
Dim CurRate as Double
Dim TransactDate as Date
Dim LocStockName as String
&apos; Check for rate entered
If TransactModel.txtRate.Value = 0 Then
If TransactModel.Step = SBDIALOGBUY Then
If MsgBox(sMsgFreeStock, SBMSGYESNO+SBMSGQUESTION, sMsgConfirm)=7 Then
Exit Sub
End If
Else
If MsgBox(sMsgTotalLoss, SBMSGYESNO+SBMSGQUESTION, sMsgConfirm)=7 Then
Exit Sub
End If
End If
End If
CurRate = TransactModel.txtRate.Value
TransactDate = CDateFromUNODate(TransactModel.txtDate.Date)
DlgTransaction.EndExecute()
UnprotectSheets(oSheets)
iNewRow = DuplicateRow(oMovementSheet, &quot;HiddenRow3&quot;)
If TransactModel.Step = SBDIALOGBUY Then
CellStockName = TransactModel.lstBuyStocks.Text
If Instr(1,CellStockName,&quot;$&quot;) &lt;&gt; 0 Then
CellStockName = &quot;&apos;&quot; &amp; CellStockName &amp; &quot;&apos;&quot;
End If
oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iNewRow).String = CellStockName
oMovementSheet.GetCellByPosition(SBCOLUMNQUANTITY2, iNewRow).Value = TransactModel.txtQuantity.Value
Else
CellStockName = DlgTransaction.GetControl(&quot;lstSellStocks&quot;).GetSelectedItem()
oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iNewRow).String = CellStockName
oMovementSheet.GetCellByPosition(SBCOLUMNQUANTITY2, iNewRow).Value = -TransactModel.txtQuantity.Value
End If
oMovementSheet.GetCellByPosition(SBCOLUMNDATE2, iNewRow).Value = CDateFromUNODate(TransactModel.txtDate.Date)
oMovementSheet.GetCellByPosition(SBCOLUMNRATE2, iNewRow).Value = TransactModel.txtRate.Value
oMovementSheet.GetCellByPosition(SBCOLUMNPROVPERCENT2, iNewRow).Value = TransactModel.txtCommission.EffectiveValue
oMovementSheet.GetCellByPosition(SBCOLUMNPROVMIN2, iNewRow).Value = TransactModel.txtMinimum.Value
oMovementSheet.GetCellByPosition(SBCOLUMNPROVFIX2, iNewRow).Value = TransactModel.txtFix.Value
&apos; Buy stocks: Update overview for new stocks
If TransactModel.Step = SBDIALOGBUY Then
iStockRow = GetStockRowIndex(CellStockName)
If iStockRow = -1 Then
iNewRow = DuplicateRow(oFirstSheet, &quot;HiddenRow2&quot;)
oFirstSheet.GetCellByPosition(SBCOLUMNNAME1, iNewRow).String = CellStockName
oFirstSheet.GetCellByPosition(SBCOLUMNID1, iNewRow).String = TransactModel.txtStockID.Text
iStockRow = GetStockRowIndex(CellStockName)
End If
&apos; Sell stocks: Get transaction value, then update Transaction sheet
ElseIf TransactModel.Step = SBDIALOGSELL Then
Profit = oMovementSheet.GetCellByPosition(SBCOLUMNPROCEEDS2, iNewRow).Value
Value = Profit
Sold = TransactModel.txtQuantity.Value
SelStockName = DlgTransaction.GetControl(&quot;lstSellStocks&quot;).GetSelectedItem()
&apos; Go to first name
If TransactMode = FIFO Then
iRow = SBROWFIRSTTRANSACT2
Else
iRow = iNewRow-1
End If
&apos; Check that no transaction after split date exists else cancel split
Do While Sold &gt; 0
oNameCell = oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iRow)
CellStockName = oNameCell.String
If CellStockName = SelStockName Then
&apos; Update transactions: Note quantity sold
RestQuantity = oMovementSheet.GetCellByPosition(SBCOLUMNQTYREST2, iRow).Value
&apos; If there still is a rest left ...
If RestQuantity &gt; 0 Then
If RestQuantity &lt; Sold Then
&apos; Recalculate profit of new transaction
Profit = Profit - oMovementSheet.GetCellByPosition(SBCOLUMNPRCREST2, iRow).Value
AddValueToCellContent(SBCOLUMNQTYSOLD2, iRow, RestQuantity)
PartialValue = RestQuantity / Sold * Value
AddValueToCellContent(SBCOLUMNREALPROC2, iRow, PartialValue)
Sold = Sold - RestQuantity
Value = Value - PartialValue
Else
&apos; Recalculate profit of neTransactModel.lstBuyStocks.Textw transaction
PartialValue = oMovementSheet.GetCellByPosition(SBCOLUMNPRCREST2, iRow).Value
Profit = Profit - PartialValue/RestQuantity * Sold
&apos; Update sold shares cell
AddValueToCellContent(SBCOLUMNQTYSOLD2, iRow, Sold)
&apos; Update sales turnover cell
AddValueToCellContent(SBCOLUMNREALPROC2, iRow, Value)
&apos; Update variables for rest of transaction
Sold = 0
Value = 0
End If
End If
End If
iRow = iRow + TransactMode
Loop
oMovementSheet.GetCellByPosition(SBCOLUMNREALPROFIT2,iNewRow).Value = Profit
iStockRow = GetStockRowIndex(SelStockName)
iRestQuantity = oFirstSheet.GetCellbyPosition(SBCOLUMNQUANTITY1, iStockRow).Value
&apos; If iRestQuantity = 0 Then
&apos; If oSheets.HasbyName(SelStockName) Then
&apos; oSheets.RemoveByName(SelStockName)
&apos; End If
&apos; Else
&apos; End If
End If
InsertCurrentValue(CurRate, iStockRow,TransactDate)
ProtectSheets(oSheets)
End Sub
Sub SelectStockname(aEvent as Object)
Dim iCurRow as Integer
Dim CurStockName as String
With TransactModel
&apos; Find row with stock name
If TransactModel.Step = SBDIALOGBUY Then
CurStockName = .lstBuyStocks.Text
iCurRow = GetStockRowIndex(CurStockName)
.txtQuantity.ValueMax = 10000000
Else
Dim ListBoxList() as String
ListBoxList() = GetSelectedListboxItems(aEvent.Source.getModel())
CurStockName = ListBoxList(0)
&apos; CurStockName = DlgTransaction.GetControl(aEvent.Source.getModel.Name).GetSelectedItem()
iCurRow = GetStockRowIndex(CurStockName)
Dim fdouble as Double
fdouble = oFirstSheet.GetCellByPosition(SBCOLUMNQUANTITY1, iCurRow).Value
.txtQuantity.Value = fdouble
.txtQuantity.ValueMax = oFirstSheet.GetCellByPosition(SBCOLUMNQUANTITY1, iCurRow).Value
.txtRate.Value = oFirstSheet.GetCellbyPosition(SBCOLUMNRATE1, iCurRow).Value
End If
.txtStockID.Enabled = .Step = SBDIALOGBUY
.lblStockID.Enabled = .Step = SBDIALOGBUY
&apos; Default settings for quantity and rate
.txtStockID.Text = GetStockID(CurStockName, iCurRow)
End With
EnableTransactionControls(CurStockName &lt;&gt; &quot;&quot;)
TransactModel.cmdGoOn.DefaultButton = True
End Sub
Sub HandleStocks(Mode as Integer, oDialog as Object)
Dim DividendPerShare, DividendTotal, RestQuantity, OldValue
Dim SelStockName, CellStockName as String
Dim oNameCell as Object, oDateCell as Object
Dim iRow as Integer
Dim oDividendCell as Object
Dim Amount
Dim OldNumber, NewNumber as Integer
Dim NoteText as String
Dim TotalStocksCount as Long
Dim oModel as Object
oDocument.AddActionLock
oDialog.EndExecute()
oModel = oDialog.Model
SelStockName = DlgStockRates.GetControl(&quot;lstStockNames&quot;).GetSelectedItem()
Select Case Mode
Case HANDLEDIVIDEND
Dim bTakeTotal as Boolean
&apos; Update transactions: Enter dividend paid for all Buy transactions not sold completely
bTakeTotal = oModel.optTotal.State = 1
If bTakeTotal Then
DividendTotal = oModel.txtDividend.Value
iRow = GetStockRowIndex(SelStockName)
TotalStocksCount = oFirstSheet.GetCellByPosition(SBCOLUMNQUANTITY1,iRow).Value
DividendPerShare = DividendTotal/TotalStocksCount
Else
DividendPerShare = oModel.txtDividend.Value
End If
Case HANDLESPLIT
&apos; Store entered values in variables
OldNumber = oModel.txtOldRate.Value
NewNumber = oModel.txtNewRate.Value
SplitDate = CDateFromUNODate(oModel.txtDate.Date)
iRow = SBROWFIRSTTRANSACT2
NoteText = cSplit &amp; SplitDate &amp; &quot;, &quot; &amp; oModel.txtOldRate.Value &amp; oModel.lblColon.Label &amp; oModel.txtNewRate.Value
Do
oNameCell = oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iRow)
CellStockName = oNameCell.String
If CellStockName = SelStockName Then
oDateCell = oMovementSheet.GetCellByPosition(SBCOLUMNDATE2, iRow)
If oDateCell.Value &gt;= SplitDate Then
MsgBox sMsgWrongExchangeDate, SBMSGOK + SBMSGSTOP, sMsgError
Exit Sub
End If
End If
iRow = iRow + 1
Loop Until CellStockName = &quot;&quot;
End Select
iRow = SBROWFIRSTTRANSACT2
UnprotectSheets(oSheets)
Do
oNameCell = oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iRow)
CellStockName = oNameCell.String
If CellStockName = SelStockName Then
Select Case Mode
Case HANDLEDIVIDEND
RestQuantity = oMovementSheet.GetCellByPosition(SBCOLUMNQTYREST2, iRow).Value
If RestQuantity &gt; 0 Then
oDividendCell = oMovementSheet.GetCellByPosition(SBCOLUMNDIVIDEND2, iRow)
OldValue = oDividendCell.Value
oDividendCell.Value = OldValue + RestQuantity * DividendPerShare
End If
Case HANDLESPLIT
oDateCell = oMovementSheet.GetCellByPosition(SBCOLUMNDATE2, iRow)
SplitCellValue(oMovementSheet, NewNumber, OldNumber, SBCOLUMNQUANTITY2, iRow, NoteText)
SplitCellValue(oMovementSheet, OldNumber, NewNumber, SBCOLUMNRATE2, iRow, &quot;&quot;)
SplitCellValue(oMovementSheet, NewNumber, OldNumber, SBCOLUMNQTYSOLD2, iRow, &quot;&quot;)
End Select
End If
iRow = iRow + 1
Loop Until CellStockName = &quot;&quot;
If Mode = HANDLESPLIT Then
CalculateChartafterSplit(SelStockName, NewNumber, OldNumber, NoteText, SplitDate)
End If
oDocument.CalculateAll()
ProtectSheets(oSheets)
oDocument.RemoveActionLock
End Sub
Sub CancelStockRate()
DlgStockRates.EndExecute()
End Sub
Sub CancelTransaction()
DlgTransaction.EndExecute()
End Sub
Sub CommitStockRate()
Dim CurStep as Integer
CurStep = StockRatesModel.Step
Select Case CurStep
Case 1
&apos; Check for quantity entered
If StockRatesModel.txtDividend.Value = 0 Then
MsgBox sMsgNoDividend, SBMSGSTOP+SBMSGSTOP, sMsgError
Exit Sub
End If
HandleStocks(HANDLEDIVIDEND, DlgStockRates)
Case 2
HandleStocks(HANDLESPLIT, DlgStockRates)
Case 3
InsertCompanyHistory()
End Select
End Sub
Sub EnableTransactionControls(bEnable as Boolean)
With TransactModel
.lblQuantity.Enabled = bEnable
.txtQuantity.Enabled = bEnable
.lblRate.Enabled = bEnable
.txtRate.Enabled = bEnable
.lblDate.Enabled = bEnable
.txtDate.Enabled = bEnable
.lblCommission.Enabled = bEnable
.txtCommission.Enabled = bEnable
.lblMinimum.Enabled = bEnable
.txtMinimum.Enabled = bEnable
.lblFix.Enabled = bEnable
.txtFix.Enabled = bEnable
If TransactModel.Step = SBDIALOGSELL Then
.cmdGoOn.Enabled = Ubound(TransactModel.lstSellStocks.SelectedItems()) &gt; -1
DlgTransaction.GetControl(&quot;lstSellStocks&quot;).SetFocus()
Else
.cmdGoOn.Enabled = TransactModel.lstBuyStocks.Text &lt;&gt; &quot;&quot;
DlgTransaction.GetControl(&quot;lstBuyStocks&quot;).SetFocus()
End If
If bEnable Then
TransactModel.cmdGoOn.DefaultButton = True
End If
End With
End Sub
Sub SetupTransactionControls(CurStep as Integer)
DlgReference = DlgTransaction
With TransactModel
.txtDate.Date = CDateToUNODate(Date())
.txtDate.DateMax = CDateToUNODate(Date())
.txtStockID.Enabled = False
.lblStockID.Enabled = False
.lblStockID.Label = sCurStockIDLabel
.txtRate.CurrencySymbol = sCurCurrency
.txtFix.CurrencySymbol = sCurCurrency
.Step = CurStep
End With
DlgTransaction.Title = TransactTitle(CurStep)
CellValuetoControl(oBankSheet, TransactModel.txtCommission, &quot;ProvisionPercent&quot;)
CellValuetoControl(oBankSheet, TransactModel.txtMinimum, &quot;ProvisionMinimum&quot;)
CellValuetoControl(oBankSheet, TransactModel.txtFix, &quot;ProvisionFix&quot;)
End Sub
Sub AddShortCuttoControl()
Dim SelCompany as String
Dim iRow, SelIndex as Integer
SelIndex = DlgTransaction.GetControl(&quot;lstBuyStocks&quot;).GetSelectedItemPos()
If SelIndex &lt;&gt; -1 Then
SelCompany = TransactModel.lstBuyStocks.StringItemList(SelIndex)
iRow = GetStockRowIndex(SelCompany)
If iRow &lt;&gt; -1 Then
TransactModel.txtStockID.Text = oFirstSheet.GetCellByPosition(SBCOLUMNID1,iRow).String
TransactModel.txtRate.Value = oFirstSheet.GetCellByPosition(SBCOLUMNRATE1,iRow).Value
Else
TransactModel.txtStockID.Text = &quot;&quot;
TransactModel.txtRate.Value = 0
End If
Else
TransactModel.txtStockID.Text = &quot;&quot;
TransactModel.txtRate.Value = 0
End If
End Sub
Sub OpenStockRatePage(aEvent)
Dim CurStep as Integer
Initialize(True)
CurStep = aEvent.Source.Model.Tag
If FillListbox(DlgStockRates.GetControl(&quot;lstStockNames&quot;), StockRatesTitle(CurStep), True) Then
StockRatesModel.Step = CurStep
ToggleStockRateControls(False, CurStep)
InitializeStockRatesControls(CurStep)
DlgStockRates.Execute()
End If
End Sub
Sub SelectStockNameForRates()
Dim StockName as String
StockName = DlgStockRates.GetControl(&quot;lstStockNames&quot;).GetSelectedItem()
If StockName &lt;&gt; &quot;&quot; Then
StockRatesModel.txtStockID.Text = GetStockID(StockName)
ToggleStockRateControls(True, StockRatesModel.Step)
End If
StockRatesModel.cmdGoOn.DefaultButton = True
End Sub
Sub ToggleStockRateControls(bDoEnable as Boolean, CurStep as Integer)
With StockRatesModel
.lblStockID.Enabled = False
.txtStockID.Enabled = False
.cmdGoOn.Enabled = Ubound(StockRatesModel.lstStockNames.SelectedItems()) &lt;&gt; -1
Select Case CurStep
Case 1
.optPerShare.Enabled = bDoEnable
.optTotal.Enabled = bDoEnable
.lblDividend.Enabled = bDoEnable
.txtDividend.Enabled = bDoEnable
Case 2
.lblExchangeRate.Enabled = bDoEnable
.lblDate.Enabled = bDoEnable
.lblColon.Enabled = bDoEnable
.txtOldRate.Enabled = bDoEnable
.txtNewRate.Enabled = bDoEnable
.txtDate.Enabled = bDoEnable
Case 3
.lblStartDate.Enabled = bDoEnable
.lblEndDate.Enabled = bDoEnable
.txtStartDate.Enabled = bDoEnable
.txtEndDate.Enabled = bDoEnable
.hlnInterval.Enabled = bDoEnable
.optDaily.Enabled = bDoEnable
.optWeekly.Enabled = bDoEnable
End Select
End With
End Sub
Sub InitializeStockRatesControls(CurStep as Integer)
DlgReference = DlgStockRates
DlgStockRates.Title = StockRatesTitle(CurStep)
With StockRatesModel
.txtStockID.Text = &quot;&quot;
.lblStockID.Label = sCurStockIDLabel
Select Case CurStep
Case 1
.txtDividend.Value = 0
.optPerShare.State = 1
.txtDividend.CurrencySymbol = sCurCurrency
Case 2
.txtOldRate.Value = 1
.txtNewRate.Value = 1
.txtDate.Date = CDateToUNODate(Date())
Case 3
.txtStartDate.DateMax = CDateToUNODate(CDate(Date())-1)
.txtEndDate.DateMax = CDateToUNODate(CDate(Date())-1)
.txtStartDate.Date = CDateToUNODate(CDate(Date())-8)
.txtEndDate.Date = CDateToUNODate(CDate(Date())-1)
.optDaily.State = 1
End Select
End With
End Sub
</script:module>

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="Dialog2" dlg:tab-index="0" dlg:left="91" dlg:top="24" dlg:width="220" dlg:height="128" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_DIALOG_SELLBUY" dlg:closeable="true" dlg:moveable="true">
<dlg:bulletinboard>
<dlg:text dlg:id="lblStockNames" dlg:tab-index="0" dlg:left="6" dlg:top="6" dlg:width="102" dlg:height="8" dlg:value="lblStockNames"/>
<dlg:menulist dlg:id="lstSellStocks" dlg:tab-index="1" dlg:left="6" dlg:top="17" dlg:width="102" dlg:height="12" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_1_LSTSELLSTOCKS" dlg:spin="true">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:Depot.Depot.SelectStockname?language=Basic&amp;location=application" script:language="Script"/>
</dlg:menulist>
<dlg:combobox dlg:id="lstBuyStocks" dlg:tab-index="2" dlg:left="6" dlg:top="17" dlg:width="102" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_2_LSTBUYSTOCKS" dlg:spin="true">
<script:event script:event-name="on-textchange" script:macro-name="vnd.sun.star.script:Depot.Depot.SelectStockname?language=Basic&amp;location=application" script:language="Script"/>
</dlg:combobox>
<dlg:text dlg:id="lblStockID" dlg:tab-index="3" dlg:left="150" dlg:top="6" dlg:width="66" dlg:height="8" dlg:value="lblStockID"/>
<dlg:textfield dlg:id="txtStockID" dlg:tab-index="4" dlg:left="150" dlg:top="17" dlg:width="40" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_TXTSTOCKID_SELLBUY"/>
<dlg:text dlg:id="lblQuantity" dlg:tab-index="5" dlg:left="6" dlg:top="36" dlg:width="57" dlg:height="8" dlg:value="lblQuantity"/>
<dlg:numericfield dlg:id="txtQuantity" dlg:tab-index="6" dlg:left="6" dlg:top="47" dlg:width="46" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_TXTQUANTITY" dlg:decimal-accuracy="0" dlg:value-min="1"/>
<dlg:currencyfield dlg:id="txtRate" dlg:tab-index="7" dlg:left="68" dlg:top="47" dlg:width="40" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_TXTRATE" dlg:value-min="0"/>
<dlg:datefield dlg:id="txtDate" dlg:tab-index="8" dlg:left="150" dlg:top="47" dlg:width="50" dlg:height="12" dlg:tag="Dialog2" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_TXTDATE" dlg:strict-format="true" dlg:spin="true">
<script:event script:event-name="on-textchange" script:macro-name="vnd.sun.star.script:Depot.tools.CheckInputDate?language=Basic&amp;location=application" script:language="Script"/>
</dlg:datefield>
<dlg:text dlg:id="lblRate" dlg:tab-index="9" dlg:left="68" dlg:top="36" dlg:width="77" dlg:height="8" dlg:value="lblRate"/>
<dlg:text dlg:id="lblDate" dlg:tab-index="10" dlg:left="150" dlg:top="37" dlg:width="66" dlg:height="8" dlg:value="lblDate"/>
<dlg:formattedfield dlg:id="txtCommission" dlg:tab-index="11" dlg:left="6" dlg:top="90" dlg:width="40" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_TXTCOMMISSION" dlg:format-code="0,00%" dlg:format-locale="de;DE"/>
<dlg:text dlg:id="lblCommission" dlg:tab-index="12" dlg:left="6" dlg:top="79" dlg:width="60" dlg:height="8" dlg:value="lblCommission"/>
<dlg:currencyfield dlg:id="txtFix" dlg:tab-index="13" dlg:left="68" dlg:top="90" dlg:width="40" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_TXTFIX" dlg:value-min="0"/>
<dlg:currencyfield dlg:id="txtMinimum" dlg:tab-index="14" dlg:left="150" dlg:top="90" dlg:width="40" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_TXTMINIMUM" dlg:value-min="0"/>
<dlg:text dlg:id="lblFix" dlg:tab-index="15" dlg:left="68" dlg:top="79" dlg:width="71" dlg:height="8" dlg:value="lblFix"/>
<dlg:text dlg:id="lblMinimum" dlg:tab-index="16" dlg:left="150" dlg:top="79" dlg:width="66" dlg:height="8" dlg:value="lblMinimum"/>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="17" dlg:left="58" dlg:top="109" dlg:width="50" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_CMDCANCEL_SELLBUY" dlg:value="cmdCancel">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Depot.Depot.CancelTransaction?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdGoOn" dlg:tab-index="18" dlg:left="111" dlg:top="109" dlg:width="50" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_CMDGOON_SELLBUY" dlg:value="cmdGoOn">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Depot.Depot.TransactionOk?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:fixedline dlg:id="hlnCommission" dlg:tab-index="19" dlg:left="6" dlg:top="66" dlg:width="210" dlg:height="8" dlg:value="hlnCommission"/>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="Dialog3" dlg:left="161" dlg:top="81" dlg:width="176" dlg:height="119" dlg:page="3" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_DIALOG_SPLIT" dlg:closeable="true" dlg:moveable="true">
<dlg:bulletinboard>
<dlg:text dlg:id="lblStockNames" dlg:tab-index="0" dlg:left="6" dlg:top="6" dlg:width="98" dlg:height="8" dlg:value="lblStockNames"/>
<dlg:menulist dlg:id="lstStockNames" dlg:tab-index="1" dlg:left="5" dlg:top="17" dlg:width="102" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_LSTSTOCKNAMES" dlg:spin="true">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:Depot.Depot.SelectStockNameForRates?language=Basic&amp;location=application" script:language="Script"/>
</dlg:menulist>
<dlg:textfield dlg:id="txtStockID" dlg:tab-index="2" dlg:left="120" dlg:top="17" dlg:width="50" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_TXTSTOCKID_SPLIT"/>
<dlg:datefield dlg:id="txtStartDate" dlg:tab-index="3" dlg:left="63" dlg:top="37" dlg:width="50" dlg:height="12" dlg:page="3" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_3_TXTSTARTDATE" dlg:spin="true">
<script:event script:event-name="on-textchange" script:macro-name="vnd.sun.star.script:Depot.tools.CheckInputDate?language=Basic&amp;location=application" script:language="Script"/>
</dlg:datefield>
<dlg:datefield dlg:id="txtEndDate" dlg:tab-index="4" dlg:left="63" dlg:top="53" dlg:width="50" dlg:height="12" dlg:page="3" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_3_TXTENDDATE" dlg:spin="true">
<script:event script:event-name="on-textchange" script:macro-name="vnd.sun.star.script:Depot.tools.CheckInputDate?language=Basic&amp;location=application" script:language="Script"/>
</dlg:datefield>
<dlg:radiogroup>
<dlg:radio dlg:id="optDaily" dlg:tab-index="5" dlg:left="12" dlg:top="83" dlg:width="75" dlg:height="10" dlg:page="3" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_3_OPTDAILY" dlg:value="optDaily"/>
<dlg:radio dlg:id="optWeekly" dlg:tab-index="6" dlg:left="101" dlg:top="83" dlg:width="69" dlg:height="10" dlg:page="3" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_3_OPTWEEKLY" dlg:value="optWeekly"/>
</dlg:radiogroup>
<dlg:datefield dlg:id="txtDate" dlg:tab-index="7" dlg:left="71" dlg:top="73" dlg:width="50" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_2_TXTDATE" dlg:spin="true">
<script:event script:event-name="on-textchange" script:macro-name="vnd.sun.star.script:Depot.tools.CheckInputDate?language=Basic&amp;location=application" script:language="Script"/>
</dlg:datefield>
<dlg:radiogroup>
<dlg:radio dlg:id="optPerShare" dlg:tab-index="8" dlg:left="6" dlg:top="37" dlg:width="69" dlg:height="10" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_1_OPTPERSHARE" dlg:value="optPerShare"/>
<dlg:radio dlg:id="optTotal" dlg:tab-index="9" dlg:left="6" dlg:top="51" dlg:width="69" dlg:height="10" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_1_OPTTOTAL" dlg:value="optTotal"/>
</dlg:radiogroup>
<dlg:currencyfield dlg:id="txtDividend" dlg:tab-index="10" dlg:left="6" dlg:top="80" dlg:width="50" dlg:height="12" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_1_TXTDIVIDEND" dlg:value-min="0" dlg:spin="true"/>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="11" dlg:left="41" dlg:top="98" dlg:width="50" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_CMDCANCEL_SPLIT" dlg:value="cmdCancel">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Depot.Depot.CancelStockRate?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdGoOn" dlg:tab-index="12" dlg:left="94" dlg:top="98" dlg:width="50" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_CMDGOON_SPLIT" dlg:value="cmdGoOn">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Depot.Depot.CommitStockRate?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:text dlg:id="lblStockID" dlg:tab-index="13" dlg:left="120" dlg:top="6" dlg:width="50" dlg:height="8" dlg:value="lblStockID"/>
<dlg:text dlg:id="lblDividend" dlg:tab-index="14" dlg:left="6" dlg:top="68" dlg:width="73" dlg:height="8" dlg:page="1" dlg:value="lblDividend"/>
<dlg:text dlg:id="lblExchangeRate" dlg:tab-index="15" dlg:left="6" dlg:top="39" dlg:width="92" dlg:height="8" dlg:page="2" dlg:value="lblExchangeRate"/>
<dlg:text dlg:id="lblColon" dlg:tab-index="16" dlg:left="40" dlg:top="55" dlg:width="5" dlg:height="8" dlg:page="2" dlg:value=" :"/>
<dlg:text dlg:id="lblDate" dlg:tab-index="17" dlg:left="5" dlg:top="75" dlg:width="66" dlg:height="8" dlg:page="2" dlg:value="lblDate"/>
<dlg:fixedline dlg:id="hlnInterval" dlg:tab-index="18" dlg:left="6" dlg:top="72" dlg:width="164" dlg:height="8" dlg:page="3" dlg:value="hlnInterval"/>
<dlg:text dlg:id="lblStartDate" dlg:tab-index="19" dlg:left="6" dlg:top="39" dlg:width="53" dlg:height="8" dlg:page="3" dlg:value="lblStartDate"/>
<dlg:text dlg:id="lblEndDate" dlg:tab-index="20" dlg:left="6" dlg:top="55" dlg:width="53" dlg:height="8" dlg:page="3" dlg:value="lblEndDate"/>
<dlg:numericfield dlg:id="txtOldRate" dlg:tab-index="21" dlg:left="6" dlg:top="53" dlg:width="30" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_2_TXTOLDRATE" dlg:decimal-accuracy="0" dlg:value-min="1" dlg:spin="true"/>
<dlg:numericfield dlg:id="txtNewRate" dlg:tab-index="22" dlg:left="50" dlg:top="53" dlg:width="30" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_2_TXTNEWRATE" dlg:decimal-accuracy="0" dlg:value-min="1" dlg:spin="true"/>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="Dialog4" dlg:left="161" dlg:top="81" dlg:width="160" dlg:height="120" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_DIALOG_HISTORY" dlg:closeable="true" dlg:moveable="true">
<dlg:bulletinboard>
<dlg:text dlg:id="lblWelcome" dlg:tab-index="0" dlg:left="6" dlg:top="6" dlg:width="148" dlg:height="49" dlg:value="lblWelcome" dlg:multiline="true"/>
<dlg:text dlg:id="lblHint" dlg:tab-index="1" dlg:left="6" dlg:top="73" dlg:width="148" dlg:height="26" dlg:value="lblHint" dlg:multiline="true"/>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="2" dlg:left="28" dlg:top="100" dlg:width="50" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_CMDCANCEL_HISTORY" dlg:value="cmdCancel">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Depot.Currency.CloseStartUpDialog?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdGoOn" dlg:tab-index="3" dlg:left="84" dlg:top="100" dlg:width="52" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_0_CMDGOON_HISTORY" dlg:value="cmdGoOn">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Depot.Currency.ChooseMarket?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:menulist dlg:id="lstMarkets" dlg:tab-index="4" dlg:left="6" dlg:top="57" dlg:width="148" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGDEPOT_LSTMARKETS" dlg:spin="true">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:Depot.Currency.EnableGoOnButton?language=Basic&amp;location=application" script:language="Script"/>
</dlg:menulist>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,356 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Internet" script:language="StarBasic">REM ***** BASIC *****
Option Explicit
Public sNewSheetName as String
Function CheckHistoryControls()
Dim bLocGoOn as Boolean
Dim Firstdate as Date
Dim LastDate as Date
LastDate = CDateFromUNODate(StockRatesModel.txtEndDate.Date)
FirstDate = CDateFromUNODate(StockRatesModel.txtStartDate.Date)
bLocGoOn = FirstDate &lt;&gt; 0 And LastDate &lt;&gt; 0
If bLocGoOn Then
If FirstDate &gt;= LastDate Then
Msgbox(sMsgStartDatebeforeEndDate,16, sProductname)
bLocGoOn = False
End If
End If
CheckHistoryControls = bLocGoon
End Function
Sub InsertCompanyHistory()
Dim StockName as String
Dim CurRow as Integer
Dim sMsgInternetError as String
Dim CurRate as Double
Dim oCell as Object
Dim sStockID as String
Dim ChartSource as String
If CheckHistoryControls() Then
StartDate = CDateFromUNODate(StockRatesModel.txtStartDate.Date)
EndDate = CDateFromUNODate(StockRatesModel.txtEndDate.Date)
DlgStockRates.EndExecute()
If StockRatesModel.optDaily.State = 1 Then
sInterval = &quot;d&quot;
iStep = 1
ElseIf StockRatesModel.optWeekly.State = 1 Then
sInterval = &quot;w&quot;
iStep = 7
StartDate = StartDate - WeekDay(StartDate) + 2
EndDate = EndDate - WeekDay(EndDate) + 2
End If
iEndDay = Day(EndDate)
iEndMonth = Month(EndDate)
iEndYear = Year(EndDate)
iStartDay = Day(StartDate)
iStartMonth = Month(StartDate)
iStartYear = Year(StartDate)
&apos; oDocument.AddActionLock()
UnprotectSheets(oSheets)
InitializeStatusline(&quot;&quot;, 10, 1)
oBackGroundSheet = oSheets.GetbyName(&quot;Background&quot;)
StockName = DlgStockRates.GetControl(&quot;lstStockNames&quot;).GetSelectedItem()
CurRow = GetStockRowIndex(Stockname)
sStockID = oFirstSheet.GetCellByPosition(SBCOLUMNID1, CurRow).String
ChartSource = ReplaceString(HistoryChartSource, sStockID, &quot;&lt;StockID&gt;&quot;)
ChartSource = ReplaceString(ChartSource, iStartDay, &quot;&lt;StartDay&gt;&quot;)
ChartSource = ReplaceString(ChartSource, cStr(iStartMonth-1), &quot;&lt;StartMonth&gt;&quot;)
ChartSource = ReplaceString(ChartSource, iStartYear, &quot;&lt;StartYear&gt;&quot;)
ChartSource = ReplaceString(ChartSource, iEndDay, &quot;&lt;EndDay&gt;&quot;)
ChartSource = ReplaceString(ChartSource, cStr(iEndMonth-1), &quot;&lt;EndMonth&gt;&quot;)
ChartSource = ReplaceString(ChartSource, iEndYear, &quot;&lt;EndYear&gt;&quot;)
ChartSource = ReplaceString(ChartSource, sInterval, &quot;&lt;interval&gt;&quot;)
oStatusLine.SetValue(2)
If GetCurrentRate(ChartSource, CurRate, 1) Then
oStatusLine.SetValue(8)
UpdateValue(StockName, Today, CurRate)
oStatusLine.SetValue(9)
UpdateChart(StockName)
oStatusLine.SetValue(10)
Else
sMsgInternetError = Stockname &amp; &quot;: &quot; &amp; sNoInternetDataAvailable &amp; chr(13) &amp; sCheckInternetSettings
Msgbox(sMsgInternetError, 16, sProductname)
End If
ProtectSheets(oSheets)
oStatusLine.End
If oSheets.HasbyName(sNewSheetName) Then
oController.ActiveSheet = oSheets.GetByName(sNewSheetName)
End If
&apos; oDocument.RemoveActionLock()
End If
End Sub
Sub InternetUpdate()
Dim i as Integer
Dim StocksCount as Integer
Dim iStartRow as Integer
Dim sUrl as String
Dim StockName as String
Dim CurRate as Double
Dim oCell as Object
Dim sMsgInternetError as String
Dim sStockID as String
Dim ChartSource as String
&apos; oDocument.AddActionLock()
Initialize(True)
UnprotectSheets(oSheets)
StocksCount = GetStocksCount(iStartRow)
InitializeStatusline(&quot;&quot;, StocksCount + 1, 1)
Today = CDate(Date)
For i = iStartRow + 1 To iStartRow + StocksCount
StockName = oFirstSheet.GetCellbyPosition(SBCOLUMNNAME1, i).String
sStockID = oFirstSheet.GetCellByPosition(SBCOLUMNID1, i).String
ChartSource = ReplaceString(sCurChartSource, sStockID, &quot;&lt;StockID&gt;&quot;)
If GetCurrentRate(ChartSource, CurRate, 0) Then
InsertCurrentValue(CurRate, i, Now)
Else
sMsgInternetError = Stockname &amp; &quot;: &quot; &amp; sNoInternetDataAvailable &amp; chr(13) &amp; sCheckInternetSettings
Msgbox(sMsgInternetError, 16, sProductname)
End If
oStatusline.SetValue(i - iStartRow + 1)
Next
ProtectSheets(oSheets)
oStatusLine.End
&apos; oDocument.RemoveActionLock
End Sub
Function GetCurrentRate(sUrl as String, fValue As Double, iValueRow as Integer) as Boolean
Dim sFilter As String
Dim sOptions As String
Dim oLinkSheet As Object
Dim sDate as String
If oSheets.hasByName(&quot;Link&quot;) Then
oLinkSheet = oSheets.getByName(&quot;Link&quot;)
Else
oLinkSheet = oDocument.createInstance(&quot;com.sun.star.sheet.Spreadsheet&quot;)
oSheets.insertByName(&quot;Link&quot;, oLinkSheet)
oLinkSheet.IsVisible = False
End If
sFilter = &quot;Text - txt - csv (StarCalc)&quot;
sOptions = sCurSeparator &amp; &quot;,34,SYSTEM,1,1/10/2/10/3/10/4/10/5/10/6/10/7/10/8/10/9/10&quot;
oLinkSheet.LinkMode = com.sun.star.sheet.SheetLinkMode.NONE
oLinkSheet.link(sUrl, &quot;&quot;, sFilter, sOptions, 1 )
fValue = oLinkSheet.getCellByPosition(iValueCol, iValueRow).Value
If fValue = 0 Then
Dim sValue as String
sValue = oLinkSheet.getCellByPosition(1, iValueRow).String
sValue = ReplaceString(sValue, &quot;.&quot;,&quot;,&quot;)
fValue = Val(sValue)
End If
GetCurrentRate = fValue &lt;&gt; 0
End Function
Sub UpdateValue(ByVal sName As String, fDate As Double, fValue As Double )
Dim oSheet As Object
Dim iColumn As Long
Dim iRow As Long
Dim i as Long
Dim oCell As Object
Dim LastDate as Date
Dim bLeaveLoop as Boolean
Dim RemoveCount as Long
Dim iLastRow as Long
Dim iLastLinkRow as Long
Dim dDate as Date
Dim CurDate as Date
Dim oLinkSheet as Object
Dim StartIndex as Long
Dim iCellValue as Long
&apos; Insert Sheet with Company - Chart
sName = CheckNewSheetname(oSheets, sName)
If NOT oSheets.hasByName(sName) Then
oSheets.CopybyName(&quot;Background&quot;, sName, oSheets.Count)
oSheet = oSheets.getByName(sName)
iCurRow = SBSTARTROW
iMaxRow = iCurRow
oCell = oSheet.getCellByPosition(SBDATECOLUMN, iCurRow)
oCell.Value = fDate
End If
sNewSheetName = sName
oLinkSheet = oSheets.GetByName(&quot;Link&quot;)
oSheet = oSheets.getByName(sName)
iLastRow = GetLastUsedRow(oSheet)- 2
iLastLinkRow = GetLastUsedRow(oLinkSheet)
iCurRow = iLastRow
bLeaveLoop = False
RemoveCount = 0
&apos; Delete all Cells in Date Area
Do
oCell = oSheet.GetCellbyPosition(SBDATECOLUMN,iCurRow)
If oCell.CellStyle = sColumnHeader Then
bLeaveLoop = True
StartIndex = iCurRow
iCurRow = iCurRow + 1
Else
RemoveCount = RemoveCount + 1
iCurRow = iCurRow - 1
End If
Loop Until bLeaveLoop
If RemoveCount &gt; 1 Then
oSheet.Rows.RemoveByIndex(iCurRow, RemoveCount-1)
End If
For i = 1 To iLastLinkRow
oCell = oSheet.GetCellbyPosition(SBDATECOLUMN,iCurRow)
iCellValue = oLinkSheet.GetCellByPosition(0,i).Value
If iCellValue &gt; 0 Then
oCell.SetValue(oLinkSheet.GetCellByPosition(0,i).Value)
Else
oCell.SetValue(StringToDate(oLinkSheet.GetCellByPosition(0,i).String))
End If
oCell = oSheet.GetCellbyPosition(SBVALUECOLUMN,iCurRow)
oCell.SetValue(oLinkSheet.GetCellByPosition(4,i).Value)
If i &lt; iLastLinkRow Then
iCurRow = iCurRow + 1
oSheet.Rows.InsertByIndex(iCurRow,1)
End If
Next i
iMaxRow = iCurRow
End Sub
Function StringToDate(DateString as String) as Date
Dim ShortMonths(11)
Dim DateList() as String
Dim MaxIndex as Integer
Dim i as Integer
ShortMonths(0) = &quot;Jan&quot;
ShortMonths(1) = &quot;Feb&quot;
ShortMonths(2) = &quot;Mar&quot;
ShortMonths(3) = &quot;Apr&quot;
ShortMonths(4) = &quot;May&quot;
ShortMonths(5) = &quot;Jun&quot;
ShortMonths(6) = &quot;Jul&quot;
ShortMonths(7) = &quot;Aug&quot;
ShortMonths(8) = &quot;Sep&quot;
ShortMonths(9) = &quot;Oct&quot;
ShortMonths(10) = &quot;Nov&quot;
ShortMonths(11) = &quot;Dec&quot;
For i = 0 To 11
DateString = ReplaceString(DateString,CStr(i+1),ShortMonths(i))
Next i
DateString = ReplaceString(DateString, &quot;.&quot;, &quot;-&quot;)
StringToDate = CDate(DateString)
End Function
Sub UpdateChart(sName As String)
Dim oSheet As Object
Dim oCell As Object, oCursor As Object
Dim oChartRange As Object
Dim oEmbeddedChart As Object, oCharts As Object
Dim oChart As Object, oDiagram As Object
Dim oYAxis As Object, oXAxis As Object
Dim fMin As Double, fMax As Double
Dim nDateFormat As Long
Dim aPos As Variant
Dim aSize As Variant
Dim oContainerChart as Object
Dim mRangeAddresses(0) as New com.sun.star.table.CellRangeAddress
mRangeAddresses(0).Sheet = GetSheetIndex(oSheets, sNewSheetName)
mRangeAddresses(0).StartColumn = SBDATECOLUMN
mRangeAddresses(0).StartRow = SBSTARTROW-1
mRangeAddresses(0).EndColumn = SBVALUECOLUMN
mRangeAddresses(0).EndRow = iMaxRow
oSheet = oDocument.Sheets.getByName(sNewSheetName)
oCharts = oSheet.Charts
If Not oCharts.hasElements Then
oSheet.GetCellbyPosition(2,2).SetString(sName)
oChartRange = oSheet.getCellRangeByPosition(SBDATECOLUMN,6,5,SBSTARTROW-3)
aPos = oChartRange.Position
aSize = oChartRange.Size
Dim oRectangleShape As New com.sun.star.awt.Rectangle
oRectangleShape.X = aPos.X
oRectangleShape.Y = aPos.Y
oRectangleShape.Width = aSize.Width
oRectangleShape.Height = aSize.Height
oCharts.addNewByName(sName, oRectangleShape, mRangeAddresses(), True, False)
oContainerChart = oCharts.getByName(sName)
oChart = oContainerChart.EmbeddedObject
oChart.Title.String = &quot;&quot;
oChart.HasLegend = False
oChart.diagram = oChart.createInstance(&quot;com.sun.star.chart.XYDiagram&quot;)
oDiagram = oChart.Diagram
oDiagram.DataRowSource = com.sun.star.chart.ChartDataRowSource.COLUMNS
oChart.Area.LineStyle = com.sun.star.drawing.LineStyle.SOLID
oXAxis = oDiagram.XAxis
oXAxis.TextBreak = False
nDateFormat = oXAxis.NumberFormats.getStandardFormat(com.sun.star.util.NumberFormat.DATE, oDocLocale)
oYAxis = oDiagram.getYAxis()
oYAxis.AutoOrigin = True
Else
oChart = oCharts(0)
oChart.Ranges = mRangeAddresses()
oChart.HasRowHeaders = False
oEmbeddedChart = oChart.EmbeddedObject
oDiagram = oEmbeddedChart.Diagram
oXAxis = oDiagram.XAxis
End If
oXAxis.AutoStepMain = False
oXAxis.AutoStepHelp = False
oXAxis.StepMain = iStep
oXAxis.StepHelp = iStep
fMin = oSheet.getCellByPosition(SBDATECOLUMN,SBSTARTROW).Value
fMax = oSheet.getCellByPosition(SBDATECOLUMN,iMaxRow).Value
oXAxis.Min = fMin
oXAxis.Max = fMax
oXAxis.AutoMin = False
oXAxis.AutoMax = False
End Sub
Sub CalculateChartafterSplit(SheetName, NewNumber, OldNumber, NoteText, SplitDate)
Dim oSheet as Object
Dim i as Integer
Dim oValueCell as Object
Dim oDateCell as Object
Dim bLeaveLoop as Boolean
If oSheets.HasbyName(SheetName) Then
oSheet = oSheets.GetbyName(SheetName)
i = 0
bLeaveLoop = False
Do
oValueCell = oSheet.GetCellbyPosition(SBVALUECOLUMN, SBSTARTROW + i)
If oValueCell.CellStyle = CurrCellStyle Then
SplitCellValue(oSheet, OldNumber, NewNumber, SBVALUECOLUMN, SBSTARTROW + i, &quot;&quot;)
i = i + 1
Else
bLeaveLoop = True
End If
Loop Until bLeaveLoop
oDateCell = oSheet.GetCellbyPosition(SBDATECOLUMN, SBSTARTROW + i-1)
oDateCell.Annotation.SetString(NoteText)
End If
End Sub
</script:module>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_de" script:language="StarBasic">Option Explicit
Sub LoadGermanLanguage()
sProductname = GetProductname
sOK = &quot;~OK&quot;
sCancel = &quot;Abbrechen&quot;
sColumnHeader = &quot;Spaltenkopf&quot;
sInsertStockName = &quot;Bitte fügen Sie zunächst einige Aktien in Ihr Depot ein!&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt;: Aktienverwaltung&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;Eingabefehler&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;Bitte geben Sie eine Stückzahl größer als 0 ein&quot;
sMsgNoDividend = &quot;Bitte geben Sie eine Dividende je Stück oder eine Gesamtdividende ein&quot;
sMsgNoExchangeRate = &quot;Bitte geben Sie eine korrekte Umtauschrate ein (alte Aktien -&gt; neue Aktien).&quot;
sMsgNoValidExchangeDate = &quot;Bitte geben Sie ein gültiges Datum für den Aktiensplitt ein.&quot;
sMsgWrongExchangeDate = &quot;Splitt nicht möglich, da bereits Transaktionen nach dem Splitt-Datum existieren.&quot;
sMsgSellTooMuch = &quot;So viele Aktien können Sie nicht verkaufen. Maximum: &quot;
sMsgConfirm = &quot;Bestätigung erforderlich&quot;
sMsgFreeStock = &quot;Beabsichtigen Sie die Eingabe von Gratisaktien?&quot;
sMsgTotalLoss = &quot;Beabsichtigen Sie die Eingabe eines Totalverlustes?&quot;
sMsgAuthorization = &quot;Sicherheitsabfrage&quot;
sMsgDeleteAll = &quot;Wollen Sie alle Bewegungen löschen und die Depotübersicht rücksetzen?&quot;
cSplit = &quot;Aktiensplitt am &quot;
sHistory = &quot;Historie&quot;
TransactTitle(1) = &quot;Aktien verkaufen&quot;
TransactTitle(2) = &quot;Aktien kaufen&quot;
StockRatesTitle(1) = &quot;Dividendenzahlung&quot;
StockRatesTitle(2) = &quot;Aktiensplitt&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;Depotwährung&quot;
sStockName = &quot;Aktienname&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;Ergebnis Datum&quot;
CurrCellStyle = &quot;Ergebnis Euro mit Dezimalen&quot;
sStartDate = &quot;Startdatum:&quot;
sEndDate = &quot;Enddatum:&quot;
sStartUpWelcome = &quot;Diese Vorlage ermöglicht Ihnen eine effiziente Verwaltung Ihres Aktiendepots&quot;
sStartUpChooseMarket = &quot;Wählen Sie zunächst Ihre Referenz-Währung und damit den Börsenplatz für das Internet Update aus!&quot;
sStartUpHint = &quot;Leider steht Ihnen die &lt;History&gt;- Funktion nur für den amerikanischen Markt zur Verfügung!&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;ohne Internet Update&quot;
sMarketPlace = &quot;Börsenplatz:&quot;
sNoInternetDataAvailable = &quot;Internet-Kurse konnten nicht empfangen werden!&quot;
sCheckInternetSettings = &quot;Mögliche Ursachen sind: &lt;BR&gt; Ihre Internet Einstellungen müssen überprüft werden.&lt;BR&gt; Sie haben eine falsche Kennung (z.B. Symbol, WKN) für die Aktie eingegeben.&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;Das Enddatum muss vor dem heutigen Tag liegen!&quot;
sMsgStartDatebeforeEndDate = &quot;Das Startdatum muss vor dem Enddatum liegen!&quot;
sMarket(0,0) = &quot;Amerikanischer Dollar&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;New York&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;Symbol&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;Euro&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;Frankfurt&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;WKN&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;Englisches Pfund&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;London&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;Symbol&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;Japanischer Yen&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;Tokyo&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;Code&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;Hongkong Dollar&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;Hongkong&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.HK&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;Nummer&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;Australischer Dollar&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;Sydney&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;Symbol&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;Menge&quot;
.lblRate.Label = &quot;Kurs&quot;
.lblDate.Label = &quot;Transaktionsdatum&quot;
.hlnCommission.Label = &quot;Sonstige Ausgaben&quot;
.lblCommission.Label = &quot;Provision&quot;
.lblMinimum.Label = &quot;Mindestprovision&quot;
.lblFix.Label = &quot;Festbetrag/Spesen&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;Dividende/Aktie&quot;
.optTotal.Label = &quot;Dividende gesamt&quot;
.lblDividend.Label = &quot;Betrag&quot;
.lblExchangeRate.Label = &quot;Umtauschrate (alt-&gt;neu)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;Umtauschdatum:&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;~Täglich&quot;
.optWeekly.Label = &quot;~Wöchentlich&quot;
.hlnInterval.Label = &quot;Zeitraum&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_en" script:language="StarBasic">Option Explicit
Sub LoadEnglishLanguage()
sProductname = GetProductname
sOK = &quot;~OK&quot;
sCancel = &quot;Cancel&quot;
sColumnHeader = &quot;Column Header&quot;
sInsertStockName = &quot;Please enter shares in your portfolio.&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt;: Stocks Manager&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;Input Error&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;Please enter a quantity larger than 0&quot;
sMsgNoDividend = &quot;Please enter the dividend per share or the total dividend&quot;
sMsgNoExchangeRate = &quot;Please enter the correct exchange rate (old shares -&gt; new shares)&quot;
sMsgNoValidExchangeDate = &quot;Please enter a valid date for the split.&quot;
sMsgWrongExchangeDate = &quot;Splitting not possible, as transactions already exist after the split date.&quot;
sMsgSellTooMuch = &quot;You cannot sell that many shares. Maximum: &quot;
sMsgConfirm = &quot;Confirmation Required&quot;
sMsgFreeStock = &quot;Do you intend to enter free shares?&quot;
sMsgTotalLoss = &quot;Do you intend to enter a total loss?&quot;
sMsgAuthorization = &quot;Security Query&quot;
sMsgDeleteAll = &quot;Do you want to delete all movements and reset the portfolio overview?&quot;
cSplit = &quot;Stock split on &quot;
sHistory = &quot;History&quot;
TransactTitle(1) = &quot;StarOffice Stocks Manager: Selling Shares&quot;
TransactTitle(2) = &quot;StarOffice Stocks Manager: Buying Shares&quot;
StockRatesTitle(1) = &quot;StarOffice Stocks Manager: Dividend Payment&quot;
StockRatesTitle(2) = &quot;Stock Split&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;Portfolio Currency&quot;
sStockName = &quot;Name of Stock&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;Result Date&quot;
CurrCellStyle = &quot;1&quot;
sStartDate = &quot;Start date:&quot;
sEndDate = &quot;End date:&quot;
sStartUpWelcome = &quot;This template enables you to manage your stock portfolio efficiently.&quot;
sStartUpChooseMarket = &quot;First, select your reference currency and thus the stock exchange for the Internet update.&quot;
sStartUpHint = &quot;Unfortunately, the only &lt;History&gt; function available to you is that for the American market.&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;without Internet update&quot;
sMarketPlace = &quot;Stock exchange:&quot;
sNoInternetDataAvailable = &quot;No prices could be received from the Internet!&quot;
sCheckInternetSettings = &quot;Possible causes could be: &lt;BR&gt;Your Internet settings have to be modified. &lt;BR&gt;The Symbol (e.g. Code, Ticker Symbol) entered for the stock was incorrect.&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;The end date has to be before today&apos;s date.&quot;
sMsgStartDatebeforeEndDate = &quot;The start date has to be before the end date.&quot;
sMarket(0,0) = &quot;American Dollar&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;New York&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;Symbol&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;Euro&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;Frankfurt&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;Ticker Symbol&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;British Pound&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;London&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;Symbol&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;Japanese Yen&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;Tokyo&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;Code&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;Hong Kong Dollar&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;Hong Kong&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;Number&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;Australian Dollar&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;Sydney&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;Symbol&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;Quantity&quot;
.lblRate.Label = &quot;Price&quot;
.lblDate.Label = &quot;Transaction Date&quot;
.hlnCommission.Label = &quot;Other expenditures&quot;
.lblCommission.Label = &quot;Commission&quot;
.lblMinimum.Label = &quot;Min. Commission&quot;
.lblFix.Label = &quot;Fixed Costs/Charges&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;Dividends/Stocks&quot;
.optTotal.Label = &quot;Total Dividends&quot;
.lblDividend.Label = &quot;Amount&quot;
.lblExchangeRate.Label = &quot;Exchange Rate (old-&gt;new)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;Exchange Date:&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;~Daily&quot;
.optWeekly.Label = &quot;~Weekly&quot;
.hlnInterval.Label = &quot;Time period&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_es" script:language="StarBasic">Option Explicit
Sub LoadSpanishLanguage()
sProductname = GetProductname
sOK = &quot;~Aceptar&quot;
sCancel = &quot;Cancelar&quot;
sColumnHeader = &quot;Título de columna&quot;
sInsertStockName = &quot;Introduzca primero algunas acciones en su depósito.&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt;: Administración de acciones&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;Error de entrada&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;Indique una cantidad mayor que 0&quot;
sMsgNoDividend = &quot;Indique un dividendo por unidad o un dividendo total&quot;
sMsgNoExchangeRate = &quot;Indique aquí un cambio correcto (acción vieja -&gt; nueva acción)&quot;
sMsgNoValidExchangeDate = &quot;Indique una fecha correcta para el fraccionamiento de la acción.&quot;
sMsgWrongExchangeDate = &quot;El fraccionamiento no es posible porque existen transacciones después de la fecha de fraccionamiento.&quot;
sMsgSellTooMuch = &quot;No puede vender tantas acciones. Como máximo: &quot;
sMsgConfirm = &quot;Confirmación necesaria&quot;
sMsgFreeStock = &quot;¿Tiene previsto considerar acciones gratis?&quot;
sMsgTotalLoss = &quot;¿Tiene previsto introducir una pérdida total?&quot;
sMsgAuthorization = &quot;Pregunta de seguridad&quot;
sMsgDeleteAll = &quot;¿Desea borrar todos los movimientos y reiniciar el balance de depósito?&quot;
cSplit = &quot;Fraccionamiento el &quot;
sHistory = &quot;Historia&quot;
TransactTitle(1) = &quot;Vender acciones&quot;
TransactTitle(2) = &quot;Comprar acciones&quot;
StockRatesTitle(1) = &quot;Pago de dividendos&quot;
StockRatesTitle(2) = &quot;Fraccionamiento&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;Moneda del depósito&quot;
sStockName = &quot;Nombre de la acción&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;Resultado Fecha&quot;
CurrCellStyle = &quot;1&quot;
sStartDate = &quot;Fecha de inicio:&quot;
sEndDate = &quot;Fecha final:&quot;
sStartUpWelcome = &quot;Esta plantilla le permite administrar eficientemente su depósito de acciones&quot;
sStartUpChooseMarket = &quot;Seleccione primero la moneda de referencia y la plaza bursátil para la actualización a través de Internet.&quot;
sStartUpHint = &quot;La función &lt;History&gt; está disponible únicamente para el mercado americano.&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;Sin actualización por Internet&quot;
sMarketPlace = &quot;Plaza bursátil:&quot;
sNoInternetDataAvailable = &quot;No se pudieron recibir las cotizaciones por Internet.&quot;
sCheckInternetSettings = &quot;Causas posibles: &lt;BR&gt; Debe comprobar la configuración de Internet.&lt;BR&gt; Ha indicado un código incorrecto (p.ej. número, símbolo, etc.) para la acción.&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;La fecha final debe ser anterior a la fecha de hoy.&quot;
sMsgStartDatebeforeEndDate = &quot;La fecha inicial debe ser anterior a la fecha final.&quot;
sMarket(0,0) = &quot;Dólar estadounidense&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;Nueva York&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;Símbolo&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;Euro&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;Frankfurt&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;Código&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;Libra esterlina&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;Londres&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;Símbolo&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;Yen japonés&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;Tokio&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;Código&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;Dólar hongkonés&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;Hong Kong&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.HK&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;Número&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;Dólar australiano&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;Sidney&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;Símbolo&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;Cantidad&quot;
.lblRate.Label = &quot;Cotización&quot;
.lblDate.Label = &quot;Fecha de operación&quot;
.hlnCommission.Label = &quot;Otros gastos&quot;
.lblCommission.Label = &quot;Provisión&quot;
.lblMinimum.Label = &quot;Provisión mínima&quot;
.lblFix.Label = &quot;Cantidad fija/comisión&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;Dividendos/Acción&quot;
.optTotal.Label = &quot;Dividendos totales&quot;
.lblDividend.Label = &quot;Importe&quot;
.lblExchangeRate.Label = &quot;Cambio (vieja-&gt;nueva)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;Fecha de cambio:&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;~Diario&quot;
.optWeekly.Label = &quot;~Semanal&quot;
.hlnInterval.Label = &quot;Periodo&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_fr" script:language="StarBasic">Option Explicit
Sub LoadFrenchLanguage()
sProductname = GetProductname
sOK = &quot;~OK&quot;
sCancel = &quot;Annuler&quot;
sColumnHeader = &quot;En-tête de colonne&quot;
sInsertStockName = &quot;Saisissez quelques actions dans votre portefeuille !&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt; : Gestion d&apos;actions&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;Erreur de saisie&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;Saisissez une quantité supérieure à 0 !&quot;
sMsgNoDividend = &quot;Vous devez saisir le montant des dividendes perçus (soit les dividendes par action, soit la somme totale perçue).&quot;
sMsgNoExchangeRate = &quot;Saisissez un taux correct de conversion (anciennes actions -&gt; nouvelles actions).&quot;
sMsgNoValidExchangeDate = &quot;Saisissez une date correcte pour le split d&apos;action.&quot;
sMsgWrongExchangeDate = &quot;Split impossible car il y a déjà eu des transactions après la date du split !&quot;
sMsgSellTooMuch = &quot;Impossible de vendre autant d&apos;actions ! Maximum : &quot;
sMsgConfirm = &quot;Confirmation required&quot;
sMsgFreeStock = &quot;S&apos;agit-il d&apos;actions gratuites ?&quot;
sMsgTotalLoss = &quot;Prévoyez-vous une perte totale ?&quot;
sMsgAuthorization = &quot;Requête de sécurité&quot;
sMsgDeleteAll = &quot;Voulez-vous supprimer tous les mouvements et remettre le portefeuille d&apos;actions à zéro ?&quot;
cSplit = &quot;Split d&apos;action le &quot;
sHistory = &quot;Historique&quot;
TransactTitle(1) = &quot;Vente d&apos;actions&quot;
TransactTitle(2) = &quot;Achat d&apos;actions&quot;
StockRatesTitle(1) = &quot;Versement des dividendes&quot;
StockRatesTitle(2) = &quot;Split d&apos;action&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;Monnaie du portefeuille&quot;
sStockName = &quot;Nom de l&apos;action&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;Résultat date&quot;
CurrCellStyle = &quot;1&quot;
sStartDate = &quot;Date de début :&quot;
sEndDate = &quot;Date de fin :&quot;
sStartUpWelcome = &quot;Utilisez ce modèle pour une gestion efficiente de votre portefeuille d&apos;actions !&quot;
sStartUpChooseMarket = &quot;Commencez par choisir une monnaie de référence et ainsi la place boursière pour la mise à jour Internet !&quot;
sStartUpHint = &quot;La fonction &lt;History&gt; n&apos;est cependant disponible que pour le marché américain.&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;Sans mise à jour Internet&quot;
sMarketPlace = &quot;Place boursière :&quot;
sNoInternetDataAvailable = &quot;Réception des cours Internet impossible !&quot;
sCheckInternetSettings = &quot;Causes possibles : &lt;BR&gt; Problème de paramétrage Internet : vérifiez les paramètres !&lt;BR&gt; Vous avez saisi un identificateur (par ex. symbole ou code) incorrect pour l&apos;action.&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;La date spécifiée pour la fin doit précéder celle de ce jour !&quot;
sMsgStartDatebeforeEndDate = &quot;La date spécifiée pour le début doit succéder à celle de ce jour !&quot;
sMarket(0,0) = &quot;Dollar Américain&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;New York&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;Symbole&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;Euro&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;Francfort&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;Code&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;Livre Sterling&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;Londres&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;Symbole&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;Yen Japonais&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;Tokyo&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;Code&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;Dollar de Hong Kong&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;Hong Kong&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;Numéro&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;Dollar Australien&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;Sydney&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;Symbole&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;Quantité&quot;
.lblRate.Label = &quot;Cours&quot;
.lblDate.Label = &quot;Date de transaction&quot;
.hlnCommission.Label = &quot;Dépenses diverses&quot;
.lblCommission.Label = &quot;Commission&quot;
.lblMinimum.Label = &quot;Commission minimale&quot;
.lblFix.Label = &quot;Montant fixe/frais&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;Dividende/action&quot;
.optTotal.Label = &quot;Dividende total&quot;
.lblDividend.Label = &quot;Montant&quot;
.lblExchangeRate.Label = &quot;Taux de conversion (ancien-&gt;nouveau)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;Date de la conversion:&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;~Quotidien&quot;
.optWeekly.Label = &quot;~Hebdomadaire&quot;
.hlnInterval.Label = &quot;Période&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_it" script:language="StarBasic">Option Explicit
Sub LoadItalianLanguage()
sProductname = GetProductname
sOK = &quot;~OK&quot;
sCancel = &quot;Annulla&quot;
sColumnHeader = &quot;Intestazione colonna&quot;
sInsertStockName = &quot;Inserite un nome di azioni&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt;: Gestione delle azioni&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;Errore dati immessi&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;Inserite il numero delle azioni&quot;
sMsgNoDividend = &quot;Inserite un dividendo a unità oppure un dividendo totale&quot;
sMsgNoExchangeRate = &quot;Indicate un corretto tasso di cambio (vecchie azioni -&gt; nuove azioni).&quot;
sMsgNoValidExchangeDate = &quot;Indicate la data di frazionamento delle azioni.&quot;
sMsgWrongExchangeDate = &quot;Il frazionamento non è possibile perché sono ancora in atto transazioni dopo la data indicata.&quot;
sMsgSellTooMuch = &quot;Non potete vendere così tante azioni. Massimo: &quot;
sMsgConfirm = &quot;È necessaria una conferma&quot;
sMsgFreeStock = &quot;Confermate la digitazione di azioni gratuite?&quot;
sMsgTotalLoss = &quot;Confermate la digitazione di perdita totale?&quot;
sMsgAuthorization = &quot;Domanda di sicurezza&quot;
sMsgDeleteAll = &quot;Eliminare tutti i movimenti e ripristinare la panoramica dei depositi?&quot;
cSplit = &quot;Frazionamento delle azioni il: &quot;
sHistory = &quot;Cronologia&quot;
TransactTitle(1) = &quot;Vendita di azioni&quot;
TransactTitle(2) = &quot;Acquisto di azioni&quot;
StockRatesTitle(1) = &quot;Pagamento dei dividendi&quot;
StockRatesTitle(2) = &quot;Frazionamento azioni&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;Valuta deposito&quot;
sStockName = &quot;Nome delle azioni&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;Risultato data&quot;
CurrCellStyle = &quot;1&quot;
sStartDate = &quot;Data d&apos;inizio:&quot;
sEndDate = &quot;Data finale:&quot;
sStartUpWelcome = &quot;Questo modello vi permette una gestione efficace delle vostre azioni.&quot;
sStartUpChooseMarket = &quot;Selezionate la valuta di riferimento e la Borsa per il collegamento Internet.&quot;
sStartUpHint = &quot;La funzione &lt;History&gt; è disponibile solo per il mercato americano.&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;Senza aggiornamento Internet&quot;
sMarketPlace = &quot;Borsa:&quot;
sNoInternetDataAvailable = &quot;Impossibile ricevere le quotazioni Internet&quot;
sCheckInternetSettings = &quot;Possibili cause: &lt;BR&gt; le impostazioni Internet devono essere modificate.&lt;BR&gt; Avete indicato un indice (ad es. simbolo o codice) errato per le azioni.&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;La data finale dev&apos;essere anteriore alla data odierna.&quot;
sMsgStartDatebeforeEndDate = &quot;La data d&apos;inizio deve precedere la data finale.&quot;
sMarket(0,0) = &quot;Dollaro USA&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;New York&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;Simbolo&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;Euro&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;Francoforte&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;Numero identificazione titoli&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;Sterlina inglese&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;Londra&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;Simbolo&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;Yen&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;Tokyo&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;Codice&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;Dollaro Hong Kong&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;Hong Kong&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;Numero&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;Dollaro australiano&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;Sydney&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;Simbolo&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;Quantità&quot;
.lblRate.Label = &quot;Quotazione&quot;
.lblDate.Label = &quot;Data della transazione&quot;
.hlnCommission.Label = &quot;Spese extra&quot;
.lblCommission.Label = &quot;Commissioni&quot;
.lblMinimum.Label = &quot;Commissione minima&quot;
.lblFix.Label = &quot;Importo fisso/Spese&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;Dividendo/Azione&quot;
.optTotal.Label = &quot;Dividendo totale&quot;
.lblDividend.Label = &quot;Importo&quot;
.lblExchangeRate.Label = &quot;Tasso di cambio (vecchio-&gt;nuovo)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;Data di cambio:&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;~Giornaliero&quot;
.optWeekly.Label = &quot;~Settimanale&quot;
.hlnInterval.Label = &quot;Durata&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_ja" script:language="StarBasic">Option Explicit
Sub LoadJapaneseLanguage()
sProductname = GetProductname
sOK = &quot;~OK&quot;
sCancel = &quot;キャンセル&quot;
sColumnHeader = &quot;列番号&quot;
sInsertStockName = &quot;最初に株の銘柄を入力してください。&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt;: 株管理&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;入力フィールド&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;0 より大きな額を入力してください。&quot;
sMsgNoDividend = &quot;1株当たりの配当金額または総配当金額を入力してください。&quot;
sMsgNoExchangeRate = &quot;交換比率(旧株-&gt;新株)を入力してください。&quot;
sMsgNoValidExchangeDate = &quot;株式分割日を入力してください。&quot;
sMsgWrongExchangeDate = &quot;分割日以降に取引がすでに存在するので、分割できません。&quot;
sMsgSellTooMuch = &quot;売却できる株式数を超えています。最大値: &quot;
sMsgConfirm = &quot;ご確認ください&quot;
sMsgFreeStock = &quot;無料株式を入力しますか?&quot;
sMsgTotalLoss = &quot;全損の入力を行いますか?&quot;
sMsgAuthorization = &quot;確認ダイアログ&quot;
sMsgDeleteAll = &quot;すべての移動を取り消し、ポートフォリオの概要をリセットしますか?&quot;
cSplit = &quot;株式分割日 &quot;
sHistory = &quot;履歴&quot;
TransactTitle(1) = &quot;株を買う&quot;
TransactTitle(2) = &quot;株を買う&quot;
StockRatesTitle(1) = &quot;配当額&quot;
StockRatesTitle(2) = &quot;株式分割&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;ポートフォリオの通貨&quot;
sStockName = &quot;株式名&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;結果(日付)&quot;
CurrCellStyle = &quot;1&quot;
sStartDate = &quot;開始日:&quot;
sEndDate = &quot;終了日:&quot;
sStartUpWelcome = &quot;このテンプレートを使えば、株式のポートフォリオをより効率的に管理できます。&quot;
sStartUpChooseMarket = &quot;まず、インターネットにより情報を更新する基準通貨と、対応する証券取引所を選択します。&quot;
sStartUpHint = &quot;残念ながら、&lt;History&gt; 機能を使用できるのは米国市場に限られています。&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;インターネットによる情報の更新を行いません&quot;
sMarketPlace = &quot;証券取引所:&quot;
sNoInternetDataAvailable = &quot;インターネットから株価情報を受信できない場合があります!&quot;
sCheckInternetSettings = &quot;考えられる原因は次のとおりです。&lt;BR&gt;インターネット設定の変更が必要です。&lt;BR&gt;入力した株式のが間違っています。&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;終了日は、今日の日付より前であることが必要です。&quot;
sMsgStartDatebeforeEndDate = &quot;開始日は、終了日より前であることが必要です。&quot;
sMarket(0,0) = &quot;米ドル&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;ニューヨーク&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;シンボル&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;ユーロ&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;フランクフルト&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;銘柄コード&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;英ポンド&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;ロンドン&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;シンボル&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;日本円&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;東京&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;コード&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;香港ドル&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;香港&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.HK&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;番号&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;オーストリア・ドル&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;シドニー&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;シンボル&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;株数&quot;
.lblRate.Label = &quot;価格&quot;
.lblDate.Label = &quot;取引日&quot;
.hlnCommission.Label = &quot;その他の経費n&quot;
.lblCommission.Label = &quot;手数料&quot;
.lblMinimum.Label = &quot;最低手数料&quot;
.lblFix.Label = &quot;固定費/諸経費&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;配当金/株式数&quot;
.optTotal.Label = &quot;配当金の総額&quot;
.lblDividend.Label = &quot;金額&quot;
.lblExchangeRate.Label = &quot;交換比率(旧株-&gt;新株)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;交換日:&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;~毎日&quot;
.optWeekly.Label = &quot;~毎週&quot;
.hlnInterval.Label = &quot;期間&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_ko" script:language="StarBasic">Option Explicit
Sub LoadKoreanLanguage()
sProductname = GetProductname
sOK = &quot;~확인&quot;
sCancel = &quot;취소&quot;
sColumnHeader = &quot;열 머리글&quot;
sInsertStockName = &quot;주식 종목을 삽입해주십시오.&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt;: 주식 매수&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;입력 오류&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;0 이하의 매수를 입력해주십시오.&quot;
sMsgNoDividend = &quot;한 주당 배당분 또는 총배당분을 입력해주십시오.&quot;
sMsgNoExchangeRate = &quot;정확한 환율을 입력해주십시오 (구주를 신주로 소급 시).&quot;
sMsgNoValidExchangeDate = &quot;유효한 배당 결제일을 입력해주십시오.&quot;
sMsgWrongExchangeDate = &quot;배당 기준일이 경과하여 배당할 수 없습니다.&quot;
sMsgSellTooMuch = &quot;이렇게 많은 주식을 팔 수 없습니다. 최대 매도수: &quot;
sMsgConfirm = &quot;확인 필요&quot;
sMsgFreeStock = &quot;공짜 주식을 입력하시겠습니까?&quot;
sMsgTotalLoss = &quot;주가 폭락세를 입력하시겠습니까?&quot;
sMsgAuthorization = &quot;안정성 조회&quot;
sMsgDeleteAll = &quot;모든 주가 움직임을 삭제하고 계좌 현황을 원래대로 하시겠습니까?&quot;
cSplit = &quot;주식 배당일 &quot;
sHistory = &quot;내역&quot;
TransactTitle(1) = &quot;주식 관리: 주식 매도&quot;
TransactTitle(2) = &quot;주식 관리: 주식 매수&quot;
StockRatesTitle(1) = &quot;주식 관리: 배당금 지불&quot;
StockRatesTitle(2) = &quot;주식 관리: 주식 배분&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;주식 계좌 통화&quot;
sStockName = &quot;주식 종목명&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;결과, 날짜&quot;
CurrCellStyle = &quot;1&quot;
sStartDate = &quot;매매일:&quot;
sEndDate = &quot;만기일:&quot;
sStartUpWelcome = &quot;이 템플릿을 사용하여 주식 투자 관리를 효율적으로 할 수 있습니다.&quot;
sStartUpChooseMarket = &quot;인터넷 업데이트를 위해 우선 관련 통화와 증권 장소를 선택하십시오.&quot;
sStartUpHint = &quot;&lt;내역&gt; 기능은 미국 시장용으로만 사용할 수 있습니다.&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;인터넷 업데이트 없음&quot;
sMarketPlace = &quot;증권 장소:&quot;
sNoInternetDataAvailable = &quot;인터넷 시세는 받을 수 없었습니다.&quot;
sCheckInternetSettings = &quot;원인: &lt;BR&gt; 인터넷 설정을 점검해야만 합니다.&lt;BR&gt; 옳지 않은 암호&lt;예를 들어 잘못된 문자 또는 종목 코드&gt;를 입력했습니다.&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;만기일은 오늘 날짜 전에 기입되어야 합니다.&quot;
sMsgStartDatebeforeEndDate = &quot;매매일은 만기일 전에 기입되어야 합니다.&quot;
sMarket(0,0) = &quot;미국 달러&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;뉴욕&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;기호&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;유로&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;프랑크푸르트&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;WKN&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;영국 파운드&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;런던&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;기호&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;엔화&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;도쿄&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;코드&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;홍콩 달러&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;홍콩&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.HK&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;번호&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;호주 달러&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;시드니&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;기호&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;수량&quot;
.lblRate.Label = &quot;시세&quot;
.lblDate.Label = &quot;배당 결산일&quot;
.hlnCommission.Label = &quot;기타 지출&quot;
.lblCommission.Label = &quot;수수료&quot;
.lblMinimum.Label = &quot;최저 수수료&quot;
.lblFix.Label = &quot;약정 금액/기타 경비&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;배당분/주&quot;
.optTotal.Label = &quot;배당분 합계&quot;
.lblDividend.Label = &quot;금액&quot;
.lblExchangeRate.Label = &quot;환율(구주-&gt;신주)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;환율일자&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;~매일&quot;
.optWeekly.Label = &quot;~매주&quot;
.hlnInterval.Label = &quot;기간&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,174 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_sv" script:language="StarBasic">Option Explicit
Sub LoadSwedishLanguage()
sProductname = GetProductname
sOK = &quot;~OK&quot;
sCancel = &quot;Avbryt&quot;
sColumnHeader = &quot;Kolumnhuvud&quot;
sInsertStockName = &quot;Infoga först några aktier i Din portfölj!&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt;: Aktieförvaltning&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;Inmatningsfel&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;Var vänlig och mata in ett större antal än 0&quot;
sMsgNoDividend = &quot;Var vänlig och mata in utdelning per styck eller den totala utdelningen&quot;
sMsgNoExchangeRate = &quot;Var vänlig och mata in en korrekt omräkningskurs (gamla aktier -&gt; nya aktier).&quot;
sMsgNoValidExchangeDate = &quot;Var vänlig och mata in ett giltigt datum för aktiesplitten.&quot;
sMsgWrongExchangeDate = &quot;Split är inte möjlig eftersom det redan finns transaktioner efter splitdatum.&quot;
sMsgSellTooMuch = &quot;Så många aktier kan Du inte sälja. Maximum: &quot;
sMsgConfirm = &quot;Bekräftelse krävs&quot;
sMsgFreeStock = &quot;Avser Du att mata in gratisaktier?&quot;
sMsgTotalLoss = &quot;Avser Du att mata in en totalförlust?&quot;
sMsgAuthorization = &quot;Säkerhetskontroll&quot;
sMsgDeleteAll = &quot;Vill Du ta bort alla rörelser och återställa portföljöversikten?&quot;
cSplit = &quot;Aktiesplit den &quot;
sHistory = &quot;Historik&quot;
TransactTitle(1) = &quot;Sälja aktier&quot;
TransactTitle(2) = &quot;Köpa aktier&quot;
StockRatesTitle(1) = &quot;Aktieutdelning&quot;
StockRatesTitle(2) = &quot;Aktiesplit&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;Portföljvaluta&quot;
sStockName = &quot;Aktienamn&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;Resultat datum&quot;
CurrCellStyle = &quot;1&quot;
sStartDate = &quot;Startdatum:&quot;
sEndDate = &quot;Slutdatum:&quot;
sStartUpWelcome = &quot;Med hjälp av den här mallen kan Du förvalta Din aktieportfölj effektivt&quot;
sStartUpChooseMarket = &quot;Välj först Din referensvaluta och därigenom börs för Internet-uppdateringen!&quot;
sStartUpHint = &quot;Tyvärr är &lt;History&gt;-funktionen bara tillgänglig för den amerikanska marknaden!&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;utan Internet-uppdatering&quot;
sMarketPlace = &quot;Börs:&quot;
sNoInternetDataAvailable = &quot;Det gick inte att ta emot Internet-kurser!&quot;
sCheckInternetSettings = &quot;Detta kan bero på att: &lt;BR&gt; Dina Internet-inställningar måste ändras.&lt;BR&gt; Du har angivit ett felaktigt ID (t.ex. symbol, värdepappersnr.) för aktien.&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;Slutdatum måste ligga före idag!&quot;
sMsgStartDatebeforeEndDate = &quot;Startdatum måste ligga före slutdatum!&quot;
sMarket(0,0) = &quot;Amerikansk dollar&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;New York&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;Symbol&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;Euro&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;Frankfurt&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;Värdepappersnr&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;Engelskt pund&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;London&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;Symbol&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;Japansk yen&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;Tokyo&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;Kod&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;Hongkongdollar&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;Hongkong&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;Nummer&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;Australisk dollar&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;Sydney&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;Symbol&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;Antal&quot;
.lblRate.Label = &quot;Kurs&quot;
.lblDate.Label = &quot;Transaktionsdatum&quot;
.hlnCommission.Label = &quot;Övriga utgifter&quot;
.lblCommission.Label = &quot;Provision&quot;
.lblMinimum.Label = &quot;Minimiprovision&quot;
.lblFix.Label = &quot;Fast belopp/omkostnader&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;Utdelning per aktie&quot;
.optTotal.Label = &quot;Utdelning totalt&quot;
.lblDividend.Label = &quot;Belopp&quot;
.lblExchangeRate.Label = &quot;Omräkningskurs (gammal-&gt;ny)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;Omräkningsdatum:&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;~Dagligen&quot;
.optWeekly.Label = &quot;~Varje vecka&quot;
.hlnInterval.Label = &quot;Period&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_tw" script:language="StarBasic">Option Explicit
Sub LoadChineseTradLanguage()
sProductname = GetProductname
sOK = &quot;確定&quot;
sCancel = &quot;取消&quot;
sColumnHeader = &quot;欄標簽&quot;
sInsertStockName = &quot;請先填入股票名稱!&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt;: 股票管理&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;輸入無效&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;請輸入大於0的交易股數&quot;
sMsgNoDividend = &quot;請輸入每股股息金額或股息總額&quot;
sMsgNoExchangeRate = &quot;請鍵入正確的換算比率(舊股票 -&gt; 新股票)。&quot;
sMsgNoValidExchangeDate = &quot;請輸入股票分割的日期。&quot;
sMsgWrongExchangeDate = &quot;無法分割股票,因為分割日期之後已經買進或賣出股票。&quot;
sMsgSellTooMuch = &quot;最多能出售的股票數: &quot;
sMsgConfirm = &quot;需要确認&quot;
sMsgFreeStock = &quot;需要輸入一個贈送的股票?&quot;
sMsgTotalLoss = &quot;要輸入一個全部損失的股票?&quot;
sMsgAuthorization = &quot;安全詢問&quot;
sMsgDeleteAll = &quot;您要刪除所有的交易資料,重新建立一個股票一覽表?&quot;
cSplit = &quot;股票分割的日期 &quot;
sHistory = &quot;紀錄&quot;
TransactTitle(1) = &quot;出售股票&quot;
TransactTitle(2) = &quot;購買股票&quot;
StockRatesTitle(1) = &quot;支付股息&quot;
StockRatesTitle(2) = &quot;股票分割&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;股票的貨幣&quot;
sStockName = &quot;股票名稱&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;結果 日期&quot;
CurrCellStyle = &quot;1&quot;
sStartDate = &quot;交割日期:&quot;
sEndDate = &quot;到期日期:&quot;
sStartUpWelcome = &quot;這個樣式用於高效能地管理股票交易。&quot;
sStartUpChooseMarket = &quot;請先選一個參照的貨幣和一個可直接從 Internet 更新資料的贈券交易所。&quot;
sStartUpHint = &quot;很遺憾,&lt;History&gt;-功能僅適用於美國的交易所。&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;不透過 internet 更新&quot;
sMarketPlace = &quot;證券交易所:&quot;
sNoInternetDataAvailable = &quot;無法接受 Internet 股票價格!&quot;
sCheckInternetSettings = &quot;可能的原因:&lt;BR&gt;Internet 設定不正確,需要重新設定。&lt;BR&gt;輸入了一個錯誤的股票代碼。&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;到期日期必須是在今日之前!&quot;
sMsgStartDatebeforeEndDate = &quot;交割日期必須是在到期日期之前!&quot;
sMarket(0,0) = &quot;美元&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;紐約&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;股票符號&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;歐元&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;法蘭克福&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;股代碼&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;英鎊&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;倫敦&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;股票符號&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;日元&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;東京&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;代碼&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;港幣&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;香港&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.HK&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;編號&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;澳元&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;悉尼&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;股票符號&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;數量&quot;
.lblRate.Label = &quot;股票價格&quot;
.lblDate.Label = &quot;交易日期&quot;
.hlnCommission.Label = &quot;其它的支出費用&quot;
.lblCommission.Label = &quot;手續費&quot;
.lblMinimum.Label = &quot;最低手續費&quot;
.lblFix.Label = &quot;固定金額/費用&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;每股股息&quot;
.optTotal.Label = &quot;股息總計&quot;
.lblDividend.Label = &quot;金額&quot;
.lblExchangeRate.Label = &quot;轉換比率(舊股票 -&gt; 新股票)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;轉換日期:&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;每日&quot;
.optWeekly.Label = &quot;每週&quot;
.hlnInterval.Label = &quot;時間週期&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Lang_zh" script:language="StarBasic">Option Explicit
Sub LoadChineseSimpleLanguage()
sProductname = GetProductname
sOK = &quot;确定&quot;
sCancel = &quot;取消&quot;
sColumnHeader = &quot;列标题&quot;
sInsertStockName = &quot;请首先往您的帐号内输入一些股票名称!&quot;
sTitle = &quot;&lt;PRODUCTNAME&gt;:股票管理&quot;
sTitle = ReplaceString(sTitle, sProductName, &quot;&lt;PRODUCTNAME&gt;&quot;)
sMsgError = &quot;输入错误&quot;
sMsgNoName = sInsertStockname
sMsgNoQuantity = &quot;请输入大于0的交易股数&quot;
sMsgNoDividend = &quot;请输入每股的红利金额或红利总额&quot;
sMsgNoExchangeRate = &quot;请输入一个正确的兑换率(旧股-&gt; 新股)。&quot;
sMsgNoValidExchangeDate = &quot;请输入拆股生效日期。&quot;
sMsgWrongExchangeDate = &quot;因为在拆股生效后已经进行了股票交易,所以无法拆股。&quot;
sMsgSellTooMuch = &quot;您最多能出售的股票数为: &quot;
sMsgConfirm = &quot;需要确认&quot;
sMsgFreeStock = &quot;您想要输入赠送股票?&quot;
sMsgTotalLoss = &quot;您想要输入总亏损值?&quot;
sMsgAuthorization = &quot;安全查询&quot;
sMsgDeleteAll = &quot;您要删除所有的交易信息并重新建立股票帐号一览表吗?&quot;
cSplit = &quot;股票拆股日期 &quot;
sHistory = &quot;记录&quot;
TransactTitle(1) = &quot;出售股票&quot;
TransactTitle(2) = &quot;购买股票&quot;
StockRatesTitle(1) = &quot;支付红利&quot;
StockRatesTitle(2) = &quot;股票拆股&quot;
StockRatesTitle(3) = sHistory
sDepotCurrency = &quot;股票交易的货币&quot;
sStockName = &quot;股票名称&quot;
TransactMode = LIFO &apos; Possible values: &quot;FIFO&quot; and &quot;LIFO&quot;
DateCellStyle = &quot;结果 日期&quot;
CurrCellStyle = &quot;1&quot;
sStartDate = &quot;起始日期:&quot;
sEndDate = &quot;终止日期:&quot;
sStartUpWelcome = &quot;这个样式能够帮助您有效地管理自己的股票帐号&quot;
sStartUpChooseMarket = &quot;请首先选择采用的参考货币以及要直接用国际互联网来更新资料的证券交易所!&quot;
sStartUpHint = &quot;很遗憾,&lt;History&gt;功能仅可供美国市场使用!&quot;
sStartupHint = ReplaceString(sStartUpHint, sHistory, &quot;&lt;History&gt;&quot;)
sNoInternetUpdate = &quot;不通过国际互联网更新&quot;
sMarketPlace = &quot;交易所:&quot;
sNoInternetDataAvailable = &quot;无法获得国际互联网上的行情!&quot;
sCheckInternetSettings = &quot;可能的原因是:&lt;BR&gt;您的国际互联网设定不正确,需要重新设定。&lt;BR&gt;输入了一个错误的股票号码。&quot;
sCheckInternetSettings = ReplaceString(sCheckInternetSettings, chr(13), &quot;&lt;BR&gt;&quot;)
sMsgEndDatebeforeNow = &quot;终止日期必须在今天之前!&quot;
sMsgStartDatebeforeEndDate = &quot;起始日期必须在终止日期之前!&quot;
sMarket(0,0) = &quot;美元&quot;
sMarket(0,1) = &quot;$&quot;
sMarket(0,2) = &quot;纽约&quot;
sMarket(0,3) = &quot;http://finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(0,4) = &quot;http://ichart.finance.yahoo.com/table.csv?&quot; &amp;_
&quot;s=&lt;StockID&gt;&amp;d=&lt;EndMonth&gt;&amp;e=&lt;EndDay&gt;&amp;f=&lt;Endyear&gt;&amp;g=d&amp;&quot; &amp;_
&quot;a=&lt;StartMonth&gt;&amp;b=&lt;StartDay&gt;&amp;c=&lt;Startyear&gt;&amp;ignore=.csv&quot;
sMarket(0,5) = &quot;图标&quot;
sMarket(0,6) = &quot;en&quot;
sMarket(0,7) = &quot;US&quot;
sMarket(0,8) = &quot;409&quot;
sMarket(0,9) = &quot;44&quot;
sMarket(0,10) = &quot;1&quot;
sMarket(1,0) = &quot;欧元&quot;
sMarket(1,1) = chr(8364)
sMarket(1,2) = &quot;法兰克福&quot;
sMarket(1,3) = &quot;http://de.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.F&amp;f=sl1t1c1ghpv&amp;e=.csv&quot;
sMarket(1,5) = &quot;代码&quot;
sMarket(1,6) = &quot;de;nl;pt;el&quot;
sMarket(1,7) = &quot;DE;NL;PT;GR&quot;
sMarket(1,8) = &quot;407;413;816;408&quot;
sMarket(1,9) = &quot;59/9&quot;
sMarket(1,10) = &quot;1&quot;
sMarket(2,0) = &quot;英镑&quot;
sMarket(2,1) = &quot;£&quot;
sMarket(2,2) = &quot;伦敦&quot;
sMarket(2,3) = &quot;http://uk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.L&amp;m=*&amp;f=sl1t1c1ghov&amp;e=.csv&quot;
sMarket(2,5) = &quot;股票代码&quot;
sMarket(2,6) = &quot;en&quot;
sMarket(2,7) = &quot;GB&quot;
sMarket(2,8) = &quot;809&quot;
sMarket(2,9) = &quot;44&quot;
sMarket(2,10) = &quot;1&quot;
sMarket(3,0) = &quot;日元&quot;
sMarket(3,1) = &quot;¥&quot;
sMarket(3,2) = &quot;东京&quot;
sMarket(3,3) = &quot;&quot;
sMarket(3,5) = &quot;代码&quot;
sMarket(3,6) = &quot;ja&quot;
sMarket(3,7) = &quot;JP&quot;
sMarket(3,8) = &quot;411&quot;
sMarket(3,9) = &quot;&quot;
sMarket(3,10) = &quot;&quot;
sMarket(4,0) = &quot;港币&quot;
sMarket(4,1) = &quot;HK$&quot;
sMarket(4,2) = &quot;香港&quot;
sMarket(4,3) = &quot;http://hk.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;.HK&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(4,5) = &quot;编号&quot;
sMarket(4,6) = &quot;zh&quot;
sMarket(4,7) = &quot;HK&quot;
sMarket(4,8) = &quot;C04&quot;
sMarket(4,9) = &quot;44&quot;
sMarket(4,10) = &quot;1&quot;
sMarket(5,0) = &quot;澳元&quot;
sMarket(5,1) = &quot;$&quot;
sMarket(5,2) = &quot;悉尼&quot;
sMarket(5,3) = &quot;http://au.finance.yahoo.com/d/quotes.csv?s=&lt;StockID&gt;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&quot;
sMarket(5,5) = &quot;股票代码&quot;
sMarket(5,6) = &quot;en&quot;
sMarket(5,7) = &quot;AU&quot;
sMarket(5,8) = &quot;C09&quot;
sMarket(5,9) = &quot;44&quot;
sMarket(5,10) = &quot;1&quot;
&apos; ****************************End of the default subset*********************************
CompleteMarketList()
LocalizedCurrencies()
With TransactModel
.lblStockNames.Label = sStockname
.lblQuantity.Label = &quot;数量&quot;
.lblRate.Label = &quot;股票牌价&quot;
.lblDate.Label = &quot;交易日期&quot;
.hlnCommission.Label = &quot;其它支出费用&quot;
.lblCommission.Label = &quot;手续费&quot;
.lblMinimum.Label = &quot;最低手续费&quot;
.lblFix.Label = &quot;固定金额/费用&quot;
.cmdGoOn.Label = sOK
.cmdCancel.Label = sCancel
End With
With StockRatesModel
.optPerShare.Label = &quot;每股红利&quot;
.optTotal.Label = &quot;红利总计&quot;
.lblDividend.Label = &quot;金额&quot;
.lblExchangeRate.Label = &quot;兑换率(旧-&gt;新)&quot;
.lblColon.Label = &quot;:&quot;
.lblDate.Label = &quot;兑换日期:&quot;
.lblStockNames.Label = sStockname
.lblStartDate.Label = sStartDate
.lblEndDate.Label = sEndDate
.optDaily.Label = &quot;每天&quot;
.optWeekly.Label = &quot;每周&quot;
.hlnInterval.Label = &quot;时间周期&quot;
.cmdGoOn.Label = sOk
.cmdCancel.Label = sCancel
End With
End Sub
</script:module>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Depot" library:readonly="true" library:passwordprotected="false">
<library:element library:name="Dialog2"/>
<library:element library:name="Dialog3"/>
<library:element library:name="Dialog4"/>
</library:library>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Depot" library:readonly="true" library:passwordprotected="false">
<library:element library:name="Depot"/>
<library:element library:name="CommonLang"/>
<library:element library:name="Currency"/>
<library:element library:name="Internet"/>
<library:element library:name="Lang_de"/>
<library:element library:name="tools"/>
<library:element library:name="Lang_en"/>
<library:element library:name="Lang_fr"/>
<library:element library:name="Lang_it"/>
<library:element library:name="Lang_es"/>
<library:element library:name="Lang_sv"/>
<library:element library:name="Lang_zh"/>
<library:element library:name="Lang_tw"/>
<library:element library:name="Lang_ko"/>
<library:element library:name="Lang_ja"/>
</library:library>

View File

@@ -0,0 +1,217 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="tools" script:language="StarBasic">REM ***** BASIC *****
Option Explicit
Sub RemoveSheet()
If oSheets.HasbyName(&quot;Link&quot;) then
oSheets.RemovebyName(&quot;Link&quot;)
End If
End Sub
Sub InitializeStatusLine(StatusText as String, MaxValue as Integer, FirstValue as Integer)
oStatusline = oDocument.GetCurrentController.GetFrame.CreateStatusIndicator()
oStatusLine.Start(StatusText, MaxValue)
oStatusline.SetValue(FirstValue)
End Sub
Sub MakeRangeVisible(oSheet as Object, RangeName as String, BIsVisible as Boolean)
Dim oRangeAddress, oColumns as Object
Dim i, iStartColumn, iEndColumn as Integer
oRangeAddress = oSheet.GetCellRangeByName(RangeName).RangeAddress
iStartColumn = oRangeAddress.StartColumn
iEndColumn = oRangeAddress.EndColumn
oColumns = oSheet.Columns
For i = iStartColumn To iEndColumn
oSheet.Columns(i).IsVisible = bIsVisible
Next i
End Sub
Function GetRowIndex(oSheet as Object, RowName as String)
Dim oRange as Object
oRange = oSheet.GetCellRangeByName(RowName)
GetRowIndex = oRange.RangeAddress.StartRow
End Function
Function GetTransactionCount(iStartRow as Integer)
Dim iEndRow as Integer
iStartRow = GetRowIndex(oMovementSheet, &quot;ColumnsToHide&quot;)
iEndRow = GetRowIndex(oMovementSheet, &quot;HiddenRow3&quot; )
GetTransactionCount = iEndRow -iStartRow - 2
End Function
Function GetStocksCount(iStartRow as Integer)
Dim iEndRow as Integer
iStartRow = GetRowIndex(oFirstSheet, &quot;HiddenRow1&quot;)
iEndRow = GetRowIndex(oFirstSheet, &quot;HiddenRow2&quot;)
GetStocksCount = iEndRow -iStartRow - 1
End Function
Function FillListbox(ListboxControl as Object, MsgTitle as String, bShowMessage) as Boolean
Dim i, StocksCount as Integer
Dim iStartRow as Integer
Dim oCell as Object
&apos; Add stock names to empty list box
StocksCount = GetStocksCount(iStartRow)
If StocksCount &gt; 0 Then
ListboxControl.Model.StringItemList() = NullList()
For i = 1 To StocksCount
oCell = oFirstSheet.GetCellByPosition(SBCOLUMNNAME1,iStartRow + i)
ListboxControl.AddItem(oCell.String, i-1)
Next
FillListbox() = True
Else
If bShowMessage Then
Msgbox(sInsertStockName, 16, MsgTitle)
FillListbox() = False
End If
End If
End Function
Sub CellValuetoControl(oSheet, oControl as Object, CellName as String)
Dim oCell as Object
Dim StringValue
oCell = GetCellByName(oSheet, CellName)
If oControl.PropertySetInfo.HasPropertyByName(&quot;EffectiveValue&quot;) Then
oControl.EffectiveValue = oCell.Value
Else
oControl.Value = oCell.Value
End If
&apos; If oCell.FormulaResultType = 1 Then
&apos; StringValue = oNumberFormatter.GetInputString(oCell.NumberFormat, oCell.Value)
&apos; oControl.Text = DeleteStr(StringValue, &quot;%&quot;)
&apos; Else
&apos; oControl.Text = oCell.String
&apos; End If
End Sub
Sub RemoveStockRows(oSheet as Object, iStartRow, RowCount as Integer)
If RowCount &gt; 0 Then
oSheet.Rows.RemoveByIndex(iStartRow, RowCount)
End If
End Sub
Sub AddValueToCellContent(iCellCol, iCellRow as Integer, AddValue)
Dim oCell as Object
Dim OldValue
oCell = oMovementSheet.GetCellByPosition(iCellCol, iCellRow)
OldValue = oCell.Value
oCell.Value = OldValue + AddValue
End Sub
Sub CheckInputDate(aEvent as Object)
Dim oRefDialog as Object
Dim oRefModel as Object
Dim oDateModel as Object
oDateModel = aEvent.Source.Model
oRefModel = DlgReference.GetControl(&quot;cmdGoOn&quot;).Model
oRefModel.Enabled = oDateModel.Date &lt;&gt; 0
End Sub
&apos; Updates the cell with the CurrentValue after checking if the
&apos; Newdate is later than the one that is referred to in the annotation
&apos; of the cell
Sub InsertCurrentValue(CurValue as Double, iRow as Integer, Newdate as Date)
Dim oCell as Object
Dim OldDate as Date
oCell = oFirstSheet.GetCellByPosition(SBCOLUMNRATE1, iRow)
OldDate = CDate(oCell.Annotation.Text.String)
If NewDate &gt;= OldDate Then
oCell.SetValue(CurValue)
oCell.Annotation.Text.SetString(CStr(NewDate))
End If
End Sub
Sub SplitCellValue(oSheet, FirstNumber, SecondNumber, iCol, iRow, NoteText)
Dim oCell as Object
Dim OldValue
oCell = oSheet.GetCellByPosition(iCol, iRow)
OldValue = oCell.Value
oCell.Value = OldValue * FirstNumber / SecondNumber
If NoteText &lt;&gt; &quot;&quot; Then
oCell.Annotation.SetString(NoteText)
End If
End Sub
Function GetStockRowIndex(ByVal Stockname) as Integer
Dim i, StocksCount as Integer
Dim iStartRow as Integer
Dim oCell as Object
StocksCount = GetStocksCount(iStartRow)
For i = 1 To StocksCount
oCell = oFirstSheet.GetCellByPosition(SBCOLUMNNAME1,iStartRow + i)
If oCell.String = Stockname Then
GetStockRowIndex = iStartRow + i
Exit Function
End If
Next
GetStockRowIndex = -1
End Function
Function GetStockID(StockName as String, Optional iFirstRow as Integer) as String
Dim CellStockName as String
Dim i as Integer
Dim iCount as Integer
Dim iLastRow as Integer
If IsMissing(iFirstRow) Then
iFirstRow = GetRowIndex(oFirstSheet, &quot;HiddenRow1&quot;)
End If
iCount = GetStocksCount(iFirstRow)
iLastRow = iFirstRow + iCount
For i = iFirstRow To iLastRow
CellStockName = oFirstSheet.GetCellByPosition(SBCOLUMNNAME1, i).String
If CellStockname = StockName Then
Exit For
End If
Next i
If i &gt; iLastRow Then
GetStockID() = &quot;&quot;
Else
If Not IsMissing(iFirstRow) Then
iFirstRow = i
End If
GetStockID() = oFirstSheet.GetCellByPosition(SBCOLUMNID1, i).String
End If
End Function
Function CheckDocLocale(LocLanguage as String, LocCountry as String)
Dim bIsDocLanguage as Boolean
Dim bIsDocCountry as Boolean
bIsDocLanguage = Instr(1, LocLanguage, sDocLanguage, SBBINARY) &lt;&gt; 0
bIsDocCountry = Instr(1, LocCountry, sDocCountry, SBBINARY) &lt;&gt; 0 OR SDocCountry = &quot;&quot;
CheckDocLocale = (bIsDocLanguage And bIsDocCountry)
End Function
</script:module>

View File

@@ -0,0 +1,415 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="AutoPilotRun" script:language="StarBasic">Option Explicit
Public SourceDir as String
Public TargetDir as String
Public TargetStemDir as String
Public SourceFile as String
Public TargetFile as String
Public Source as String
Public SubstFile as String
Public SubstDir as String
Public NoArgs()
Public TypeList(6) as String
Public GoOn as Boolean
Public DoUnprotect as Integer
Public Password as String
Public DocIndex as Integer
Public oPathSettings as Object
Public oUcb as Object
Public TotDocCount as Integer
Public sTotDocCount as String
Public OpenProperties(1) as New com.sun.star.beans.PropertyValue
Sub StartAutoPilot()
Dim i As Integer
Dim oFactoryKey as Object
BasicLibraries.LoadLibrary(&quot;Tools&quot;)
BasicLibraries.LoadLibrary(&quot;ImportWizard&quot;)
If InitResources(&quot;Euro Converter&quot;) Then
oUcb = createUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
oLocale = GetStarOfficeLocale()
InitializeConverter(oLocale, 2)
ToggleGoOnButton()
oFactoryKey = GetRegistryKeyContent(&quot;org.openoffice.Setup/Office/Factories&quot;)
DialogModel.chkTextDocuments.Enabled = oFactoryKey.hasbyName(&quot;com.sun.star.text.TextDocument&quot;)
DialogModel.cmdGoOn.DefaultButton = True
DialogModel.lstCurrencies.TabIndex = 12
DialogConvert.GetControl(&quot;optWholeDir&quot;).SetFocus()
DialogConvert.Execute()
DialogConvert.Dispose()
End If
End Sub
Sub ConvertDocuments()
Dim FilesList()
Dim bDisposable as Boolean
If Source &lt;&gt; &quot;&quot; And TargetDir &lt;&gt; &quot;&quot; Then
If DialogModel.optSingleFile.State = 1 Then
SourceFile = Source
TotDocCount = 1
Else
SourceDir = Source
TargetStemDir = TargetDir
TypeList(0) = &quot;calc8&quot;
TypeList(1) = &quot;calc_StarOffice_XML_Calc&quot;
If DialogModel.chkTextDocuments.State = 1 Then
ReDim Preserve TypeList(5) as String
TypeList(2) = &quot;writer8&quot;
TypeList(3) = &quot;writerglobal8&quot;
TypeList(4) = &quot;writer_StarOffice_XML_Writer&quot;
TypeList(5) = &quot;writer_globaldocument_StarOffice_XML_Writer_GlobalDocument&quot;
End If
FilesList() = ReadDirectories(SourceDir, bRecursive, True, False, TypeList())
TotDocCount = Ubound(FilesList(),1) + 1
End If
InitializeProgressPage(DialogModel)
&apos; ChangeToNextProgressStep()
sTotDocCount = CStr(TotDocCount)
OpenProperties(0).Name = &quot;Hidden&quot;
OpenProperties(0).Value = True
OpenProperties(1).Name = &quot;AsTemplate&quot;
OpenProperties(1).Value = False
For DocIndex = 0 To TotDocCount - 1
If InitializeDocument(FilesList(), bDisposable) Then
If StoreDocument() Then
ConvertDocument()
oDocument.Store
End If
If bDisposable Then
oDocument.Dispose()
End If
End If
Next DocIndex
DialogModel.cmdBack.Enabled = True
DialogModel.cmdGoOn.Enabled = True
DialogModel.cmdGoOn.Label = sReady
DialogModel.cmdCancel.Label = sEnd
End If
End Sub
Function InitializeDocument(FilesList(), bDisposable as Boolean) as Boolean
&apos; The Autopilot is started from step No. 2
Dim sViewPath as String
Dim bIsReadOnly as Boolean
Dim sExtension as String
On Local Error Goto NEXTFILE
If Not bCancelTask Then
If DialogModel.optWholeDir.State = 1 Then
SourceFile = FilesList(DocIndex,0)
TargetFile = ReplaceString(SourceFile,TargetStemDir,SourceDir)
TargetDir = DirectorynameoutofPath(TargetFile, &quot;/&quot;)
Else
SourceFile = Source
TargetFile = TargetDir &amp; &quot;/&quot; &amp; FileNameoutofPath(SourceFile, &quot;/&quot;)
End If
If CreateFolder(TargetDir) Then
sExtension = GetFileNameExtension(SourceFile, &quot;/&quot;)
oDocument = OpenDocument(SourceFile, OpenProperties(), bDisposable)
If (oDocument.IsReadOnly) AND (UCase(SourceFile) = UCase(TargetFile)) Then
bIsReadOnly = True
Msgbox(sMsgDOCISREADONLY, 16, GetProductName())
Else
bIsReadOnly = False
RetrieveDocumentObjects()
sViewPath = CutPathView(SourceFile, 60)
DialogModel.lblCurDocument.Label = Str(DocIndex+1) &amp; &quot;/&quot; &amp; sTotDocCount &amp; &quot; (&quot; &amp; sViewPath &amp; &quot;)&quot;
End If
InitializeDocument() = Not bIsReadOnly
Else
InitializeDocument() = False
End If
Else
InitializeDocument() = False
End If
NEXTFILE:
If Err &lt;&gt; 0 Then
InitializeDocument() = False
Resume LETSGO
LETSGO:
End If
End Function
Sub ChangeToNextProgressStep()
DialogModel.lblCurProgress.FontWeight = com.sun.star.awt.FontWeight.NORMAL
DialogConvert.GetControl(&quot;lblCurProgress&quot;).Visible = True
End Sub
Function StoreDocument() as Boolean
Dim sCurFileExists as String
Dim iOverWrite as Integer
If (TargetFile &lt;&gt; &quot;&quot;) And (Not bCancelTask) Then
On Local Error Goto NOSAVING
If oUcb.Exists(TargetFile) Then
sCurFileExists = ReplaceString(sMsgFileExists, ConvertFromUrl(TargetFile), &quot;&lt;1&gt;&quot;)
sCurFileExists = ReplaceString(sCurFileExists, chr(13), &quot;&lt;CR&gt;&quot;)
iOverWrite = Msgbox (sCurFileExists, 32 + 3, sMsgDLGTITLE)
Select Case iOverWrite
Case 1 &apos; OK
Case 2 &apos; Abort
bCancelTask = True
StoreDocument() = False
Exit Function
Case 7 &apos; No
StoreDocument() = False
Exit Function
End Select
End If
If TargetFile &lt;&gt; SourceFile Then
oDocument.StoreAsUrl(TargetFile,NoArgs)
Else
oDocument.Store
End If
StoreDocument() = True
NOSAVING:
If Err &lt;&gt; 0 Then
StoreDocument() = False
Resume CLERROR
End If
CLERROR:
End If
End Function
Sub SwapExtent()
DialogModel.chkRecursive.Enabled = DialogModel.optWholeDir.State = 1
If DialogModel.optWholeDir.State = 1 Then
DialogModel.lblSource.Label = sSOURCEDIR
If Not IsNull(SubstFile) Then
SubstFile = DialogModel.txtSource.Text
DialogModel.txtSource.Text = SubstDir
End If
Else
DialogModel.LblSource.Label = sSOURCEFILE
If Not IsNull(SubstDir) Then
SubstDir = DialogModel.txtSource.Text
DialogModel.txtSource.Text = SubstFile
End If
End If
ToggleGoOnButton()
End Sub
Function InitializeThirdStep() as Boolean
Dim TextBoxText as String
Source = AssignFileName(DialogModel.txtSource.Text, DialogModel.lblSource.Label, True)
If CheckTextBoxPath(DialogModel.txtTarget, True, True, sMsgDLGTITLE, True) Then
TargetDir = AssignFileName(DialogModel.txtTarget.Text, DialogModel.lblTarget.Label, False)
Else
TargetDir = &quot;&quot;
End If
If Source &lt;&gt; &quot;&quot; And TargetDir &lt;&gt; &quot;&quot; Then
bRecursive = DialogModel.chkRecursive.State = 1
bDoUnprotect = DialogModel.chkProtect.State = 1
DialogModel.lblRetrieval.FontWeight = com.sun.star.awt.FontWeight.BOLD
DialogModel.lblRetrieval.Label = sPrgsRETRIEVAL
DialogModel.lblCurProgress.Label = sPrgsCONVERTING
If DialogModel.optWholeDir.State = 1 Then
TextBoxText = sSOURCEDIR &amp; &quot; &quot; &amp; ConvertFromUrl(Source) &amp; chr(13)
If DialogModel.chkRecursive.State = 1 Then
TextBoxText = TextBoxText &amp; DeleteStr(sInclusiveSubDir,&quot;~&quot;) &amp; chr(13)
End If
Else
TextBoxText = sSOURCEFILE &amp; &quot; &quot; &amp; ConvertFromUrl(Source) &amp; chr(13)
End If
TextBoxText = TextBoxText &amp; sTARGETDIR &amp; &quot; &quot; &amp; ConvertFromUrl(TargetDir) &amp; chr(13)
If DialogModel.chkProtect.State = 1 Then
TextBoxText = TextboxText &amp; sPrgsUNPROTECT
End If
DialogModel.txtConfig.Text = TextBoxText
ToggleProgressStep()
DialogModel.cmdGoOn.Enabled = False
InitializeThirdStep() = True
Else
InitializeThirdStep() = False
End If
End Function
Sub ToggleProgressStep(Optional aEvent as Object)
Dim bMakeVisible as Boolean
Dim LocStep as Integer
&apos; If the Sub is call by the &apos;cmdBack&apos; Button then set the &apos;bMakeVisible&apos; variable accordingly
bMakeVisible = IsMissing(aEvent)
If bMakeVisible Then
DialogModel.Step = 3
Else
DialogModel.Step = 2
End If
DialogConvert.GetControl(&quot;lblCurrencies&quot;).Visible = Not bMakeVisible
DialogConvert.GetControl(&quot;lstCurrencies&quot;).Visible = Not bMakeVisible
DialogConvert.GetControl(&quot;cmdBack&quot;).Visible = bMakeVisible
DialogConvert.GetControl(&quot;cmdGoOn&quot;).Visible = bMakeVisible
DialogModel.imgPreview.ImageUrl = BitmapDir &amp; &quot;euro_&quot; &amp; DialogModel.Step &amp; &quot;.png&quot;
End Sub
Sub EnableStep2DialogControls(OnValue as Boolean)
With DialogModel
.hlnExtent.Enabled = OnValue
.optWholeDir.Enabled = OnValue
.optSingleFile.Enabled = OnValue
.chkProtect.Enabled = OnValue
.cmdCallSourceDialog.Enabled = OnValue
.cmdCallTargetDialog.Enabled = OnValue
.lblSource.Enabled = OnValue
.lblTarget.Enabled = OnValue
.txtSource.Enabled = OnValue
.txtTarget.Enabled = OnValue
.imgPreview.Enabled = OnValue
.lstCurrencies.Enabled = OnValue
.lblCurrencies.Enabled = OnValue
If OnValue Then
ToggleGoOnButton()
.chkRecursive.Enabled = .optWholeDir.State = 1
Else
.cmdGoOn.Enabled = False
.chkRecursive.Enabled = False
End If
End With
End Sub
Sub InitializeProgressPage()
DialogConvert.GetControl(&quot;lblRetrieval&quot;).Visible = False
DialogConvert.GetControl(&quot;lblCurProgress&quot;).Visible = False
DialogModel.lblRetrieval.FontWeight = com.sun.star.awt.FontWeight.NORMAL
DialogModel.lblCurProgress.FontWeight = com.sun.star.awt.FontWeight.BOLD
DialogConvert.GetControl(&quot;lblRetrieval&quot;).Visible = True
DialogConvert.GetControl(&quot;lblCurProgress&quot;).Visible = True
End Sub
Function AssignFileName(sPath as String, ByVal HeaderString, bCheckFileType as Boolean) as String
Dim bIsValid as Boolean
Dim sLocMimeType as String
Dim sNoDirMessage as String
HeaderString = DeleteStr(HeaderString, &quot;:&quot;)
sPath = ConvertToUrl(Trim(sPath))
bIsValid = oUcb.Exists(sPath)
If bIsValid Then
If DialogModel.optSingleFile.State = 1 Then
If bCheckFileType Then
sLocMimeType = GetRealFileContent(sPath)
If DialogModel.chkTextDocuments.State = 1 Then
If (Instr(1, sLocMimeType, &quot;text&quot;) = 0) And (Instr(1, sLocMimeType, &quot;calc&quot;) = 0) Then
Msgbox(sMsgFileInvalid, 48, sMsgDLGTITLE)
bIsValid = False
End If
Else
If (Instr(1, sLocMimeType, &quot;spreadsheet&quot;) = 0) And (Instr(1, sLocMimeType, &quot;calc&quot;)) = 0 Then
Msgbox(sMsgFileInvalid, 48, sMsgDLGTITLE)
bIsValid = False
End If
End If
End If
Else
If Not oUcb.IsFolder(sPath) Then
sNoDirMessage = ReplaceString(sMsgNODIRECTORY,sPath,&quot;&lt;1&gt;&quot;)
Msgbox(sNoDirMessage,48, sMsgDLGTITLE)
bIsValid = False
Else
sPath = RTrimStr(sPath,&quot;/&quot;)
sPath = sPath &amp; &quot;/&quot;
End If
End if
Else
Msgbox(HeaderString &amp; &quot; &apos;&quot; &amp; ConvertFromUrl(sPath) &amp; &quot;&apos; &quot; &amp; sMsgNOTTHERE,48, sMsgDLGTITLE)
End If
If bIsValid Then
AssignFileName() = sPath
Else
AssignFilename() = &quot;&quot;
End If
End Function
Sub ToggleGoOnButton()
Dim bDoEnable as Boolean
Dim sLocMimeType as String
Dim sPath as String
bDoEnable = Ubound(DialogModel.lstCurrencies.SelectedItems()) &gt; -1
If bDoEnable Then
&apos; Check if Source is set correctly
sPath = ConvertToUrl(Trim(DialogModel.txtSource.Text))
bDoEnable = oUcb.Exists(sPath)
End If
DialogModel.cmdGoOn.Enabled = bDoEnable
End Sub
Sub CallFolderPicker()
GetFolderName(DialogModel.txtTarget)
ToggleGoOnButton()
End Sub
Sub CallFilePicker()
If DialogModel.optSingleFile.State = 1 Then
Dim oMasterKey as Object
Dim oTypes() as Object
Dim oUIKey() as Object
oMasterKey = GetRegistryKeyContent(&quot;org.openoffice.TypeDetection.Types&quot;)
oTypes() = oMasterKey.Types
oUIKey = GetRegistryKeyContent(&quot;org.openoffice.Office.UI/FilterClassification/LocalFilters&quot;)
If DialogModel.chkTextDocuments.State = 1 Then
Dim FilterNames(7,1) as String
FilterNames(4,0) = oTypes.GetByName(&quot;writer_StarOffice_XML_Writer&quot;).UIName
FilterNames(4,1) = &quot;*.sxw&quot;
FilterNames(5,0) = oTypes.GetByName(&quot;writer_StarOffice_XML_Writer_Template&quot;).UIName
FilterNames(5,1) = &quot;*.stw&quot;
FilterNames(6,0) = oTypes.GetByName(&quot;writer8&quot;).UIName
FilterNames(6,1) = &quot;*.odt&quot;
FilterNames(7,0) = oTypes.GetByName(&quot;writer8_template&quot;).UIName
FilterNames(7,1) = &quot;*.ott&quot;
Else
ReDim FilterNames(3,1) as String
End If
FilterNames(0,0) = oTypes.GetByName(&quot;calc8&quot;).UIName
Filternames(0,1) = &quot;*.ods&quot;
FilterNames(1,0) = oTypes.GetByName(&quot;calc8_template&quot;).UIName
Filternames(1,1) = &quot;*.ots&quot;
FilterNames(2,0) = oTypes.GetByName(&quot;calc_StarOffice_XML_Calc&quot;).UIName
Filternames(2,1) = &quot;*.sxc&quot;
FilterNames(3,0) = oTypes.GetByName(&quot;calc_StarOffice_XML_Calc_Template&quot;).UIName
Filternames(3,1) = &quot;*.stc&quot;
GetFileName(DialogModel.txtSource, Filternames())
Else
GetFolderName(DialogModel.txtSource)
End If
ToggleGoOnButton()
End Sub
Sub PreviousStep()
DialogModel.Step = 2
DialogModel.cmdGoOn.Label = sGOON
DialogModel.cmdCancel.Label = sCANCEL
End Sub
</script:module>

View File

@@ -0,0 +1,289 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Common" script:language="StarBasic"> REM ***** BASIC *****
Public DialogModel as Object
Public DialogConvert as Object
Public DialogPassword as Object
Public PasswordModel as Object
Sub RetrieveDocumentObjects()
CurMimeType = Tools.GetDocumentType(oDocument)
If Instr(1, CurMimeType, &quot;calc&quot;) &lt;&gt; 0 Then
oSheets = oDocument.Sheets
oSheet = oDocument.Sheets.GetbyIndex(0)
oAddressRanges = oDocument.createInstance(&quot;com.sun.star.sheet.SheetCellRanges&quot;)
End If
&apos; Retrieve the indices for the cellformatations
oFormats = oDocument.NumberFormats
End Sub
Sub CancelTask()
&apos; If Not DocDisposed Then
&apos; ReprotectSheets()
&apos; End If
If DialogModel.Step = 3 And (Not bCancelTask) Then
If Msgbox(sMsgCancelConversion, 36, sMsgCancelTitle) = 6 Then
bCancelTask = True
DialogConvert.EndExecute
Else
bCancelTask = False
End If
Else
DialogConvert.EndExecute()
End If
End Sub
Function ConvertDocument()
GoOn = True
&apos; DocDisposed = True
InitializeProgressbar()
If Instr(1, CurMimeType, &quot;calc&quot;) &lt;&gt; 0 Then
bDocHasProtectedSheets = CheckSheetProtection(oSheets)
If bDocHasProtectedSheets Then
bDocHasProtectedSheets = UnprotectSheetsWithPassword(oSheets, bDoUnProtect)
End If
If Not bDocHasProtectedSheets Then
If Not bRangeListDefined Then
TotCellCount = 0
CreateRangeEnumeration(True)
Else
IncreaseStatusvalue(SBRelGet/3)
End If
RangeIndex = Ubound(RangeList())
If RangeIndex &gt; -1 Then
ConvertThehardWay(RangeList(), True, False)
MakeStyleEnumeration(True)
oDocument.calculateAll()
End If
ReprotectSheets()
bRangeListDefined = False
End If
Else
DialogModel.ProgressBar.ProgressValue = 10 &apos; oStatusline.SetValue(10)
ConvertTextFields()
DialogModel.ProgressBar.ProgressValue = 80 &apos; oStatusline.SetValue(80)
ConvertWriterTables()
End If
EndStatusLine()
On Local Error Goto 0
End Function
Sub SwitchNumberFormat(oObject as Object, oFormats as object)
Dim nFormatLanguage as Integer
Dim nFormatDecimals as Integer
Dim nFormatLeading as Integer
Dim bFormatLeading as Integer
Dim bFormatNegRed as Integer
Dim bFormatThousands as Integer
Dim i as Integer
Dim aNewStr as String
Dim iNumberFormat as Long
Dim AddToList as Boolean
Dim sOldCurrSymbol as String
On Local Error Resume Next
iNumberFormat = oObject.NumberFormat
On Local Error GoTo NOKEY
aFormat() = oFormats.getByKey(iNumberFormat)
On Local Error GoTo 0
sOldCurrSymbol = aFormat.CurrencySymbol
If sOldCurrSymbol = CurrValue(CurrIndex,5) Then
aSimpleStr = &quot;0 [$EUR]&quot;
Else
aSimpleStr = &quot;0 [$&quot; &amp; sEuroSign &amp; aFormat.CurrencyExtension &amp; &quot;]&quot;
End If
nSimpleKey = Numberformat(oFormats, aSimpleStr, oLocale)
&apos; set new Currency format with according settings
nFormatDecimals = 2
nFormatLeading = aFormat.LeadingZeros
bFormatNegRed = aFormat.NegativeRed
bFormatThousands = aFormat.ThousandsSeparator
aNewStr = oFormats.generateFormat( nSimpleKey, aFormat.Locale, bFormatThousands, bFormatNegRed, nFormatDecimals, nFormatLeading)
oObject.NumberFormat = Numberformat(oFormats, aNewStr, aFormat.Locale)
NOKEY:
If Err &lt;&gt; 0 Then
Resume CLERROR
End If
CLERROR:
End Sub
Function Numberformat( oFormats as Object, aFormatStr as String, oLocale as Object)
Dim nRetkey
Dim l as String
Dim c as String
nRetKey = oFormats.queryKey( aFormatStr, oLocale, True )
If nRetKey = -1 Then
l = oLocale.Language
c = oLocale.Country
nRetKey = oFormats.addNew( aFormatStr, oLocale )
If nRetKey = -1 Then nRetKey = 0
End If
Numberformat = nRetKey
End Function
Function CheckFormatType( FormatObject as object)
Dim i as Integer
Dim LocCurrIndex as Integer
Dim nFormatFormatString as String
Dim FormatLangID as Integer
Dim sFormatCurrExt as String
Dim oFormatofObject() as Object
&apos; Retrieve the Format of the Object
On Local Error GoTo NOKEY
oFormatofObject = oFormats.getByKey(FormatObject.NumberFormat)
On Local Error GoTo 0
If NOT INT(oFormatofObject.Type) AND com.sun.star.util.NumberFormat.CURRENCY Then
CheckFormatType = False
Exit Function
End If
If FieldInArray(CurrSymbolList(),2,oFormatofObject.CurrencySymbol) Then
&apos; If the Currencysymbol of the object is the one needed, then check the Currency extension
sFormatCurrExt = oFormatofObject.CurrencyExtension
If FieldInList(CurExtension(),2,sFormatCurrExt) Then
&apos; The Currency - extension also fits
CheckFormatType = True
Else
&apos; The Currency - symbol is Euro-conforming (like &apos;DEM&apos;), so there is no Currency-Extension
CheckFormatType = oFormatofObject.CurrencySymbol = CurrsymbolList(2)
End If
Else
&apos; The Currency Symbol of the object is not the desired one
If oFormatofObject.CurrencySymbol = &quot;&quot; Then
&apos; Format is &quot;automatic&quot;
CheckFormatType = CheckLocale(oFormatofObject.Locale)
Else
CheckFormatType = False
End If
End If
NOKEY:
If Err &lt;&gt; 0 Then
CheckFormatType = False
Resume CLERROR
End If
CLERROR:
End Function
Sub StartConversion()
GoOn = True
Select Case DialogModel.Step
Case 1
If DialogModel.chkComplete.State = 1 Then
ConvertWholeDocument()
Else
ConvertRangesorStylesofDocument()
End If
Case 2
bCancelTask = False
If InitializeThirdStep() Then
ConvertDocuments()
bCancelTask = True
End If
Case 3
DialogConvert.EndExecute()
End Select
End Sub
Sub IncreaseStatusValue(AddStatusValue as Integer)
StatusValue = Int(StatusValue + AddStatusValue)
If DialogModel.Step = 3 Then
DialogModel.ProgressBar.ProgressValue = StatusValue
Else
oStatusline.SetValue(StatusValue)
End If
End Sub
Sub SelectCurrency()
Dim AddtoList as Boolean
Dim NullList()
Dim OldCurrIndex as Integer
bRangeListDefined = False
OldCurrIndex = CurrIndex
CurrIndex = DialogModel.lstCurrencies.SelectedItems(0)
If OldCurrIndex &lt;&gt; CurrIndex Then
InitializeCurrencyValues(CurrIndex)
CurExtension(0) = LangIDValue(CurrIndex,0,2)
CurExtension(1) = LangIDValue(CurrIndex,1,2)
CurExtension(2) = LangIDValue(CurrIndex,2,2)
If DialogModel.Step = 1 Then
EnableStep1DialogControls(False,False, False)
If DialogModel.optCellTemplates.State = 1 Then
EnableStep1DialogControls(False, False, False)
CreateStyleEnumeration()
ElseIf ((DialogModel.optSheetRanges.State = 1) OR (DialogModel.optDocRanges.State = 1)) AND (DialogModel.Step = 1) Then
CreateRangeEnumeration(False)
If Ubound(RangeList()) = -1 Then
DialogModel.lstSelection.StringItemList() = NullList()
End If
ElseIf DialogModel.optSelRange.State= 1 Then
&apos;Preselected Range
End If
EnableStep1DialogControls(True, True, True)
ElseIf DialogModel.Step = 2 Then
EnableStep2DialogControls(True)
End If
End If
End Sub
Sub FillUpCurrencyListbox()
Dim i as Integer
Dim MaxIndex as Integer
MaxIndex = Ubound(CurrValue(),1)
Dim LocList(MaxIndex) as String
For i = 0 To MaxIndex
LocList(i) = CurrValue(i,0)
Next i
DialogModel.lstCurrencies.StringItemList() = LocList()
If CurrIndex &gt; -1 Then
SelectListboxItem(DialogModel.lstCurrencies, CurrIndex)
End If
End Sub
Sub InitializeProgressbar()
CurCellCount = 0
If Not IsNull(oStatusLine) Then
oStatusline.Start(sStsPROGRESS, 100)
Else
DialogModel.ProgressBar.ProgressValue = 0
End If
StatusValue = 0
End Sub
Sub EndStatusLine()
If Not IsNull(oStatusLine) Then
oStatusline.End
Else
DialogModel.ProgressBar.ProgressValue = 100
End If
End Sub
</script:module>

View File

@@ -0,0 +1,334 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="ConvertRun" script:language="StarBasic">Option Explicit
Public oPreSelRange as Object
Sub Main()
BasicLibraries.LoadLibrary(&quot;Tools&quot;)
If InitResources(&quot;Euro Converter&quot;) Then
bDoUnProtect = False
bPreSelected = True
oDocument = ThisComponent
RetrieveDocumentObjects() &apos; Statusline, SheetsCollection etc.
InitializeConverter(oDocument.CharLocale, 1)
GetPreSelectedRange()
If GoOn Then
DialogModel.lstCurrencies.TabIndex = 2
DialogConvert.GetControl(&quot;chkComplete&quot;).SetFocus()
DialogConvert.Execute
End If
DialogConvert.Dispose
End If
End Sub
Sub SelectListItem()
Dim Listbox as Object
Dim oListSheet as Object
Dim CurStyleName as String
Dim oCursheet as Object
Dim oTempRanges as Object
Dim sCurSheetName as String
Dim RangeName as String
Dim oSheetRanges as Object
Dim ListIndex as Integer
Dim a as Integer
Dim i as Integer
Dim n as Integer
Dim m as Integer
Dim MaxIndex as Integer
Listbox = DialogModel.lstSelection
If Ubound(Listbox.SelectedItems()) &gt; -1 Then
EnableStep1DialogControls(False, False, False)
oSelRanges = oDocument.createInstance(&quot;com.sun.star.sheet.SheetCellRanges&quot;)
&apos; Is the sheet the basis, then the sheetobject has to be created
If DialogModel.optDocRanges.State = 1 Then
&apos; Document is the basis for the conversion
ListIndex = Listbox.SelectedItems(0)
oCurSheet = RetrieveSheetoutofRangeName(Listbox.StringItemList(ListIndex))
oDocument.CurrentController.SetActiveSheet(oCurSheet)
Else
oCurSheet = oDocument.CurrentController.ActiveSheet
End If
sCurSheetName = oCurSheet.Name
If DialogModel.optCellTemplates.State = 1 Then
Dim CurIndex as Integer
For i = 0 To Ubound(Listbox.SelectedItems())
CurIndex = Listbox.SelectedItems(i)
CurStylename = Listbox.StringItemList(CurIndex)
oSheetRanges = oCursheet.CellFormatRanges.createEnumeration
While oSheetRanges.hasMoreElements
oRange = oSheetRanges.NextElement
If oRange.getPropertyState(&quot;NumberFormat&quot;) = 1 Then
If oRange.CellStyle = CurStyleName Then
oSelRanges.InsertbyName(&quot;&quot;,oRange)
End If
End If
Wend
Next i
Else
&apos; Hard Formatation is selected
a = -1
For n = 0 To Ubound(Listbox.SelectedItems())
m = Listbox.SelectedItems(n)
RangeName = Listbox.StringItemList(m)
oListSheet = RetrieveSheetoutofRangeName(RangeName)
a = a + 1
MaxIndex = Ubound(SelRangeList())
If a &gt; MaxIndex Then
Redim Preserve SelRangeList(MaxIndex + SBRANGEUBOUND)
End If
SelRangeList(a) = RangeName
If oListSheet.Name = sCurSheetName Then
oRange = RetrieveRangeoutofRangeName(RangeName)
oSelRanges.InsertbyName(&quot;&quot;,oRange)
End If
Next n
End If
If a &gt; -1 Then
ReDim Preserve SelRangeList(a)
Else
ReDim SelRangeList()
End If
oDocument.CurrentController.Select(oSelRanges)
EnableStep1DialogControls(True, True, True)
End If
End Sub
&apos; Procedure that is called by an event
Sub RetrieveEnableValue()
Dim EnableValue as Boolean
EnableValue = Not DialogModel.lstSelection.Enabled
EnableStep1DialogControls(True, EnableValue, True)
End Sub
Sub EnableStep1DialogControls(bCurrEnabled as Boolean, bFrameEnabled as Boolean, bButtonsEnabled as Boolean)
Dim bCurrIsSelected as Boolean
Dim bObjectIsSelected as Boolean
Dim bConvertWholeDoc as Boolean
Dim bDoEnableFrame as Boolean
bConvertWholeDoc = DialogModel.chkComplete.State = 1
bDoEnableFrame = bFrameEnabled And (NOT bConvertWholeDoc)
&apos; Controls around the Selection Listbox
With DialogModel
.lblCurrencies.Enabled = bCurrEnabled
.lstCurrencies.Enabled = bCurrEnabled
.lstSelection.Enabled = bDoEnableFrame
.lblSelection.Enabled = bDoEnableFrame
.hlnSelection.Enabled = bDoEnableFrame
.optCellTemplates.Enabled = bDoEnableFrame
.optSheetRanges.Enabled = bDoEnableFrame
.optDocRanges.Enabled = bDoEnableFrame
.optSelRange.Enabled = bDoEnableFrame
End With
&apos; The CheckBox has the Value &apos;1&apos; when the Controls in the Frame are disabled
If bButtonsEnabled Then
bCurrIsSelected = Ubound(DialogModel.lstCurrencies.SelectedItems()) &lt;&gt; -1
&apos; Enable GoOnButton only when Currency is selected
DialogModel.cmdGoOn.Enabled = bCurrIsSelected
DialogModel.chkComplete.Enabled = bCurrIsSelected
If bDoEnableFrame AND DialogModel.cmdGoOn.Enabled Then
&apos; If FrameControls are enabled, check if Listbox is Empty
bObjectIsSelected = Ubound(DialogModel.lstSelection.SelectedItems()) &lt;&gt; -1
DialogModel.cmdGoOn.Enabled = bObjectIsSelected
End If
Else
DialogModel.cmdGoOn.Enabled = False
DialogModel.chkComplete.Enabled = False
End If
End Sub
Sub ConvertRangesOrStylesOfDocument()
Dim i as Integer
Dim ItemName as String
Dim SelList() as String
Dim oSheetRanges as Object
bDocHasProtectedSheets = CheckSheetProtection(oSheets)
If bDocHasProtectedSheets Then
bDocHasProtectedSheets = UnprotectSheetsWithPassWord(oSheets, bDoUnProtect)
DialogModel.cmdGoOn.Enabled = False
End If
If Not bDocHasProtectedSheets Then
EnableStep1DialogControls(False, False, False)
InitializeProgressBar()
If DialogModel.optSelRange.State = 1 Then
SelectListItem()
End If
SelList() = DialogConvert.GetControl(&quot;lstSelection&quot;).SelectedItems()
If DialogModel.optCellTemplates.State = 1 Then
&apos; Option &apos;Soft&apos; Formatation is selected
AssignRangestoStyle(DialogModel.lstSelection.StringItemList(), SelList())
ConverttheSoftWay(SelList(), True)
ElseIf DialogModel.optSelRange.State = 1 Then
oSheetRanges = oPreSelRange.CellFormatRanges.createEnumeration
While oSheetRanges.hasMoreElements
oRange = oSheetRanges.NextElement
If CheckFormatType(oRange) Then
ConvertCellCurrencies(oRange)
SwitchNumberFormat(oRange, oFormats, sEuroSign)
End If
Wend
Else
ConverttheHardWay(SelList(), False, True)
End If
oStatusline.End
EnableStep1DialogControls(True, False, True)
DialogModel.cmdGoOn.Enabled = True
oDocument.CurrentController.Select(oSelRanges)
End If
End Sub
Sub ConvertWholeDocument()
Dim s as Integer
DialogModel.cmdGoOn.Enabled = False
DialogModel.chkComplete.Enabled = False
GoOn = ConvertDocument()
EmptyListbox(DialogModel.lstSelection())
EnableStep1DialogControls(True, True, True)
End Sub
&apos; Everything previously selected will be deselected
Sub EmptySelection()
Dim RangeName as String
Dim i as Integer
Dim MaxIndex as Integer
Dim EmptySelRangeList() as String
If Not IsNull(oSelRanges) Then
If oSelRanges.HasElements Then
EmptySelRangeList() = ArrayOutofString(oSelRanges.RangeAddressesasString, &quot;;&quot;, MaxIndex)
For i = 0 To MaxIndex
oSelRanges.RemovebyName(EmptySelRangeList(i))
Next i
End If
oDocument.CurrentController.Select(oSelRanges)
Else
oSelRanges = oDocument.createInstance(&quot;com.sun.star.sheet.SheetCellRanges&quot;)
End If
End Sub
Function AddSelectedRangeToSelRangesEnum() as Object
Dim oLocRange as Object
osheet = oDocument.CurrentController.GetActiveSheet
oSelRanges = oDocument.createInstance(&quot;com.sun.star.sheet.SheetCellRanges&quot;)
&apos; Check if a Currency-Range has been selected
oLocRange = oDocument.CurrentController.Selection
bPreSelected = oLocRange.SupportsService(&quot;com.sun.star.sheet.SheetCellRange&quot;)
If bPreSelected Then
oSelRanges.InsertbyName(&quot;&quot;,oLocRange)
AddSelectedRangeToSelRangesEnum() = oLocRange
End If
End Function
Sub GetPreSelectedRange()
Dim i as Integer
Dim OldCurrSymbolList(2) as String
Dim OldCurrIndex as Integer
Dim OldCurExtension(2) as String
oPreSelRange = AddSelectedRangeToSelRangesEnum()
DialogModel.chkComplete.State = Abs(Not(bPreSelected))
If bPreSelected Then
DialogModel.optSelRange.State = 1
AddRangeToListbox(oPreSelRange)
Else
DialogModel.optCellTemplates.State = 1
CreateStyleEnumeration()
End If
EnableStep1DialogControls(True, bPreSelected, True)
DialogModel.optSelRange.Enabled = bPreSelected
End Sub
Sub AddRangeToListbox(oLocRange as Object)
EmptyListBox(DialogModel.lstSelection)
PreName = RetrieveRangeNamefromAddress(oLocRange)
AddSingleItemToListbox(DialogModel.lstSelection, Prename)&apos;, 0)
SelectListboxItem(DialogModel.lstCurrencies, CurrIndex)
TotCellCount = CountRangeCells(oLocRange)
End Sub
Sub CheckRangeSelection(Optional oEvent)
EmptySelection()
AddRangeToListbox(oPreSelRange)
oPreSelRange = AddSelectedRangeToSelRangesEnum()
End Sub
&apos; Checks if a Field (LocField) is already defined in an Array
&apos; Returns &apos;True&apos; or &apos;False&apos;
Function FieldInList(LocList(), MaxIndex as integer, ByVal LocField ) As Boolean
Dim i as integer
LocField = UCase(LocField)
For i = Lbound(LocList()) to MaxIndex
If UCase(LocList(i)) = LocField then
FieldInList = True
Exit Function
End if
Next
FieldInList = False
End Function
Function CheckLocale(oLocale) as Boolean
Dim i as Integer
Dim LocCountry as String
Dim LocLanguage as String
LocCountry = oLocale.Country
LocLanguage = oLocale.Language
For i = 0 To 1
If LocLanguage = LangIDValue(CurrIndex,i,0) AND LocCountry = LangIDValue(CurrIndex,i,1) Then
CheckLocale = True
Exit Function
End If
Next i
CheckLocale = False
End Function
Sub SetOptionValuestoNull()
With DialogModel
.optCellTemplates.State = 0
.optSheetRanges.State = 0
.optDocRanges.State = 0
.optSelRange.State = 0
End With
End Sub
Sub SetStatusLineText(sStsREPROTECT as String)
If Not IsNull(oStatusLine) Then
oStatusline.SetText(sStsREPROTECT)
End If
End Sub
</script:module>

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="DialogConvert" dlg:left="96" dlg:top="28" dlg:width="270" dlg:height="210" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_DIALOG" dlg:closeable="true" dlg:moveable="true">
<dlg:bulletinboard>
<dlg:text dlg:id="lblCurrencies" dlg:tab-index="1" dlg:left="170" dlg:top="39" dlg:width="92" dlg:height="8" dlg:value="lblCurrencies"/>
<dlg:checkbox dlg:id="chkComplete" dlg:tab-index="0" dlg:left="12" dlg:top="43" dlg:width="129" dlg:height="10" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_CHECKBOX1" dlg:value="chkComplete" dlg:checked="true">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:Euro.ConvertRun.RetrieveEnableValue?language=Basic&amp;location=application" script:language="Script"/>
</dlg:checkbox>
<dlg:menulist dlg:id="lstCurrencies" dlg:tab-index="2" dlg:left="170" dlg:top="51" dlg:width="93" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_COMBOBOX1" dlg:spin="true" dlg:linecount="12">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:Euro.Common.SelectCurrency?language=Basic&amp;location=application" script:language="Script"/>
</dlg:menulist>
<dlg:radiogroup>
<dlg:radio dlg:id="optCellTemplates" dlg:tab-index="3" dlg:left="12" dlg:top="96" dlg:width="129" dlg:height="10" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_OPTIONBUTTON1" dlg:value="optCellTemplates">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.Soft.CreateStyleEnumeration?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
<dlg:radio dlg:id="optSheetRanges" dlg:tab-index="4" dlg:left="12" dlg:top="110" dlg:width="130" dlg:height="10" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_OPTIONBUTTON2" dlg:value="optSheetRanges">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.Hard.CreateRangeList?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
<dlg:radio dlg:id="optDocRanges" dlg:tab-index="5" dlg:left="12" dlg:top="124" dlg:width="130" dlg:height="10" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_OPTIONBUTTON3" dlg:value="optDocRanges">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.Hard.CreateRangeList?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
<dlg:radio dlg:id="optSelRange" dlg:tab-index="6" dlg:left="12" dlg:top="138" dlg:width="130" dlg:height="10" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_OPTIONBUTTON4" dlg:value="optSelRange">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.ConvertRun.CheckRangeSelection?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
</dlg:radiogroup>
<dlg:text dlg:id="lblSelection" dlg:tab-index="7" dlg:left="170" dlg:top="84" dlg:width="73" dlg:height="8" dlg:page="1" dlg:value="lblSelection"/>
<dlg:menulist dlg:id="lstSelection" dlg:tab-index="8" dlg:left="170" dlg:top="96" dlg:width="90" dlg:height="52" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_LISTBOX1" dlg:multiselection="true">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:Euro.ConvertRun.SelectListItem?language=Basic&amp;location=application" script:language="Script"/>
</dlg:menulist>
<dlg:radiogroup>
<dlg:radio dlg:id="optSingleFile" dlg:tab-index="9" dlg:left="12" dlg:top="51" dlg:width="146" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_OBFILE" dlg:value="optSingleFile">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.AutoPilotRun.SwapExtent?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
<dlg:radio dlg:id="optWholeDir" dlg:tab-index="10" dlg:left="12" dlg:top="65" dlg:width="146" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_OBDIR" dlg:value="optWholeDir" dlg:checked="true">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.AutoPilotRun.SwapExtent?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
</dlg:radiogroup>
<dlg:textfield dlg:id="txtConfig" dlg:tab-index="11" dlg:left="6" dlg:top="50" dlg:width="258" dlg:height="55" dlg:page="3" dlg:vscroll="true" dlg:multiline="true" dlg:readonly="true"/>
<dlg:textfield dlg:id="txtSource" dlg:tab-index="12" dlg:left="80" dlg:top="82" dlg:width="165" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_TBSOURCE">
<script:event script:event-name="on-textchange" script:macro-name="vnd.sun.star.script:Euro.AutoPilotRun.ToggleGoOnButton?language=Basic&amp;location=application" script:language="Script"/>
</dlg:textfield>
<dlg:button dlg:id="cmdCallSourceDialog" dlg:tab-index="13" dlg:left="249" dlg:top="81" dlg:width="15" dlg:height="14" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_CBSOURCEOPEN" dlg:value="...">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.AutoPilotRun.CallFilePicker?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:checkbox dlg:id="chkRecursive" dlg:tab-index="14" dlg:left="12" dlg:top="98" dlg:width="252" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_CHECKRECURSIVE" dlg:value="chkRecursive" dlg:checked="false"/>
<dlg:checkbox dlg:id="chkTextDocuments" dlg:tab-index="15" dlg:left="12" dlg:top="112" dlg:width="251" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_CHKTEXTDOCUMENTS" dlg:value="chkTextDocuments" dlg:checked="false"/>
<dlg:checkbox dlg:id="chkProtect" dlg:tab-index="16" dlg:left="12" dlg:top="126" dlg:width="251" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_CHKPROTECT" dlg:value="chkProtect" dlg:checked="false"/>
<dlg:textfield dlg:id="txtTarget" dlg:tab-index="17" dlg:left="80" dlg:top="143" dlg:width="165" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_TBTARGET"/>
<dlg:button dlg:id="cmdCallTargetDialog" dlg:tab-index="18" dlg:left="249" dlg:top="142" dlg:width="15" dlg:height="14" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_CBTARGETOPEN" dlg:value="...">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.AutoPilotRun.CallFolderPicker?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:progressmeter dlg:id="ProgressBar" dlg:tab-index="19" dlg:left="85" dlg:top="152" dlg:width="179" dlg:height="10" dlg:page="3"/>
<dlg:text dlg:id="lblHint" dlg:tab-index="20" dlg:left="6" dlg:top="166" dlg:width="258" dlg:height="20" dlg:value="lblHint" dlg:multiline="true"/>
<dlg:text dlg:id="lblTarget" dlg:tab-index="21" dlg:left="6" dlg:top="145" dlg:width="73" dlg:height="8" dlg:page="2" dlg:value="lblTarget"/>
<dlg:text dlg:id="lblSource" dlg:tab-index="22" dlg:left="6" dlg:top="84" dlg:width="73" dlg:height="8" dlg:page="2" dlg:value="lblSource"/>
<dlg:text dlg:id="lblCurProgress" dlg:tab-index="23" dlg:left="16" dlg:top="130" dlg:width="208" dlg:height="8" dlg:page="3"/>
<dlg:text dlg:id="lblRetrieval" dlg:tab-index="24" dlg:left="9" dlg:top="119" dlg:width="216" dlg:height="8" dlg:page="3" dlg:value="lblRetrieval"/>
<dlg:text dlg:id="lblConfig" dlg:tab-index="25" dlg:left="6" dlg:top="39" dlg:width="94" dlg:height="8" dlg:page="3" dlg:value="lblConfig"/>
<dlg:text dlg:id="lblCurDocument" dlg:tab-index="26" dlg:left="16" dlg:top="141" dlg:width="208" dlg:height="8" dlg:page="3"/>
<dlg:img dlg:id="imgPreview" dlg:tab-index="27" dlg:left="6" dlg:top="6" dlg:width="258" dlg:height="26"/>
<dlg:fixedline dlg:id="hlnSelection" dlg:tab-index="28" dlg:left="7" dlg:top="72" dlg:width="258" dlg:height="8" dlg:page="1" dlg:value="hlnSelection"/>
<dlg:fixedline dlg:id="hlnExtent" dlg:tab-index="29" dlg:left="6" dlg:top="39" dlg:width="156" dlg:height="8" dlg:page="2" dlg:value="hlnExtent"/>
<dlg:fixedline dlg:id="hlnProgress" dlg:tab-index="30" dlg:left="6" dlg:top="108" dlg:width="258" dlg:height="8" dlg:page="3" dlg:value="hlnProgress"/>
<dlg:fixedline dlg:id="FixedLine1" dlg:tab-index="31" dlg:left="6" dlg:top="152" dlg:width="258" dlg:height="9" dlg:page="1"/>
<dlg:text dlg:id="lblProgress" dlg:tab-index="32" dlg:left="6" dlg:top="153" dlg:width="79" dlg:height="8" dlg:page="3" dlg:value="lblProgress"/>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="33" dlg:left="6" dlg:top="190" dlg:width="53" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_CBCANCEL" dlg:value="cmdCancel">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.Common.CancelTask?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdHelp" dlg:tab-index="34" dlg:left="63" dlg:top="190" dlg:width="53" dlg:height="14" dlg:value="cmdHelp" dlg:button-type="help"/>
<dlg:button dlg:id="cmdBack" dlg:tab-index="35" dlg:left="155" dlg:top="190" dlg:width="53" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_CBBACK" dlg:value="cmdBack">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.AutoPilotRun.PreviousStep?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdGoOn" dlg:tab-index="36" dlg:left="211" dlg:top="190" dlg:width="53" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGCONVERT_CBGOON" dlg:value="cmdGoOn">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.Common.StartConversion?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="DlgPassword" dlg:left="77" dlg:top="93" dlg:width="310" dlg:height="65" dlg:closeable="true" dlg:moveable="true" dlg:title="DlgPassword">
<dlg:bulletinboard>
<dlg:button dlg:id="cmdGoOn" dlg:tab-index="0" dlg:left="251" dlg:top="6" dlg:width="53" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGPASSWORD_CMDGOON" dlg:value="cmdGoOn">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.Protect.ReadPassword?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="1" dlg:left="251" dlg:top="24" dlg:width="53" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGPASSWORD_CMDCANCEL" dlg:value="cmdCancel">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Euro.Protect.RejectPassword?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdHelp" dlg:tab-index="2" dlg:left="251" dlg:top="45" dlg:width="53" dlg:height="14" dlg:tag="34692" dlg:value="cmdHelp" dlg:button-type="help"/>
<dlg:textfield dlg:id="txtPassword" dlg:tab-index="3" dlg:left="11" dlg:top="18" dlg:width="232" dlg:height="12" dlg:help-url="HID:WIZARDS_HID_DLGPASSWORD_TXTPASSWORD" dlg:echochar="*"/>
<dlg:fixedline dlg:id="hlnPassword" dlg:tab-index="4" dlg:left="6" dlg:top="6" dlg:width="238" dlg:height="8" dlg:value="hlnPassword"/>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,246 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Hard" script:language="StarBasic">REM ***** BASIC *****
Option Explicit
Sub CreateRangeList()
Dim MaxIndex as Integer
MaxIndex = -1
EnableStep1DialogControls(False, False, False)
EmptySelection()
DialogModel.lblSelection.Label = sCURRRANGES
EmptyListbox(DialogModel.lstSelection)
oDocument.CurrentController.Select(oSelRanges)
If (DialogModel.optSheetRanges.State = 1) AND (DialogModel.chkComplete.State &lt;&gt; 1) Then
&apos; Conversion on a sheet?
SetStatusLineText(sStsRELRANGES)
osheet = oDocument.CurrentController.GetActiveSheet
oRanges = osheet.CellFormatRanges.createEnumeration()
MaxIndex = AddSheetRanges(oRanges, MaxIndex, oSheet, False)
If MaxIndex &gt; -1 Then
ReDim Preserve RangeList(MaxIndex)
End If
Else
CreateRangeEnumeration(False)
bRangeListDefined = True
End If
EnableStep1DialogControls(True, True, True)
SetStatusLineText(&quot;&quot;)
End Sub
Sub CreateRangeEnumeration(bAutopilot as Boolean)
Dim i as Integer
Dim MaxIndex as integer
Dim sStatustext as String
MaxIndex = -1
If Not bRangeListDefined Then
&apos; Cellranges are not yet defined
oSheets = oDocument.Sheets
For i = 0 To oSheets.Count-1
oSheet = oSheets.GetbyIndex(i)
If bAutopilot Then
IncreaseStatusValue(SBRELGET/osheets.Count)
Else
sStatustext = ReplaceString(sStsRELSHEETRANGES,Str(i+1),&quot;%1Number%1&quot;)
sStatustext = ReplaceString(sStatusText,oSheets.Count,&quot;%2TotPageCount%2&quot;)
SetStatusLineText(sStatusText)
End If
oRanges = osheet.CellFormatRanges.createEnumeration
MaxIndex = AddSheetRanges(oRanges, MaxIndex, oSheet, bAutopilot)
Next i
Else
If Not bAutoPilot Then
SetStatusLineText(sStsRELRANGES)
&apos; cellranges already defined
For i = 0 To Ubound(RangeList())
If RangeList(i) &lt;&gt; &quot;&quot; Then
AddSingleItemToListBox(DialogModel.lstSelection, RangeList(i))
End If
Next
End If
End If
If MaxIndex &gt; -1 Then
ReDim Preserve RangeList(MaxIndex)
Else
ReDim RangeList()
End If
Rangeindex = MaxIndex
End Sub
Function AddSheetRanges(oRanges as Object, r as Integer, oSheet as Object, bAutopilot)
Dim RangeName as String
Dim AddtoList as Boolean
Dim iCurStep as Integer
Dim MaxIndex as Integer
iCurStep = DialogModel.Step
While oRanges.hasMoreElements
oRange = oRanges.NextElement
AddToList = CheckFormatType(oRange)
If AddToList Then
RangeName = RetrieveRangeNamefromAddress(oRange)
TotCellCount = TotCellCount + CountRangeCells(oRange)
If Not bAutoPilot Then
AddSingleItemToListbox(DialogModel.lstSelection, RangeName)
End If
&apos; The Ranges are only passed to an Array when the whole Document is the basis
&apos; Redimension the RangeList Array if necessary
MaxIndex = Ubound(RangeList())
r = r + 1
If r &gt; MaxIndex Then
MaxIndex = MaxIndex + SBRANGEUBOUND
ReDim Preserve RangeList(MaxIndex)
End If
RangeList(r) = RangeName
End If
Wend
AddSheetRanges = r
End Function
&apos; adds a section to the collection
Sub SelectRange()
Dim i as Integer
Dim RangeName as String
Dim SelItem as String
Dim CurRange as String
Dim SheetRangeName as String
Dim DescriptionList() as String
Dim MaxRangeIndex as Integer
Dim StatusValue as Integer
StatusValue = 0
MaxRangeIndex = Ubound(SelRangeList())
CurSheetName = oSheet.Name
For i = 0 To MaxRangeIndex
SelItem = SelRangeList(i)
&apos; Is the Range already included in the collection?
oRange = RetrieveRangeoutOfRangename(SelItem)
TotCellCount = TotCellCount + CountRangeCells(oRange)
DescriptionList() = ArrayOutofString(SelItem,&quot;.&quot;,1)
SheetRangeName = DeleteStr(DescriptionList(0),&quot;&apos;&quot;)
If SheetRangeName = CurSheetName Then
oSelRanges.InsertbyName(&quot;&quot;,oRange)
End If
IncreaseStatusValue(SBRELGET/MaxRangeIndex)
Next i
End Sub
Sub ConvertThehardWay(ListboxList(), SwitchFormat as Boolean, bRemove as Boolean)
Dim i as Integer
Dim AddCells as Long
Dim OldStatusValue as Single
Dim RangeName as String
Dim LastIndex as Integer
Dim oSelListbox as Object
oSelListbox = DialogConvert.GetControl(&quot;lstSelection&quot;)
Lastindex = Ubound(ListboxList())
If TotCellCount &gt; 0 Then
OldStatusValue = StatusValue
&apos; hard format
For i = 0 To LastIndex
RangeName = ListboxList(i)
oRange = RetrieveRangeoutofRangeName(RangeName)
ConvertCellCurrencies(oRange)
If bRemove Then
If oSelRanges.HasbyName(RangeName) Then
oSelRanges.RemovebyName(RangeName)
oDocument.CurrentController.Select(oSelRanges)
End If
End If
If SwitchFormat Then
If oRange.getPropertyState(&quot;NumberFormat&quot;) &lt;&gt; 1 Then
&apos; Range is hard formatted
SwitchNumberFormat(oRange, oFormats, sEuroSign)
End If
Else
SwitchNumberFormat(oRange, oFormats, sEuroSign)
End If
AddCells = CountRangeCells(oRange)
CurCellCount = AddCells
IncreaseStatusValue((CurCellCount/TotCellCount)*(100-OldStatusValue))
If bRemove Then
RemoveListBoxItemByName(oSelListbox.Model,Rangename)
End If
Next
End If
End Sub
Sub ConvertCellCurrencies(oRange as Object)
Dim oValues as Object
Dim oCells as Object
Dim oCell as Object
oValues = oRange.queryContentCells(com.sun.star.sheet.CellFlags.VALUE)
If (oValues.Count &gt; 0) Then
oCells = oValues.Cells.createEnumeration
While oCells.hasMoreElements
oCell = oCells.nextElement
ModifyObjectValuewithCurrFactor(oCell)
Wend
End If
End Sub
Sub ModifyObjectValuewithCurrFactor(oDocObject as Object)
Dim oDocObjectValue as double
oDocObjectValue = oDocObject.Value
oDocObject.Value = Round(oDocObjectValue/CurrFactor, 2)
End Sub
Function CheckIfRangeisCurrency(FormatObject as Object)
Dim oFormatofObject() as Object
&apos; Retrieve the Format of the Object
On Local Error GoTo NOKEY
oFormatofObject() = oFormats.getByKey(FormatObject.NumberFormat)
On Local Error GoTo 0
CheckIfRangeIsCurrency = INT(oFormatofObject.Type) AND com.sun.star.util.NumberFormat.CURRENCY
Exit Function
NOKEY:
CheckIfRangeisCurrency = False
Resume CLERROR
CLERROR:
End Function
Function CountColumnsForRow(IndexArray() as String, Row as Integer)
Dim i as Integer
Dim NoNulls as Boolean
For i = 1 To Ubound(IndexArray,2)
If IndexArray(Row,i)= &quot;&quot; Then
NoNulls = False
Exit For
End If
Next
CountColumnsForRow = i
End Function
Function CountRangeCells(oRange as Object) As Long
Dim oRangeAddress as Object
Dim LocCellCount as Long
oRangeAddress = oRange.RangeAddress
LocCellCount = (oRangeAddress.EndColumn - oRangeAddress.StartColumn + 1) * (oRangeAddress.EndRow - oRangeAddress.StartRow + 1)
CountRangeCells = LocCellCount
End Function</script:module>

View File

@@ -0,0 +1,683 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Init" script:language="StarBasic">Option Explicit
REM ***** BASIC *****
Public Const SBRANGEUBOUND = 20
Public StyleRangeAssignmentList(SBRANGEUBOUND)as String
Public SelRangeList(SBRANGEUBOUND) as String
Public RangeList(SBRANGEUBOUND) as String
Public UnprotectList() as String
Public FilterNames(2,1) as String
Public bDoUnProtect as Boolean
Public bCancelTask as Boolean
Public sREADY as String
Public sPROTECT as String
Public sCONTINUE as String
Public sSELTEMPL as String
Public sSELCELL as String
Public sCURRRANGES as String
Public sTEMPLATES as String
Public sSOURCEFILE as String
Public sSOURCEDIR as String
Public sTARGETDIR as String
Public sStsPROGRESS as String
Public sStsCELLPROGRSS as String
Public sStsRELRANGES as String
Public sStsRELSHEETRANGES as String
Public sStsREPROTECT as String
Public sMsgSELDIR as String
Public sMsgSELFILE as String
Public sMsgTARGETDIR as String
Public sMsgNOTTHERE as String
Public sMsgDLGTITLE as String
Public sMsgUNPROTECT as String
Public sMsgPWPROTECT as String
Public sMsgWRONGPW as String
Public sMsgSHEETPROTECTED as String
Public sMsgWARNING as String
Public sMsgSHEETSNOPROTECT as String
Public sMsgSHEETNOPROTECT as String
Public sMsgCHOOSECURRENCY as String
Public sMsgPASSWORD as String
Public sMsgOK as String
Public sMsgCANCEL as String
Public sMsgFileInvalid as String
Public sMsgNODIRECTORY as String
Public sMsgDOCISREADONLY as String
Public sMsgFileExists as String
Public sMsgCancelConversion as String
Public sMsgCancelTitle as String
Public sCurrPORTUGUESE as String
Public sCurrDUTCH as String
Public sCurrFRENCH as String
Public sCurrSPANISH as String
Public sCurrITALIAN as String
Public sCurrGERMAN as String
Public sCurrBELGIAN as String
Public sCurrIRISH as String
Public sCurrLUXEMBOURG as String
Public sCurrAUSTRIAN as String
Public sCurrFINNISH as String
Public sCurrGREEK as String
Public sCurrSLOVENIAN as String
Public sCurrCYPRIOT as String
Public sCurrMALTESE as String
Public sCurrSLOVAK as String
Public sCurrESTONIAN as String
Public sCurrLATVIAN as String
Public sCurrLITHUANIAN as String
Public sCurrCROATIAN as String
Public sPrgsRETRIEVAL as String
Public sPrgsCONVERTING as String
Public sPrgsUNPROTECT as String
Public sInclusiveSubDir as String
Public Const SBCOUNTRYCOUNT = 19
Public CurMimeType as String
Public CurCellCount as Long
Public oSheets as Object
Public oStyles as Object
Public oStyle as Object
Public oFormats as Object
Public aSimpleStr as String
Public nSimpleKey as Long
Public aFormat() as Variant
Public oRanges as Object
Public oRange as Object
Public nLanguage as integer
Public nFormatLanguage as integer
Public aCellFormat as Variant
Public oDocument as Object
Public StartCol, StartRow, EndCol, EndRow as String
Public oSheet as Object
Public IntStartCol, IntStartRow, IntEndCol, IntEndRow as integer
Public oSelRanges as Object
Public nFormatType as Integer
Public sFormatCurrency as String
Public sFormatLanguage as String
Public CurSheetName as String
Public oStatusLine as Object
Public Const SBRELGET = 50
Public StatusValue as Single
Public TotCellCount as Long
Public StyleIndex as Integer
Public RangeIndex as Integer
Public CurrIndex as Integer
Public ActLangNumber(1) as Integer
Public CurExtension(2) as String
Public Currfactor as Double
Public CurrSymbolList(2) as String
Public CurrLanguage as String
Public CurrValue(18,5)
Public LangIDValue(18,2,2) as String
Public PreName as String
Public Separator as String
Public BitmapDir as String
Public TypeIndex as Integer, CSIndex as Integer, LangIndex as Integer, FSIndex as Integer
Public oLocale as New com.sun.star.lang.Locale
Public sEuroSign as String
Public oPointer as Object
Public sDocType as String
Public bPreSelected as Boolean
Public bRecursive as Boolean
Public bCancelProtection as Boolean
Public CurrRoundMode as Boolean
Public bRangeListDefined as Boolean
Public bDocHasProtectedSheets as Boolean
Public sGOON as String
Public sHELP as String
Public sCANCEL as String
Dim sEnd as String
Sub InitializeResources()
Dim LocWorkPath as String
With DialogModel
&apos; Strings that are also needed by the Password Dialog
sGoOn = GetResText(&quot;STEP_ZERO_3&quot;)
sHelp = GetResText(&quot;STEP_ZERO_1&quot;)
sCANCEL = GetResText(&quot;MESSAGES_18&quot;)
sEnd = GetResText(&quot;STEP_ZERO_0&quot;)
sPROTECT = GetResText(&quot;STEP_ZERO_5&quot;)
sCONTINUE = GetResText(&quot;STEP_ZERO_7&quot;)
sSELTEMPL = GetResText(&quot;STEP_CONVERTER_6&quot;)
sSELCELL = GetResText(&quot;STEP_CONVERTER_7&quot;)
sCURRRANGES = GetResText(&quot;STEP_CONVERTER_8&quot;)
sTEMPLATES = GetResText(&quot;STEP_CONVERTER_9&quot;)
sStsPROGRESS = GetResText(&quot;STATUSLINE_0&quot;)
sStsCELLPROGRSS = GetResText(&quot;STATUSLINE_1&quot;)
sStsRELSHEETRANGES = GetResText(&quot;STATUSLINE_2&quot;)
sStsRELRANGES = GetResText(&quot;STATUSLINE_3&quot;)
sStsREPROTECT = GetResText(&quot;STATUSLINE_4&quot;)
sREADY = GetResText(&quot;MESSAGES_0&quot;)
sMsgSELDIR = GetResText(&quot;MESSAGES_1&quot;)
sMsgSELFILE = GetResText(&quot;MESSAGES_2&quot;)
sMsgTARGETDIR = GetResText(&quot;MESSAGES_3&quot;)
sMsgNOTTHERE = GetResText(&quot;MESSAGES_4&quot;)
sMsgDLGTITLE = GetResText(&quot;MESSAGES_5&quot;)
sMsgUNPROTECT = GetResText(&quot;MESSAGES_6&quot;)
sMsgPWPROTECT = GetResText(&quot;MESSAGES_7&quot;)
sMsgWRONGPW = GetResText(&quot;MESSAGES_8&quot;)
sMsgSHEETPROTECTED = GetResText(&quot;MESSAGES_9&quot;)
sMsgWARNING = GetResText(&quot;MESSAGES_10&quot;)
sMsgSHEETSNOPROTECT = GetResText(&quot;MESSAGES_11&quot;)
sMsgSHEETNOPROTECT = GetResText(&quot;MESSAGES_12&quot;)
sMsgCHOOSECURRENCY = GetResText(&quot;MESSAGES_15&quot;)
sMsgPASSWORD = GetResText(&quot;MESSAGES_16&quot;)
sMsgOK = GetResText(&quot;MESSAGES_17&quot;)
sMsgCANCEL = GetResText(&quot;MESSAGES_18&quot;)
sMsgFILEINVALID = GetResText(&quot;MESSAGES_19&quot;)
sMsgFILEINVALID = ReplaceString(sMsgFILEINVALID,&quot;%PRODUCTNAME&quot;, GetProductname())
SMsgNODIRECTORY = GetResText(&quot;MESSAGES_20&quot;)
sMsgDOCISREADONLY = GetResText(&quot;MESSAGES_21&quot;)
sMsgFileExists = GetResText(&quot;MESSAGES_22&quot;)
sMsgCancelConversion = GetResText(&quot;MESSAGES_23&quot;)
sMsgCancelTitle = GetResText(&quot;MESSAGES_24&quot;)
sCurrPORTUGUESE = GetResText(&quot;CURRENCIES_0&quot;)
sCurrDUTCH = GetResText(&quot;CURRENCIES_1&quot;)
sCurrFRENCH = GetResText(&quot;CURRENCIES_2&quot;)
sCurrSPANISH = GetResText(&quot;CURRENCIES_3&quot;)
sCurrITALIAN = GetResText(&quot;CURRENCIES_4&quot;)
sCurrGERMAN = GetResText(&quot;CURRENCIES_5&quot;)
sCurrBELGIAN = GetResText(&quot;CURRENCIES_6&quot;)
sCurrIRISH = GetResText(&quot;CURRENCIES_7&quot;)
sCurrLUXEMBOURG = GetResText(&quot;CURRENCIES_8&quot;)
sCurrAUSTRIAN = GetResText(&quot;CURRENCIES_9&quot;)
sCurrFINNISH = GetResText(&quot;CURRENCIES_10&quot;)
sCurrGREEK = GetResText(&quot;CURRENCIES_11&quot;)
sCurrSLOVENIAN = GetResText(&quot;CURRENCIES_12&quot;)
sCurrCYPRIOT = GetResText(&quot;CURRENCIES_13&quot;)
sCurrMALTESE = GetResText(&quot;CURRENCIES_14&quot;)
sCurrSLOVAK = GetResText(&quot;CURRENCIES_15&quot;)
sCurrESTONIAN = GetResText(&quot;CURRENCIES_16&quot;)
sCurrLATVIAN = GetResText(&quot;CURRENCIES_17&quot;)
sCurrLITHUANIAN = GetResText(&quot;CURRENCIES_18&quot;)
sCurrCROATIAN = GetResText(&quot;CURRENCIES_19&quot;)
.cmdCancel.Label = sCANCEL
.cmdHelp.Label = sHELP
.cmdBack.Label = GetResText(&quot;STEP_ZERO_2&quot;)
.cmdGoOn.Label = sGOON
.lblHint.Label = GetResText(&quot;STEP_ZERO_4&quot;)
.lblCurrencies.Label = GetResText(&quot;STEP_ZERO_6&quot;)
.cmdBack.Enabled = False
If .Step = 1 Then
.chkComplete.Label = GetResText(&quot;STEP_CONVERTER_0&quot;)
.hlnSelection.Label = GetResText(&quot;STEP_CONVERTER_1&quot;)
.optCellTemplates.Label = GetResText(&quot;STEP_CONVERTER_2&quot;)
.optSheetRanges.Label = GetResText(&quot;STEP_CONVERTER_3&quot;)
.optDocRanges.Label = GetResText(&quot;STEP_CONVERTER_4&quot;)
.optSelRange.Label = GetResText(&quot;STEP_CONVERTER_5&quot;)
sCURRRANGES = GetResText(&quot;STEP_CONVERTER_8&quot;)
.lblSelection.Label = sCURRRANGES
Else
.lblProgress.Label = sStsPROGRESS
.hlnExtent.Label = GetResText(&quot;STEP_AUTOPILOT_0&quot;)
.optSingleFile.Label = GetResText(&quot;STEP_AUTOPILOT_1&quot;)
.optWholeDir.Label = GetResText(&quot;STEP_AUTOPILOT_2&quot;)
.chkProtect.Label = GetResText(&quot;STEP_AUTOPILOT_7&quot;)
.chkTextDocuments.Label = GetResText(&quot;STEP_AUTOPILOT_10&quot;)
sSOURCEFILE = GetResText(&quot;STEP_AUTOPILOT_3&quot;)
sSOURCEDIR = GetResText(&quot;STEP_AUTOPILOT_4&quot;)
.lblSource.Label = sSOURCEDIR
sInclusiveSubDir = GetResText(&quot;STEP_AUTOPILOT_5&quot;)
.chkRecursive.Label = sInclusiveSubDir
sTARGETDIR = GetResText(&quot;STEP_AUTOPILOT_6&quot;)
.lblTarget.Label = STARGETDIR
LocWorkPath = GetPathSettings(&quot;Work&quot;)
If Not oUcb.Exists(LocWorkPath) Then
ShowNoOfficePathError()
Stop
End If
.txtSource.Text = ConvertfromUrl(LocWorkPath)
SubstDir = .txtSource.Text
.txtTarget.Text = .txtSource.Text
.hlnProgress.Label = GetResText(&quot;STEP_LASTPAGE_0&quot;)
.lblConfig.Label = GetResText(&quot;STEP_LASTPAGE_3&quot;)
sPrgsRETRIEVAL = GetResText(&quot;STEP_LASTPAGE_1&quot;)
sPrgsCONVERTING = GetResText(&quot;STEP_LASTPAGE_2&quot;)
sPrgsUNPROTECT = GetResText(&quot;STEP_LASTPAGE_4&quot;)
End If
End With
End Sub
Sub InitializeLanguages()
sEuroSign = chr(8364)
&apos; CURRENCIES_PORTUGUESE
LangIDValue(0,0,0) = &quot;pt&quot;
LangIDValue(0,0,1) = &quot;&quot;
LangIDValue(0,0,2) = &quot;-816&quot;
&apos; CURRENCIES_DUTCH
LangIDValue(1,0,0) = &quot;nl&quot;
LangIDValue(1,0,1) = &quot;&quot;
LangIDValue(1,0,2) = &quot;-413&quot;
&apos; CURRENCIES_FRENCH
LangIDValue(2,0,0) = &quot;fr&quot;
LangIDValue(2,0,1) = &quot;&quot;
LangIDValue(2,0,2) = &quot;-40C&quot;
&apos; CURRENCIES_SPANISH
LangIDValue(3,0,0) = &quot;es&quot;
LangIDValue(3,0,1) = &quot;&quot;
LangIDValue(3,0,2) = &quot;-40A&quot;
&apos;Spanish modern
LangIDValue(3,1,0) = &quot;es&quot;
LangIDValue(3,1,1) = &quot;&quot;
LangIDValue(3,1,2) = &quot;-C0A&quot;
&apos;Spanish katalanic
LangIDValue(3,2,0) = &quot;es&quot;
LangIDValue(3,2,1) = &quot;&quot;
LangIDValue(3,2,2) = &quot;-403&quot;
&apos; CURRENCIES_ITALIAN
LangIDValue(4,0,0) = &quot;it&quot;
LangIDValue(4,0,1) = &quot;&quot;
LangIDValue(4,0,2) = &quot;-410&quot;
&apos; CURRENCIES_GERMAN
LangIDValue(5,0,0) = &quot;de&quot;
LangIDValue(5,0,1) = &quot;DE&quot;
LangIDValue(5,0,2) = &quot;-407&quot;
&apos; CURRENCIES_BELGIAN
LangIDValue(6,0,0) = &quot;fr&quot;
LangIDValue(6,0,1) = &quot;BE&quot;
LangIDValue(6,0,2) = &quot;-80C&quot;
LangIDValue(6,1,0) = &quot;nl&quot;
LangIDValue(6,1,1) = &quot;BE&quot;
LangIDValue(6,1,2) = &quot;-813&quot;
&apos; CURRENCIES_IRISH
LangIDValue(7,0,0) = &quot;en&quot;
LangIDValue(7,0,1) = &quot;IE&quot;
LangIDValue(7,0,2) = &quot;-1809&quot;
LangIDValue(7,1,0) = &quot;ga&quot;
LangIDValue(7,1,1) = &quot;IE&quot;
LangIDValue(7,1,2) = &quot;-83C&quot;
&apos; CURRENCIES_LUXEMBOURG
LangIDValue(8,0,0) = &quot;fr&quot;
LangIDValue(8,0,1) = &quot;LU&quot;
LangIDValue(8,0,2) = &quot;-140C&quot;
LangIDValue(8,1,0) = &quot;de&quot;
LangIDValue(8,1,1) = &quot;LU&quot;
LangIDValue(8,1,2) = &quot;-1007&quot;
&apos; CURRENCIES_AUSTRIAN
LangIDValue(9,0,0) = &quot;de&quot;
LangIDValue(9,0,1) = &quot;AT&quot;
LangIDValue(9,0,2) = &quot;-C07&quot;
&apos; CURRENCIES_FINNISH
LangIDValue(10,0,0) = &quot;fi&quot;
LangIDValue(10,0,1) = &quot;FI&quot;
LangIDValue(10,0,2) = &quot;-40B&quot;
LangIDValue(10,1,0) = &quot;sv&quot;
LangIDValue(10,1,1) = &quot;FI&quot;
LangIDValue(10,1,2) = &quot;-81D&quot;
&apos; CURRENCIES_GREEK
LangIDValue(11,0,0) = &quot;el&quot;
LangIDValue(11,0,1) = &quot;GR&quot;
LangIDValue(11,0,2) = &quot;-408&quot;
&apos; CURRENCIES_SLOVENIAN
LangIDValue(12,0,0) = &quot;sl&quot;
LangIDValue(12,0,1) = &quot;SI&quot;
LangIDValue(12,0,2) = &quot;-424&quot;
&apos; CURRENCIES_CYPRIOT
LangIDValue(13,0,0) = &quot;el&quot;
LangIDValue(13,0,1) = &quot;CY&quot;
LangIDValue(13,0,2) = &quot;-408&quot;
&apos; CURRENCIES_MALTESE
LangIDValue(14,0,0) = &quot;mt&quot;
LangIDValue(14,0,1) = &quot;MT&quot;
LangIDValue(14,0,2) = &quot;-43A&quot;
&apos; CURRENCIES_SLOVAK
LangIDValue(15,0,0) = &quot;sk&quot;
LangIDValue(15,0,1) = &quot;SK&quot;
LangIDValue(15,0,2) = &quot;-41B&quot;
&apos; CURRENCIES_ESTONIAN
LangIDValue(16,0,0) = &quot;et&quot;
LangIDValue(16,0,1) = &quot;ET&quot;
LangIDValue(16,0,2) = &quot;-425&quot;
&apos; CURRENCIES_LATVIAN
LangIDValue(17,0,0) = &quot;lv&quot;
LangIDValue(17,0,1) = &quot;LV&quot;
LangIDValue(17,0,2) = &quot;-426&quot;
&apos; and Latgalian
LangIDValue(17,1,0) = &quot;ltg&quot;
LangIDValue(17,1,1) = &quot;LV&quot;
LangIDValue(17,1,2) = &quot;-64B&quot;
&apos; CURRENCIES_LITHUANIAN
LangIDValue(18,0,0) = &quot;lt&quot;
LangIDValue(18,0,1) = &quot;LT&quot;
LangIDValue(18,0,2) = &quot;-427&quot;
&apos; CURRENCIES_CROATIAN
LangIDValue(19,0,0) = &quot;hr&quot;
LangIDValue(19,0,1) = &quot;HR&quot;
LangIDValue(19,0,2) = &quot;-41A&quot;
End Sub
Sub InitializeCurrencies()
Dim i as Integer
GoOn = True
CurrValue(0,0) = sCurrPORTUGUESE
&apos; real conversion rate
CurrValue(0,1) = 200.482
&apos; rounded conversion rate
CurrValue(0,2) = 200
CurrValue(0,3) = &quot;Esc.&quot;
CurrValue(0,4) = &quot;Esc.&quot;
CurrValue(0,5) = &quot;PTE&quot;
CurrValue(1,0) = sCurrDUTCH
&apos; real conversion rate
CurrValue(1,1) = 2.20371
&apos; rounded conversion rate
CurrValue(1,2) = 2
CurrValue(1,3) = &quot;F&quot;
CurrValue(1,4) = &quot;fl&quot;
CurrValue(1,5) = &quot;NLG&quot;
CurrValue(2,0) = sCurrFRENCH
&apos; real conversion rate
CurrValue(2,1) = 6.55957
&apos; rounded conversion rate
CurrValue(2,2) = 7
CurrValue(2,3) = &quot;F&quot;
CurrValue(2,4) = &quot;F&quot;
CurrValue(2,5) = &quot;FRF&quot;
CurrValue(3,0) = sCurrSPANISH
&apos; real conversion rate
CurrValue(3,1) = 166.386
&apos; rounded conversion rate
CurrValue(3,2) = 170
CurrValue(3,3) = &quot;Pts&quot;
CurrValue(3,4) = &quot;Pts&quot;
CurrValue(3,5) = &quot;ESP&quot;
CurrValue(4,0) = sCurrITALIAN
&apos; real conversion rate
CurrValue(4,1) = 1936.27
&apos; rounded conversion rate
CurrValue(4,2) = 2000
CurrValue(4,3) = &quot;L.&quot;
CurrValue(4,4) = &quot;L.&quot;
CurrValue(4,5) = &quot;ITL&quot;
CurrValue(5,0) = sCurrGERMAN
&apos; real conversion rate
CurrValue(5,1) = 1.95583
&apos; rounded conversion rate
CurrValue(5,2) = 2
CurrValue(5,3) = &quot;DM&quot;
CurrValue(5,4) = &quot;DM&quot;
CurrValue(5,5) = &quot;DEM&quot;
CurrValue(6,0) = sCurrBELGIAN
&apos; real conversion rate
CurrValue(6,1) = 40.3399
&apos; rounded conversion rate
CurrValue(6,2) = 40
CurrValue(6,3) = &quot;FB&quot;
CurrValue(6,4) = &quot;BF&quot;
CurrValue(6,5) = &quot;BEF&quot;
CurrValue(7,0) = sCurrIRISH
&apos; real conversion rate
CurrValue(7,1) = 0.787564
&apos; rounded conversion rate
CurrValue(7,2) = 0.8
CurrValue(7,3) = &quot;IR£&quot;
CurrValue(7,4) = &quot;£&quot;
CurrValue(7,5) = &quot;IEP&quot;
CurrValue(8,0) = sCurrLUXEMBOURG
&apos; real conversion rate
CurrValue(8,1) = 40.3399
&apos; rounded conversion rate
CurrValue(8,2) = 40
CurrValue(8,3) = &quot;F&quot;
CurrValue(8,4) = &quot;F&quot;
CurrValue(8,5) = &quot;LUF&quot;
CurrValue(9,0) = sCurrAUSTRIAN
&apos; real conversion rate
CurrValue(9,1) = 13.7603
&apos; rounded conversion rate
CurrValue(9,2) = 15
CurrValue(9,3) = &quot;öS&quot;
CurrValue(9,4) = &quot;S&quot;
CurrValue(9,5) = &quot;ATS&quot;
CurrValue(10,0) = sCurrFINNISH
&apos; real conversion rate
CurrValue(10,1) = 5.94573
&apos; rounded conversion rate
CurrValue(10,2) = 6
CurrValue(10,3) = &quot;mk&quot;
CurrValue(10,4) = &quot;mk&quot;
CurrValue(10,5) = &quot;FIM&quot;
CurrValue(11,0) = sCurrGREEK
&apos; real conversion rate
CurrValue(11,1) = 340.750
&apos; rounded conversion rate
CurrValue(11,2) = 400
CurrValue(11,3) = chr(916) &amp; chr(961) &amp; chr(967)
CurrValue(11,4) = chr(916) &amp; chr(961) &amp; chr(967)
CurrValue(11,5) = &quot;GRD&quot;
CurrValue(12,0) = sCurrSLOVENIAN
&apos; real conversion rate
CurrValue(12,1) = 239.64
&apos; rounded conversion rate
CurrValue(12,2) = 240
CurrValue(12,3) = &quot;SIT&quot;
CurrValue(12,4) = &quot;SIT&quot;
CurrValue(12,5) = &quot;SIT&quot;
CurrValue(13,0) = sCurrCYPRIOT
&apos; real conversion rate
CurrValue(13,1) = 0.585274
&apos; rounded conversion rate
CurrValue(13,2) = 0.6
CurrValue(13,3) = &quot;£C&quot;
CurrValue(13,4) = &quot;£&quot;
CurrValue(13,5) = &quot;CYP&quot;
CurrValue(14,0) = sCurrMALTESE
&apos; real conversion rate
CurrValue(14,1) = 0.429300
&apos; rounded conversion rate
CurrValue(14,2) = 0.4
CurrValue(14,3) = chr(8356)
CurrValue(14,4) = &quot;Lm&quot;
CurrValue(14,5) = &quot;MTL&quot;
CurrValue(15,0) = sCurrSLOVAK
&apos; real conversion rate
CurrValue(15,1) = 30.1260
&apos; rounded conversion rate
CurrValue(15,2) = 30
CurrValue(15,3) = &quot;Sk&quot;
CurrValue(15,4) = &quot;Sk&quot;
CurrValue(15,5) = &quot;SKK&quot;
CurrValue(16,0) = sCurrESTONIAN
&apos; real conversion rate
CurrValue(16,1) = 15.6466
&apos; rounded conversion rate
CurrValue(16,2) = 16
CurrValue(16,3) = &quot;kr&quot;
CurrValue(16,4) = &quot;kr&quot;
CurrValue(16,5) = &quot;EEK&quot;
CurrValue(17,0) = sCurrLATVIAN
&apos; real conversion rate
CurrValue(17,1) = 0.702804
&apos; rounded conversion rate
CurrValue(17,2) = 0.7
CurrValue(17,3) = &quot;Ls&quot;
CurrValue(17,4) = &quot;Ls&quot;
CurrValue(17,5) = &quot;LVL&quot;
CurrValue(18,0) = sCurrLITHUANIAN
&apos; real conversion rate
CurrValue(18,1) = 3.45280
&apos; rounded conversion rate
CurrValue(18,2) = 3.5
CurrValue(18,3) = &quot;Lt&quot;
CurrValue(18,4) = &quot;Lt&quot;
CurrValue(18,5) = &quot;LTL&quot;
CurrValue(19,0) = sCurrCROATIAN
&apos; real conversion rate
CurrValue(19,1) = 7.53450
&apos; rounded conversion rate
CurrValue(19,2) = 7.5
CurrValue(19,3) = &quot;kn&quot;
CurrValue(19,4) = &quot;kn&quot;
CurrValue(19,5) = &quot;HRK&quot;
i = -1
CurrSymbolList(0) = &quot;&quot;
CurrSymbolList(1) = &quot;&quot;
InitializeCurrencyValues(CurrIndex)
End Sub
Sub InitializeControls()
If CurrIndex = -1 Then
If DialogModel.Step = 1 Then
EnableStep1DialogControls(True, False, False)
ElseIf DialogModel.Step = 2 Then
EnableStep2DialogControls(True)
End If
End If
End Sub
Sub InitializeConverter(oLocale, iDialogPage as Integer)
Dim Isthere as Boolean
bCancelProtection = False
bRangeListDefined = False
PWIndex = -1
If iDialogPage = 1 Then
ToggleWindow(False)
sDocType = Tools.GetDocumentType(ThisComponent)
If sDocType = &quot;sCalc&quot; Then
bDocHasProtectedSheets = CheckSheetProtection(oSheets)
End If
oStatusline = ThisComponent.GetCurrentController.GetFrame.CreateStatusIndicator()
End If
DialogConvert = LoadDialog(&quot;Euro&quot;, &quot;DlgConvert&quot;)
DialogModel = DialogConvert.Model
DialogPassword = LoadDialog(&quot;Euro&quot;, &quot;DlgPassword&quot;)
PasswordModel = DialogPassword.Model
DialogModel.Step = iDialogPage
InitializeResources()
InitializeLanguages()
InitializeLocales(oLocale)
InitializeCurrencies()
InitializeControls()
BitmapDir = GetOfficeSubPath(&quot;Template&quot;, &quot;../wizard/bitmap&quot;)
If BitmapDir = &quot;&quot; Then
Stop
End If
FillUpCurrencyListbox()
DialogModel.imgPreview.ImageUrl = BitmapDir &amp; &quot;euro_&quot; &amp; DialogModel.Step &amp; &quot;.png&quot;
DialogConvert.Title = sMsgDLGTITLE
DialogModel.cmdGoOn.DefaultButton = True
If iDialogPage = 1 Then
ToggleWindow(True)
End If
End Sub
Sub InitializeCurrencyValues(CurrIndex)
If CurrIndex &lt;&gt; -1 Then
CurrLanguage = CurrValue(CurrIndex,0)
CurrFactor = CurrValue(CurrIndex,1)
CurrSymbolList(0) = CurrValue(CurrIndex,3)
CurrSymbolList(1) = CurrValue(CurrIndex,4)
CurrSymbolList(2) = CurrValue(CurrIndex,5)
End If
End Sub
Function InitializeLocales(oLocale) as Boolean
Dim i as Integer, n as Integer, m as Integer
Dim sLanguage as String, sCountry as String
Dim bTakeThisLocale as Boolean
sLanguage = oLocale.Language
sCountry = oLocale.Country
For n = 0 To SBCOUNTRYCOUNT - 1
For m = 0 TO 1
If DialogModel.Step = 2 Then
bTakeThisLocale = LangIDValue(n,m,0) = sLanguage
Else
bTakeThisLocale = LangIDValue(n,m,0) = sLanguage
End If
If bTakeThisLocale Then
CurrIndex = n
For i = 0 To 2
CurExtension(i) = LangIDValue(CurrIndex,i,2)
Next i
InitializeLocales = True
Exit Function
End If
Next m
Next n
CurrIndex = -1
InitializeLocales = False
End Function
</script:module>

View File

@@ -0,0 +1,192 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Protect" script:language="StarBasic">REM ***** BASIC *****
Option Explicit
Public PWIndex as Integer
Function UnprotectSheetsWithPassWord(oSheets as Object, bDoUnProtect as Boolean)
Dim i as Integer
Dim MaxIndex as Integer
Dim iMsgResult as Integer
PWIndex = -1
If bDocHasProtectedSheets Then
If Not bDoUnprotect Then
&apos; At First query if sheets shall generally be unprotected
iMsgResult = Msgbox(sMsgUNPROTECT,36,sMsgDLGTITLE)
bDoUnProtect = iMsgResult = 6
End If
If bDoUnProtect Then
MaxIndex = oSheets.Count-1
For i = 0 To MaxIndex
bDocHasProtectedSheets = Not UnprotectSheet(oSheets(i))
If bDocHasProtectedSheets Then
ReprotectSheets()
Exit For
End If
Next i
If PWIndex = -1 Then
ReDim UnProtectList() as String
Else
ReDim Preserve UnProtectList(PWIndex) as String
End If
Else
Msgbox (sMsgSHEETSNOPROTECT, 64, sMsgDLGTITLE)
End If
End If
UnProtectSheetsWithPassword = bDocHasProtectedSheets
End Function
Function UnprotectSheet(oListSheet as Object)
Dim ListSheetName as String
Dim sStatustext as String
Dim i as Integer
Dim bOneSheetIsUnprotected as Boolean
i = -1
ListSheetName = oListSheet.Name
If oListSheet.IsProtected Then
oListSheet.Unprotect(&quot;&quot;)
If oListSheet.IsProtected Then
&apos; Sheet is protected by a Password
bOneSheetIsUnProtected = UnprotectSheetWithDialog(oListSheet, ListSheetName)
UnProtectSheet() = bOneSheetIsUnProtected
Else
&apos; The Sheet could be unprotected without a password
AddSheettoUnprotectionlist(ListSheetName,&quot;&quot;)
UnprotectSheet() = True
End If
Else
UnprotectSheet() = True
End If
End Function
Function UnprotectSheetWithDialog(oListSheet as Object, ListSheetName as String) as Boolean
Dim PWIsCorrect as Boolean
Dim QueryText as String
oDocument.CurrentController.SetActiveSheet(oListSheet)
QueryText = ReplaceString(sMsgPWPROTECT,&quot;&apos;&quot; &amp; ListSheetName &amp; &quot;&apos;&quot;, &quot;%1TableName%1&quot;)
&apos;&quot;Please insert the password to unprotect the sheet &apos;&quot; &amp; ListSheetName&apos;&quot;
Do
ExecutePasswordDialog(QueryText)
If bCancelProtection Then
bCancelProtection = False
Msgbox (sMsgSHEETSNOPROTECT, 64, sMsgDLGTITLE)
UnprotectSheetWithDialog() = False
exit Function
End If
oListSheet.Unprotect(Password)
If oListSheet.IsProtected Then
PWIsCorrect = False
Msgbox (sMsgWRONGPW, 64, sMsgDLGTITLE)
Else
&apos; Sheet could be unprotected
AddSheettoUnprotectionlist(ListSheetName,Password)
PWIsCorrect = True
End If
Loop Until PWIsCorrect
UnprotectSheetWithDialog() = True
End Function
Sub ExecutePasswordDialog(QueryText as String)
With PasswordModel
.Title = QueryText
.hlnPassword.Label = sMsgPASSWORD
.cmdCancel.Label = sMsgCANCEL
.cmdHelp.Label = sHELP
.cmdGoOn.Label = sMsgOK
.cmdGoOn.DefaultButton = True
End With
DialogPassword.Execute
End Sub
Sub ReadPassword()
Password = PasswordModel.txtPassword.Text
DialogPassword.EndExecute
End Sub
Sub RejectPassword()
bCancelProtection = True
DialogPassword.EndExecute
End Sub
&apos; Reprotects the previously protected sheets
&apos; The password information is stored in the List &apos;UnProtectList()&apos;
Sub ReprotectSheets()
Dim i as Integer
Dim oProtectSheet as Object
Dim ProtectList() as String
Dim SheetName as String
Dim SheetPassword as String
If PWIndex &gt; -1 Then
SetStatusLineText(sStsREPROTECT)
For i = 0 To PWIndex
ProtectList() = ArrayOutOfString(UnProtectList(i),&quot;;&quot;)
SheetName = ProtectList(0)
If Ubound(ProtectList()) &gt; 0 Then
SheetPassWord = ProtectList(1)
Else
SheetPassword = &quot;&quot;
End If
oProtectSheet = oSheets.GetbyName(SheetName)
If Not oProtectSheet.IsProtected Then
oProtectSheet.Protect(SheetPassWord)
End If
Next i
SetStatusLineText(&quot;&quot;)
End If
PWIndex = -1
ReDim UnProtectList()
End Sub
&apos; Add a Sheet to the list of sheets that finally have to be
&apos; unprotected
Sub AddSheettoUnprotectionlist(ListSheetName as String, Password as String)
Dim MaxIndex as Integer
MaxIndex = Ubound(UnProtectList())
PWIndex = PWIndex + 1
If PWIndex &gt; MaxIndex Then
ReDim Preserve UnprotectList(MaxIndex + SBRANGEUBOUND)
End If
UnprotectList(PWIndex) = ListSheetName &amp; &quot;;&quot; &amp; Password
End Sub
Function CheckSheetProtection(oSheets as Object) as Boolean
Dim MaxIndex as Integer
Dim i as Integer
Dim bProtectedSheets as Boolean
bProtectedSheets = False
MaxIndex = oSheets.Count-1
For i = 0 To MaxIndex
bProtectedSheets = oSheets(i).IsProtected
If bProtectedSheets Then
CheckSheetProtection() = True
Exit Function
End If
Next i
CheckSheetProtection() = False
End Function</script:module>

View File

@@ -0,0 +1,256 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Soft" script:language="StarBasic">Option Explicit
REM ***** BASIC *****
Sub CreateStyleEnumeration()
EmptySelection()
EmptyListbox(DialogModel.lstSelection)
CurSheetName = oDocument.CurrentController.GetActiveSheet.Name
MakeStyleEnumeration(False)
DialogModel.lblSelection.Label = sTEMPLATES
End Sub
Sub MakeStyleEnumeration(bAddToListbox as Boolean)
Dim m as integer
Dim aStyleFormat as Object
Dim Stylename as String
StyleIndex = -1
oStyles = oDocument.StyleFamilies.GetbyIndex(0)
For m = 0 To oStyles.count-1
oStyle = oStyles.GetbyIndex(m)
StyleName = oStyle.Name
If CheckFormatType(oStyle) Then
If Not bAddToListBox Then
AddSingleItemToListbox(DialogModel.lstSelection, Stylename)
Else
SwitchNumberFormat(ostyle, oFormats, sEuroSign)
End If
StyleIndex = StyleIndex + 1
If StyleIndex &gt; Ubound(StyleRangeAssignMentList()) Then
Redim Preserve StyleRangeAssignmentList(StyleIndex)
End If
StyleRangeAssignmentList(StyleIndex) = &quot;&lt;STYLENAME&gt;&quot; &amp; Stylename &amp; &quot;&lt;/STYLENAME&gt;&quot; &amp; _
&quot;&lt;DEFINED&gt;FALSE&lt;/DEFINED&gt;&quot; &amp; &quot;&lt;RANGES&gt;&lt;/RANGES&gt;&quot; &amp;_
&quot;&lt;CELLCOUNT&gt;0&lt;/CELLCOUNT&gt;&quot; &amp;_
&quot;&lt;SELECTED&gt;FALSE&lt;/SELECTED&gt;&quot;
End If
Next m
If StyleIndex &gt; -1 Then
Redim Preserve StyleRangeAssignmentList(StyleIndex)
Else
ReDim StyleRangeAssignmentList()
End If
End Sub
Sub AssignRangestoStyle(StyleList(), SelList())
Dim i as Integer
Dim n as integer
Dim LastIndex as Integer
Dim CurStyleName as String
Dim AssignString as String
LastIndex = Ubound(StyleList())
StatusValue = 0
SetStatusLineText(sStsRELRANGES)
For i = 0 To LastIndex
CurStyleName = StyleList(i)
n = PartStringInArray(StyleRangeAssignmentList(), CurStyleName, 0)
AssignString = StyleRangeAssignmentlist(n)
If IndexInArray(CurStyleName, SelList()) &lt;&gt; -1 Then
&apos; Style is selected
If FindPartString(AssignString, &quot;&lt;DEFINED&gt;&quot;, &quot;&lt;/DEFINED&gt;&quot;, 1) = &quot;FALSE&quot; Then
AssignString = ReplaceString(AssignString, &quot;&lt;SELECTED&gt;TRUE&lt;/SELECTED&gt;&quot;, &quot;&lt;SELECTED&gt;FALSE&lt;/SELECTED&gt;&quot;)
AssignCellFormatRanges(n, AssignString, CurStyleName)
End If
Else
&apos; Style is not selected
If FindPartString(AssignString, &quot;&lt;SELECTED&gt;&quot;, &quot;&lt;/SELECTED&gt;&quot;, 1) = &quot;FALSE&quot; Then
DeselectStyle(CurStyleName, n)
End If
End If
IncreaseStatusvalue(SBRELGET/(LastIndex+1))
Next i
End Sub
Sub AssignCellFormatRanges(n as Integer, AssignString as String, CurStyleName as String)
Dim oRanges() as Object
Dim oRange as Object
Dim oRangeAddress
Dim oSheet as Object
Dim StyleCellCount as Long
Dim i as Integer
Dim MaxIndex as Integer
Dim RangeString as String
Dim SheetName as String
Dim RangeName as String
Dim CellCountString as String
StyleCellCount = 0
RangeString = &quot;&lt;RANGES&gt;&quot;
MaxIndex = oSheets.Count-1
For i = 0 To MaxIndex
oSheet = oSheets(i)
SheetName = oSheet.Name
oRanges = osheet.CellFormatRanges.CreateEnumeration
While oRanges.hasMoreElements
oRange = oRanges.NextElement
If oRange.getPropertyState(&quot;NumberFormat&quot;) = 1 Then
If oRange.CellStyle = CurStyleName Then
oRangeAddress = oRange.RangeAddress
RangeName = RetrieveRangeNamefromAddress(oRange)
RangeString = RangeString &amp; RangeName &amp; &quot;,&quot;
StyleCellCount = StyleCellCount + CountRangeCells(oRange)
End If
End If
Wend
Next i
If StyleCellCount &gt; 0 Then
TotCellCount = TotCellCount + StyleCellCount
RangeString = RTrimStr(RangeString,&quot;,&quot;)
RangeString = RangeString &amp; &quot;&lt;/RANGES&gt;&quot;
CellCountString = &quot;&lt;CELLCOUNT&gt;&quot; &amp; StyleCellCount &amp; &quot;&lt;/CELLCOUNT&quot;
AssignString = ReplaceString(AssignString, RangeString,&quot;&lt;RANGES&gt;&lt;/RANGES&gt;&quot;)
AssignString = ReplaceString(AssignString, CellCountString,&quot;&lt;CELLCOUNT&gt;0&lt;/CELLCOUNT&gt;&quot;)
End If
AssignString = ReplaceString(AssignString, &quot;&lt;DEFINED&gt;TRUE&lt;/DEFINED&gt;&quot;, &quot;&lt;DEFINED&gt;FALSE&lt;/DEFINED&gt;&quot;)
StyleRangeAssignmentList(n) = AssignString
End Sub
&apos; deletes a styletemplate from the Collection that selects the ranges
Sub DeselectStyle(DeSelStyleName as String, n as Integer)
Dim i as Integer
Dim RangeName as String
Dim SelectString as String
Dim AssignString as String
Dim StyleRangeList() as String
Dim MaxIndex as Integer
SelectString =&quot;&lt;SELECTED&gt;FALSE&lt;/SELECTED&gt;&quot;
AssignString = StyleRangeAssignmentList(n)
RangeString = FindPartString(AssignString,&quot;&lt;RANGES&gt;&quot;,&quot;&lt;/RANGES&gt;&quot;,1)
StyleRangeList() = ArrayoutofString(RangeString,&quot;,&quot;)
MaxIndex = Ubound(StyleRangeList())
For i = 0 To MaxIndex
RangeName = StyleRangeList(i)
If oSelRanges.HasbyName(RangeName) Then
oSelRanges.RemovebyName(RangeName)
End If
Next i
AssignString = ReplaceString(AssignString, &quot;&lt;SELECTED&gt;FALSE&lt;/SELECTED&gt;&quot;, &quot;&lt;SELECTED&gt;TRUE&lt;/SELECTED&gt;&quot;)
StyleRangeAssignmentList(n) = AssignString
End Sub
Function RetrieveRangeNamefromAddress(oRange as Object) as String
Dim Rangename as String
Dim oAddressRanges as Object
oAddressRanges = oDocument.createInstance(&quot;com.sun.star.sheet.SheetCellRanges&quot;)
oAddressRanges.InsertbyName(&quot;&quot;,oRange)
Rangename = oAddressRanges.RangeAddressesasString
&apos; Msgbox &quot;Adresse: &quot; &amp; oRangeAddress.StartColumn &amp; &quot; ; &quot; &amp; oRangeAddress.EndColumn &amp; &quot; ; &quot; &amp; oRangeAddress.StartRow &amp; &quot; ; &quot; &amp; oRangeAddress.EndRow &amp; chr(13) &amp; RangeName
&apos; oAddressRanges.RemovebyName(RangeName)
RetrieveRangeNamefromAddress = Rangename
End Function
&apos; creates a sheet object from an according sectionname
Function RetrieveSheetoutofRangeName(TableText as String)
Dim DescriptionList() as String
Dim SheetName as String
Dim MaxIndex as integer
&apos; find out in which sheet the range is
DescriptionList() = ArrayOutofString(TableText,&quot;.&quot;,MaxIndex)
SheetName = DescriptionList(0)
SheetName = DeleteStr(SheetName,&quot;&apos;&quot;)
&apos; set the viewcursor on this sheet
RetrieveSheetoutofRangeName = oSheets.GetbyName(SheetName)
End Function
&apos; creates a rangeobject from an according rangename
Function RetrieveRangeoutofRangeName(TableText as String)
oSheet = RetrieveSheetoutofRangeName(TableText)
oRange = oSheet.GetCellRangebyName(TableText)
RetrieveRangeoutofRangeName = oRange
End Function
Sub ConvertTheSoftWay(StyleList(), bDeSelect as Boolean)
Dim i as Integer
Dim l as Integer
Dim s as Integer
Dim n as Integer
Dim CurStyleName as String
Dim RangeName as String
Dim OldStatusValue as Integer
Dim LastIndex as Integer
Dim oSelListbox as Object
Dim StyleRangeList() as String
Dim MaxIndex as Integer
oSelListbox = DialogConvert.GetControl(&quot;lstSelection&quot;)
LastIndex = Ubound(StyleList())
OldStatusValue = StatusValue
For i = 0 To LastIndex
CurStyleName = StyleList(i)
oStyle = oStyles.GetbyName(CurStyleName)
StyleRangeList() = GetAssignedRanges(CurStyleName, n)
MaxIndex = Ubound(StyleRangeList())
For s = 0 To MaxIndex
RangeName = StyleRangeList(s)
oRange = RetrieveRangeoutofRangeName(RangeName)
If oRange.getPropertyState(&quot;NumberFormat&quot;) = 1 Then
&apos; Range is hard formatted
ConvertCellCurrencies(oRange)
CurCellCount = CountRangeCells(oRange)
End If
IncreaseStatusvalue((CurCellCount/TotCellCount)*(95-OldStatusValue))
If bDeSelect Then
&apos; Note: On Problems see Bug #73157
If oSelRanges.HasbyName(RangeName) Then
oSelRanges.RemovebyName(RangeName)
oDocument.CurrentController.Select(oSelRanges)
End If
End If
Next s
SwitchNumberFormat(ostyle, oFormats, sEuroSign)
StyleRangeAssignmentList(n) = &quot;&quot;
l = GetItemPos(oSelListBox.Model, CurStyleName)
oSelListbox.RemoveItems(l,1)
Next
End Sub
Function GetAssignedRanges(CurStyleName as String, n as Integer)
Dim StyleRangeList() as String
Dim RangeString as String
Dim AssignString as String
n = PartStringInArray(StyleRangeAssignmentList(), CurStyleName, 0)
If n &lt;&gt; -1 Then
AssignString = StyleRangeAssignmentList(n)
RangeString = FindPartString(AssignString,&quot;&lt;RANGES&gt;&quot;, &quot;&lt;/RANGES&gt;&quot;,1)
If RangeString &lt;&gt; &quot;&quot; Then
StyleRangeList() = ArrayoutofString(RangeString,&quot;,&quot;)
End If
End If
GetAssignedRanges() = StyleRangeList()
End Function</script:module>

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Writer" script:language="StarBasic">REM ***** BASIC *****
Sub ConvertWriterTables()
Dim CellString as String
Dim oParagraphs as Object
Dim oPara as Object
Dim i as integer
Dim sCellNames()
Dim oCell as Object
oParagraphs = oDocument.Text.CreateEnumeration
While oParagraphs.HasMoreElements
oPara = oParagraphs.NextElement
If NOT oPara.supportsService(&quot;com.sun.star.text.Paragraph&quot;) Then
&apos; Note: As cells might be split or merged
&apos; you cannot refer to them via their indices
sCellNames = oPara.CellNames
For i = 0 To Ubound(sCellNames)
If sCellNames(i) &lt;&gt; &quot;&quot; Then
oCell = oPara.getCellByName(sCellNames(i))
If CheckFormatType(oCell) Then
SwitchNumberFormat(oCell, oFormats, sEuroSign)
ModifyObjectValuewithCurrFactor(oCell)
End If
End If
Next
End If
Wend
End Sub
Sub ModifyObjectValuewithCurrFactor(oDocObject as Object)
oDocObjectValue = oDocObject.Value
oDocObject.Value = oDocObjectValue/CurrFactor
End Sub
Sub ConvertTextFields()
Dim oTextFields as Object
Dim oTextField as Object
Dim FieldValue
Dim oDocObjectValue as double
Dim InstanceNames(500) as String
Dim CurInstanceName as String
Dim MaxIndex as Integer
MaxIndex = 0
oTextfields = oDocument.getTextfields.CreateEnumeration
While oTextFields.hasmoreElements
oTextField = oTextFields.NextElement
If oTextField.PropertySetInfo.HasPropertybyName(&quot;NumberFormat&quot;) Then
If CheckFormatType(oTextField) Then
If oTextField.PropertySetInfo.HasPropertybyName(&quot;Value&quot;) Then
If Not oTextField.SupportsService(&quot;com.sun.star.text.TextField.GetExpression&quot;) Then
oTextField.Content = CStr(Round(oTextField.Value/CurrFactor,2))
End If
ElseIf oTextField.TextFieldMaster.PropertySetInfo.HasPropertyByName(&quot;Value&quot;) Then
CurInstanceName = oTextField.TextFieldMaster.InstanceName
If Not FieldInArray(InstanceNames(), MaxIndex, CurInstanceName) Then
oTextField.TextFieldMaster.Content = CStr(Round(oTextField.TextFieldMaster.Value/CurrFactor,2))
InstanceNames(MaxIndex) = CurInstanceName
MaxIndex = MaxIndex + 1
End If
End If
SwitchNumberFormat(oTextField, oFormats, sEuroSign)
End If
End If
Wend
oDocument.GetTextFields.refresh()
End Sub
</script:module>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Euro" library:readonly="true" library:passwordprotected="false">
<library:element library:name="DlgConvert"/>
<library:element library:name="DlgPassword"/>
</library:library>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Euro" library:readonly="true" library:passwordprotected="false">
<library:element library:name="ConvertRun"/>
<library:element library:name="AutoPilotRun"/>
<library:element library:name="Hard"/>
<library:element library:name="Soft"/>
<library:element library:name="Init"/>
<library:element library:name="Common"/>
<library:element library:name="Writer"/>
<library:element library:name="Protect"/>
</library:library>

View File

@@ -0,0 +1,347 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="DBMeta" script:language="StarBasic">REM ***** BASIC *****
Option Explicit
Public iCommandTypes() as Integer
Public CurCommandType as Integer
Public oDataSource as Object
Public bEnableBinaryOptionGroup as Boolean
&apos;Public bSelectContent as Boolean
Function GetDatabaseNames(baddFirstListItem as Boolean)
Dim sDatabaseList()
If oDBContext.HasElements Then
Dim LocDBList() as String
Dim MaxIndex as Integer
Dim i as Integer
LocDBList = oDBContext.ElementNames()
MaxIndex = Ubound(LocDBList())
If baddfirstListItem Then
ReDim Preserve sDatabaseList(MaxIndex + 1)
sDatabaseList(0) = sSelectDatasource
a = 1
Else
ReDim Preserve sDatabaseList(MaxIndex)
a = 0
End If
For i = 0 To MaxIndex
sDatabaseList(a) = oDBContext.ElementNames(i)
a = a + 1
Next i
End If
GetDatabaseNames() = sDatabaseList()
End Function
Sub GetSelectedDBMetaData(sDBName as String)
Dim OldsDBname as String
Dim DBIndex as Integer
Dim LocList() as String
&apos; If bStartUp Then
&apos; bStartUp = false
&apos; Exit Sub
&apos; End Sub
ToggleDatabasePage(False)
With DialogModel
If GetConnection(sDBName) Then
If GetDBMetaData() Then
LocList() = AddListToList(Array(sSelectDBTable), TableNames())
.lstTables.StringItemList() = AddListToList(LocList(), QueryNames())
&apos; bSelectContent = True
.lstTables.SelectedItems() = Array(0)
iCommandTypes() = CreateCommandTypeList()
EmptyFieldsListboxes()
End If
End If
bEnableBinaryOptionGroup = False
.lstTables.Enabled = True
.lblTables.Enabled = True
&apos; Else
&apos; DialogModel.lstTables.StringItemList = Array(sSelectDBTable)
&apos; EmptyFieldsListboxes()
&apos; End If
ToggleDatabasePage(True)
End With
End Sub
Function GetConnection(sDBName as String)
Dim oInteractionHandler as Object
Dim bExitLoop as Boolean
Dim bGetConnection as Boolean
Dim iMsg as Integer
Dim Nulllist()
If Not IsNull(oDBConnection) Then
oDBConnection.Dispose()
End If
oDataSource = oDBContext.GetByName(sDBName)
&apos; If Not oDBContext.hasbyName(sDBName) Then
&apos; GetConnection() = False
&apos; Exit Function
&apos; End If
If Not oDataSource.IsPasswordRequired Then
oDBConnection = oDBContext.GetByName(sDBName).GetConnection(&quot;&quot;,&quot;&quot;)
GetConnection() = True
Else
oInteractionHandler = createUnoService(&quot;com.sun.star.task.InteractionHandler&quot;)
oDataSource = oDBContext.GetByName(sDBName)
On Local Error Goto NOCONNECTION
Do
bExitLoop = True
oDBConnection = oDataSource.ConnectWithCompletion(oInteractionHandler)
NOCONNECTION:
bGetConnection = Err = 0
If bGetConnection Then
bGetConnection = Not IsNull(oDBConnection)
If Not bGetConnection Then
Exit Do
End If
End If
If Not bGetConnection Then
iMsg = Msgbox (sMsgNoConnection,32 + 2, sMsgWizardName)
bExitLoop = iMsg = SBCANCEL
Resume CLERROR
CLERROR:
End If
Loop Until bExitLoop
On Local Error Goto 0
If Not bGetConnection Then
DialogModel.lstTables.StringItemList() = Array(sSelectDBTable)
DialogModel.lstFields.StringItemList() = NullList()
DialogModel.lstSelFields.StringItemList() = NullList()
End If
GetConnection() = bGetConnection
End If
End Function
Function GetDBMetaData()
If oDBContext.HasElements Then
Tablenames() = oDBConnection.Tables.ElementNames()
Querynames() = oDBConnection.Queries.ElementNames()
GetDBMetaData = True
Else
MsgBox(sMsgErrNoDatabase, 64, sMsgWizardName)
GetDBMetaData = False
End If
End Function
Sub GetTableMetaData()
Dim iType as Long
Dim m as Integer
Dim Found as Boolean
Dim i as Integer
Dim sFieldName as String
Dim n as Integer
Dim WidthIndex as Integer
Dim oField as Object
MaxIndex = Ubound(DialogModel.lstSelFields.StringItemList())
Dim ColumnMap(MaxIndex)as Integer
FieldNames() = DialogModel.lstSelFields.StringItemList()
&apos; Build a structure which maps the position of a selected field (within the selection) to the column position within
&apos; the table. So we ensure that the controls are placed in the same order the according fields are selected.
For i = 0 To Ubound(FieldNames())
sFieldName = FieldNames(i)
Found = False
n = 0
While (n&lt; MaxIndex And (Not Found))
If (FieldNames(n) = sFieldName) Then
Found = True
ColumnMap(n) = i
End If
n = n + 1
Wend
Next i
For n = 0 to MaxIndex
sFieldname = FieldNames(n)
oField = oColumns.GetByName(sFieldName)
iType = oField.Type
FieldMetaValues(n,0) = oField.Type
FieldMetaValues(n,1) = AssignFieldLength(oField.Precision)
FieldMetaValues(n,2) = GetValueoutofList(iType, WidthList(),1, WidthIndex)
FieldMetaValues(n,3) = WidthList(WidthIndex,3)
FieldMetaValues(n,4) = oField.FormatKey
FieldMetaValues(n,5) = oField.DefaultValue
FieldMetaValues(n,6) = oField.IsCurrency
FieldMetaValues(n,7) = oField.Scale
&apos; If oField.Description &lt;&gt; &quot;&quot; Then
&apos;&apos; Todo: What&apos;s wrong with this line?
&apos; Msgbox oField.Helptext
&apos; End If
FieldMetaValues(n,8) = oField.Description
Next
ReDim oDBShapeList(MaxIndex) as Object
ReDim oTCShapeList(MaxIndex) as Object
ReDim oDBModelList(MaxIndex) as Object
ReDim oGroupShapeList(MaxIndex) as Object
End Sub
Function GetSpecificFieldNames() as Integer
Dim n as Integer
Dim m as Integer
Dim s as Integer
Dim iType as Integer
Dim oField as Object
Dim MaxIndex as Integer
Dim EmptyList()
If Ubound(DialogModel.lstTables.StringItemList()) &gt; -1 Then
FieldNames() = oColumns.GetElementNames()
MaxIndex = Ubound(FieldNames())
If MaxIndex &lt;&gt; -1 Then
Dim ResultFieldNames(MaxIndex)
ReDim ImgFieldNames(MaxIndex)
m = 0
For n = 0 To MaxIndex
oField = oColumns.GetByName(FieldNames(n))
iType = oField.Type
If GetIndexInMultiArray(WidthList(), iType, 0) &lt;&gt; -1 Then
ResultFieldNames(m) = FieldNames(n)
m = m + 1
End If
If GetIndexInMultiArray(ImgWidthList(), iType, 0) &lt;&gt; -1 Then
ImgFieldNames(s) = FieldNames(n)
s = s + 1
End If
Next n
If s &lt;&gt; 0 Then
Redim Preserve ImgFieldNames(s-1)
bEnableBinaryOptionGroup = True
Else
bEnableBinaryOptionGroup = False
End If
If (DialogModel.optBinariesasGraphics.State = 1) And (s &lt;&gt; 0) Then
ResultFieldNames() = AddListToList(ResultFieldNames(), ImgFieldNames())
Else
Redim Preserve ResultFieldNames(m-1)
End If
FieldNames() = ResultFieldNames()
DialogModel.lstFields.StringItemList = FieldNames()
InitializeListboxProcedures(DialogModel, DialogModel.lstFields, DialogModel.lstSelFields)
End If
GetSpecificFieldNames = MaxIndex
Else
GetSpecificFieldNames = -1
End If
End Function
Sub CreateDBForm()
If oDrawPage.Forms.Count = 0 Then
oDBForm = oDocument.CreateInstance(&quot;com.sun.star.form.component.Form&quot;)
oDrawpage.Forms.InsertByIndex (0, oDBForm)
Else
oDBForm = oDrawPage.Forms.GetByIndex(0)
End If
oDBForm.Name = &quot;Standard&quot;
oDBForm.DataSourceName = sDBName
oDBForm.Command = TableName
oDBForm.CommandType = CurCommandType
End Sub
Sub AddOrRemoveBinaryFieldsToWidthList()
Dim LocWidthList()
Dim MaxIndex as Integer
Dim OldMaxIndex as Integer
Dim s as Integer
Dim n as Integer
Dim m as Integer
If Not bDebug Then
On Local Error GoTo WIZARDERROR
End If
If DialogModel.optBinariesasGraphics.State = 1 Then
OldMaxIndex = Ubound(WidthList(),1)
If OldMaxIndex = 15 Then
MaxIndex = Ubound(WidthList(),1) + Ubound(ImgWidthList(),1) + 1
ReDim Preserve WidthList(MaxIndex,4)
s = 0
For n = OldMaxIndex + 1 To MaxIndex
For m = 0 To 3
WidthList(n,m) = ImgWidthList(s,m)
Next m
s = s + 1
Next n
MergeList(DialogModel.lstFields, ImgFieldNames())
End If
Else
ReDim Preserve WidthList(15, 4)
RemoveListItems(DialogModel.lstFields(), DialogModel.lstSelFields(), ImgFieldNames())
End If
DialogModel.lstSelFields.Tag = True
WIZARDERROR:
If Err &lt;&gt; 0 Then
Msgbox(sMsgErrMsg, 16, GetProductName())
Resume LOCERROR
LOCERROR:
End If
End Sub
Function CreateCommandTypeList()
Dim MaxTableIndex as Integer
Dim MaxQueryIndex as Integer
Dim MaxIndex as Integer
Dim i as Integer
Dim a as Integer
MaxTableIndex = Ubound(TableNames())
MaxQueryIndex = Ubound(QueryNames())
MaxIndex = MaxTableIndex + MaxQueryIndex + 1
If MaxIndex &gt; -1 Then
Dim LocCommandTypes(MaxIndex) as Integer
For i = 0 To MaxTableIndex
LocCommandTypes(i) = com.sun.star.sdb.CommandType.TABLE
Next i
a = i
For i = 0 To MaxQueryIndex
LocCommandTypes(a) = com.sun.star.sdb.CommandType.QUERY
a = a + 1
Next i
End If
CreateCommandTypeList() = LocCommandTypes()
End Function
Sub GetCurrentMetaValues(Index as Integer)
CurFieldType = FieldMetaValues(Index,0)
CurFieldLength = FieldMetaValues(Index,1)
CurControlType = FieldMetaValues(Index,2)
CurControlName = FieldMetaValues(Index,3)
CurFormatKey = FieldMetaValues(Index,4)
CurDefaultValue = FieldMetaValues(Index,5)
CurIsCurrency = FieldMetaValues(Index,6)
CurScale = FieldMetaValues(Index,7)
CurHelpText = FieldMetaValues(Index,8)
CurFieldName = FieldNames(Index)
End Sub
Function AssignFieldLength(FieldLength as Long) as Integer
If FieldLength &gt;= 65535 Then
AssignFieldLength() = -1
Else
AssignFieldLength() = FieldLength
End If
End Function
</script:module>

View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="DlgFormDB" dlg:left="96" dlg:top="28" dlg:width="270" dlg:height="210" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGFORM_DIALOG" dlg:closeable="true" dlg:moveable="true">
<dlg:bulletinboard>
<dlg:text dlg:id="lblSelFields" dlg:tab-index="10" dlg:left="154" dlg:top="70" dlg:width="110" dlg:height="8" dlg:page="1" dlg:value="lblSelFields"/>
<dlg:menulist dlg:id="lstTables" dlg:tab-index="3" dlg:left="6" dlg:top="51" dlg:width="110" dlg:height="12" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGFORM_MASTER_LBTABLES" dlg:spin="true">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:FormWizard.FormWizard.FormGetFields?language=Basic&amp;location=application" script:language="Script"/>
<script:event script:event-name="on-mousedown" script:macro-name="vnd.sun.star.script:FormWizard.FormWizard.DeleteFirstTableListBoxEntry?language=Basic&amp;location=application" script:language="Script"/>
</dlg:menulist>
<dlg:img dlg:id="imgTheme" dlg:tab-index="1" dlg:left="6" dlg:top="6" dlg:width="258" dlg:height="26" dlg:scale-image="false"/>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="33" dlg:left="6" dlg:top="190" dlg:width="53" dlg:height="14" dlg:help-url="HID:34401" dlg:value="cmdCancel" dlg:button-type="cancel"/>
<dlg:button dlg:id="cmdHelp" dlg:tab-index="34" dlg:left="63" dlg:top="190" dlg:width="53" dlg:height="14" dlg:tag="34400" dlg:value="cmdHelp" dlg:button-type="help"/>
<dlg:button dlg:id="cmdBack" dlg:tab-index="35" dlg:left="155" dlg:top="190" dlg:width="53" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGFORM_CMDPREV" dlg:value="cmdBack">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.FormWizard.PreviousStep?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdGoOn" dlg:tab-index="36" dlg:left="211" dlg:top="190" dlg:width="53" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGFORM_CMDNEXT" dlg:value="cmdGoOn">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.FormWizard.NextStep?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:text dlg:id="lblTables" dlg:tab-index="2" dlg:left="6" dlg:top="40" dlg:width="72" dlg:height="8" dlg:page="1" dlg:value="lblTables"/>
<dlg:text dlg:id="lblFields" dlg:tab-index="4" dlg:left="6" dlg:top="70" dlg:width="109" dlg:height="8" dlg:page="1" dlg:value="lblFields"/>
<dlg:button dlg:id="cmdMoveSelected" dlg:tab-index="6" dlg:left="122" dlg:top="84" dlg:width="25" dlg:height="14" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGFORM_OPTONEXISTINGRELATION" dlg:value="-&gt;">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Tools.Listbox.FormMoveSelected?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdMoveAll" dlg:tab-index="7" dlg:left="122" dlg:top="101" dlg:width="25" dlg:height="14" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGFORM_OPTSELECTMANUALLY" dlg:value="=&gt;&gt;">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Tools.Listbox.FormMoveAll?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdRemoveSelected" dlg:tab-index="8" dlg:left="122" dlg:top="118" dlg:width="25" dlg:height="14" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGFORM_lstRELATIONS" dlg:value="&lt;-">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Tools.Listbox.FormRemoveSelected?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdRemoveAll" dlg:tab-index="9" dlg:left="122" dlg:top="135" dlg:width="25" dlg:height="14" dlg:page="1" dlg:help-url="HID:34425" dlg:value="&lt;&lt;=">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Tools.Listbox.FormRemoveAll?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:radiogroup>
<dlg:radio dlg:id="optIgnoreBinaries" dlg:tab-index="14" dlg:left="122" dlg:top="169" dlg:width="104" dlg:height="10" dlg:page="1" dlg:help-url="HID:34427" dlg:value="optIgnoreBinaries" dlg:checked="true">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.DBMeta.AddOrRemoveBinaryFieldsToWidthList?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
<dlg:radio dlg:id="optBinariesasGraphics" dlg:tab-index="13" dlg:left="12" dlg:top="169" dlg:width="104" dlg:height="10" dlg:page="1" dlg:help-url="HID:34426" dlg:value="optBinariesasGraphics">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.DBMeta.AddOrRemoveBinaryFieldsToWidthList?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
</dlg:radiogroup>
<dlg:menulist dlg:id="lstFields" dlg:tab-index="5" dlg:left="6" dlg:top="81" dlg:width="110" dlg:height="70" dlg:page="1" dlg:help-url="HID:34420" dlg:multiselection="true">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Tools.Listbox.FormMoveSelected?language=Basic&amp;location=application" script:language="Script"/>
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:Tools.Listbox.FormSetMoveRights?language=Basic&amp;location=application" script:language="Script"/>
</dlg:menulist>
<dlg:menulist dlg:id="lstSelFields" dlg:tab-index="11" dlg:left="154" dlg:top="81" dlg:width="110" dlg:height="70" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGFORM_CHKCREATESUBFORM" dlg:multiselection="true">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Tools.Listbox.FormRemoveSelected?language=Basic&amp;location=application" script:language="Script"/>
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:Tools.Listbox.FormSetMoveRights?language=Basic&amp;location=application" script:language="Script"/>
</dlg:menulist>
<dlg:text dlg:id="lblStyles" dlg:tab-index="25" dlg:left="150" dlg:top="39" dlg:width="114" dlg:height="8" dlg:page="2" dlg:value="lblStyles"/>
<dlg:button dlg:id="cmdArrange1" dlg:tab-index="16" dlg:left="12" dlg:top="50" dlg:width="23" dlg:height="25" dlg:page="2" dlg:tag="1" dlg:help-url="HID:WIZARDS_HID_DLGFORM_SUB_LBTABLES">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeArrangemode?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdArrange2" dlg:tab-index="17" dlg:left="39" dlg:top="50" dlg:width="23" dlg:height="25" dlg:page="2" dlg:tag="2" dlg:help-url="HID:WIZARDS_HID_DLGFORM_SUB_FIELDSAVAILABLE">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeArrangemode?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdArrange3" dlg:tab-index="18" dlg:left="66" dlg:top="50" dlg:width="23" dlg:height="25" dlg:page="2" dlg:tag="3" dlg:help-url="HID:WIZARDS_HID_DLGFORM_SUB_CMDMOVESELECTED">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeArrangemode?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdArrange4" dlg:tab-index="19" dlg:left="93" dlg:top="50" dlg:width="23" dlg:height="25" dlg:page="2" dlg:tag="4" dlg:help-url="HID:WIZARDS_HID_DLGFORM_SUB_CMDMOVEALL">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeArrangemode?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdArrange5" dlg:tab-index="20" dlg:left="120" dlg:top="50" dlg:width="23" dlg:height="25" dlg:page="2" dlg:tag="5" dlg:help-url="HID:WIZARDS_HID_DLGFORM_SUB_CMDREMOVESELECTED">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeArrangemode?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:menulist dlg:id="lstStyles" dlg:tab-index="26" dlg:left="150" dlg:top="50" dlg:width="114" dlg:height="86" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGFORM_LINKER_LSTSLAVELINK2">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:FormWizard.tools.ImportStyles?language=Basic&amp;location=application" script:language="Script"/>
</dlg:menulist>
<dlg:radiogroup>
<dlg:radio dlg:id="optBorder0" dlg:tab-index="22" dlg:left="12" dlg:top="95" dlg:width="131" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGFORM_SUB_CMDMOVEUP" dlg:value="optBorder0">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeBorderLayouts?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
<dlg:radio dlg:id="optBorder1" dlg:tab-index="23" dlg:left="12" dlg:top="109" dlg:width="131" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGFORM_SUB_CMDMOVEDOWN" dlg:value="optBorder1">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeBorderLayouts?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
<dlg:radio dlg:id="optBorder2" dlg:tab-index="24" dlg:left="12" dlg:top="123" dlg:width="131" dlg:height="10" dlg:page="2" dlg:help-url="HID:34440" dlg:value="optBorder2">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeBorderLayouts?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
</dlg:radiogroup>
<dlg:fixedline dlg:id="hlnBinaries" dlg:tab-index="12" dlg:left="6" dlg:top="158" dlg:width="258" dlg:height="8" dlg:page="1" dlg:value="hlnBinaries"/>
<dlg:fixedline dlg:id="hlnBackground" dlg:tab-index="30" dlg:left="150" dlg:top="143" dlg:width="114" dlg:height="8" dlg:page="2" dlg:value="hlnBackground"/>
<dlg:fixedline dlg:id="hlnAlign" dlg:tab-index="27" dlg:left="6" dlg:top="143" dlg:width="137" dlg:height="8" dlg:page="2" dlg:value="hlnAlign"/>
<dlg:fixedline dlg:id="hlnBorderLayout" dlg:tab-index="21" dlg:left="6" dlg:top="83" dlg:width="137" dlg:height="8" dlg:page="2" dlg:value="hlnBorderLayout"/>
<dlg:fixedline dlg:id="hlnArrangements" dlg:tab-index="15" dlg:left="6" dlg:top="39" dlg:width="137" dlg:height="8" dlg:page="2" dlg:value="hlnArrangements"/>
<dlg:radiogroup>
<dlg:radio dlg:id="optAlign0" dlg:tab-index="28" dlg:left="12" dlg:top="154" dlg:width="131" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGFORM_LINKER_LSTSLAVELINK1" dlg:value="optAlign0">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeLabelAlignments?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
<dlg:radio dlg:id="optAlign2" dlg:tab-index="29" dlg:left="12" dlg:top="168" dlg:width="131" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGFORM_LINKER_LSTMASTERLINK1" dlg:value="optAlign2">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:FormWizard.Layouter.ChangeLabelAlignments?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
</dlg:radiogroup>
<dlg:fixedline dlg:id="FixedLine1" dlg:tab-index="0" dlg:left="6" dlg:top="180" dlg:width="258" dlg:height="6"/>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,440 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="FormWizard" script:language="StarBasic">Option Explicit
Public DocumentName as String
Public FormPath as String
Public WizardPath as String
Public WorkPath as String
Public TempPath as String
Public TexturePath as String
Public sQueryName as String
Public oDBConnection as Object
Public bWithBackGraphic as Boolean
Public bNeedFieldRefresh as Boolean
Public oDBForm as Object
Public oColumns() as Object
Public sDatabaseList() as String
Public TableNames() as String
Public QueryNames() as String
Public FieldNames() as String
Public ImgFieldNames() as String
Public oDBContext as Object
Public oUcb as Object
Public oDocInfo as Object
Public WidthList(15,3)
Public ImgWidthList(3,3)
Public sDBName as String
Public Tablename as String
Public Const SBSIZETEXT = &quot;The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.&quot;
Public bDisposeDoc as Boolean
Public bDebug as Boolean
&apos;Public bStartUp as Boolean
Public bConnectionIsovergiven as Boolean
Public FormName As String
Public sFormUrl as String
Public oFormDocuments
&apos; The macro can be called in 4 possible scenarios:
&apos; Scenario 1. No parameters at given
&apos; Scenario 2: Only Datasourcename is given, but no connection and no Content
&apos; Scenario 3: a data source and a connection are given
&apos; Scenario 4: all parameters (data source name, connection, object type and object) are given
Sub Main()
Dim oLocDBContext as Object
Dim oLocConnection as Object
&apos; Scenario 1. No parameters at given
MainWithDefault()
&apos; Scenario 2: Only Datasourcename is given, but no connection and no Content
&apos; MainWithDefault(&quot;Bibliography&quot;)
&apos; Scenario 3: a data source and a connection are given
&apos; oLocDBContext = CreateUnoService(&quot;com.sun.star.sdb.DatabaseContext&quot;)
&apos; oLocConnection = oLocDBContext.GetByName(&quot;Bibliography&quot;).GetConnection(&quot;&quot;,&quot;&quot;)
&apos; MainWithDefault(&quot;Bibliography&quot;, oLocConnection)
&apos; Scenario 4: all parameters (data source name, connection, object type and object) are given
&apos; oLocDBContext = CreateUnoService(&quot;com.sun.star.sdb.DatabaseContext&quot;)
&apos; oLocConnection = oLocDBContext.GetByName(&quot;Bibliography&quot;).GetConnection(&quot;&quot;,&quot;&quot;)
&apos; MainWithDefault(&quot;Bibliography&quot;, oLocConnection, com.sun.star.sdb.CommandType.TABLE, &quot;biblio&quot;)
End Sub
Sub MainWithDefault(Optional DatasourceName as String, Optional oConnection as Object, Optional CommandType as Integer, Optional sContent as String)
Dim i as Integer
Dim SelCount as Integer
Dim RetValue as Integer
Dim SelList(0) as Integer
Dim LocList() as String
SelList(0) = 0
BasicLibraries.LoadLibrary(&quot;Tools&quot;)
bDebug = False
If Not bDebug Then
On Local Error GoTo WIZARDERROR
End If
OpenFormDocument()
CurArrangement = 0
bControlsareCreated = False
bEnableBinaryOptionGroup = False
bDisposeDoc = True
MaxIndex = -1
If Not InitResources(&quot;Formwizard&quot;) Then
Exit Sub
End If
oDBContext = CreateUnoService(&quot;com.sun.star.sdb.DatabaseContext&quot;)
oUcb = createUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
If GetFormWizardPaths() = False Then
Exit Sub
End If
oDocument.GetCurrentController().Frame.ComponentWindow.Enable = False
oProgressBar.Value = 10
LoadLanguage()
oProgressBar.Value = 20
InitializeWidthList()
oProgressBar.Value = 30
Styles() = getListBoxArrays(oUcb, &quot;/stl&quot;)
CurIndex = GetCurIndex(DialogModel, Styles(), 2)
oProgressBar.Value = 40
ConfigurePageStyle()
oProgressBar.Value = 50
InitializeLabelValues()
bNeedFieldRefresh = True
SetDialogLanguage()
&apos; bStartUp = true
With DialogModel
.cmdBack.Enabled = False
.cmdGoOn.Enabled = False
.lblTables.Enabled = False
.lstSelFields.Tag = False
.Step = 1
End With
oProgressBar.Value = 60
bConnectionIsovergiven = Not IsMissing(oConnection)
If Not IsMissing(DataSourceName) Then
sDBName = DataSourceName
If Not IsMissing(oConnection) Then
&apos; Scenario 3: a data source and a connection are given
Set oDBConnection = oConnection
oDataSource = oDBContext.GetByName(DataSourceName)
DialogModel.lstTables.Enabled = True
DialogModel.lblTables.Enabled = True
If GetDBMetaData() Then
LocList() = AddListToList(TableNames(), QueryNames())
iCommandTypes = CreateCommandTypeList()
If Not IsMissing(sContent) Then
&apos; Scenario 4: all parameters (data source name, connection, object type and object) are given
DialogModel.lstTables.StringItemList() = LocList()
iCommandTypes() = CreateCommandTypeList()
SelCount = CountItemsInArray(DialogModel.lstTables.StringItemList(), sContent)
If SelCount = 1 Then
DlgFormDB.GetControl(&quot;lstTables&quot;).SelectItem(sContent, True)
Else
If CommandType = com.sun.star.sdb.CommandType.QUERY Then
SelIndex = IndexInArray(sContent, QueryNames())
DlgFormDB.GetControl(&quot;lstTables&quot;).SelectItemPos(SelIndex, True)
ElseIf CommandType = com.sun.star.sdb.CommandType.TABLE Then
SelIndex = IndexInArray(sContent, TableNames())
DlgFormDB.GetControl(&quot;lstTables&quot;).SelectItemPos(Ubound(QueryNames()+1 + SelIndex, True))
End If
End If
CurCommandType = CommandType
FillUpFieldsListbox(False)
Else
LocList() = AddListToList(Array(sSelectDBTable), LocList())
DialogModel.lstTables.StringItemList() = LocList()
&apos; bSelectContent = True
DialogModel.lstTables.SelectedItems() = Array(0)
End If
End If
Else
&apos; Scenario 2: Only Datasourcename is given, but no connection and no Content
GetSelectedDBMetaData(sDBName)
End If
Else
&apos; Scenario 1: No parameters are given
ToggleListboxControls(DialogModel, False)
End If
oProgressBar.Value = 80
bWithBackGraphic = LoadNewStyles(oDocument, DialogModel, CurIndex, Styles(CurIndex, 8), Styles(), TexturePath)
DlgFormDB.Title = WizardTitle(1)
DialogModel.lstStyles.StringItemList() = ArrayfromMultiArray(Styles, 1)
DialogModel.lstStyles.SelectedItems() = SelList()
ControlCaptionsToStandardLayout()
oDocument.GetCurrentController().Frame.ComponentWindow.Enable = True
oProgressBar.Value = 90
DialogModel.imgTheme.ImageURL = FormPath &amp; &quot;FormWizard_1.png&quot;
DialogModel.imgTheme.BackGroundColor = RGB(0,60,126)
ToggleDatabasePage(True)
oProgressBar.Value = 100
DlgFormDB.GetControl(&quot;lstTables&quot;).SetFocus()
oProgressbar.End
RetValue = DlgFormDB.Execute()
DlgFormDB.Dispose()
If bDisposeDoc Then
Dim aPropertyValues(2) as new com.sun.star.beans.PropertyValue
oFormDocuments = oDataSource.getFormDocuments()
DlgFormDB.Dispose()
oDocument.dispose()
Dim bLinkExists as Boolean
i = 1
Dim FormBaseName as String
FormBaseName = FormName
Do
bLinkExists = oFormDocuments.HasbyHierarchicalName(FormName)
If bLinkExists Then
i = i + 1
FormName = FormBaseName &amp; &quot;_&quot; &amp; i
End If
Loop Until Not bLinkExists
aPropertyValues(0).Name = &quot;Name&quot;
aPropertyValues(0).Value = FormName
aPropertyValues(1).Name = &quot;Parent&quot;
aPropertyValues(1).Value = oFormDocuments()
aPropertyValues(2).Name = &quot;URL&quot;
aPropertyValues(2).Value = sFormUrl
Dim oDBDocument
oDBDocument = oFormDocuments.createInstanceWithArguments(&quot;com.sun.star.sdb.DocumentDefinition&quot;, aPropertyValues())
oFormDocuments.insertbyName(FormName, oDBDocument)
ElseIf RetValue = 0 Then
RemoveNirwanaShapes()
End If
If ((Not IsNull(oDBConnection)) And (Not bConnectionIsovergiven)) Then
oDBConnection.Dispose()
End If
WIZARDERROR:
If Err &lt;&gt; 0 Then
Msgbox(sMsgErrMsg, 16, GetProductName())
Resume LOCERROR
LOCERROR:
End If
End Sub
Sub FormGetFields()
Dim i as Integer
&apos; If bSelectContent Then
&apos; bSelectContent = False
&apos; Exit Sub
&apos; End If
DeleteFirstListBoxEntry(&quot;lstTables&quot;, sSelectDBTable)
ToggleDatabasePage(False)
FillUpFieldsListbox(True)
ToggleDatabasePage(True)
End Sub
Sub FillUpFieldsListbox(bGetCommandType as Boolean)
Dim SelIndex as Integer
Dim QueryIndex as Integer
If Not bDebug Then
On Local Error GoTo NOFIELDS
End If
SelIndex = DlgFormDB.GetControl(&quot;lstTables&quot;).getSelectedItemPos() &apos;.SelectedItems())
If SelIndex &gt; -1 Then
If bGetCommandType Then
CurCommandType = iCommandTypes(SelIndex)
End If
If CurCommandType = com.sun.star.sdb.CommandType.QUERY Then
QueryIndex = SelIndex - Ubound(Tablenames()) - 1
Tablename = QueryNames(QueryIndex)
oColumns = oDBConnection.Queries.GetByName(TableName).Columns
Else
Tablename = Tablenames(SelIndex)
oColumns = oDBConnection.Tables.GetByName(Tablename).Columns
End If
If GetSpecificFieldNames() &lt;&gt; -1 Then
ToggleListboxControls(DialogModel, True)
Exit Sub
End If
End If
EmptyFieldsListboxes()
NOFIELDS:
If Err &lt;&gt; 0 Then
MsgBox sMsgErrCouldNotOpenObject, 16, sMsgWizardName
End If
End Sub
Sub PreviousStep()
If Not bDebug Then
On Local Error GoTo WIZARDERROR
End If
With DialogModel
.Step = 1
.cmdBack.Enabled = False
.cmdGoOn.Enabled = True
.lstSelFields.Tag = Not bControlsareCreated
.cmdGoOn.Label = sGoOn
.imgTheme.ImageUrl = FormPath &amp; &quot;FormWizard_1.png&quot;
End With
FormSetMoveRights()
WIZARDERROR:
If Err &lt;&gt; 0 Then
Msgbox(sMsgErrMsg, 16, GetProductName())
Resume LOCERROR
LOCERROR:
End If
End Sub
Sub NextStep()
If Not bDebug Then
On Local Error GoTo WIZARDERROR
End If
Select Case DialogModel.Step
Case 1
bControlsAreCreated = Not (cBool(DialogModel.lstSelFields.Tag))
If Not bControlsAreCreated Then
GetTableMetaData()
CreateDBForm()
RemoveShapes()
InitializeLayoutSettings()
oDBForm.Load
End If
DialogModel.cmdGoOn.Label = sReady
DialogModel.cmdBack.Enabled = True
DialogModel.Step = 2
bDisposeDoc = False
Case 2
StoreForm()
DlgFormDB.EndExecute()
exit Sub
End Select
DialogModel.imgTheme.ImageUrl = FormPath &amp; &quot;FormWizard_&quot; &amp; DialogModel.Step &amp; &quot;.png&quot;
DlgFormDB.Title = WizardTitle(DialogModel.Step)
WIZARDERROR:
If Err &lt;&gt; 0 Then
Msgbox(sMsgErrMsg, 16, GetProductName())
Resume LOCERROR
LOCERROR:
End If
End Sub
Sub InitializeLayoutSettings()
SwitchArrangementButtons(cTabled)
SwitchAlignMode(SBALIGNLEFT)
SwitchBorderMode(SB3DBORDER)
ToggleBorderGroup(bControlsAreCreated)
ToggleAlignGroup(bControlsAreCreated)
ArrangeControls()
If OldAlignMode &lt;&gt; 0 Then
DlgFormDB.GetControl(&quot;optAlign2&quot;).Model.State = 0
End If
End Sub
Sub ToggleDatabasePage(bDoEnable as Boolean)
With DialogModel
.cmdBack.Enabled = False
.cmdHelp.Enabled = bDoEnable
.cmdGoOn.Enabled = Ubound(DialogModel.lstSelFields.StringItemList()) &lt;&gt; -1
.hlnBinaries.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True))
.optIgnoreBinaries.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True))
.optBinariesasGraphics.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True))
End With
End Sub
&apos; This Sub is called from the Procedure &quot;StoreDocument&quot; in the &quot;Tools&quot; Library
Sub CommitLastDocumentChanges(sTargetPath as String)
Dim i as Integer
Dim sBookmarkName as String
Dim oDBBookmarks as Object
Dim bLinkExists as Boolean
Dim sBaseBookmarkName as String
sBookmarkName = GetFileNamewithoutExtension(FileNameoutofPath(sTargetPath))
sBaseBookmarkName = sBookmarkName
oDBBookmarks = oDataSource.GetBookmarks()
i = 1
Do
bLinkExists = oDBBookmarks.HasbyName(sBookmarkName)
If bLinkExists Then
i = i + 1
sBookmarkName = sBaseBookmarkName &amp; &quot;_&quot; &amp; i
Else
oDBBookmarks.insertByName(sBookmarkName, sTargetPath)
End If
Loop Until Not bLinkExists
bDisposeDoc = False
GroupShapesTogether()
ToggleDesignMode(oDocument)
oDBForm.Reload()
End Sub
Sub StoreFormInDatabase()
Dim NoArgs() as new com.sun.star.beans.PropertyValue
FormName = &quot;Form_&quot; &amp; sDBName &amp; &quot;_&quot; &amp; TableName &amp; &quot;.sxw&quot;
sFormUrl = TempPath &amp; &quot;/&quot; &amp; FormName
oDocument.StoreAsUrl(sFormUrl, NoArgs())
bdisposeDoc = true
DlgFormDB.Endexecute()
End Sub
Sub StoreForm()
Dim sTargetPath as String
Dim TypeNames(0,2) as String
Dim oMasterKey as Object
Dim oTypes() as Object
oMasterKey = GetRegistryKeyContent(&quot;org.openoffice.TypeDetection.Types/&quot;)
oTypes() = oMasterKey.Types
TypeNames(0,0) = GetFilterName(&quot;StarOffice XML (Writer)&quot;)
TypeNames(0,1) = &quot;*.sxw&quot;
TypeNames(0,2) = &quot;&quot;
StoreFormInDatabase()
&apos; sTargetPath = StoreDocument(oDocument, TypeNames(), &quot;Form_&quot; &amp; sDBName &amp; &quot;_&quot; &amp; TableName &amp; &quot;.sxw&quot;, WorkPath, 1)
End Sub
Sub EmptyFieldsListboxes()
Dim NullList() as String
ToggleListboxControls(DialogModel, False)
DialogModel.lstFields.StringItemList() = NullList()
DialogModel.lstSelFields.StringItemList() = NullList()
bEnableBinaryOptionGroup = False
End Sub
Sub DeleteFirstTableListBoxEntry()
DeleteFirstListBoxEntry(&quot;lstTables&quot;, sSelectDBTable)
End Sub
Sub DeleteFirstListboxEntry(ListBoxName as String, DelEntryName as String)
Dim oListbox as Object
Dim sFirstItem as String
dim iSelPos as Integer
oListBox = DlgFormDB.getControl(ListBoxName)
sFirstItem = oListBox.getItem(0)
If sFirstItem = DelEntryName Then
iSelPos = oListBox.getSelectedItemPos()
oListBox.removeItems(0, 1)
If iSelPos &gt; 0 Then
oListBox.selectItemPos(iSelPos-1, True)
End If
End If
End Sub
</script:module>

View File

@@ -0,0 +1,297 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Language" script:language="StarBasic">Option Explicit
Public Const SBCANCEL = 2
Public Const SBREPEAT = 4
Public LabelDiffHeight as Long
Public BasicLabelDiffHeight as Long
Public WizardTitle(1 To 3) as String
Public DlgFormDB as Object
Public DialogModel as Object
Dim sMsgWizardName as String
Dim sMsgErrMsg as String
Dim sMsgErrNoDatabase as String
Dim sMsgErrNoTableInDatabase as String
Dim sMsgErrTitleSuggestedExist as String
Dim sMsgErrTitleSyntaxError as String
Dim sMsgErrTitleAsTableExist as String
Dim sMsgProgressText as String
Dim sMsgCreatedForm as String
Dim sMsgErrCouldNotOpenObject as String
Dim sMsgErrNameToLong as String
Dim sTimeAppendix as String
Dim sDateAppendix as String
Public sGoOn as String
Public sReady as String
Public sMsgNoConnection as String
Public XPixelFactor as Long
Public YPixelFactor as Long
Public sSelectDatasource as String
Public sSelectDBTable as String
Sub LoadLanguage ()
sMsgWizardName = GetResText(&quot;RID_FORM_0&quot;)
sMsgErrMsg = GetResText(&quot;RID_DB_COMMON_6&quot;)
sMsgErrNoDatabase = GetResText(&quot;RID_DB_COMMON_8&quot;)
sMsgErrNoTableInDatabase = GetResText(&quot;RID_DB_COMMON_9&quot;)
sMsgErrTitleSuggestedExist = GetResText(&quot;RID_DB_COMMON_10&quot;)
sMsgErrTitleAsTableExist = GetResText(&quot;RID_DB_COMMON_10&quot;)
sMsgErrTitleSyntaxError = GetResText(&quot;RID_DB_COMMON_11&quot;)
sMsgNoConnection = GetResText(&quot;RID_DB_COMMON_14&quot;)
sMsgProgressText = GetResText(&quot;RID_FORM_2&quot;)
sMsgCreatedForm = GetResText(&quot;RID_FORM_26&quot;)
sMsgErrNameToLong = GetResText(&quot;RID_FORM_27&quot;)
sMsgErrCouldNotOpenObject = GetResText(&quot;RID_DB_COMMON_13&quot;)
&apos; Internal Logic
sDateAppendix = GetResText(&quot;RID_FORM_4&quot;)
sTimeAppendix = GetResText(&quot;RID_FORM_5&quot;)
sReady = GetResText(&quot;RID_DB_COMMON_0&quot;)
End Sub
Sub SetDialogLanguage ()
Dim i as Integer
Dim ButtonHelpText as String
Dim CmdButton as Object
Dim IDArray as Variant
Dim FNameAddOn as String
Dim slblSelFields as String
Dim slblFields as String
DlgFormDB = LoadDialog(&quot;FormWizard&quot;, &quot;DlgFormDB&quot;)
DialogModel = DlgFormDB.Model
With DialogModel
.cmdCancel.Label = GetResText(&quot;RID_DB_COMMON_1&quot;)
.cmdBack.Label = GetResText(&quot;RID_DB_COMMON_2&quot;)
.cmdHelp.Label = GetResText(&quot;RID_DB_COMMON_20&quot;)
sGoOn = GetResText(&quot;RID_DB_COMMON_3&quot;)
.cmdGoOn.Label = sGoOn
.lblTables.Label = GetResText(&quot;RID_FORM_6&quot;)
slblFields = GetResText(&quot;RID_FORM_12&quot;)
slblSelFields = GetResText(&quot;RID_FORM_13&quot;)
.lblFields.Label = slblFields
.lblSelFields.Label = slblSelFields
.lblStyles.Label = GetResText(&quot;RID_FORM_21&quot;)
.hlnBorderLayout.Label = GetResText(&quot;RID_FORM_28&quot;)
.hlnAlign.Label = GetResText(&quot;RID_FORM_32&quot;)
.hlnArrangements.Label = GetResText(&quot;RID_FORM_35&quot;)
WizardTitle(1) = sMsgWizardName &amp; &quot; - &quot; &amp; GetResText(&quot;RID_FORM_45&quot;)
WizardTitle(2) = sMsgWizardName &amp; &quot; - &quot; &amp; GetResText(&quot;RID_FORM_46&quot;)
WizardTitle(3) = sMsgWizardName &amp; &quot; - &quot; &amp; GetResText(&quot;RID_FORM_47&quot;)
.hlnBinaries.Label = GetResText(&quot;RID_FORM_50&quot;)
.optIgnoreBinaries.Label = GetResText(&quot;RID_FORM_51&quot;)
.optBinariesasGraphics.Label = GetResText(&quot;RID_FORM_52&quot;)
.hlnBackground.Label = GetResText(&quot;RID_FORM_55&quot;)
.optTiled.Label = GetResText(&quot;RID_FORM_56&quot;)
.optArea.Label = GetResText(&quot;RID_FORM_57&quot;)
.optBorder0.Label = GetResText(&quot;RID_FORM_29&quot;)
.optBorder1.Label = GetResText(&quot;RID_FORM_30&quot;)
.optBorder2.Label = GetResText(&quot;RID_FORM_31&quot;)
.optBorder1.State = 1
.optAlign0.Label = GetResText(&quot;RID_FORM_33&quot;)
.optAlign2.Label = GetResText(&quot;RID_FORM_34&quot;)
.optAlign0.State = 1
REM//FIXME: Remove this unused FNameAddOn through the file
FNameAddOn = &quot;&quot;
IDArray = Array(&quot;RID_FORM_36&quot;, &quot;RID_FORM_37&quot;, &quot;RID_FORM_40&quot;, &quot;RID_FORM_38&quot;, &quot;RID_FORM_39&quot;)
For i = 1 To 5
ButtonHelpText = GetResText(IDArray(i-1))
cmdButton = DlgFormDB.getControl(&quot;cmdArrange&quot; &amp; i)
cmdButton.Model.ImageURL = FormPath &amp; &quot;Arrange_&quot; &amp; i &amp; FNameAddOn &amp; &quot;.gif&quot;
cmdButton.Model.HelpText = ButtonHelpText
cmdButton.getPeer().setProperty(&quot;AccessibleName&quot;, ButtonHelpText)
Next i
&apos; .cmdArrange1.ImageURL = FormPath &amp; &quot;Arrange_1&quot; &amp; FNameAddOn &amp; &quot;.gif&quot;
&apos; .cmdArrange1.HelpText = GetResText(&quot;RID_FORM_36&quot;)
&apos;
&apos; .cmdArrange2.ImageURL = FormPath &amp; &quot;Arrange_2&quot; &amp; FNameAddOn &amp; &quot;.gif&quot;
&apos; .cmdArrange2.HelpText = GetResText(&quot;RID_FORM_37&quot;)
&apos;
&apos; .cmdArrange3.ImageURL = FormPath &amp; &quot;Arrange_3&quot; &amp; FNameAddOn &amp; &quot;.gif&quot;
&apos; .cmdArrange3.HelpText = GetResText(&quot;RID_FORM_40&quot;)
&apos;
&apos; .cmdArrange4.ImageURL = FormPath &amp; &quot;Arrange_4&quot; &amp; FNameAddOn &amp; &quot;.gif&quot;
&apos; .cmdArrange4.HelpText = GetResText(&quot;RID_FORM_38&quot;)
&apos;
&apos; .cmdArrange5.ImageURL = FormPath &amp; &quot;Arrange_5&quot; &amp; FNameAddOn &amp; &quot;.gif&quot;
&apos; .cmdArrange5.HelpText = GetResText(&quot;RID_FORM_39&quot;)
End With
DlgFormDB.GetControl(&quot;cmdMoveSelected&quot;).getPeer().setProperty(&quot;AccessibleName&quot;, GetResText(&quot;RID_DB_COMMON_39&quot;))
DlgFormDB.GetControl(&quot;cmdRemoveSelected&quot;).getPeer().setProperty(&quot;AccessibleName&quot;, GetResText(&quot;RID_DB_COMMON_40&quot;))
DlgFormDB.GetControl(&quot;cmdMoveAll&quot;).getPeer().setProperty(&quot;AccessibleName&quot;, GetResText(&quot;RID_DB_COMMON_41&quot;))
DlgFormDB.GetControl(&quot;cmdRemoveAll&quot;).getPeer().setProperty(&quot;AccessibleName&quot;, GetResText(&quot;RID_DB_COMMON_42&quot;))
DlgFormDB.getControl(&quot;lstFields&quot;).getPeer().setProperty(&quot;AccessibleName&quot;, DeleteStr(slblFields, &quot;~&quot;))
DlgFormDB.getControl(&quot;lstSelFields&quot;).getPeer().setProperty(&quot;AccessibleName&quot;, DeleteStr(slblSelFields, &quot;~&quot;))
sSelectDatasource = GetResText(&quot;RID_DB_COMMON_37&quot;)
sSelectDBTable = GetResText(&quot;RID_DB_COMMON_38&quot;)
End Sub
Sub InitializeWidthList()
If Ubound(WidthList(),1) &gt; 16 Then
ReDim WidthList(16,4)
End If
WidthList(0,0) = com.sun.star.sdbc.DataType.BIT &apos; = -7;
WidthList(0,1) = cCheckbox
WidthList(0,2) = False
WidthList(0,3) = &quot;CheckBox&quot;
WidthList(1,0) = com.sun.star.sdbc.DataType.TINYINT &apos; = -6;
WidthList(1,1) = cNumericBox
WidthList(1,2) = False
WidthList(1,3) = &quot;FormattedField&quot;
WidthList(2,0) = com.sun.star.sdbc.DataType.SMALLINT &apos; = 5;
WidthList(2,1) = cNumericBox
WidthList(2,2) = False
WidthList(2,3) = &quot;FormattedField&quot;
WidthList(3,0) = com.sun.star.sdbc.DataType.INTEGER &apos; = 4;
WidthList(3,1) = cNumericBox
WidthList(3,2) = False
WidthList(3,3) = &quot;FormattedField&quot;
WidthList(4,0) = com.sun.star.sdbc.DataType.BIGINT &apos; = -5;
WidthList(4,1) = cNumericBox
WidthList(4,2) = False
WidthList(4,3) = &quot;FormattedField&quot;
WidthList(5,0) = com.sun.star.sdbc.DataType.FLOAT &apos; = 6;
WidthList(5,1) = cNumericBox
WidthList(5,2) = False
WidthList(5,3) = &quot;FormattedField&quot;
WidthList(6,0) = com.sun.star.sdbc.DataType.REAL &apos; = 7;
WidthList(6,1) = cNumericBox
WidthList(6,2) = False
WidthList(6,3) = &quot;FormattedField&quot;
WidthList(7,0) = com.sun.star.sdbc.DataType.DOUBLE &apos; = 8;
WidthList(7,1) = cNumericBox
WidthList(7,2) = False
WidthList(7,3) = &quot;FormattedField&quot;
WidthList(8,0) = com.sun.star.sdbc.DataType.NUMERIC &apos; = 2;
WidthList(8,1) = cNumericBox
WidthList(8,2) = False
WidthList(8,3) = &quot;FormattedField&quot;
WidthList(9,0) = com.sun.star.sdbc.DataType.DECIMAL &apos; = 3; (including decimal places)
WidthList(9,1) = cNumericBox
WidthList(9,2) = False
WidthList(9,3) = &quot;FormattedField&quot;
WidthList(10,0) = com.sun.star.sdbc.DataType.CHAR &apos; = 1;
WidthList(10,1) = cTextBox
WidthList(10,2) = False
WidthList(10,3) = &quot;TextField&quot;
WidthList(11,0) = com.sun.star.sdbc.DataType.VARCHAR &apos; = 12;
WidthList(11,1) = cTextBox
WidthList(11,2) = True
WidthList(11,3) = &quot;TextField&quot;
WidthList(12,0) = com.sun.star.sdbc.DataType.LONGVARCHAR &apos; = -1;
WidthList(12,1) = cTextBox
WidthList(12,2) = True
WidthList(12,3) = &quot;TextField&quot;
WidthList(13,0) = com.sun.star.sdbc.DataType.DATE &apos; = 91;
WidthList(13,1) = cDateBox
WidthList(13,2) = False
WidthList(13,3) = &quot;DateField&quot;
WidthList(14,0) = com.sun.star.sdbc.DataType.TIME &apos; = 92;
WidthList(14,1) = cTimeBox
WidthList(14,2) = False
WidthList(14,3) = &quot;TimeField&quot;
WidthList(15,0) = com.sun.star.sdbc.DataType.TIMESTAMP &apos; = 93;
WidthList(15,1) = cDateBox
WidthList(15,2) = False
WidthList(15,3) = &quot;DateField&quot;
WidthList(16,0) = com.sun.star.sdbc.DataType.BOOLEAN &apos; = 16;
WidthList(16,1) = cCheckbox
WidthList(16,2) = False
WidthList(16,3) = &quot;CheckBox&quot;
ImgWidthList(0,0) = com.sun.star.sdbc.DataType.BINARY &apos; = -2;
ImgWidthList(0,1) = cImageControl
ImgWidthList(0,2) = False
ImgWidthList(0,3) = &quot;ImageControl&quot;
ImgWidthList(1,0) = com.sun.star.sdbc.DataType.VARBINARY &apos; = -3;
ImgWidthList(1,1) = cImageControl
ImgWidthList(1,2) = False
ImgWidthList(1,3) = &quot;ImageControl&quot;
ImgWidthList(2,0) = com.sun.star.sdbc.DataType.LONGVARBINARY &apos; = -4;
ImgWidthList(2,1) = cImageControl
ImgWidthList(2,2) = False
ImgWidthList(2,3) = &quot;ImageControl&quot;
ImgWidthList(3,0) = com.sun.star.sdbc.DataType.BLOB &apos; = 2004;
ImgWidthList(3,1) = cImageControl
ImgWidthList(3,2) = False
ImgWidthList(3,3) = &quot;ImageControl&quot;
&apos; Note: the following Fieldtypes are ignored
&apos;ExcludeList(0) = com.sun.star.sdbc.DataType.SQLNULL
&apos;ExcludeList(1) = com.sun.star.sdbc.DataType.OTHER
&apos;ExcludeList(2) = com.sun.star.sdbc.DataType.OBJECT
&apos;ExcludeList(3) = com.sun.star.sdbc.DataType.DISTINCT
&apos;ExcludeList(4) = com.sun.star.sdbc.DataType.STRUCT
&apos;ExcludeList(5) = com.sun.star.sdbc.DataType.ARRAY
&apos;ExcludeList(6) = com.sun.star.sdbc.DataType.CLOB
&apos;ExcludeList(7) = com.sun.star.sdbc.DataType.REF
oModelService(cLabel) = &quot;com.sun.star.form.component.FixedText&quot;
oModelService(cTextBox) = &quot;com.sun.star.form.component.TextField&quot;
oModelService(cCheckBox) = &quot;com.sun.star.form.component.CheckBox&quot;
oModelService(cDateBox) = &quot;com.sun.star.form.component.DateField&quot;
oModelService(cTimeBox) = &quot;com.sun.star.form.component.TimeField&quot;
oModelService(cNumericBox) = &quot;com.sun.star.form.component.FormattedField&quot;
oModelService(cGridControl) = &quot;com.sun.star.form.component.GridControl&quot;
oModelService(cImageControl) = &quot;com.sun.star.form.component.DatabaseImageControl&quot;
End Sub
</script:module>

View File

@@ -0,0 +1,397 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Layouter" script:language="StarBasic">Option Explicit
Public oProgressbar as Object
Public ProgressValue as Integer
Public oDocument as Object
Public oController as Object
Public oForm as Object
Public oDrawPage as Object
Public oPageStyle as Object
Public nMaxColRightX as Long
Public nMaxTCWidth as Long
Public nMaxRowRightX as Long
Public nMaxRowY as Long
Public nSecMaxRowY as Long
Public MaxIndex as Integer
Public CurIndex as Integer
Public Const cVertDistance = 200
Public Const cHoriDistance = 300
Public nPageWidth as Long
Public nPageHeight as Long
Public nFormWidth as Long
Public nFormHeight as Long
Public nMaxHoriPos as Long
Public nMaxVertPos as Long
Public CONST SBALIGNLEFT = 0
Public CONST SBALIGNRIGHT = 2
Public Const SBNOBORDER = 0
Public Const SB3DBORDER = 1
Public Const SBSIMPLEBORDER = 2
Public CurArrangement as Integer
Public CurBorderType as Integer
Public CurAlignmode as Integer
Public OldAlignMode as Integer
Public OldBorderType as Integer
Public OldArrangement as Integer
Public Const cColumnarLeft = 1
Public Const cColumnarTop = 2
Public Const cTabled = 3
Public Const cLeftJustified = 4
Public Const cTopJustified = 5
Public Const cXOffset = 1000
Public Const cYOffset = 700
&apos; This is the viewed space that we lose because of the symbol bars
Public Const cSymbolMargin = 2000
Public Const MaxFieldIndex = 200
Public Const cControlCollectionCount = 9
Public Const cLabel = 1
Public Const cTextBox = 2
Public Const cCheckBox = 3
Public Const cDateBox = 4
Public Const cTimeBox = 5
Public Const cNumericBox = 6
Public Const cCurrencyBox = 7
Public Const cGridControl = 8
Public Const cImageControl = 9
Public Styles(100, 8) as String
Public CurControlType as Integer
Public CurFieldlength as Double
Public CurFieldType as Integer
Public CurFieldName as String
Public CurControlName as String
Public CurFormatKey as Long
Public CurDefaultValue
Public CurIsCurrency as Boolean
Public CurScale as Integer
Public CurHelpText as String
Public FieldMetaValues(MaxFieldIndex, 8)
&apos; Description of this List:
&apos; CurFieldType = FieldMetaValues(Index,0)
&apos; CurFieldLength = FieldMetaValues(Index,1)
&apos; CurControlType = FieldMetaValues(Index,2) (ControlType, e.g., cLabel, cTextbox, etc.)
&apos; CurControlName = FieldMetaValues(Index,3)
&apos; CurFormatKey = FieldMetaValues(Index,4)
&apos; CurDefaultValue = FieldMetaValues(Index,5)
&apos; CurIsCurrency = FieldMetaValues(Index,6)
&apos; CurScale = FieldMetaValues(Index,7)
&apos; CurHelpText = FieldMetaValues(Index,8)
Public FieldNames(MaxFieldIndex) as string
Public oModelService(cControlCollectionCount) as String
Public oGridModel as Object
Function InsertControl(oContainer as Object, oControlObject as object, aPoint as Object, aSize as Object)
Dim oShape as object
oShape = oDocument.CreateInstance (&quot;com.sun.star.drawing.ControlShape&quot;)
oShape.Size = aSize
oShape.Position = aPoint
oShape.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
oShape.control = oControlObject
oContainer.Add(oShape)
InsertControl() = oShape
End Function
Function ArrangeControls()
Dim oShape as Object
Dim i as Integer
oProgressbar = oDocument.GetCurrentController.GetFrame.CreateStatusIndicator
oProgressbar.Start(&quot;&quot;, MaxIndex)
If oDBForm.HasbyName(&quot;Grid1&quot;) Then
RemoveShapes()
End If
ToggleLayoutPage(False)
Select Case CurArrangement
Case cTabled
PositionGridControl(MaxIndex)
Case Else
PositionControls(MaxIndex)
End Select
ToggleLayoutPage(True)
oProgressbar.End
End Function
Sub OpenFormDocument()
Dim NoArgs() as new com.sun.star.beans.PropertyValue
Dim oViewSettings as Object
oDocument = CreateNewDocument(&quot;swriter&quot;)
oProgressbar = oDocument.GetCurrentController.GetFrame.CreateStatusIndicator()
oProgressbar.Start(&quot;&quot;, 100)
oDocument.ApplyFormDesignMode = False
oController = oDocument.GetCurrentController
oViewSettings = oDocument.CurrentController.ViewSettings
oViewSettings.ShowTableBoundaries = False
oViewSettings.ShowOnlineLayout = True
oDrawPage = oDocument.DrawPage
oPageStyle = oDocument.StyleFamilies.GetByName(&quot;PageStyles&quot;).GetByName(&quot;Standard&quot;)
End Sub
Sub InitializeLabelValues()
Dim oLabelModel as Object
Dim oTBModel as Object
Dim oLabelShape as Object
Dim oTBShape as Object
Dim aTBSize As New com.sun.star.awt.Size
Dim aLabelSize As New com.sun.star.awt.Size
Dim aPoint As New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size
Dim oLocControl as Object
Dim oLocPeer as Object
oLabelModel = CreateUnoService(&quot;com.sun.star.form.component.FixedText&quot;)
oTBModel = CreateUnoService(&quot;com.sun.star.form.component.TextField&quot;)
Set oLabelShape = InsertControl(oDrawPage, oLabelModel, aPoint, aLabelSize)
Set oTBShape = InsertControl(oDrawPage, oTBModel, aPoint, aSize)
oLocPeer = oController.GetControl(oLabelModel).Peer
XPixelFactor = 100000/oLocPeer.GetInfo.PixelPerMeterX
YPixelFactor = 100000/oLocPeer.GetInfo.PixelPerMeterY
aLabelSize = GetPeerSize(oLabelModel, oLocControl, &quot;The quick brown fox...&quot;)
nTCHeight = (aLabelSize.Height+1) * YPixelFactor
aTBSize = GetPeerSize(oTBModel, oLocControl, &quot;The quick brown fox...&quot;)
nDBRefHeight = (aTBSize.Height+1) * YPixelFactor
BasicLabelDiffHeight = Clng((nDBRefHeight - nTCHeight)/2)
oDrawPage.Remove(oLabelShape)
oDrawPage.Remove(oTBShape)
End Sub
Sub ConfigurePageStyle()
Dim aPageSize As New com.sun.star.awt.Size
Dim aSize As New com.sun.star.awt.Size
oPageStyle.IsLandscape = True
aPageSize = oPageStyle.Size
nPageWidth = aPageSize.Width
nPageHeight = aPageSize.Height
aSize.Width = nPageHeight
aSize.Height = nPageWidth
oPageStyle.Size = aSize
nPageWidth = nPageHeight
nPageHeight = oPageStyle.Size.Height
nFormWidth = nPageWidth - oPageStyle.RightMargin - oPageStyle.LeftMargin - 2 * cXOffset
nFormHeight = nPageHeight - oPageStyle.TopMargin - oPageStyle.BottomMargin - 2 * cYOffset - cSymbolMargin
End Sub
&apos; Modify the Borders of the Controls
Sub ChangeBorderLayouts(oEvent as Object)
Dim oModel as Object
Dim i as Integer
Dim oCurModel as Object
Dim sLocText as String
Dim oGroupShape as Object
Dim s as Integer
If Not bDebug Then
On Local Error GoTo WIZARDERROR
End If
oModel = oEvent.Source.Model
SwitchBorderMode(Val(Right(oModel.Name,1)))
ToggleLayoutPage(False)
If CurArrangement = cTabled Then
oGridModel.Border = CurBorderType
Else
If OldBorderType &lt;&gt; CurBorderType Then
For i = 0 To MaxIndex
If oDBShapeList(i).SupportsService(&quot;com.sun.star.drawing.GroupShape&quot;) Then
oGroupShape = oDBShapeList(i)
For s = 0 To oGroupShape.Count-1
oGroupShape(s).Control.Border = CurBorderType
Next s
Else
If oDBModelList(i).PropertySetInfo.HasPropertyByName(&quot;Border&quot;) Then
oDBModelList(i).Border = CurBorderType
End If
End If
Next i
End If
End If
ToggleLayoutPage(True)
WIZARDERROR:
If Err &lt;&gt; 0 Then
Msgbox(sMsgErrMsg, 16, GetProductName())
Resume LOCERROR
LOCERROR:
DlgFormDB.Dispose()
End If
End Sub
Sub ChangeLabelAlignments(oEvent as Object)
Dim i as Integer
Dim oSize as New com.sun.star.awt.Size
Dim oModel as Object
If Not bDebug Then
On Local Error GoTo WIZARDERROR
End If
oModel = oEvent.Source.Model
SwitchAlignMode(Val(Right(oModel.Name,1)))
ToggleLayoutPage(False)
If OldAlignMode &lt;&gt; CurAlignMode Then
For i = 0 To MaxIndex
oTCShapeList(i).GetControl.Align = CurAlignmode
Next i
End If
If CurAlignmode = com.sun.star.awt.TextAlign.RIGHT Then
For i = 0 To Ubound(oTCShapeList())
oSize = oTCShapeList(i).Size
oSize.Width = oDBShapeList(i).Position.X - oTCShapeList(i).Position.X - cHoriDistance
oTCShapeList(i).Size = oSize
Next i
End If
WIZARDERROR:
If Err &lt;&gt; 0 Then
Msgbox(sMsgErrMsg, 16, GetProductName())
Resume LOCERROR
LOCERROR:
End If
ToggleLayoutPage(True)
End Sub
Sub ChangeArrangemode(oEvent as Object)
Dim oModel as Object
If Not bDebug Then
On Local Error GoTo WIZARDERROR
End If
oModel = oEvent.Source.Model
SwitchArrangementButtons(Val(Right(oModel.Name,1)))
oModel.State = 1
DlgFormDB.GetControl(&quot;cmdArrange&quot; &amp; OldArrangement).Model.State = 0
If CurArrangement &lt;&gt; OldArrangement Then
ArrangeControls()
Select Case CurArrangement
Case cTabled
ToggleBorderGroup(False)
ToggleAlignGroup(False)
Case Else &apos; cColumnarTop,cLeftJustified, cTopJustified
ToggleAlignGroup(CurArrangement = cColumnarLeft)
If CurArrangement = cColumnarTop Then
If CurAlignMode = com.sun.star.awt.TextAlign.RIGHT Then
DialogModel.optAlign0.State = 1
CurAlignMode = com.sun.star.awt.TextAlign.LEFT
OldAlignMode = com.sun.star.awt.TextAlign.RIGHT
End If
End If
ControlCaptionstoStandardLayout()
oDBForm.Load
End Select
End If
WIZARDERROR:
If Err &lt;&gt; 0 Then
Msgbox(sMsgErrMsg, 16, GetProductName())
Resume LOCERROR
LOCERROR:
End If
End Sub
Sub ToggleBorderGroup(bDoEnable as Boolean)
With DialogModel
.hlnBorderLayout.Enabled = bDoEnable
.optBorder0.Enabled = bDoEnable &apos; 0: No border
.optBorder1.Enabled = bDoEnable &apos; 1: 3D border
.optBorder2.Enabled = bDoEnable &apos; 2: simple border
End With
End Sub
Sub ToggleAlignGroup(ByVal bDoEnable as Boolean)
With DialogModel
If bDoEnable Then
bDoEnable = CurArrangement = cColumnarLeft
End If
.hlnAlign.Enabled = bDoEnable
.optAlign0.Enabled = bDoEnable
.optAlign2.Enabled = bDoEnable
End With
End Sub
Sub ToggleLayoutPage(bDoEnable as Boolean, Optional FocusControlName as String)
DialogModel.Enabled = bDoEnable
If bDoEnable Then
If Not bDebug Then
oDocument.UnlockControllers()
End If
ToggleOptionButtons(DialogModel,(bWithBackGraphic = True))
ToggleAlignGroup(bDoEnable)
ToggleBorderGroup(bDoEnable)
Else
If Not bDebug Then
oDocument.LockControllers()
End If
End If
If Not IsMissing(FocusControlName) Then
DlgFormDB.GetControl(FocusControlName).SetFocus()
End If
End Sub
Sub DestroyControlShapes(oDrawPage as Object)
Dim i as Integer
Dim oShape as Object
For i = oDrawPage.Count-1 To 0 Step -1
oShape = oDrawPage.GetByIndex(i)
If oShape.ShapeType = &quot;com.sun.star.drawing.ControlShape&quot; Then
oShape.Dispose()
End If
Next i
End Sub
Sub SwitchArrangementButtons(ByVal LocArrangement as Integer)
OldArrangement = CurArrangement
CurArrangement = LocArrangement
If OldArrangement &lt;&gt; 0 Then
DlgFormDB.GetControl(&quot;cmdArrange&quot; &amp; OldArrangement).Model.State = 0
End If
DlgFormDB.GetControl(&quot;cmdArrange&quot; &amp; CurArrangement).Model.State = 1
End Sub
Sub SwitchBorderMode(ByVal LocBorderType as Integer)
OldBorderType = CurBorderType
CurBorderType = LocBorderType
End Sub
Sub SwitchAlignMode(ByVal LocAlignMode as Integer)
OldAlignMode = CurAlignMode
CurAlignMode = LocAlignMode
End Sub</script:module>

View File

@@ -0,0 +1,550 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="develop" script:language="StarBasic">REM ***** BASIC *****
Option Explicit
Public oDBShapeList() as Object
Public oTCShapeList() as Object
Public oDBModelList() as Object
Public oGroupShapeList() as Object
Public oGridShape as Object
Public a as Integer
Public StartA as Integer
Public bIsFirstRun as Boolean
Public bIsVeryFirstRun as Boolean
Public bControlsareCreated as Boolean
Public nDBRefHeight as Long
Public nXTCPos&amp;, nYTCPos&amp;, nXDBPos&amp;, nYDBPos&amp;, nTCHeight&amp;, nTCWidth&amp;, nDBHeight&amp;, nDBWidth&amp;
Dim iReduceWidth as Integer
Function PositionControls(Maxindex as Integer)
Dim oTCModel as Object
Dim oDBModel as Object
Dim i as Integer
InitializePosSizes()
bIsFirstRun = True
bIsVeryFirstRun = True
a = 0
StartA = 0
nMaxRowY = 0
nSecMaxRowY = 0
If CurArrangement = cLeftJustified Or cTopJustified Then
DialogModel.optAlign0.State = 1
End If
For i = 0 To MaxIndex
GetCurrentMetaValues(i)
oTCModel = InsertTextControl(i)
If CurFieldType = com.sun.star.sdbc.DataType.TIMESTAMP Then
InsertTimeStampShape(i)
Else
InsertDBControl(i)
bIsVeryFirstRun = False
oDBModelList(i).LabelControl = oTCModel
End If
GetLabelDiffHeight(i+1)
ResetPosSizes(i)
oProgressbar.Value = i
Next i
ControlCaptionstoStandardLayout()
bControlsareCreated = True
End Function
Sub ResetPosSizes(LastIndex as Integer)
Select Case CurArrangement
Case cColumnarLeft
nYDBPos = nYDBPos + nDBHeight + cVertDistance
If (nYDBPos &gt; cYOffset + nFormHeight) Or (LastIndex = MaxIndex) Then
RepositionColumnarLeftControls(LastIndex)
nXTCPos = nMaxColRightX + 2 * cHoriDistance
nXDBPos = nXTCPos + cHoriDistance + nMaxTCWidth
nYDBPos = cYOffset
bIsFirstRun = True
StartA = LastIndex + 1
a = 0
Else
a = a + 1
End If
nYTCPos = nYDBPos + LABELDIFFHEIGHT
Case cColumnarTop
nYTCPos = nYDBPos + nDBHeight + cVertDistance
If nYTCPos &gt; cYOffset + nFormHeight Then
nXDBPos = nMaxColRightX + cHoriDistance
nXTCPos = nXDBPos
nYDBPos = cYOffset + nTCHeight + cVertDistance
nYTCPos = cYOffset
bIsFirstRun = True
StartA = LastIndex + 1
a = 0
Else
a = a + 1
End If
Case cLeftJustified,cTopJustified
If nMaxColRightX &gt; cXOffset + nFormWidth Then
Dim nOldYTCPos as Long
nOldYTCPos = nYTCPos
CheckJustifiedPosition()
Else
nXTCPos = nMaxColRightX + CHoriDistance
If CurArrangement = cLeftJustified Then
nYTCPos = nYDBPos + LabelDiffHeight
End If
End If
a = a + 1
End Select
End Sub
Sub RepositionColumnarLeftControls(LastIndex as Integer)
Dim aSize As New com.sun.star.awt.Size
Dim aPoint As New com.sun.star.awt.Point
Dim i as Integer
aSize = GetSize(nMaxTCWidth, nTCHeight)
bIsFirstRun = True
For i = StartA To LastIndex
If i = StartA Then
nXTCPos = oTCShapeList(i).Position.X
nXDBPos = nXTCPos + nMaxTCWidth + cHoriDistance
End If
ResetDBShape(oDBShapeList(i), nXDBPos)
CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
Next i
End Sub
Sub ResetDBShape(oLocDBShape as Object, iXPos as Long)
Dim aSize As New com.sun.star.awt.Size
Dim aPoint As New com.sun.star.awt.Point
nYDBPos = oLocDBShape.Position.Y
nDBWidth = oLocDBShape.Size.Width
nDBHeight = oLocDBShape.Size.Height
aPoint = GetPoint(iXPos,nYDBPos)
oLocDBShape.SetPosition(aPoint)
End Sub
Sub InitializePosSizes()
nXTCPos = cXOffset
nTCWidth = 2000
nDBWidth = 2000
nDBHeight = nDBRefHeight
iReduceWidth = 0
Select Case CurArrangement
Case cColumnarLeft, cLeftJustified
GetLabelDiffHeight(0)
nYTCPos = cYOffset + LABELDIFFHEIGHT
nXDBPos = cXOffset + 3050
nYDBPos = cYOffset
Case cColumnarTop, cTopJustified
nXDBPos = cXOffset
nYTCPos = cYOffset
End Select
End Sub
Function InsertTextControl(i as Integer) as Object
Dim oShape as Object
Dim oModel as Object
Dim aPoint as New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size
If bControlsareCreated Then
Set oShape = oTCShapeList(i)
Set oModel = oShape.GetControl
If CurArrangement = cLeftJustified Then
nTCWidth = GetPreferredWidth(oModel, True, CurFieldname)
Else
nTCWidth = oShape.Size.Width
End If
oShape.Position = GetPoint(nXTCPos, nYTCPos)
If CurArrangement = cColumnarTop Then
oModel.Align = com.sun.star.awt.TextAlign.LEFT
End If
Else
oModel = CreateUnoService(oModelService(cLabel))
aPoint = GetPoint(nXTCPos, nYTCPos)
aSize = GetSize(nTCWidth,nTCHeight)
Set oShape = InsertControl(oDrawPage, oModel, aPoint, aSize)
Set oTCShapeList(i)= oShape
If bIsVeryFirstRun Then
If CurArrangement = cColumnarTop Then
nYDBPos = nYTCPos + nTCHeight
End If
End If
nTCWidth = GetPreferredWidth(oModel, True, CurFieldName)
End If
If CurArrangement = cColumnarLeft Then
&apos; Note This If Sequence must be called before retrieving the outer Points
If bIsFirstRun Then
nMaxTCWidth = nTCWidth
bIsFirstRun = False
ElseIf nTCWidth &gt; nMaxTCWidth Then
nMaxTCWidth = nTCWidth
End If
End If
CheckOuterPoints(oShape.Position.X, nTCWidth, nYTCPos, nTCHeight, False)
Select Case CurArrangement
Case cLeftJustified
nXDBPos = nMaxColRightX
Case cColumnarTop,cTopJustified
oModel.Align = com.sun.star.awt.TextAlign.LEFT
nXDBPos = nXTCPos
nYDBPos = nYTCPos + nTCHeight
If CurFieldLength = 20 And nDBWidth &gt; 2 * nTCWidth Then
iReduceWidth = iReduceWidth + 1
End If
End Select
oShape.SetSize(GetSize(nTCWidth,nTCHeight))
If CurHelpText &lt;&gt; &quot;&quot; Then
oModel.HelpText = CurHelptext
End If
InsertTextControl = oModel
End Function
Sub InsertDBControl(i as Integer)
Dim aPoint as New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size
Dim oControl as Object
Dim iColRightX as Long
aPoint = GetPoint(nXDBPos, nYDBPos)
If bControlsAreCreated Then
oDBShapeList(i).Position = aPoint
Else
oDBModelList(i) = CreateUnoService(oModelService(CurControlType))
oDBShapeList(i) = InsertControl(oDrawPage, oDBModelList(i), aPoint, aSize)
SetNumerics(oDBModelList(i), CurFieldType)
If CurControlType = cCheckBox Then
oDBModelList(i).Label = &quot;&quot;
End If
oDBModelList(i).DataField = CurFieldName
End If
nDBHeight = GetDBHeight(oDBModelList(i))
nDBWidth = GetPreferredWidth(oDBModelList(i),True)
aSize = GetSize(nDBWidth,nDBHeight)
oDBShapeList(i).SetSize(aSize)
CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
End Sub
Function InsertTimeStampShape(i as Integer) as Object
Dim oDateModel as Object
Dim oTimeModel as Object
Dim oDateShape as Object
Dim oTimeShape as Object
Dim oDateTimeShape as Object
Dim aPoint as New com.sun.star.awt.Point
Dim aSize as New com.sun.star.awt.Size
Dim nDateWidth as Long
Dim nTimeWidth as Long
Dim oGroupShape as Object
aPoint = GetPoint(nXDBPos, nYDBPos)
If bControlsAreCreated Then
oDBShapeList(i).Position = aPoint
nDBWidth = oDBShapeList(i).Size.Width
nDBHeight = oDBShapeList(i).Size.Height
Else
oGroupShape = oDocument.CreateInstance(&quot;com.sun.star.drawing.GroupShape&quot;)
oGroupShape.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
oDrawPage.Add(oGroupShape)
CurFieldType = com.sun.star.sdbc.DataType.DATE
oDateModel = CreateUnoService(&quot;com.sun.star.form.component.DateField&quot;)
oDateModel.DataField = CurFieldName
oDateShape = InsertControl(oGroupShape, oDateModel, aPoint, aSize)
SetNumerics(oDateModel, CurFieldType)
nDBHeight = GetDBHeight(oDateModel)
nDateWidth = GetPreferredWidth(oDateModel,True)
aSize = GetSize(nDateWidth,nDBHeight)
oDateShape.SetSize(aSize)
CurFieldType = com.sun.star.sdbc.DataType.TIME
oTimeModel = CreateUnoService(&quot;com.sun.star.form.component.TimeField&quot;)
oTimeModel.DataField = CurFieldName
oTimeShape = InsertControl(oGroupShape, oTimeModel, aPoint, aSize)
oTimeShape.Position = GetPoint(nXDBPos + 10 + nDateWidth,nYDBPos)
nTimeWidth = GetPreferredWidth(oTimeModel)
aSize = GetSize(nTimeWidth,nDBHeight)
oTimeShape.SetSize(aSize)
nDBWidth = nDateWidth + nTimeWidth + 10
oGroupShape.Position = aPoint
oGroupShape.Size = GetSize(nDBWidth, nDBHeight)
Set oDBShapeList(i)= oGroupShape
End If
CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
InsertTimeStampShape() = oDBShapeList(i)
End Function
&apos; Note: on all Controls except for the checkbox the Label has to be set
&apos; a bit under the DBControl because its Height is also smaller
Sub GetLabelDiffHeight(Index as Integer)
If (CurArrangement = cLeftJustified) Or (CurArrangement = cColumnarLeft) Then
If Index &lt;= Ubound(FieldMetaValues()) Then
If FieldMetaValues(Index,2) = cCheckBox Then
LabelDiffHeight = 0
Else
LabelDiffHeight = BasicLabelDiffHeight
End If
End If
End If
End Sub
Sub CheckJustifiedPosition()
Dim nLeftDist as Long
Dim nRightDist as Long
Dim oLocDBShape as Object
Dim oLocTextShape as Object
Dim nBaseWidth as Long
nBaseWidth = nFormWidth + cXOffset
nLeftDist = nMaxColRightX - nBaseWidth
nRightDist = nBaseWidth - nXTCPos + cHoriDistance
If nLeftDist &lt; 0.5 * nRightDist and iReduceWidth &gt; 2 Then
&apos; Fieldwidths in the line can be made smaller
AdjustLineWidth(StartA, a, nLeftDist, - 1)
If CurArrangement = cLeftjustified Then
nYDBPos = nMaxRowY + cVertDistance
nYTCPos = nYDBPos + LABELDIFFHEIGHT
nXTCPos = cXOffset
Else
nYTCPos = nMaxRowY + cVertDistance
nYDBPos = nYTCPos + nTCHeight
nXTCPos = cXOffset
nXDBPos = cXOffset
End If
bIsFirstRun = True
StartA = a + 1
Else
Set oLocDBShape = oDBShapeList(a)
Set oLocTextShape = oTCShapeList(a)
If CurArrangement = cLeftJustified Then
If nYDBPos + nDBHeight = nMaxRowY Then
&apos; The last Control was the highest in the row
nYDBPos = nSecMaxRowY + cVertDistance
Else
nYDBPos = nMaxRowY + cVertDistance
End If
nYTCPos = nYDBPos + LABELDIFFHEIGHT
nXDBPos = cXOffset + nTCWidth
oLocTextShape.Position = GetPoint(cXOffset, nYTCPos)
oLocDBShape.Position = GetPoint(nXDBPos, nYDBPos)
&apos; PosSizes for the next two Controls
nXTCPos = oLocDBShape.Position.X + oLocDBShape.Size.Width + cHoriDistance
bIsFirstRun = True
CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
nXDBPos = nMaxColRightX + cHoriDistance
Else &apos; cTopJustified
If nYDBPos + nDBHeight = nMaxRowY Then
&apos; The last Control was the highest in the row
nYTCPos = nSecMaxRowY + cVertDistance
Else
nYTCPos = nMaxRowY + cVertDistance
End If
nYDBPos = nYTCPOS + nTCHeight
nXDBPos = cXOffset
nXTCPos = cXOffset
oLocTextShape.Position = GetPoint(cXOffset, nYTCPos)
oLocDBShape.Position = GetPoint(cXOffset, nYDBPos)
bIsFirstRun = True
If nDBWidth &gt; nTCWidth Then
CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
Else
CheckOuterPoints(nXDBPos, nTCWidth, nYDBPos, nDBHeight, True)
End If
nXTCPos = nMaxColRightX + cHoriDistance
nXDBPos = nXTCPos
End If
AdjustLineWidth(StartA, a-1, nRightDist, 1)
StartA = a
End If
iReduceWidth = 0
End Sub
Function GetCorrWidth(StartIndex as Integer, EndIndex as Integer, nDist as Long, Widthfactor as Integer) as Integer
Dim ShapeCount as Integer
If WidthFactor &gt; 0 Then
ShapeCount = EndIndex-StartIndex + 1
Else
ShapeCount = iReduceWidth
End If
GetCorrWidth() = (nDist)/ShapeCount
End Function
Sub AdjustLineWidth(StartIndex as Integer, EndIndex as Integer, nDist as Long, Widthfactor as Integer)
Dim i as Integer
Dim oLocDBShape as Object
Dim oLocTCShape as Object
Dim CorrWidth as Integer
Dim bAdjustPos as Boolean
Dim iLocTCPosX as Long
Dim iLocDBPosX as Long
CorrWidth = GetCorrWidth(StartIndex, EndIndex, nDist, Widthfactor)
bAdjustPos = False
iLocTCPosX = cXOffset
For i = StartIndex To EndIndex
Set oLocDBShape = oDBShapeList(i)
Set oLocTCShape = oTCShapeList(i)
If bAdjustPos Then
oLocTCShape.Position = GetPoint(iLocTCPosX, oLocTCShape.Position.Y)
If CurArrangement = cLeftJustified Then
iLocDBPosX = oLocTCShape.Position.X + oLocTCShape.Size.Width
oLocDBShape.Position = GetPoint(iLocDBPosX, oLocDBShape.Position.Y)
Else
oLocDBShape.Position = GetPoint(iLocTCPosX, oLocTCShape.Position.Y + nTCHeight)
End If
Else
bAdjustPos = True
End If
If CDbl(FieldMetaValues(i,1)) &gt; 20 or WidthFactor &gt; 0 Then
If (CurArrangement = cTopJustified) And (oLocTCShape.Size.Width &gt; oLocDBShape.Size.Width) Then
oLocDBShape.Size = GetSize(oLocTCShape.Size.Width + WidthFactor * CorrWidth, oLocDBShape.Size.Height)
Else
oLocDBShape.Size = GetSize(oLocDBShape.Size.Width + WidthFactor * CorrWidth, oLocDBShape.Size.Height)
End If
End If
iLocTCPosX = oLocDBShape.Position.X + oLocDBShape.Size.Width + cHoriDistance
If CurArrangement = cTopJustified Then
If oLocTCShape.Size.Width &gt; oLocDBShape.Size.Width Then
iLocTCPosX = oLocDBShape.Position.X + oLocTCShape.Size.Width + cHoriDistance
End If
End If
Next i
End Sub
Sub CheckOuterPoints(nXPos, nWidth, nYPos, nHeight, bIsDBField as Boolean)
Dim nColRightX as Long
Dim nRowY as Long
Dim nOldMaxRowY as Long
If CurArrangement = cLeftJustified Or CurArrangement = cTopJustified Then
If bIsDBField Then
&apos; Only at DBControls you can measure the Value of nMaxRowY
If bIsFirstRun Then
nMaxRowY = nYPos + nHeight
nSecMaxRowY = nMaxRowY
Else
nRowY = nYPos + nHeight
If nRowY &gt;= nMaxRowY Then
nOldMaxRowY = nMaxRowY
nSecMaxRowY = nOldMaxRowY
nMaxRowY = nRowY
End If
End If
End If
End If
&apos; Find the outer right point
If bIsFirstRun Then
nMaxColRightX = nXPos + nWidth
bIsFirstRun = False
Else
nColRightX = nXPos + nWidth
If nColRightX &gt; nMaxColRightX Then
nMaxColRightX = nColRightX
End If
End If
End Sub
Function PositionGridControl(MaxIndex as Integer)
Dim oControl as Object
Dim n as Integer
Dim oColumn as Object
Dim aPoint as New com.sun.star.awt.Point
Dim aSize as New com.sun.star.awt.Size
If bControlsareCreated Then
ShapesToNirwana()
End If
oGridModel = CreateUnoService(oModelService(cGridControl))
oGridModel.Name = &quot;Grid1&quot;
aPoint = GetPoint(cXOffset, cYOffset)
aSize = GetSize(nFormWidth, nFormHeight)
oDBForm.InsertByName (oGridModel.Name, oGridModel)
oGridShape = InsertControl(oDrawPage, oGridModel, aPoint, aSize)
For n = 0 to MaxIndex
GetCurrentMetaValues(n)
If CurFieldType = com.sun.star.sdbc.DataType.TIMESTAMP Then
oColumn = SetupGridColumn(oGridModel,&quot;DateField&quot;, False, com.sun.star.sdbc.DataType.DATE, CurFieldName &amp; &quot; &quot; &amp; sDateAppendix)
oColumn = SetupGridColumn(oGridModel,&quot;TimeField&quot;, False, com.sun.star.sdbc.DataType.TIME, CurFieldName &amp; &quot; &quot; &amp; sTimeAppendix)
Else
If CurControlType = cImageControl Then
oColumn = SetupGridColumn(oGridModel,&quot;TextField&quot;, True, CurFieldType, CurFieldName)
Else
oColumn = SetupGridColumn(oGridModel, CurControlName, False, CurFieldType, CurFieldName)
End If
End If
oProgressbar.Value = n
next n
End Function
Function SetupGridColumn(oGridModel as Object, ControlName as String, bHidden as Boolean, iLocFieldType as Integer, ColName as String) as Object
Dim oColumn as Object
CurControlName = ControlName
oColumn = oGridModel.CreateColumn(CurControlName)
oColumn.Name = CalcUniqueContentName(oGridModel, CurControlName)
oColumn.Hidden = bHidden
SetNumerics(oColumn, iLocFieldType)
oColumn.DataField = CurFieldName
oColumn.Label = ColName
oColumn.Width = 0 &apos; Width of column is adjusted to Columname
oGridModel.insertByName(oColumn.Name, oColumn)
End Function
Sub ControlCaptionstoStandardLayout()
Dim i as Integer
Dim iBorderType as Integer
Dim oCurModel as Object
Dim oStyle as Object
Dim iStandardColor as Long
If CurArrangement &lt;&gt; cTabled Then
oStyle = oDocument.StyleFamilies.GetByName(&quot;ParagraphStyles&quot;).GetByName(&quot;Standard&quot;)
iStandardColor = oStyle.CharColor
For i = 0 To MaxIndex
oCurModel = oTCShapeList(i).GetControl
If i = 0 Then
If oCurModel.TextColor = iStandardColor Then
Exit Sub
End If
End If
oCurModel.TextColor = iStandardColor
Next i
End If
End Sub
Sub GroupShapesTogether()
Dim i as Integer
If CurArrangement &lt;&gt; cTabled Then
For i = 0 To MaxIndex
oGroupShapeList(i) = CreateUnoService(&quot;com.sun.star.drawing.ShapeCollection&quot;)
oGroupShapeList(i).Add(oTCShapeList(i))
oGroupShapeList(i).Add(oDBShapeList(i))
oDrawPage.Group(oGroupShapeList(i))
Next i
Else
RemoveNirwanaShapes()
End If
End Sub</script:module>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="FormWizard" library:readonly="true" library:passwordprotected="false">
<library:element library:name="DlgFormDB"/>
</library:library>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="FormWizard" library:readonly="true" library:passwordprotected="false">
<library:element library:name="FormWizard"/>
<library:element library:name="Layouter"/>
<library:element library:name="Language"/>
<library:element library:name="DBMeta"/>
<library:element library:name="tools"/>
<library:element library:name="develop"/>
</library:library>

View File

@@ -0,0 +1,363 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="tools" script:language="StarBasic">REM ***** BASIC *****
Option Explicit
Public Const SBMAXTEXTSIZE = 50
Function SetProgressValue(iValue as Integer)
If iValue = 0 Then
oProgressbar.End
End If
ProgressValue = iValue
oProgressbar.Value = iValue
End Function
Function GetPreferredWidth(oModel as Object, bGetMaxWidth as Boolean, Optional LocText)
Dim aPeerSize as new com.sun.star.awt.Size
Dim nWidth as Integer
Dim oControl as Object
If Not IsMissing(LocText) Then
&apos; Label
aPeerSize = GetPeerSize(oModel, oControl, LocText)
ElseIf CurControlType = cImageControl Then
GetPreferredWidth() = 2000
Exit Function
Else
aPeerSize = GetPeerSize(oModel, oControl)
End If
nWidth = aPeerSize.Width
&apos; We increase the preferred Width a bit so that the control does not become too small
&apos; when we change the border from &quot;3D&quot; to &quot;Flat&quot;
GetPreferredWidth = (nWidth + 10) * XPixelFactor &apos; PixelTo100thmm(nWidth)
End Function
Function GetPreferredHeight(oModel as Object, Optional LocText)
Dim aPeerSize as new com.sun.star.awt.Size
Dim nHeight as Integer
Dim oControl as Object
If Not IsMissing(LocText) Then
&apos; Label
aPeerSize = GetPeerSize(oModel, oControl, LocText)
ElseIf CurControlType = cImageControl Then
GetPreferredHeight() = 2000
Exit Function
Else
aPeerSize = GetPeerSize(oModel, oControl)
End If
nHeight = aPeerSize.Height
&apos; We increase the preferred Height a bit so that the control does not become too small
&apos; when we change the border from &quot;3D&quot; to &quot;Flat&quot;
GetPreferredHeight = (nHeight+1) * YPixelFactor &apos; PixelTo100thmm(nHeight)
End Function
Function GetPeerSize(oModel as Object, oControl as Object, Optional LocText)
Dim oPeer as Object
Dim aPeerSize as new com.sun.star.awt.Size
Dim NullValue
oControl = oController.GetControl(oModel)
oPeer = oControl.GetPeer()
If oControl.Model.PropertySetInfo.HasPropertybyName(&quot;EffectiveMax&quot;) Then
If oControl.Model.EffectiveMax = 0 Then
&apos; This is relevant for decimal fields
oControl.Model.EffectiveValue = 999.9999
Else
oControl.Model.EffectiveValue = oControl.Model.EffectiveMax
End If
GetPeerSize() = oPeer.PreferredSize()
oControl.Model.EffectiveValue = NullValue
ElseIf Not IsMissing(LocText) Then
oControl.Text = LocText
GetPeerSize() = oPeer.PreferredSize()
ElseIf CurFieldType = com.sun.star.sdbc.DataType.BIT Then
GetPeerSize() = oPeer.PreferredSize()
ElseIf CurFieldType = com.sun.star.sdbc.DataType.BOOLEAN Then
GetPeerSize() = oPeer.PreferredSize()
ElseIf CurFieldType = com.sun.star.sdbc.DataType.DATE Then
oControl.Model.Date = Date
GetPeerSize() = oPeer.PreferredSize()
oControl.Model.Date = NullValue
ElseIf CurFieldType = com.sun.star.sdbc.DataType.TIME Then
oControl.Time = Time
GetPeerSize() = oPeer.PreferredSize()
oControl.Time = NullValue
Else
If oControl.MaxTextLen &gt; SBMAXTEXTSIZE Then
oControl.Text = Mid(SBSIZETEXT,1, SBMAXTEXTSIZE)
Else
oControl.Text = Mid(SBSIZETEXT,1, oControl.MaxTextLen)
End If
GetPeerSize() = oPeer.PreferredSize()
oControl.Text = &quot;&quot;
End If
End Function
Function TwipToCM(ByVal nValue as long) as String
TwipToCM = trim(str(nValue / 567)) + &quot;cm&quot;
End function
Function TwipTo100telMM(ByVal nValue as long) as long
TwipTo100telMM = nValue / 0.567
End function
Function TwipToPixel(ByVal nValue as long) as long &apos; not an exact calculation
TwipToPixel = nValue / 15
End function
Function PixelTo100thMMX(oControl as Object) as long
oPeer = oControl.GetPeer()
PixelTo100mmX = Clng(Peer.GetInfo.PixelPerMeterX/100000)
&apos; PixelTo100thMM = nValue * 28 &apos; not an exact calculation
End function
Function PixelTo100thMMY(oControl as Object) as long
oPeer = oControl.GetPeer()
PixelTo100mmX = Clng(Peer.GetInfo.PixelPerMeterY/100000)
&apos; PixelTo100thMM = nValue * 28 &apos; not an exact calculation
End function
Function GetPoint(xPos, YPos) as New com.sun.star.awt.Point
Dim aPoint as New com.sun.star.awt.Point
aPoint.X = xPos
aPoint.Y = yPos
GetPoint() = aPoint
End Function
Function GetSize(iWidth, iHeight) As New com.sun.star.awt.Size
Dim aSize As New com.sun.star.awt.Size
aSize.Width = iWidth
aSize.Height = iHeight
GetSize() = aSize
End Function
Sub ImportStyles()
Dim OldIndex as Integer
If Not bDebug Then
On Local Error GoTo WIZARDERROR
End If
OldIndex = CurIndex
CurIndex = GetCurIndex(DialogModel.lstStyles, Styles(),8)
If CurIndex &lt;&gt; OldIndex Then
ToggleLayoutPage(False)
Dim sImportPath as String
sImportPath = Styles(CurIndex, 8)
bWithBackGraphic = LoadNewStyles(oDocument, DialogModel, CurIndex, sImportPath, Styles(), TexturePath)
ControlCaptionsToStandardLayout()
ToggleLayoutPage(True, &quot;lstStyles&quot;)
End If
WIZARDERROR:
If Err &lt;&gt; 0 Then
Msgbox(sMsgErrMsg, 16, GetProductName())
Resume LOCERROR
LOCERROR:
End If
End Sub
Function SetNumerics(ByVal oLocObject as Object, iLocFieldType as Integer) as Object
If CurControlType = cNumericBox Then
oLocObject.TreatAsNumber = True
Select Case iLocFieldType
Case com.sun.star.sdbc.DataType.BIGINT
oLocObject.EffectiveMax = 2147483647 * 2147483647
oLocObject.EffectiveMin = -(-2147483648 * -2147483648)
&apos; oLocObject.DecimalAccuracy = 0
Case com.sun.star.sdbc.DataType.INTEGER
oLocObject.EffectiveMax = 2147483647
oLocObject.EffectiveMin = -2147483648
Case com.sun.star.sdbc.DataType.SMALLINT
oLocObject.EffectiveMax = 32767
oLocObject.EffectiveMin = -32768
Case com.sun.star.sdbc.DataType.TINYINT
oLocObject.EffectiveMax = 127
oLocObject.EffectiveMin = -128
Case com.sun.star.sdbc.DataType.FLOAT, com.sun.star.sdbc.DataType.REAL, com.sun.star.sdbc.DataType.DOUBLE, com.sun.star.sdbc.DataType.DECIMAL, com.sun.star.sdbc.DataType.NUMERIC
&apos;Todo: oLocObject.DecimalAccuracy = ...
oLocObject.EffectiveDefault = CurDefaultValue
&apos; Todo: HelpText???
End Select
If oLocObject.PropertySetinfo.HasPropertyByName(&quot;Width&quot;)Then &apos; Note: an Access AutoincrementField does not provide this property Width
oLocObject.Width = CurFieldLength + CurScale + 1
End If
If CurIsCurrency Then
&apos;Todo: How do you set currencies?
End If
ElseIf CurControlType = cTextBox Then &apos;com.sun.star.sdbc.DataType.CHAR, com.sun.star.sdbc.DataType.VARCHAR, com.sun.star.sdbc.DataType.LONGVARCHAR
If CurFieldLength = 0 Then &apos;Or oLocObject.MaxTextLen &gt; SBMAXTEXTSIZE
oLocObject.MaxTextLen = SBMAXTEXTSIZE
CurFieldLength = SBMAXTEXTSIZE
Else
oLocObject.MaxTextLen = CurFieldLength
End If
oLocObject.DefaultText = CurDefaultValue
ElseIf CurControlType = cDateBox Then
&apos; Todo Why does this not work?: oLocObject.DefaultDate = CurDefaultValue
ElseIf CurControlType = cTimeBox Then &apos; com.sun.star.sdbc.DataType.DATE, com.sun.star.sdbc.DataType.TIME
oLocObject.DefaultTime = CurDefaultValue
&apos; Todo: Property TimeFormat? from where?
ElseIf CurControlType = cCheckBox Then
&apos; Todo Why does this not work?: oLocObject.DefaultState = CurDefaultValue
End If
If oLocObject.PropertySetInfo.HasPropertybyName(&quot;FormatKey&quot;) Then
On Local Error Resume Next
oLocObject.FormatKey = CurFormatKey
End If
End Function
&apos; Destroy all Shapes in Nirwana
Sub RemoveShapes()
Dim n as Integer
Dim oControl as Object
Dim oShape as Object
For n = oDrawPage.Count-1 To 0 Step -1
oShape = oDrawPage(n)
If oShape.Position.Y &gt; -2000 Then
oDrawPage.Remove(oShape)
End If
Next n
End Sub
&apos; Destroy all Shapes in Nirwana
Sub RemoveNirwanaShapes()
Dim n as Integer
Dim oControl as Object
Dim oShape as Object
For n = oDrawPage.Count-1 To 0 Step -1
oShape = oDrawPage(n)
If oShape.Position.Y &lt; -2000 Then
oDrawPage.Remove(oShape)
End If
Next n
End Sub
&apos; Note: as Shapes cannot be removed from the DrawPage without destroying
&apos; the object we have to park them somewhere beyond the visible area of the page
Sub ShapesToNirwana()
Dim n as Integer
Dim oControl as Object
For n = 0 To oDrawPage.Count-1
oDrawPage(n).Position = GetPoint(-20, -10000)
Next n
End Sub
Function CalcUniqueContentName(ByVal oContainer as Object, sBaseName as String) as String
Dim nPostfix as Integer
Dim sReturn as String
nPostfix = 2
sReturn = sBaseName
while (oContainer.hasByName(sReturn))
sReturn = sBaseName &amp; nPostfix
nPostfix = nPostfix + 1
Wend
CalcUniqueContentName = sReturn
End Function
Function CountItemsInArray(BigArray(), SearchItem)
Dim i as Integer
Dim MaxIndex as Integer
Dim ResCount as Integer
ResCount = 0
MaxIndex = Ubound(BigArray())
For i = 0 To MaxIndex
If SearchItem = BigArray(i) Then
ResCount = ResCount + 1
End If
Next i
CountItemsInArray() = ResCount
End Function
Function GetDBHeight(oDBModel as Object)
If CurControlType = cImageControl Then
nDBHeight = 2000
Else
If CurFieldType = com.sun.star.sdbc.DataType.LONGVARCHAR Then
oDBModel.MultiLine = True
nDBHeight = nDBRefHeight * 4
Else
nDBHeight = nDBRefHeight
End If
End If
GetDBHeight() = nDBHeight
End Function
Function GetFormWizardPaths() as Boolean
FormPath = GetOfficeSubPath(&quot;Template&quot;,&quot;../wizard/bitmap&quot;)
If FormPath &lt;&gt; &quot;&quot; Then
WizardPath = GetOfficeSubPath(&quot;Template&quot;,&quot;wizard/&quot;)
If Wizardpath &lt;&gt; &quot;&quot; Then
TexturePath = GetOfficeSubPath(&quot;Gallery&quot;, &quot;backgrounds/&quot;)
If TexturePath &lt;&gt; &quot;&quot; Then
WorkPath = GetPathSettings(&quot;Work&quot;)
If WorkPath &lt;&gt; &quot;&quot; Then
TempPath = GetPathSettings(&quot;Temp&quot;)
If TempPath &lt;&gt; &quot;&quot; Then
GetFormWizardPaths = True
Exit Function
End If
End If
End If
End If
End If
DisposeDocument(oDocument)
GetFormWizardPaths() = False
End Function
Function GetFilterName(sApplicationKey as String) as String
Dim oArgs()
Dim oFactory
Dim i as Integer
Dim Maxindex as Integer
Dim UIName as String
oFactory = createUnoService(&quot;com.sun.star.document.FilterFactory&quot;)
oArgs() = oFactory.getByName(sApplicationKey)
MaxIndex = Ubound(oArgs())
For i = 0 to MaxIndex
If (oArgs(i).Name=&quot;UIName&quot;) Then
UIName = oArgs(i).Value
Exit For
End If
next i
GetFilterName() = UIName
End Function
</script:module>

View File

@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="AutoText" script:language="StarBasic">&apos; BASIC
Option Explicit
Dim oDocument as Object
Dim sDocumentTitle as String
Sub Main()
Dim oTable as Object
Dim oRows as Object
Dim oDocuText as Object
Dim oAutoTextCursor as Object
Dim oAutoTextContainer as Object
Dim oAutogroup as Object
Dim oAutoText as Object
Dim oCharStyles as Object
Dim oContentStyle as Object
Dim oHeaderStyle as Object
Dim oGroupTitleStyle as Object
Dim n, m, iAutoCount as Integer
BasicLibraries.LoadLibrary(&quot;Tools&quot;)
sDocumentTitle = &quot;Installed AutoTexts&quot;
&apos; Open a new empty document
oDocument = CreateNewDocument(&quot;swriter&quot;)
If Not IsNull(oDocument) Then
oDocument.DocumentProperties.Title = sDocumentTitle
oDocuText = oDocument.Text
&apos; Create The Character-templates
oCharStyles = oDocument.StyleFamilies.GetByName(&quot;CharacterStyles&quot;)
&apos; The Characterstyle for the Header that describes the Title of Autotextgroups
oGroupTitleStyle = oDocument.createInstance(&quot;com.sun.star.style.CharacterStyle&quot;)
oCharStyles.InsertbyName(&quot;AutoTextGroupTitle&quot;, oGroupTitleStyle)
oGroupTitleStyle.CharWeight = com.sun.star.awt.FontWeight.BOLD
oGroupTitleStyle.CharHeight = 14
&apos; The Characterstyle for the Header that describes the Title of Autotextgroups
oHeaderStyle = oDocument.createInstance(&quot;com.sun.star.style.CharacterStyle&quot;)
oCharStyles.InsertbyName(&quot;AutoTextHeading&quot;, oHeaderStyle)
oHeaderStyle.CharWeight = com.sun.star.awt.FontWeight.BOLD
&apos; &quot;Ordinary&quot; Table Content
oContentStyle = oDocument.createInstance(&quot;com.sun.star.style.CharacterStyle&quot;)
oCharStyles.InsertbyName(&quot;TableContent&quot;, oContentStyle)
oAutoTextContainer = CreateUnoService(&quot;com.sun.star.text.AutoTextContainer&quot;)
oAutoTextCursor = oDocuText.CreateTextCursor()
oAutoTextCursor.CharStyleName = &quot;AutoTextGroupTitle&quot;
&apos; Link the Title with the following table
oAutoTextCursor.ParaKeepTogether = True
For n = 0 To oAutoTextContainer.Count - 1
oAutoGroup = oAutoTextContainer.GetByIndex(n)
oAutoTextCursor.SetString(oAutoGroup.Title)
oAutoTextCursor.CollapseToEnd()
oDocuText.insertControlCharacter(oAutoTextCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
oTable = oDocument.CreateInstance(&quot;com.sun.star.text.TextTable&quot;)
&apos; Divide the table if necessary
oTable.Split = True
&apos; oTable.KeepTogether = False
oTable.RepeatHeadLine = True
oAutoTextCursor.Text.InsertTextContent(oAutoTextCursor,oTable,False)
InsertStringToCell(&quot;AutoText Name&quot;,oTable.GetCellbyPosition(0,0), &quot;AutoTextHeading&quot;)
InsertStringToCell(&quot;AutoText Shortcut&quot;,oTable.GetCellbyPosition(1,0), &quot;AutoTextHeading&quot;)
&apos; Insert one row at the bottom of the table
oRows = oTable.Rows
iAutoCount = oAutoGroup.Count
For m = 0 To iAutoCount-1
&apos; Insert the name and the title of all Autotexts
oAutoText = oAutoGroup.GetByIndex(m)
InsertStringToCell(oAutoGroup.Titles(m), oTable.GetCellbyPosition(0, m + 1), &quot;TableContent&quot;)
InsertStringToCell(oAutoGroup.ElementNames(m), oTable.GetCellbyPosition(1, m + 1), &quot;TableContent&quot;)
If m &lt; iAutoCount-1 Then
oRows.InsertbyIndex(m + 2,1)
End If
Next m
oDocuText.insertControlCharacter(oAutoTextCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
oAutoTextCursor.CollapseToEnd()
Next n
End If
End Sub
Sub InsertStringToCell(sCellString as String, oCell as Object, sCellStyle as String)
Dim oCellCursor as Object
oCellCursor = oCell.CreateTextCursor()
oCellCursor.CharStyleName = sCellStyle
oCell.Text.insertString(oCellCursor,sCellString,False)
oDocument.CurrentController.Select(oCellCursor)
End Sub</script:module>

View File

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="ChangeAllChars" script:language="StarBasic">&apos; This macro replaces all characters in a writer-document through &quot;x&quot; or &quot;X&quot; signs.
&apos; It works on the currently activated document.
Private const UPPERREPLACECHAR = &quot;X&quot;
Private const LOWERREPLACECHAR = &quot;x&quot;
Private MSGBOXTITLE
Private NOTSAVEDTEXT
Private WARNING
Sub ChangeAllChars &apos; Change all chars in the active document
Dim oSheets, oPages as Object
Dim i as Integer
Const MBYES = 6
Const MBABORT = 2
Const MBNO = 7
BasicLibraries.LoadLibrary(&quot;Tools&quot;)
MSGBOXTITLE = &quot;Change All Characters to an &apos;&quot; &amp; UPPERREPLACECHAR &amp; &quot;&apos;&quot;
NOTSAVEDTEXT = &quot;This document has already been modified: All characters will be changed to an &quot; &amp; UPPERREPLACECHAR &amp; &quot;&apos;. Should the document be saved now?&quot;
WARNING = &quot;This macro changes all characters and numbers to an &apos;&quot; &amp; UPPERREPLACECHAR &amp; &quot;&apos; in this document.&quot;
On Local Error GoTo NODOCUMENT
oDocument = StarDesktop.ActiveFrame.Controller.Model
NODOCUMENT:
If Err &lt;&gt; 0 Then
Msgbox(WARNING &amp; chr(13) &amp; &quot;First, activate a Writer document.&quot; , 16, GetProductName())
Exit Sub
End If
On Local Error Goto 0
sDocType = GetDocumentType(oDocument)
If oDocument.IsModified And oDocument.Url &lt;&gt; &quot;&quot; Then
Status = MsgBox(NOTSAVEDTEXT, 3+32, MSGBOXTITLE)
Select Case Status
Case MBYES
oDocument.Store
Case MBABORT, MBNO
End
End Select
Else
Status = MsgBox(WARNING, 3+32, MSGBOXTITLE)
If Status = MBNO Or Status = MBABORT Then &apos; No, Abort
End
End If
End If
Select Case sDocType
Case &quot;swriter&quot;
ReplaceAllStrings(oDocument)
Case Else
Msgbox(&quot;This macro only works with Writer documents.&quot;, 16, GetProductName())
End Select
End Sub
Sub ReplaceAllStrings(oContainer as Object)
ReplaceStrings(oContainer, &quot;[a-z]&quot;, LOWERREPLACECHAR)
ReplaceStrings(oContainer, &quot;[à-þ]&quot;, LOWERREPLACECHAR)
ReplaceStrings(oContainer, &quot;[A-Z]&quot;, UPPERREPLACECHAR)
ReplaceStrings(oContainer, &quot;[À-ß]&quot;, UPPERREPLACECHAR)
ReplaceStrings(oContainer, &quot;[0-9]&quot;, UPPERREPLACECHAR)
End Sub
Sub ReplaceStrings(oContainer as Object, sSearchString, sReplaceString as String)
oReplaceDesc = oContainer.createReplaceDescriptor()
oReplaceDesc.SearchCaseSensitive = True
oReplaceDesc.SearchRegularExpression = True
oReplaceDesc.Searchstring = sSearchString
oReplaceDesc.ReplaceString = sReplaceString
oReplCount = oContainer.ReplaceAll(oReplaceDesc)
End Sub</script:module>

View File

@@ -0,0 +1,536 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="GetTexts" script:language="StarBasic">Option Explicit
&apos; Description:
&apos; This macro extracts the strings out of the currently active document and inserts them into a log document.
&apos; The aim of the macro is to provide the programmer an insight into the OpenOffice API.
&apos; It focuses on how document objects are accessed.
&apos; Therefore not only texts of the document body are retrieved but also texts of general
&apos; document objects like, annotations, charts and general document information.
Public oLogDocument, oLogText, oLogCursor, oLogHeaderStyle, oLogBodyTextStyle as Object
Public oDocument as Object
Public LogArray(1000) as String
Public LogIndex as Integer
Public oLocHeaderStyle as Object
Sub Main
Dim sDocType as String
Dim oHyperCursor as Object
Dim oCharStyles as Object
BasicLibraries.LoadLibrary(&quot;Tools&quot;)
On Local Error GoTo NODOCUMENT
oDocument = StarDesktop.ActiveFrame.Controller.Model
sDocType = GetDocumentType(oDocument)
NODOCUMENT:
If Err &lt;&gt; 0 Then
Msgbox(&quot;This macro extracts all data from the active Writer, Calc or Draw/Impress document.&quot; &amp; chr(13) &amp;_
&quot;To start this macro you have to activate a document first.&quot; , 16, GetProductName)
Exit Sub
End If
On Local Error Goto 0
&apos; Open a new document where all the texts are inserted
oLogDocument = CreateNewDocument(&quot;swriter&quot;)
If Not IsNull(oLogDocument) Then
oLogText = oLogDocument.Text
&apos; create and define the character styles of the log document
oCharStyles = oLogDocument.StyleFamilies.GetByName(&quot;CharacterStyles&quot;)
oLogHeaderStyle = oLogDocument.createInstance(&quot;com.sun.star.style.CharacterStyle&quot;)
oCharStyles.InsertbyName(&quot;Log Header&quot;, oLogHeaderStyle)
oLogHeaderStyle.charWeight = com.sun.star.awt.FontWeight.BOLD
oLogBodyTextStyle = oLogDocument.createInstance(&quot;com.sun.star.style.CharacterStyle&quot;)
oCharStyles.InsertbyName(&quot;Log Body&quot;, oLogBodyTextStyle)
&apos; Insert the title of the activated document as a hyperlink
oHyperCursor = oLogText.createTextCursor()
oHyperCursor.CharWeight = com.sun.star.awt.FontWeight.BOLD
oHyperCursor.gotoStart(False)
oHyperCursor.HyperLinkURL = oDocument.URL
oHyperCursor.HyperLinkTarget = oDocument.URL
If oDocument.DocumentProperties.Title &lt;&gt; &quot;&quot; Then
oHyperCursor.HyperlinkName = oDocument.DocumentProperties.Title
End If
oLogText.insertString(oHyperCursor, oDocument.DocumentProperties.Title, False)
oLogText.insertControlCharacter(oHyperCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
oLogCursor = oLogText.createTextCursor()
oLogCursor.GotoEnd(False)
&apos; &quot;Switch off&quot; the Hyperlink - Properties
oLogCursor.SetPropertyToDefault(&quot;HyperLinkURL&quot;)
oLogCursor.SetPropertyToDefault(&quot;HyperLinkTarget&quot;)
oLogCursor.SetPropertyToDefault(&quot;HyperLinkName&quot;)
LogIndex = 0
&apos; Get the Properties of the document
GetDocumentProps()
Select Case sDocType
Case &quot;swriter&quot;
GetWriterStrings()
Case &quot;scalc&quot;
GetCalcStrings()
Case &quot;sdraw&quot;, &quot;simpress&quot;
GetDrawStrings()
Case Else
Msgbox(&quot;This macro only works with a Writer, Calc or Draw/Impress document.&quot;, 16, GetProductName())
End Select
End If
End Sub
&apos; ***********************************************Calc documents**************************************************
Sub GetCalcStrings()
Dim i, n as integer
Dim oSheet as Object
Dim SheetName as String
Dim oSheets as Object
&apos; Create a sequence of all sheets within the document
oSheets = oDocument.Sheets
For i = 0 to osheets.Count - 1
oSheet = osheets.GetbyIndex(i)
SheetName = oSheet.Name
MakeLogHeadLine(&quot;Sheet No. &quot; &amp; i &amp; &quot; (&quot; &amp; SheetName &amp; &quot;)&quot; )
&apos; Check the &quot;body&quot; of the sheet
GetCellTexts(oSheet)
If oSheet.IsScenario then
MakeLogHeadLine(&quot;Scenario Comments from &quot; &amp; SheetName &amp; &quot;&apos;&quot;)
WriteStringtoLogFile(osheet.ScenarioComment)
End if
GetAnnotations(oSheet, &quot;Annotations from &apos;&quot; &amp; SheetName &amp; &quot;&apos;&quot;)
GetChartStrings(oSheet, &quot;Charts from &apos;&quot; &amp; SheetName &amp; &quot;&apos;&quot;)
GetControlStrings(oSheet.DrawPage, &quot;Controls from &apos;&quot; &amp; SheetName &amp; &quot;&apos;&quot;)
Next
&apos; Pictures
GetCalcGraphicNames()
GetNamedRanges()
End Sub
Sub GetCellTexts(oSheet as Object)
Dim BigRange, BigEnum, oCell as Object
BigRange = oDocument.CreateInstance(&quot;com.sun.star.sheet.SheetCellRanges&quot;)
BigRange.InsertbyName(&quot;&quot;,oSheet)
BigEnum = BigRange.GetCells.CreateEnumeration
While BigEnum.hasmoreElements
oCell = BigEnum.NextElement
If oCell.String &lt;&gt; &quot;&quot; And Val(oCell.String) = 0then
WriteStringtoLogFile(oCell.String)
End If
Wend
End Sub
Sub GetAnnotations(oSheet as Object, HeaderLine as String)
Dim oNotes as Object
Dim n as Integer
oNotes = oSheet.getAnnotations
If oNotes.hasElements() then
MakeLogHeadLine(HeaderLine)
For n = 0 to oNotes.Count-1
WriteStringtoLogFile(oNotes.GetbyIndex(n).String)
Next
End if
End Sub
Sub GetNamedRanges()
Dim i as integer
MakeLogHeadLine(&quot;Named Ranges&quot;)
For i = 0 To oDocument.NamedRanges.Count - 1
WriteStringtoLogFile(oDocument.NamedRanges.GetbyIndex(i).Name)
Next
End Sub
Sub GetCalcGraphicNames()
Dim n,m as integer
MakeLogHeadLine(&quot;Graphics&quot;)
For n = 0 To oDocument.Drawpages.count-1
For m = 0 To oDocument.Drawpages.GetbyIndex(n).Count - 1
WriteStringtoLogFile(oDocument.DrawPages.GetbyIndex(n).GetbyIndex(m).Text.String)
Next m
Next n
End Sub
&apos; ***********************************************Writer documents**************************************************
Sub GetParagraphTexts(oParaObject as Object, HeadLine as String)
Dim ParaEnum as Object
Dim oPara as Object
Dim oTextPortEnum as Object
Dim oTextPortion as Object
Dim i as integer
Dim oCellNames()
Dim oCell as Object
MakeLogHeadLine(HeadLine)
ParaEnum = oParaObject.Text.CreateEnumeration
While ParaEnum.HasMoreElements
oPara = ParaEnum.NextElement
&apos; Note: The enumeration ParaEnum lists all tables and paragraphs.
&apos; Therefore we have to find out what kind of object &quot;oPara&quot; actually is
If oPara.supportsService(&quot;com.sun.star.text.Paragraph&quot;) Then
&apos; &quot;oPara&quot; is a Paragraph
oTextPortEnum = oPara.createEnumeration
While oTextPortEnum.hasmoreElements
oTextPortion = oTextPortEnum.nextElement()
WriteStringToLogFile(oTextPortion.String)
Wend
Else
&apos; &quot;oPara&quot; is a table
oCellNames = oPara.CellNames
For i = 0 To Ubound(oCellNames())
If oCellNames(i) &lt;&gt; &quot;&quot; Then
oCell = oPara.getCellByName(oCellNames(i))
WriteStringToLogFile(oCell.String)
End If
Next
End If
Wend
End Sub
Sub GetChartStrings(oSheet as Object, HeaderLine as String)
Dim i as Integer
Dim aChartObject as Object
Dim aChartDiagram as Object
MakeLogHeadLine(HeaderLine)
For i = 0 to oSheet.Charts.Count-1
aChartObject = oSheet.Charts.GetByIndex(i).EmbeddedObject
If aChartObject.HasSubTitle then
WriteStringToLogFile(aChartObject.SubTitle.String)
End If
If aChartObject.HasMainTitle then
WriteStringToLogFile(aChartObject.Title.String)
End If
aChartDiagram = aChartObject.Diagram
If aChartDiagram.hasXAxisTitle Then
WriteStringToLogFile(aChartDiagram.XAxisTitle)
End If
If aChartDiagram.hasYAxisTitle Then
WriteStringToLogFile(aChartDiagram.YAxisTitle)
End If
If aChartDiagram.hasZAxisTitle Then
WriteStringToLogFile(aChartDiagram.ZAxisTitle)
End If
Next i
End Sub
Sub GetFrameTexts()
Dim i as integer
Dim oTextFrame as object
Dim oFrameEnum as Object
Dim oFramePort as Object
Dim oFrameTextEnum as Object
Dim oFrameTextPort as Object
MakeLogHeadLine(&quot;Text Frames&quot;)
For i = 0 to oDocument.TextFrames.Count-1
oTextFrame = oDocument.TextFrames.GetbyIndex(i)
WriteStringToLogFile(oTextFrame.Name)
&apos; Is the frame bound to the page?
If oTextFrame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE Then
GetParagraphTexts(oTextFrame, &quot;Text Frame Contents&quot;)
End If
oFrameEnum = oTextFrame.CreateEnumeration
While oFrameEnum.HasMoreElements
oFramePort = oFrameEnum.NextElement
If oFramePort.supportsService(&quot;com.sun.star.text.Paragraph&quot;) then
oFrameTextEnum = oFramePort.createEnumeration
While oFrameTextEnum.HasMoreElements
oFrameTextPort = oFrameTextEnum.NextElement
If oFrameTextPort.SupportsService(&quot;com.sun.star.text.TextFrame&quot;) Then
WriteStringtoLogFile(oFrameTextPort.String)
End If
Wend
Else
WriteStringtoLogFile(oFramePort.Name)
End if
Wend
Next
End Sub
Sub GetTextFieldStrings()
Dim aTextField as Object
Dim i as integer
Dim CurElement as Object
MakeLogHeadLine(&quot;Text Fields&quot;)
aTextfield = oDocument.getTextfields.CreateEnumeration
While aTextField.hasmoreElements
CurElement = aTextField.NextElement
If CurElement.PropertySetInfo.hasPropertybyName(&quot;Content&quot;) Then
WriteStringtoLogFile(CurElement.Content)
ElseIf CurElement.PropertySetInfo.hasPropertybyName(&quot;PlaceHolder&quot;) Then
WriteStringtoLogFile(CurElement.PlaceHolder)
WriteStringtoLogFile(CurElement.Hint)
ElseIf Curelement.TextFieldMaster.PropertySetInfo.HasPropertybyName(&quot;Content&quot;) then
WriteStringtoLogFile(CurElement.TextFieldMaster.Content)
End If
Wend
End Sub
Sub GetLinkedFileNames()
Dim oDocSections as Object
Dim LinkedFileName as String
Dim i as Integer
If Right(oDocument.URL,3) = &quot;sgl&quot; Then
MakeLogHeadLine(&quot;Sub-documents&quot;)
oDocSections = oDocument.TextSections
For i = 0 to oDocSections.Count - 1
LinkedFileName = oDocSections.GetbyIndex(i).FileLink.FileURL
If LinkedFileName &lt;&gt; &quot;&quot; Then
WriteStringToLogFile(LinkedFileName)
End If
Next i
End If
End Sub
Sub GetSectionNames()
Dim i as integer
Dim oDocSections as Object
MakeLogHeadLine(&quot;Sections&quot;)
oDocSections = oDocument.TextSections
For i = 0 to oDocSections.Count-1
WriteStringtoLogFile(oDocSections.GetbyIndex(i).Name)
Next
End Sub
Sub GetWriterStrings()
GetParagraphTexts(oDocument, &quot;Document Body&quot;)
GetGraphicNames()
GetStyles()
GetControlStrings(oDocument.DrawPage, &quot;Controls&quot;)
GetTextFieldStrings()
GetSectionNames()
GetFrameTexts()
GetHyperLinks
GetLinkedFileNames()
End Sub
&apos; ***********************************************Draw/Impress documents**************************************************
Sub GetDrawPageTitles(LocObject as Object)
Dim n as integer
Dim oPage as Object
For n = 0 to LocObject.Count - 1
oPage = LocObject.GetbyIndex(n)
WriteStringtoLogFile(oPage.Name)
&apos; Is the page a DrawPage and not a MasterPage?
If oPage.supportsService(&quot;com.sun.star.drawing.DrawPage&quot;)then
&apos; Get the name of the NotesPage (only relevant for Impress documents)
If oDocument.supportsService(&quot;com.sun.star.presentation.PresentationDocument&quot;) then
WriteStringtoLogFile(oPage.NotesPage.Name)
End If
End If
Next
End Sub
Sub GetPageStrings(oPages as Object)
Dim m, n, s as Integer
Dim oPage, oPageElement, oShape as Object
For n = 0 to oPages.Count-1
oPage = oPages.GetbyIndex(n)
If oPage.HasElements then
For m = 0 to oPage.Count-1
oPageElement = oPage.GetByIndex(m)
If HasUnoInterfaces(oPageElement,&quot;com.sun.star.container.XIndexAccess&quot;) Then
&apos; The Object &quot;oPageElement&quot; a group of Shapes, that can be accessed by their index
For s = 0 To oPageElement.Count - 1
WriteStringToLogFile(oPageElement.GetByIndex(s).String)
Next s
ElseIf HasUnoInterfaces(oPageElement, &quot;com.sun.star.text.XText&quot;) Then
WriteStringtoLogFile(oPageElement.String)
End If
Next
End If
Next
End Sub
Sub GetDrawStrings()
Dim oDPages, oMPages as Object
oDPages = oDocument.DrawPages
oMPages = oDocument.Masterpages
MakeLogHeadLine(&quot;Titles&quot;)
GetDrawPageTitles(oDPages)
GetDrawPageTitles(oMPages)
MakeLogHeadLine(&quot;Document Body&quot;)
GetPageStrings(oDPages)
GetPageStrings(oMPages)
End Sub
&apos; ***********************************************Misc**************************************************
Sub GetDocumentProps()
Dim oDocuProps as Object
MakeLogHeadLine(&quot;Document Properties&quot;)
oDocuProps = oDocument.DocumentProperties
WriteStringToLogFile(oDocuProps.Title)
WriteStringToLogFile(oDocuProps.Description)
WriteStringToLogFile(oDocuProps.Subject)
WriteStringToLogFile(oDocuProps.Author)
&apos; WriteStringToLogFile(oDocuProps.UserDefinedProperties.ReplyTo)
&apos; WriteStringToLogFile(oDocuProps.UserDefinedProperties.Recipient)
&apos; WriteStringToLogFile(oDocuProps.UserDefinedProperties.References)
&apos; WriteStringToLogFile(oDocuProps.Keywords)
End Sub
Sub GetHyperlinks()
Dim i as integer
Dim oCrsr as Object
Dim oAllHyperLinks as Object
Dim SrchAttributes(0) as new com.sun.star.beans.PropertyValue
Dim oSearchDesc as Object
MakeLogHeadLine(&quot;Hyperlinks&quot;)
&apos; create a Search-Descriptor
oSearchDesc = oDocument.CreateSearchDescriptor
oSearchDesc.Valuesearch = False
&apos; define the Search-attributes
srchattributes(0).Name = &quot;HyperLinkURL&quot;
srchattributes(0).Value = &quot;&quot;
oSearchDesc.SetSearchAttributes(SrchAttributes())
oAllHyperLinks = oDocument.findAll(oSearchDesc())
For i = 0 to oAllHyperLinks.Count - 1
oFound = oAllHyperLinks(i)
oCrsr = oFound.Text.createTextCursorByRange(oFound)
WriteStringToLogFile(oCrs.HyperLinkURL) &apos;Url
WriteStringToLogFile(oCrs.HyperLinkTarget) &apos;Name
WriteStringToLogFile(oCrs.HyperLinkName) &apos;Frame
Next i
End Sub
Sub GetGraphicNames()
Dim i as integer
Dim oDocGraphics as Object
MakeLogHeadLine(&quot;Graphics&quot;)
oDocGraphics = oDocument.GraphicObjects
For i = 0 to oDocGraphics.count - 1
WriteStringtoLogFile(oDocGraphics.GetbyIndex(i).Name)
Next
End Sub
Sub GetStyles()
Dim m,n as integer
MakeLogHeadLine(&quot;User-defined Templates&quot;)
&apos; Check all StyleFamilies(i.e. PageStyles, ParagraphStyles, CharacterStyles, cellStyles)
For n = 0 to oDocument.StyleFamilies.Count - 1
For m = 0 to oDocument.StyleFamilies.getbyIndex(n).Count-1
If oDocument.StyleFamilies.GetbyIndex(n).getbyIndex(m).IsUserDefined then
WriteStringtoLogFile(oDocument.StyleFamilies.GetbyIndex(n).getbyIndex(m).Name)
End If
Next
Next
End Sub
Sub GetControlStrings(oDPage as Object, HeaderLine as String)
Dim aForm as Object
Dim m,n as integer
MakeLogHeadLine(HeaderLine)
&apos;SearchFor all possible Controls
For n = 0 to oDPage.Forms.Count - 1
aForm = oDPage.Forms(n)
For m = 0 to aForm.Count-1
GetControlContent(aForm.GetbyIndex(m))
Next
Next
End Sub
Sub GetControlContent(LocControl as Object)
Dim i as integer
If LocControl.PropertySetInfo.HasPropertybyName(&quot;Label&quot;) then
WriteStringtoLogFile(LocControl.Label)
ElseIf LocControl.SupportsService(&quot;com.sun.star.form.component.ListBox&quot;) then
For i = 0 to Ubound(LocControl.StringItemList())
WriteStringtoLogFile(LocControl.StringItemList(i))
Next
End If
If LocControl.PropertySetInfo.HasPropertybyName(&quot;HelpText&quot;) then
WriteStringtoLogFile(LocControl.Helptext)
End If
End Sub
&apos; ***********************************************Log document**************************************************
Sub WriteStringtoLogFile( sString as String)
If (Not FieldInArray(LogArray(),LogIndex,sString))AND (NOT ISNULL(sString)) Then
LogArray(LogIndex) = sString
LogIndex = LogIndex + 1
oLogText.insertString(oLogCursor,sString,False)
oLogText.insertControlCharacter(oLogCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
End If
End Sub
Sub MakeLogHeadLine(HeadText as String)
oLogCursor.CharStyleName = &quot;Log Header&quot;
oLogText.insertControlCharacter(oLogCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
oLogText.insertString(oLogCursor,HeadText,False)
oLogText.insertControlCharacter(oLogCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
oLogCursor.CharStyleName = &quot;Log Body&quot;
End Sub
</script:module>

View File

@@ -0,0 +1,322 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="ReadDir" script:language="StarBasic">Option Explicit
Public Const SBPAGEX = 800
Public Const SBPAGEY = 800
Public Const SBRELDIST = 1.3
&apos; Names of the second Dimension of the Array iLevelPos
Public Const SBBASEX = 0
Public Const SBBASEY = 1
Public Const SBOLDSTARTX = 2
Public Const SBOLDSTARTY = 3
Public Const SBOLDENDX = 4
Public Const SBOLDENDY = 5
Public Const SBNEWSTARTX = 6
Public Const SBNEWSTARTY = 7
Public Const SBNEWENDX = 8
Public Const SBNEWENDY = 9
Public ConnectLevel As Integer
Public iLevelPos(1,9) As Long
Public Source as String
Public iCurLevel as Integer
Public nConnectLevel as Integer
Public nOldWidth, nOldHeight As Long
Public nOldX, nOldY, nOldLevel As Integer
Public oOldLeavingLine As Object
Public oOldArrivingLine As Object
Public DlgReadDir as Object
Dim oProgressBar as Object
Dim oDocument As Object
Dim oPage As Object
Sub Main()
Dim oStandardTemplate as Object
BasicLibraries.LoadLibrary(&quot;Tools&quot;)
oDocument = CreateNewDocument(&quot;sdraw&quot;)
If Not IsNull(oDocument) Then
oPage = oDocument.DrawPages(0)
oStandardTemplate = oDocument.StyleFamilies.GetByName(&quot;graphics&quot;).GetByName(&quot;standard&quot;)
oStandardTemplate.CharHeight = 10
oStandardTemplate.TextLeftDistance = 100
oStandardTemplate.TextRightDistance = 100
oStandardTemplate.TextUpperDistance = 50
oStandardTemplate.TextLowerDistance = 50
DlgReadDir = LoadDialog(&quot;Gimmicks&quot;,&quot;ReadFolderDlg&quot;)
oProgressBar = DlgReadDir.Model.ProgressBar1
DlgReadDir.Model.TextField1.Text = ConvertFromUrl(GetPathSettings(&quot;Work&quot;))
DlgReadDir.Model.cmdGoOn.DefaultButton = True
DlgReadDir.GetControl(&quot;TextField1&quot;).SetFocus()
DlgReadDir.Execute
End If
End Sub
Sub TreeInfo()
Dim oCurTextShape As Object
Dim i as Integer
Dim bStartUpRun As Boolean
Dim CurFilename as String
Dim BaseLevel as Integer
Dim oController as Object
Dim MaxFileIndex as Integer
Dim FileNames() as String
ToggleDialogControls(False)
oProgressBar.ProgressValueMin = 0
oProgressBar.ProgressValueMax = 100
bStartUpRun = True
nOldHeight = 200
nOldY = SBPAGEY
nOldX = SBPAGEX
nOldWidth = SBPAGEX
oController = oDocument.GetCurrentController
Source = ConvertToURL(DlgReadDir.Model.TextField1.Text)
BaseLevel = CountCharsInString(Source, &quot;/&quot;, 1)
oProgressBar.ProgressValue = 5
DlgReadDir.Model.Label3.Enabled = True
FileNames() = ReadSourceDirectory(Source)
DlgReadDir.Model.Label4.Enabled = True
DlgReadDir.Model.Label3.Enabled = False
oProgressBar.ProgressValue = 12
FileNames() = BubbleSortList(FileNames())
DlgReadDir.Model.Label5.Enabled = True
DlgReadDir.Model.Label4.Enabled = False
oProgressBar.ProgressValue = 20
MaxFileIndex = Ubound(FileNames(),1)
For i = 0 To MaxFileIndex
oProgressBar.ProgressValue = 20 + (i/MaxFileIndex * 80)
CurFilename = FileNames(i,1)
SetNewLevels(FileNames(i,0), BaseLevel)
oCurTextShape = CreateTextShape(oPage, CurFilename)
CheckPageWidth(oCurTextShape.Size.Width)
iLevelPos(iCurLevel,SBBASEY) = oCurTextShape.Position.Y
If i = 0 Then
AdjustPageHeight(oCurTextShape.Size.Height, MaxFileIndex + 1)
End If
&apos; The Current TextShape has To be connected with a TextShape one Level higher
&apos; except for a TextShape In Level 0:
If Not bStartUpRun Then
&apos; A leaving Line Is only drawn when level is not 0
If iCurLevel&lt;&gt; 0 Then
&apos; Determine the Coordinates of the arriving Line
iLevelPos(iCurLevel,SBOLDSTARTX) = iLevelPos(nConnectLevel,SBNEWSTARTX)
iLevelPos(iCurLevel,SBOLDSTARTY) = oCurTextShape.Position.Y + 0.5 * oCurTextShape.Size.Height
iLevelPos(iCurLevel,SBOLDENDX) = iLevelPos(iCurLevel,SBBASEX)
iLevelPos(iCurLevel,SBOLDENDY) = oCurTextShape.Position.Y + 0.5 * oCurTextShape.Size.Height
oOldArrivingLine = DrawLine(iCurLevel, SBOLDSTARTX, SBOLDSTARTY, SBOLDENDX, SBOLDENDY, oPage)
&apos; Determine the End-Coordinates of the last leaving Line
iLevelPos(nConnectLevel,SBNEWENDX) = iLevelPos(nConnectLevel,SBNEWSTARTX)
iLevelPos(nConnectLevel,SBNEWENDY) = oCurTextShape.Position.Y + 0.5 * oCurTextShape.Size.Height
Else
&apos; On Level 0 the last Leaving Line&apos;s Endpoint is the upper edge of the TextShape
iLevelPos(nConnectLevel,SBNEWENDY) = oCurTextShape.Position.Y
iLevelPos(nConnectLevel,SBNEWENDX) = iLevelPos(nConnectLevel,SBNEWSTARTX)
End If
&apos; Draw the Connectors To the previous TextShapes
oOldLeavingLine = DrawLine(nConnectLevel, SBNEWSTARTX, SBNEWSTARTY, SBNEWENDX, SBNEWENDY, oPage)
Else
&apos; StartingPoint of the leaving Edge
bStartUpRun = FALSE
End If
&apos; Determine the beginning Coordinates of the leaving Line
iLevelPos(iCurLevel,SBNEWSTARTX) = iLevelPos(iCurLevel,SBBASEX) + 0.5 * oCurTextShape.Size.Width
iLevelPos(iCurLevel,SBNEWSTARTY) = iLevelPos(iCurLevel,SBBASEY) + oCurTextShape.Size.Height
&apos; Save the values For the Next run
nOldHeight = oCurTextShape.Size.Height
nOldX = oCurTextShape.Position.X
nOldWidth = oCurTextShape.Size.Width
nOldLevel = iCurLevel
Next i
ToggleDialogControls(True)
DlgReadDir.Model.cmdGoOn.Enabled = False
End Sub
Function CreateTextShape(oPage as Object, Filename as String)
Dim oTextShape As Object
Dim aPoint As New com.sun.star.awt.Point
aPoint.X = CalculateXPoint()
aPoint.Y = nOldY + SBRELDIST * nOldHeight
nOldY = aPoint.Y
oTextShape = oDocument.createInstance(&quot;com.sun.star.drawing.TextShape&quot;)
oTextShape.LineStyle = 1
oTextShape.Position = aPoint
oPage.add(oTextShape)
oTextShape.TextAutoGrowWidth = TRUE
oTextShape.TextAutoGrowHeight = TRUE
oTextShape.String = FileName
&apos; Configure Size And Position of the TextShape according to its Scripting
aPoint.X = iLevelPos(iCurLevel,SBBASEX)
oTextShape.Position = aPoint
CreateTextShape() = oTextShape
End Function
Function CalculateXPoint()
&apos; The current level Is lower than the Old one
If (iCurLevel&lt; nOldLevel) And (iCurLevel&lt;&gt; 0) Then
&apos; ClearArray(iLevelPos(),iCurLevel+1)
Elseif iCurLevel= 0 Then
iLevelPos(iCurLevel,SBBASEX) = SBPAGEX
&apos; The current level Is higher than the old one
Elseif iCurLevel&gt; nOldLevel Then
iLevelPos(iCurLevel,SBBASEX) = iLevelPos(iCurLevel-1,SBBASEX) + nOldWidth + 100
End If
CalculateXPoint = iLevelPos(iCurLevel,SBBASEX)
End Function
Function DrawLine(nLevel, nStartX, nStartY, nEndX, nEndY As Integer, oPage as Object)
Dim oConnect As Object
Dim aPoint As New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size
aPoint.X = iLevelPos(nLevel,nStartX)
aPoint.Y = iLevelPos(nLevel,nStartY)
aSize.Width = iLevelPos(nLevel,nEndX) - iLevelPos(nLevel,nStartX)
aSize.Height = iLevelPos(nLevel,nEndY) - iLevelPos(nLevel,nStartY)
oConnect = oDocument.createInstance(&quot;com.sun.star.drawing.LineShape&quot;)
oConnect.Position = aPoint
oConnect.Size = aSize
oPage.Add(oConnect)
DrawLine() = oConnect
End Function
Sub GetSourceDirectory()
GetFolderName(DlgReadDir.Model.TextField1)
End Sub
Function ReadSourceDirectory(ByVal Source As String)
Dim i as Integer
Dim m as Integer
Dim n as Integer
Dim s as integer
Dim FileName as string
Dim FileNameList(100,1) as String
Dim DirList(0) as String
Dim oUCBobject as Object
Dim DirContent() as String
Dim SystemPath as String
Dim PathSeparator as String
Dim MaxFileIndex as Integer
PathSeparator = GetPathSeparator()
oUcbobject = createUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
m = 0
s = 0
DirList(0) = Source
FileNameList(n,0) = Source
SystemPath = ConvertFromUrl(Source)
FileNameList(n,1) = FileNameoutofPath(SystemPath, PathSeparator)
n = 1
Do
Source = DirList(m)
m = m + 1
DirContent() = oUcbObject.GetFolderContents(Source,True)
If Ubound(DirContent()) &lt;&gt; -1 Then
MaxFileIndex = Ubound(DirContent())
For i = 0 to MaxFileIndex
FileName = DirContent(i)
FileNameList(n,0) = FileName
SystemPath = ConvertFromUrl(FileName)
FileNameList(n,1) = FileNameOutofPath(SystemPath, PathSeparator)
n = n + 1
If n &gt; Ubound(FileNameList(),1) Then
ReDim Preserve FileNameList(n + 10,1) as String
End If
If oUcbObject.IsFolder(FileName) Then
s = s + 1
ReDim Preserve DirList(s) as String
DirList(s) = FileName
End If
Next i
End If
Loop Until m &gt; Ubound(DirList())
ReDim Preserve FileNameList(n-1,1) as String
ReadSourceDirectory() = FileNameList()
End Function
Sub CloseDialog
DlgReadDir.EndExecute
End Sub
Sub AdjustPageHeight(lShapeHeight, FileCount)
Dim lNecHeight as Long
Dim lBorders as Long
oDocument.LockControllers
lBorders = oPage.BorderTop + oPage.BorderBottom
lNecHeight = SBPAGEY + (FileCount * SBRELDIST * lShapeHeight)
If lNecHeight &gt; (oPage.Height - lBorders) Then
oPage.Height = lNecHeight + lBorders + 500
End If
oDocument.UnlockControllers
End Sub
Sub SetNewLevels(FileName as String, BaseLevel as Integer)
iCurLevel= CountCharsInString(FileName, &quot;/&quot;, 1) - BaseLevel
If iCurLevel &lt;&gt; 0 Then
nConnectLevel = iCurLevel- 1
Else
nConnectLevel = iCurLevel
End If
If iCurLevel &gt; Ubound(iLevelPos(),1) Then
ReDim Preserve iLevelPos(iCurLevel,9) as Long
End If
End Sub
Sub CheckPageWidth(TextWidth as Long)
Dim PageWidth as Long
Dim BaseX as Long
PageWidth = oPage.Width
BaseX = iLevelPos(iCurLevel,SBBASEX)
If BaseX + TextWidth &gt; PageWidth - 1000 Then
oPage.Width = 1000 + BaseX + TextWidth
End If
End Sub
Sub ToggleDialogControls(bDoEnable as Boolean)
With DlgReadDir.Model
.cmdGoOn.Enabled = bDoEnable
.cmdGetDir.Enabled = bDoEnable
.Label1.Enabled = bDoEnable
.Label2.Enabled = bDoEnable
.TextField1.Enabled = bDoEnable
End With
End Sub</script:module>

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="ReadFolderDlg" dlg:left="161" dlg:top="81" dlg:width="180" dlg:height="136" dlg:closeable="true" dlg:moveable="true" dlg:title="Read and Design Recursively">
<dlg:bulletinboard>
<dlg:button dlg:id="cmdGetDir" dlg:tab-index="0" dlg:left="161" dlg:top="49" dlg:width="14" dlg:height="14" dlg:value="...">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.ReadDir.GetSourceDirectory?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:textfield dlg:id="TextField1" dlg:tab-index="1" dlg:left="6" dlg:top="50" dlg:width="147" dlg:height="12"/>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="2" dlg:left="49" dlg:top="115" dlg:width="35" dlg:height="14" dlg:value="~Cancel">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.ReadDir.CloseDialog?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdGoOn" dlg:tab-index="3" dlg:left="95" dlg:top="115" dlg:width="35" dlg:height="14" dlg:value="~GoOn">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.ReadDir.TreeInfo?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:text dlg:id="Label1" dlg:tab-index="4" dlg:left="6" dlg:top="38" dlg:width="122" dlg:height="8" dlg:value="Top level path"/>
<dlg:text dlg:id="Label2" dlg:tab-index="5" dlg:left="6" dlg:top="4" dlg:width="168" dlg:height="26" dlg:value="This macro will create a drawing document and design a complete tree view of all subdirectories from a given path." dlg:multiline="true"/>
<dlg:progressmeter dlg:id="ProgressBar1" dlg:tab-index="6" dlg:left="6" dlg:top="101" dlg:width="170" dlg:height="10"/>
<dlg:text dlg:id="Label3" dlg:tab-index="7" dlg:disabled="true" dlg:left="6" dlg:top="69" dlg:width="170" dlg:height="8" dlg:value="Getting the files and subdirectories..."/>
<dlg:text dlg:id="Label4" dlg:tab-index="8" dlg:disabled="true" dlg:left="6" dlg:top="80" dlg:width="170" dlg:height="8" dlg:value="Sorting the files and subdirectories..."/>
<dlg:text dlg:id="Label5" dlg:tab-index="9" dlg:disabled="true" dlg:left="6" dlg:top="91" dlg:width="170" dlg:height="8" dlg:value="Drawing the filestructure..."/>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="UserfieldDlg" dlg:left="161" dlg:top="57" dlg:width="281" dlg:height="214" dlg:closeable="true" dlg:moveable="true" dlg:title="Modify User Data">
<dlg:bulletinboard>
<dlg:text dlg:id="Label1" dlg:tab-index="0" dlg:left="6" dlg:top="48" dlg:width="57" dlg:height="8" dlg:value="Label1"/>
<dlg:text dlg:id="Label2" dlg:tab-index="1" dlg:left="6" dlg:top="64" dlg:width="57" dlg:height="8" dlg:value="Label2"/>
<dlg:text dlg:id="Label3" dlg:tab-index="2" dlg:left="6" dlg:top="80" dlg:width="57" dlg:height="8" dlg:value="Label3"/>
<dlg:text dlg:id="Label4" dlg:tab-index="3" dlg:left="6" dlg:top="96" dlg:width="57" dlg:height="8" dlg:value="Label4"/>
<dlg:text dlg:id="Label5" dlg:tab-index="4" dlg:left="6" dlg:top="112" dlg:width="57" dlg:height="8" dlg:value="Label5"/>
<dlg:text dlg:id="Label6" dlg:tab-index="5" dlg:left="6" dlg:top="128" dlg:width="57" dlg:height="8" dlg:value="Label6"/>
<dlg:text dlg:id="Label7" dlg:tab-index="6" dlg:left="6" dlg:top="144" dlg:width="57" dlg:height="8" dlg:value="Label7"/>
<dlg:text dlg:id="Label8" dlg:tab-index="7" dlg:left="6" dlg:top="160" dlg:width="57" dlg:height="8" dlg:value="Label8"/>
<dlg:text dlg:id="Label9" dlg:tab-index="8" dlg:left="6" dlg:top="176" dlg:width="57" dlg:height="8" dlg:value="Label9"/>
<dlg:textfield dlg:id="TextField1" dlg:tab-index="9" dlg:left="65" dlg:top="46" dlg:width="193" dlg:height="12"/>
<dlg:textfield dlg:id="TextField2" dlg:tab-index="10" dlg:left="65" dlg:top="62" dlg:width="193" dlg:height="12"/>
<dlg:textfield dlg:id="TextField3" dlg:tab-index="11" dlg:left="65" dlg:top="78" dlg:width="193" dlg:height="12"/>
<dlg:textfield dlg:id="TextField4" dlg:tab-index="12" dlg:left="65" dlg:top="94" dlg:width="193" dlg:height="12"/>
<dlg:textfield dlg:id="TextField5" dlg:tab-index="13" dlg:left="65" dlg:top="110" dlg:width="193" dlg:height="12"/>
<dlg:textfield dlg:id="TextField6" dlg:tab-index="14" dlg:left="65" dlg:top="126" dlg:width="193" dlg:height="12"/>
<dlg:textfield dlg:id="TextField7" dlg:tab-index="15" dlg:left="65" dlg:top="142" dlg:width="193" dlg:height="12"/>
<dlg:textfield dlg:id="TextField8" dlg:tab-index="16" dlg:left="65" dlg:top="158" dlg:width="193" dlg:height="12"/>
<dlg:textfield dlg:id="TextField9" dlg:tab-index="17" dlg:left="65" dlg:top="174" dlg:width="193" dlg:height="12"/>
<dlg:scrollbar dlg:id="ScrollBar1" dlg:tab-index="18" dlg:left="263" dlg:top="46" dlg:width="12" dlg:height="140" dlg:align="vertical">
<script:event script:event-name="on-adjustmentvaluechange" script:macro-name="vnd.sun.star.script:Gimmicks.Userfields.ScrollControls?language=Basic&amp;location=application" script:language="Script"/>
</dlg:scrollbar>
<dlg:button dlg:id="cmdQuit" dlg:tab-index="19" dlg:left="6" dlg:top="193" dlg:width="35" dlg:height="14" dlg:help-text="Exit Macro" dlg:value="Exit">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.Userfields.StopMacro?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdSave" dlg:tab-index="20" dlg:left="45" dlg:top="193" dlg:width="35" dlg:height="14" dlg:help-text="Save All Data of All Users to File" dlg:value="~Save">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.Userfields.SaveSettings?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdSelect" dlg:tab-index="21" dlg:left="84" dlg:top="193" dlg:width="35" dlg:height="14" dlg:help-text="Replace the User Data in &lt;PRODUCTNAME&gt; With the User Data Above" dlg:value="Se~lect">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.Userfields.SelectCurrentFields?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdNextUser" dlg:tab-index="22" dlg:left="162" dlg:top="193" dlg:width="35" dlg:height="14" dlg:tag="1" dlg:help-text="Show Data of Next User" dlg:value="Next &gt;&gt;">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.Userfields.StepToRecord?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdPrevUser" dlg:tab-index="23" dlg:left="123" dlg:top="193" dlg:width="35" dlg:height="14" dlg:tag="-1" dlg:help-text="Show Data of Previous User" dlg:value="&lt;&lt;Previous">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.Userfields.StepToRecord?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="CommandButton1" dlg:tab-index="24" dlg:left="201" dlg:top="193" dlg:width="35" dlg:height="14" dlg:help-text="Add Data for New User" dlg:value="~New">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.Userfields.AddRecord?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:text dlg:id="Label10" dlg:tab-index="25" dlg:left="6" dlg:top="6" dlg:width="269" dlg:height="34" dlg:value="This macro lets you easily administrate several user profiles.&#x0a;The user data of several users may be stored in a single file in the directory &lt;ConfigDir&gt;. From there, you can select a particular user whose data is then the current user data in &lt;PRODUCTNAME&gt;." dlg:multiline="true"/>
<dlg:button dlg:id="cmdDelete" dlg:tab-index="26" dlg:left="240" dlg:top="193" dlg:width="35" dlg:height="14" dlg:help-text="Delete Data of Current User" dlg:value="Delete">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Gimmicks.Userfields.DeleteCurrentSettings?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,236 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Userfields" script:language="StarBasic">Option Explicit
&apos;Todo: Controlling Scrollbar via Keyboard
Public Const SBMAXFIELDINDEX = 14
Public DlgUserFields as Object
Public oDocument as Object
Public UserFieldDataType(SBMAXFIELDINDEX,1) as String
Public ScrollBarValue as Integer
Public UserFieldFamily(0, SBMAXfIELDINDEX) as String
Public Const SBTBCOUNT = 9
Public oUserDataAccess as Object
Public CurFieldIndex as Integer
Public FilePath as String
Sub StartChangesUserfields
Dim SystemPath as String
BasicLibraries.LoadLibrary(&quot;Tools&quot;)
UserFieldDatatype(0,0) = &quot;COMPANY&quot;
UserFieldDatatype(0,1) = &quot;o&quot;
UserFieldDatatype(1,0) = &quot;FIRSTNAME&quot;
UserFieldDatatype(1,1) = &quot;givenname&quot;
UserFieldDatatype(2,0) = &quot;LASTNAME&quot;
UserFieldDatatype(2,1) = &quot;sn&quot;
UserFieldDatatype(3,0) = &quot;INITIALS&quot;
UserFieldDatatype(3,1) = &quot;initials&quot;
UserFieldDatatype(4,0) = &quot;STREET&quot;
UserFieldDatatype(4,1) = &quot;street&quot;
UserFieldDatatype(5,0) = &quot;COUNTRY&quot;
UserFieldDatatype(5,1) = &quot;c&quot;
UserFieldDatatype(6,0) = &quot;ZIP&quot;
UserFieldDatatype(6,1) = &quot;postalcode&quot;
UserFieldDatatype(7,0) = &quot;CITY&quot;
UserFieldDatatype(7,1) = &quot;l&quot;
UserFieldDatatype(8,0) = &quot;TITLE&quot;
UserFieldDatatype(8,1) = &quot;title&quot;
UserFieldDatatype(9,0) = &quot;POSITION&quot;
UserFieldDatatype(9,1) = &quot;position&quot;
UserFieldDatatype(10,0) = &quot;PHONE_HOME&quot;
UserFieldDatatype(10,1) = &quot;homephone&quot;
UserFieldDatatype(11,0) = &quot;PHONE_WORK&quot;
UserFieldDatatype(11,1) = &quot;telephonenumber&quot;
UserFieldDatatype(12,0) = &quot;FAX&quot;
UserFieldDatatype(12,1) = &quot;facsimiletelephonenumber&quot;
UserFieldDatatype(13,0) = &quot;E-MAIL&quot;
UserFieldDatatype(13,1) = &quot;mail&quot;
UserFieldDatatype(14,0) = &quot;STATE&quot;
UserFieldDatatype(14,1) = &quot;st&quot;
FilePath = GetPathSettings(&quot;Config&quot;, False) &amp; &quot;/&quot; &amp; &quot;UserData.dat&quot;
DlgUserFields = LoadDialog(&quot;Gimmicks&quot;,&quot;UserfieldDlg&quot;)
SystemPath = ConvertFromUrl(FilePath)
DlgUserFields.Model.Label10.Label = ReplaceString(DlgUserFields.Model.Label10.Label, &quot;&apos;&quot; &amp; SystemPath &amp; &quot;&apos;&quot;, &quot;&lt;ConfigDir&gt;&quot;)
DlgUserFields.Model.Label10.Label = ReplaceString(DlgUserFields.Model.Label10.Label, GetProductName(), &quot;&lt;PRODUCTNAME&gt;&quot;)
DlgUserFields.Model.cmdSelect.HelpText = ReplaceString(DlgUserFields.Model.cmdSelect.HelpText, GetProductName(), &quot;&lt;PRODUCTNAME&gt;&quot;)
ScrollBarValue = 0
oUserDataAccess = GetRegistryKeyContent(&quot;org.openoffice.UserProfile/Data&quot;, True)
InitializeUserFamily()
FillDialog()
DlgUserFields.Execute
DlgUserFields.Dispose()
End Sub
Sub FillDialog()
Dim a as Integer
With DlgUserFields
For a = 1 To SBTBCount
.GetControl(&quot;Label&quot; &amp; a).Model.Label = UserFieldDataType(a-1,0)
.GetControl(&quot;TextField&quot; &amp; a).Model.Text = UserFieldFamily(CurFieldIndex, a-1)
Next a
.Model.ScrollBar1.ScrollValueMax = (SBMAXFIELDINDEX+1) - SBTBCOUNT
.Model.ScrollBar1.BlockIncrement = SBTBCOUNT
.Model.ScrollBar1.LineIncrement = 1
.Model.ScrollBar1.ScrollValue = ScrollBarValue
End With
End Sub
Sub ScrollControls()
ScrollTextFieldInfo(ScrollBarValue)
ScrollBarValue = DlgUserFields.Model.ScrollBar1.ScrollValue
If (ScrollBarValue + SBTBCOUNT) &gt;= SBMAXFIELDINDEX + 1 Then
ScrollBarValue = (SBMAXFIELDINDEX + 1) - SBTBCOUNT
End If
FillupTextFields()
End Sub
Sub ScrollTextFieldInfo(ByVal iScrollValue as Integer)
Dim a as Integer
Dim CurIndex as Integer
For a = 1 To SBTBCOUNT
CurIndex = (a-1) + iScrollValue
UserFieldFamily(CurFieldIndex,CurIndex) = DlgUserFields.GetControl(&quot;TextField&quot; &amp; a).Model.Text
Next a
End Sub
Sub StopMacro()
DlgUserFields.EndExecute
End Sub
Sub SaveSettings()
Dim n as Integer
Dim m as Integer
Dim MaxIndex as Integer
ScrollTextFieldInfo(DlgUserFields.Model.ScrollBar1.ScrollValue)
MaxIndex = Ubound(UserFieldFamily(), 1)
Dim FileStrings(MaxIndex) as String
For n = 0 To MaxIndex
FileStrings(n) = &quot;&quot;
For m = 0 To SBMAXFIELDINDEX
FileStrings(n) = FileStrings(n) &amp; UserFieldFamily(n,m) &amp; &quot;;&quot;
Next m
Next n
SaveDataToFile(FilePath, FileStrings(), True)
End Sub
Sub ToggleButtons(ByVal Index as Integer)
Dim i as Integer
CurFieldIndex = Index
DlgUserFields.Model.cmdNextUser.Enabled = CurFieldIndex &lt;&gt; Ubound(UserFieldFamily(), 1)
DlgUserFields.Model.cmdPrevUser.Enabled = CurFieldIndex &lt;&gt; 0
End Sub
Sub InitializeUserFamily()
Dim FirstIndex as Integer
Dim UserFieldstrings() as String
Dim LocStrings() as String
Dim bFileExists as Boolean
Dim n as Integer
Dim m as Integer
bFileExists = LoadDataFromFile(GetPathSettings(&quot;Config&quot;, False) &amp; &quot;/&quot; &amp; &quot;UserData.dat&quot;, UserFieldStrings())
If bFileExists Then
FirstIndex = Ubound(UserFieldStrings())
ReDim Preserve UserFieldFamily(FirstIndex, SBMAXFIELDINDEX) as String
For n = 0 To FirstIndex
LocStrings() = ArrayOutofString(UserFieldStrings(n), &quot;;&quot;)
For m = 0 To SBMAXFIELDINDEX
UserFieldFamily(n,m) = LocStrings(m)
Next m
Next n
Else
ReDim Preserve UserFieldFamily(0,SBMAXFIELDINDEX) as String
For m = 0 To SBMAXFIELDINDEX
UserFieldFamily(0,m) = oUserDataAccess.GetByName(UserFieldDataType(m,1))
Next m
End If
ToggleButtons(0)
End Sub
Sub AddRecord()
Dim i as Integer
Dim MaxIndex as Integer
For i = 1 To SBTBCount
DlgUserFields.GetControl(&quot;TextField&quot; &amp; i).Model.Text = &quot;&quot;
Next i
MaxIndex = Ubound(UserFieldFamily(),1)
ReDim Preserve UserFieldFamily(MaxIndex + 1, SBMAXFIELDINDEX) as String
ToggleButtons(MaxIndex + 1, 1)
End Sub
Sub FillupTextFields()
Dim a as Integer
Dim CurIndex as Integer
For a = 1 To SBTBCOUNT
CurIndex = (a-1) + ScrollBarValue
DlgUserFields.GetControl(&quot;Label&quot; &amp; a).Model.Label = UserFieldDataType(CurIndex,0)
DlgUserFields.GetControl(&quot;TextField&quot; &amp; a).Model.Text = UserFieldFamily(CurFieldIndex, CurIndex)
Next a
End Sub
Sub StepToRecord(aEvent as Object)
Dim iStep as Integer
iStep = CInt(aEvent.Source.Model.Tag)
ScrollTextFieldInfo(ScrollBarValue)
ToggleButtons(CurFieldIndex + iStep)
FillUpTextFields()
End Sub
Sub SelectCurrentFields()
Dim MaxIndex as Integer
Dim i as Integer
ScrollTextFieldInfo(ScrollBarValue)
MaxIndex = Ubound(UserFieldFamily(),2)
For i = 0 To MaxIndex
oUserDataAccess.ReplaceByName(UserFieldDataType(i,1), UserFieldFamily(CurFieldIndex, i))
Next i
oUserDataAccess.commitChanges()
End Sub
Sub DeleteCurrentSettings()
Dim n as Integer
Dim m as Integer
Dim MaxIndex as Integer
MaxIndex = Ubound(UserFieldFamily(),1)
If CurFieldIndex &lt; MaxIndex Then
For n = CurFieldIndex To MaxIndex - 1
For m = 0 To SBMAXFIELDINDEX
UserFieldFamily(n,m) = UserFieldFamily(n + 1,m)
Next m
Next n
Else
CurFieldIndex = MaxIndex - 1
End If
ReDim Preserve UserFieldFamily(MaxIndex-1, SBMAXfIELDINDEX) as String
FillupTextFields()
ToggleButtons(CurFieldIndex)
End Sub</script:module>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Gimmicks" library:readonly="false" library:passwordprotected="false">
<library:element library:name="UserfieldDlg"/>
<library:element library:name="ReadFolderDlg"/>
</library:library>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Gimmicks" library:readonly="false" library:passwordprotected="false">
<library:element library:name="GetTexts"/>
<library:element library:name="Userfields"/>
<library:element library:name="ChangeAllChars"/>
<library:element library:name="AutoText"/>
<library:element library:name="ReadDir"/>
</library:library>

View File

@@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="API" script:language="StarBasic">Declare Function RegOpenKeyEx Lib &quot;advapi32.dll&quot; Alias &quot;RegOpenKeyExA&quot; _
(ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByVal ulOptions As Long, _
ByVal samDesired As Long, _
phkResult As Long) As Long
Declare Function RegQueryValueExString Lib &quot;advapi32.dll&quot; Alias &quot;RegQueryValueExA&quot; _
(ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
lpType As Long, _
lpData As String, _
lpcbData As Long) As Long
Declare Function RegQueryValueExLong Lib &quot;advapi32.dll&quot; Alias &quot;RegQueryValueExA&quot; _
(ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
lpType As Long, _
lpData As Long, _
lpcbData As Long) As Long
Declare Function RegQueryValueExNULL Lib &quot;advapi32.dll&quot; Alias &quot;RegQueryValueExA&quot; _
(ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
lpType As Long, _
ByVal lpData As Long, _
lpcbData As Long) As Long
Declare Function RegCloseKeyA Lib &quot;advapi32.dll&quot; Alias &quot;RegCloseKey&quot; _
(ByVal hKey As Long) As Long
Public Const HKEY_CLASSES_ROOT = &amp;H80000000
Public Const HKEY_CURRENT_USER = &amp;H80000001
Public Const HKEY_LOCAL_MACHINE = &amp;H80000002
Public Const HKEY_USERS = &amp;H80000003
Public Const KEY_ALL_ACCESS = &amp;H3F
Public Const REG_OPTION_NON_VOLATILE = 0
Public Const REG_SZ As Long = 1
Public Const REG_DWORD As Long = 4
Public Const ERROR_NONE = 0
Public Const ERROR_BADDB = 1
Public Const ERROR_BADKEY = 2
Public Const ERROR_CANTOPEN = 3
Public Const ERROR_CANTREAD = 4
Public Const ERROR_CANTWRITE = 5
Public Const ERROR_OUTOFMEMORY = 6
Public Const ERROR_INVALID_PARAMETER = 7
Public Const ERROR_ACCESS_DENIED = 8
Public Const ERROR_INVALID_PARAMETERS = 87
Public Const ERROR_NO_MORE_ITEMS = 259
&apos;Public Const KEY_READ = &amp;H20019
Function OpenRegKey(lBaseKey As Long, sKeyName As String) As Variant
Dim LocKeyValue
Dim hKey as Long
Dim lRetValue as Long
lRetValue = RegOpenKeyEx(lBaseKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
&apos; lRetValue = QueryValue(HKEY_LOCAL_MACHINE, &quot;SOFTWARE\Microsoft\Outlook Express\5.0\Default Settings&quot;, &quot;Revocation Checking&quot;)
If hKey &lt;&gt; 0 Then
RegCloseKeyA (hKey)
End If
OpenRegKey() = lRetValue
End Function
Function GetDefaultPath(CurOffice as Integer) As String
Dim sPath as String
Dim Index as Integer
Select Case Wizardmode
Case SBMICROSOFTMODE
Index = Applications(CurOffice,SBAPPLKEY)
If GetGUIType = 1 Then &apos; Windows
sPath = QueryValue(HKEY_LOCAL_MACHINE, sKeyName(Index), sValueName(Index))
Else
sPath = &quot;&quot;
End If
If sPath = &quot;&quot; Then
sPath = SOWorkPath
End If
GetDefaultPath = sPath
End Select
End Function
Function GetTemplateDefaultPath(Index as Integer) As String
Dim sLocTemplatePath as String
Dim sLocProgrampath as String
Dim Progstring as String
Dim PathList()as String
Dim Maxindex as Integer
Dim OldsLocTemplatePath
Dim sTemplateKeyName as String
Dim sTemplateValueName as String
On Local Error Goto NOVAlIDSYSTEMPATH
Select Case WizardMode
Case SBMICROSOFTMODE
If GetGUIType = 1 Then &apos; Windows
&apos; Template directory of Office 97
sTemplateKeyName = &quot;Software\Microsoft\Office\8.0\Common\FileNew\LocalTemplates&quot;
sTemplateValueName = &quot;&quot;
sLocTemplatePath = QueryValue(HKEY_LOCAL_MACHINE, sTemplateKeyName, sTemplateValueName)
If sLocTemplatePath = &quot;&quot; Then
&apos; Retrieve the template directory of Office 2000
&apos; Unfortunately there is no existing note about the template directory in
&apos; the whole registry.
&apos; Programdirectory of Office 2000
sTemplateKeyName = &quot;Software\Microsoft\Office\9.0\Common\InstallRoot&quot;
sTemplateValueName = &quot;Path&quot;
sLocProgrampath = QueryValue(HKEY_LOCAL_MACHINE, sTemplateKeyName, sTemplateValueName)
If sLocProgrampath &lt;&gt; &quot;&quot; Then
If Right(sLocProgrampath, 1) &lt;&gt; &quot;\&quot; Then
sLocProgrampath = sLocProgrampath &amp; &quot;\&quot;
End If
PathList() = ArrayoutofString(sLocProgrampath,&quot;\&quot;,Maxindex)
Progstring = &quot;\&quot; &amp; PathList(Maxindex-1) &amp; &quot;\&quot;
OldsLocTemplatePath = DeleteStr(sLocProgramPath,Progstring)
sLocTemplatePath = OldsLocTemplatePath &amp; &quot;\&quot; &amp; &quot;Templates&quot;
&apos; Does this subdirectory &quot;templates&quot; exist at all
If oUcb.Exists(sLocTemplatePath) Then
&apos; If Not the main directory of the office is the base
sLocTemplatePath = OldsLocTemplatePath
End If
Else
sLocTemplatePath = SOWorkPath
End If
End If
GetTemplateDefaultPath = ConvertToUrl(sLocTemplatePath)
Else
GetTemplateDefaultPath = SOWorkPath
End If
End Select
NOVALIDSYSTEMPATH:
If Err &lt;&gt; 0 Then
GetTemplateDefaultPath() = SOWorkPath
Resume ONITGOES
ONITGOES:
End If
End Function
Function QueryValueEx(ByVal lhKey, ByVal szValueName As String, vValue As String) As Long
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String
Dim Empty
On Error GoTo QueryValueExError
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&amp;, lType, 0&amp;, cch)
If lrc &lt;&gt; ERROR_NONE Then Error 5
Select Case lType
Case REG_SZ:
sValue = String(cch, 0)
lrc = RegQueryValueExString(lhKey, szValueName, 0&amp;, lType, sValue, cch)
If lrc = ERROR_NONE Then
vValue = Left$(sValue, cch)
Else
vValue = Empty
End If
Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&amp;, lType, lValue, cch)
If lrc = ERROR_NONE Then
vValue = lValue
End If
Case Else
lrc = -1
End Select
QueryValueExExit:
QueryValueEx = lrc
Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function
Function QueryValue(BaseKey As Long, sKeyName As String, sValueName As String) As Variant
Dim lRetVal As Long &apos; Returnvalue API-Call
Dim hKey As Long &apos; One key handle
Dim vValue As String &apos; Key value
lRetVal = RegOpenKeyEx(BaseKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
RegCloseKeyA (hKey)
QueryValue = vValue
End Function
</script:module>

View File

@@ -0,0 +1,484 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="DialogModul" script:language="StarBasic">Option Explicit
Public Const bDebugWizard = True
Public Const SBFIRSTAPPLCHECKED = 0
Public Const SBSECONDAPPLCHECKED = 1
Public Const SBTHIRDAPPLCHECKED = 2
Public Const SBFOURTHAPPLCHECKED = 3
Public WizardMode as String
Public Const SBMICROSOFTMODE = &quot;MS&quot;
&apos; The absolute maximal Number of possible Applications
Public Const SBMAXAPPLCOUNT = 4
Public Const Twip = 425
Public MaxApplCount as Integer
Public CurOffice As Integer
Public SOBitmapPath As String
Public SOWorkPath As String
Public SOTemplatePath as String
Public bCancelTask As Boolean
Public bDoKeepApplValues as Boolean
Public oUcb as Object
Public PathSeparator as String
Public ApplCount as Integer
Public sKeyName(SBMAXAPPLCOUNT-1) as String
Public sValueName(SBMAXAPPLCOUNT-1) as String
Public sCRLF as String
Public MSFilterName(5,4) as String
Public Applications(SBMAXAPPLCOUNT-1,9)
Public Const SBAPPLCONVERT = 0
Public Const SBDOCCONVERT = 1
Public Const SBDOCRECURSIVE = 2
Public Const SBDOCSOURCE = 3
Public Const SBDOCTARGET = 4
Public Const SBTEMPLCONVERT = 5
Public Const SBTEMPLRECURSIVE = 6
Public Const SBTEMPLSOURCE = 7
Public Const SBTEMPLTARGET = 8
Public Const SBAPPLKEY = 9
Public XMLTemplateList()
&apos; Application-relating Data are stored in this Array
&apos; according to the following structure:
&apos; Applications(X,0) = True/False (Application is to be converted)
&apos; Applications(X,1) = True/False (Documents are to be converted)
&apos; Applications(X,2) = True/False (Including Subdirectories)
&apos; Applications(X,3) = &quot;File:///...&quot; (SourceUrl of the documents)
&apos; Applications(X,4) = &quot;File///:...&quot; (TargetUrl of the documents)
&apos; Applications(X,5) = True/False (Templates are to be converted)
&apos; Applications(X,6) = True/False (Including Subdirectories)
&apos; Applications(X,7) = &quot;File:///...&quot; (SourceUrl of the templates)
&apos; Applications(X,8) = &quot;File:///...&quot; (TargetUrl of the templates)
&apos; Applications(X,9) = 0 (Key to the original Index of the Applications)
Sub FillStep_Welcome()
Dim i as Integer
&apos; bDoKeepApplValues = False
ImportDialogArea.Title = sTitle
With ImportDialog
.cmdHelp.Label = sHelpButton
.cmdCancel.Label = sCancelButton
.cmdBack.Label = sBackButton
.cmdGoOn.Label = sNextButton
.WelcomeTextLabel.Label = sWelcomeTextLabel1
.WelcomeTextLabel3.Label = sWelcomeTextLabel3
.optMSDocuments.Label = sContainerName(0)
.chkMSApplication1.Label = sMsDocumentCheckbox(0)
.chkMSApplication2.Label = sMsDocumentCheckbox(1)
.chkMSApplication3.Label = sMsDocumentCheckbox(2)
.cmdBack.Enabled = False
.Step = 1
If Not oFactoryKey.hasbyName(&quot;com.sun.star.text.TextDocument&quot;) Then
.chkLogfile.State = 0
.chkLogfile.Enabled = False
End If
End With
CheckModuleInstallation()
ToggleNextButton()
End Sub
Sub FillStep_InputPaths(OfficeIndex as Integer, bStartup as Boolean)
Dim Index as Integer
Dim oNullObject as Object
If bStartup And Not bDoKeepApplValues Then
If ImportDialog.optMSDocuments.State = 1 Then
SetupMSConfiguration()
Else
&apos;Not supposed to happen - is there an assert in BASIC...
End If
FillUpApplicationList()
End If
CurOffice = OfficeIndex
Index = Applications(CurOffice,SBAPPLKEY)
InitializePathsforCurrentApplication(Index)
With ImportDialog
.chkTemplatePath.Label = sTemplateCheckbox(Index)
.chkDocumentPath.State = Abs(Applications(CurOffice,SBDOCCONVERT))
.chkDocumentSearchSubDir.State = Abs(Applications(CurOffice,SBDOCRECURSIVE))
.txtDocumentImportPath.Text = ConvertFromUrl(Applications(CurOffice,SBDOCSOURCE))
.txtDocumentExportPath.Text = ConvertFromUrl(Applications(CurOffice,SBDOCTARGET))
.hlnDocuments.Label = sProgressMoreDocs
If WizardMode = SBMICROSOFTMODE Then
ImportDialogArea.Title = sTitle &amp; &quot; - &quot; &amp; sMSDocumentCheckBox(Index)
End If
.chkTemplatePath.Enabled = True
.chkDocumentPath.Enabled = True
.chkTemplatePath.Label = sTemplateCheckbox(Index)
.chkDocumentPath.Label = sDocumentCheckbox(Index)
.hlnTemplates.Label = sProgressMoreTemplates
.chkTemplatePath.State = Abs(Applications(CurOffice,SBTEMPLCONVERT))
ToggleInputPaths(oNullObject,&quot;Template&quot;)
ToggleInputPaths(oNullObject,&quot;Document&quot;)
.chkTemplateSearchSubDir.State = Abs(Applications(CurOffice,SBTEMPLRECURSIVE))
.txtTemplateImportPath.Text = ConvertFromUrl(Applications(CurOffice,SBTEMPLSOURCE))
.txtTemplateExportPath.Text = ConvertFromUrl(Applications(CurOffice,SBTEMPLTARGET))
.cmdGoOn.Label = sNextButton
.cmdBack.Enabled = True
ImportDialog.Step = 2
End With
ImportDialogArea.GetControl(&quot;chkTemplatePath&quot;).SetFocus()
ToggleNextButton()
End Sub
Sub FillUpApplicationList()
Dim i as Integer
Dim a as Integer
Dim BoolValue as Boolean
If Not bDoKeepApplValues Then
a = 0
For i = 1 To ApplCount
If ImportDialog.optMSDocuments.State = 1 Then
BoolValue = ImportDialogArea.GetControl(&quot;chkMSApplication&quot; &amp; i).Model.State = 1
End If
Applications(a,SBAPPLCONVERT) = BoolValue
Applications(a,SBDOCCONVERT) = BoolValue
Applications(a,SBDOCRECURSIVE) = BoolValue
Applications(a,SBDOCSOURCE) = &quot;&quot; &apos; GetDefaultPath(i)
Applications(a,SBDOCTARGET) = &quot;&quot; &apos; SOWorkPath
Applications(a,SBTEMPLCONVERT) = BoolValue
Applications(a,SBTEMPLRECURSIVE) = BoolValue
Applications(a,SBTEMPLSOURCE) = &quot;&quot; &apos; GetTemplateDefaultPath(i)
Applications(a,SBTEMPLTARGET) = &quot;&quot; &apos; GetTargetTemplatePath(i)
Applications(a,SBAPPLKEY) = i-1
If BoolValue Then
a = a + 1
End If
Next i
ApplCount = a
End If
End Sub
Sub InitializePathsforCurrentApplication(i as Integer)
AssignPathToCurrentApplication(SBDOCSOURCE, GetDefaultPath(i))
AssignPathToCurrentApplication(SBDOCTARGET, SOWorkPath)
AssignPathToCurrentApplication(SBTEMPLSOURCE, GetTemplateDefaultPath(i))
AssignPathToCurrentApplication(SBTEMPLTARGET, GetTargetTemplatePath(i))
End Sub
Sub AssignPathToCurrentApplication(Index as Integer, NewPath as String)
If Applications(CurOffice,Index) = &quot;&quot; Then
If CurOffice &gt; 0 Then
Applications(CurOffice,Index) = Applications(CurOffice-1,Index)
Else
Applications(CurOffice,Index) = NewPath
End If
End If
End Sub
Sub SaveStep_InputPath()
Applications(CurOffice,SBDOCCONVERT) = ImportDialog.chkDocumentPath.State = 1
Applications(CurOffice,SBDOCRECURSIVE) = ImportDialog.chkDocumentSearchSubDir.State = 1
Applications(CurOffice,SBDOCSOURCE) = ConvertToURL(ImportDialog.txtDocumentImportPath.Text)
Applications(CurOffice,SBDOCTARGET) = ConvertToUrl(ImportDialog.txtDocumentExportPath.Text)
Applications(CurOffice,SBTEMPLCONVERT) = ImportDialog.chkTemplatePath.State = 1
Applications(CurOffice,SBTEMPLRECURSIVE) = ImportDialog.chkTemplateSearchSubDir.State = 1
Applications(CurOffice,SBTEMPLSOURCE) = ConvertToURL(ImportDialog.txtTemplateImportPath.Text)
Applications(CurOffice,SBTEMPLTARGET) = ConvertToURL(ImportDialog.txtTemplateExportPath.Text)
End Sub
Sub ToggleInputPaths(aEvent as Object, Optional sDocType)
Dim bDoEnable as Boolean
Dim sLocDocType as String
Dim oCheckBox as Object
If Not IsNull(aEvent) Then
sLocDocType = aEvent.Source.Model.Tag
Else
sLocDocType = sDocType
End If
With ImportDialogArea
oCheckBox = .GetControl(&quot;chk&quot; &amp; sLocDocType &amp; &quot;Path&quot;).Model
bDoEnable = oCheckBox.State = 1 And oCheckBox.Enabled
.GetControl(&quot;lbl&quot; &amp; sLocDocType &amp; &quot;Import&quot;).Model.Enabled = bDoEnable
.GetControl(&quot;lbl&quot; &amp; sLocDocType &amp; &quot;Export&quot;).Model.Enabled = bDoEnable
.GetControl(&quot;txt&quot; &amp; sLocDocType &amp; &quot;ImportPath&quot;).Model.Enabled = bDoEnable
.GetControl(&quot;txt&quot; &amp; sLocDocType &amp; &quot;ExportPath&quot;).Model.Enabled = bDoEnable
.GetControl(&quot;chk&quot; &amp; sLocDocType &amp; &quot;SearchSubDir&quot;).Model.Enabled = bDoEnable
.GetControl(&quot;cmd&quot; &amp; sLocDocType &amp; &quot;Import&quot;).Model.Enabled = bDoEnable
.GetControl(&quot;cmd&quot; &amp; sLocDocType &amp; &quot;Export&quot;).Model.Enabled = bDoEnable
End With
ToggleNextButton()
End Sub
Function MakeSummaryString()
Dim sTmpText As String
Dim i as Integer
Dim Index as Integer
Dim sAddText as String
For i = 0 To ApplCount -1
Index = Applications(i,SBAPPLKEY)
If Applications(i,SBTEMPLCONVERT) Then
&apos; Templates are to be converted
sAddText = &quot;&quot;
If WizardMode = SBMICROSOFTMODE Then
sAddText = sSumMSTemplates(Index) &amp; sCRLF
End If
sTmpText = sTmpText &amp; sAddText &amp; ConvertFromUrl(Applications(i,SBTEMPLSOURCE)) &amp; sCRLF
If Applications(i,SBTEMPLRECURSIVE) Then
&apos; Including Subdirectories
sTmpText = sTmpText &amp; sSumInclusiveSubDir &amp; sCRLF
End If
sTmpText = sTmpText &amp; sSumSaveDocuments &amp; sCRLF
sTmpText = sTmpText &amp; ConvertFromUrl(Applications(i,SBTEMPLTARGET)) &amp; sCRLF
sTmpText = sTmpText &amp; sCRLF
End If
If Applications(i,SBDOCCONVERT) Then
&apos; Documents are to be converted
If WizardMode = SBMICROSOFTMODE Then
sAddText = sSumMSDocuments(Index) &amp; sCRLF
End If
sTmpText = sTmpText &amp; sAddText &amp; ConvertFromUrl(Applications(i,SBDOCSOURCE)) &amp; sCRLF
If Applications(i,SBDOCRECURSIVE) Then
&apos; Including Subdirectories
sTmpText = sTmpText &amp; sSumInclusiveSubDir &amp; sCRLF
End If
sTmpText = sTmpText &amp; sSumSaveDocuments &amp; sCRLF
sTmpText = sTmpText &amp; ConvertFromUrl(Applications(i,SBDOCTARGET)) &amp; sCRLF
sTmpText = sTmpText &amp; sCRLF
End If
Next i
MakeSummaryString = sTmpText
End Function
Sub FillStep_Summary()
ImportDialogArea.Title = sTitle
With ImportDialog
.SummaryTextbox.Text = MakeSummaryString()
.cmdGoOn.Enabled = .SummaryTextbox.Text &lt;&gt; &quot;&quot;
.cmdGoOn.Label = sBeginButton
.SummaryHeaderLabel.Label = sSummaryHeader
.Step = 3
End With
ImportDialogArea.GetControl(&quot;SummaryHeaderLabel&quot;).SetFocus()
End Sub
Sub FillStep_Progress()
With ImportDialog
.cmdBack.Enabled = False
.cmdGoOn.Enabled = False
.hlnProgress.Label = sProgressPage_1
.LabelRetrieval.FontWeight = com.sun.star.awt.FontWeight.BOLD
.LabelRetrieval.Label = sProgressPage_2
.LabelCurProgress.Label = sProgressPage_3
.LabelCurDocumentRetrieval.Label = &quot;&quot;
.LabelCurTemplateRetrieval.Label = &quot;&quot;
.LabelCurDocument.Label = &quot;&quot;
.Step = 4
End With
ImportDialogArea.GetControl(&quot;LabelRetrieval&quot;).SetFocus()
If ImportDialog.chkLogfile.State = 1 Then
ImportDialog.cmdShowLogFile.DefaultButton = True
End If
End Sub
Sub SetupMSConfiguration()
Wizardmode = SBMICROSOFTMODE
MaxApplCount = 3
ApplCount = 3
&apos; chkTemplatePath-Captions
sTemplateCheckBox(0) = GetResText(&quot;MSTemplateCheckbox_1_&quot;)
sTemplateCheckBox(1) = GetResText(&quot;MSTemplateCheckbox_2_&quot;)
sTemplateCheckBox(2) = GetResText(&quot;MSTemplateCheckbox_3_&quot;)
&apos; DocumentCheckbox- Captions
sDocumentCheckBox(0) = GetResText(&quot;MSDocumentCheckbox_1_&quot;)
sDocumentCheckBox(1) = GetResText(&quot;MSDocumentCheckbox_2_&quot;)
sDocumentCheckBox(2) = GetResText(&quot;MSDocumentCheckbox_3_&quot;)
sKeyName(0) = &quot;Software\Microsoft\Office\8.0\Word\Options&quot;
sKeyName(1) = &quot;Software\Microsoft\Office\8.0\Excel\Microsoft Excel&quot;
sKeyName(2) = &quot;Software\Microsoft\Office\8.0\PowerPoint\Recent Folder List\Default&quot;
sValueName(0) = &quot;DOC-PATH&quot;
sValueName(1) = &quot;DefaultPath&quot;
sValueName(2) = &quot;&quot;
&apos; See definition of Filtername-Array about meaning of fields
MSFilterName(0,0) = &quot;doc|docx|docm&quot;
MSFilterName(0,1) = &quot;writer8|writer8|writer8&quot;
MSFilterName(0,2) = &quot;odt|odt|odt&quot;
MSFilterName(0,3) = sMSDocumentCheckBox(0)
MSFilterName(0,4) = &quot;Word&quot;
MSFilterName(1,0) = &quot;xls|xlsx|xlsm&quot;
MSFilterName(1,1) = &quot;calc8|calc8|calc8&quot;
MSFilterName(1,2) = &quot;ods|ods|ods&quot;
MSFilterName(1,3) = sMSDocumentCheckBox(1)
MSFilterName(1,4) = &quot;Excel&quot;
MSFilterName(2,0) = &quot;ppt|pps|pptx|pub|pptm|ppsx|ppsm&quot;
MSFilterName(2,1) = &quot;impress8|impress8|impress8|impress8|impress8|impress8|impress8&quot;
MSFilterName(2,2) = &quot;odp|odp|odp|odp|odp|odp|odp&quot;
MSFilterName(2,3) = sMSDocumentCheckBox(2)
MSFilterName(2,4) = &quot;PowerPoint/Publisher&quot;
MSFilterName(3,0) = &quot;dot|dotx|dotm&quot;
MSFilterName(3,1) = &quot;writer8_template|writer8_template|writer8_template&quot;
MSFilterName(3,2) = &quot;ott|ott|ott&quot;
MSFilterName(3,3) = sMSTemplateCheckBox(0)
MSFilterName(3,4) = &quot;Word&quot;
MSFilterName(4,0) = &quot;xlt|xltx|xltm&quot;
MSFilterName(4,1) = &quot;calc8_template|calc8_template|calc8_template&quot;
MSFilterName(4,2) = &quot;ots|ots|ots&quot;
MSFilterName(4,3) = sMSTemplateCheckBox(1)
MSFilterName(4,4) = &quot;Excel&quot;
MSFilterName(5,0) = &quot;pot|potx|potm&quot;
MSFilterName(5,1) = &quot;impress8_template|impress8_template|impress8_template&quot;
MSFilterName(5,2) = &quot;otp|otp|otp&quot;
MSFilterName(5,3) = sMSTemplateCheckBox(2)
MSFilterName(5,4) = &quot;PowerPoint&quot;
End Sub
Function CheckControlPath(oCheckbox as Object, oTextBox as Object, ByVal bDoEnable as Boolean)
Dim sPath as String
If Not bDoEnable Then
CheckControlPath = False
ElseIf oCheckbox.State = 0 Then
CheckControlPath = True
Else
sPath = ConvertToUrl(Trim(oTextBox.Text))
CheckControlPath = oUcb.Exists(sPath)
End If
End Function
Function CheckInputPaths() as Boolean
Dim bChangePage as Boolean
bChangePage = CheckTextBoxPath(ImportDialog.txtTemplateImportPath, True, False, sTitle, False)
bChangePage = CheckTextBoxPath(ImportDialog.txtTemplateExportPath, bChangePage, True, sTitle, False)
bChangePage = CheckTextBoxPath(ImportDialog.txtDocumentImportPath, bChangePage, False, sTitle, False)
bChangePage = CheckTextBoxPath(ImportDialog.txtDocumentExportPath, bChangePage, True, sTitle, False)
CheckInputPaths = bChangePage
End Function
Function CheckTextBoxPath(oTextBox as Object, ByVal bCheck as Boolean, bCreateNew as Boolean, sTitle as String, bgetResources as Boolean) as Boolean
Dim iCreate as Integer
Dim sQueryMessage as String
Dim sUrlPath as String
Dim sMessageNoDir as String
Dim sShowPath as String
Dim oLocUcb as Object
oLocUcb = createUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
If bGetResources Then
If InitResources(&quot;ImportWizard&quot;) then
sNoDirCreation = GetResText(&quot;NoDirCreation&quot;)
sMsgDirNotThere = GetResText(&quot;MsgDirNotThere&quot;)
sQueryForNewCreation = GetResText(&quot;QueryfornewCreation&quot;)
Else
CheckTextBoxPath() = False
Exit Function
End If
End If
If oTextBox.Enabled Then
If bCheck Then
sShowPath = oTextBox.Text
sUrlPath = ConvertToUrl(sShowPath)
If Not oLocUcb.Exists(sUrlPath) Then
If Not bCreateNew Then
&apos; Sourcedirectories must be existing, Targetdirectories may be created new
sQueryMessage = ReplaceString(sMsgDirNotThere, sShowPath,&quot;%1&quot;)
Msgbox(sQueryMessage,16,sTitle)
CheckTextBoxPath() = False
Exit Function
Else
sQueryMessage = ReplaceString(sMsgDirNotThere, sShowPath,&quot;%1&quot;)
sQueryMessage = sQueryMessage &amp; Chr(13) &amp; sQueryForNewCreation
iCreate = Msgbox (sQueryMessage, 36, sTitle)
If iCreate = 6 Then
On Local Error Goto NOVALIDPATH
CreateFolder(sUrlPath)
If Not oLocUcb.Exists(sUrlPath) Then
Goto NOVALIDPATH
End If
Else
CheckTextBoxPath() = False
Exit Function
End If
End If
End If
CheckTextBoxPath() = True
Else
CheckTextBoxPath() = False
End If
Else
CheckTextBoxPath() = True
End If
Exit Function
NOVALIDPATH:
sMessageNoDir = ReplaceString(sNoDirCreation, sShowPath, &quot;%1&quot;)
Msgbox(sMessageNoDir, 16, sTitle)
CheckTextBoxPath() = False
End Function
Sub InitializeProgressPage(oDialog as Object)
oDialog.LabelRetrieval.FontWeight = com.sun.star.awt.FontWeight.NORMAL
oDialog.LabelCurProgress.FontWeight = com.sun.star.awt.FontWeight.BOLD
End Sub
Sub SetProgressDisplay(AbsFound as Integer)
ImportDialog.LabelRetrieval.Label = sProgressPage_2 &amp; &quot; &quot; &amp; ReplaceString(sProgressPage_5, Str(AbsFound) &amp; &quot; &quot;, &quot;%1&quot;)
ImportDialog.LabelCurDocumentRetrieval.Label = sProgressFound &amp; &quot; &quot; &amp; CStr(AbsDocuFound) &amp; &quot; &quot; &amp; sProgressMoreDocs
ImportDialog.LabelCurTemplateRetrieval.Label = sProgressFound &amp; &quot; &quot; &amp; CStr(AbsTemplateFound) &amp; &quot; &quot; &amp; sProgressMoreTemplates
End Sub
Sub TakoverFolderName(aEvent as Object)
Dim RefControlName as String
Dim oRefControl
RefControlName = aEvent.Source.Model.Tag
oRefControl = ImportDialogArea.GetControl(RefControlName)
GetFolderName(oRefControl.Model)
ToggleNextButton()
End Sub
Sub FinalizeDialogButtons()
ImportDialog.cmdShowLogFile.Enabled = ((Isnull(oLogDocument) = False) And (ImportDialog.chkLogfile.State = 1))
ImportDialog.cmdCancel.Enabled = False
ImportDialog.cmdGoOn.Label = sCloseButton
ImportDialog.cmdGoOn.Enabled = True
End Sub
</script:module>

View File

@@ -0,0 +1,783 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="FilesModul" script:language="StarBasic">Option Explicit
Public AbsTemplateFound as Integer
Public AbsDocuFound as Integer
Public oLogDocument as Object
Public oLogTable as Object
Public bLogExists as Boolean
Public sComment as String
Public MaxCollectIndex as Integer
Public bInsertRow as Boolean
Public sLogUrl as String
Public sCurPassWord as String
Public FileCount as Integer
Public XMLTemplateCount as Integer
Public PathCollection(7,3) as String
Public bIsFirstLogTable as Boolean
Function ReadCollectionPaths(FilesList() as String, sFilterName() as String)
Dim FilterIndex as Integer
Dim bRecursive as Boolean
Dim SearchDir as String
Dim i as Integer
Dim n as Integer
Dim a as Integer
Dim s as Integer
Dim t as Integer
Dim sFileContent() as String
Dim NewList(0,1) as String
Dim Index as Integer
Dim CurFileName as String
Dim CurExtension as String
Dim CurFileContent as String
Dim XMLTemplateContentList() as String
Dim bIsTemplatePath as Boolean
Dim MaxIndex as Integer
Dim NewContentList() as String
Dim XMLTemplateContentString as String
Dim ApplIndex as Integer
Dim bAssignFileName as Boolean
Dim bInterruptSearch as Boolean
bInterruptSearch = False
For i = 0 To MaxCollectIndex
SearchDir = PathCollection(i,0)
bRecursive = PathCollection(i,1)
sFileContent() = ArrayoutofString(PathCollection(i,2), &quot;|&quot;)
NewList() = ReadDirectories(SearchDir, bRecursive, False, False, sFileContent(), &quot;&quot;)
If InterruptProcess Then
ReadCollectionPaths() = False
Exit Function
End If
If Ubound(NewList()) &gt; -1 Then
bIsTemplatePath = FieldInList(&quot;vor&quot;, sFileContent)
If bIsTemplatePath Then
XMLTemplateContentString = PathCollection(i,3)
XMLTemplateContentList() = ArrayoutofString(XMLTemplateContentString, &quot;|&quot;)
If Ubound(XMLTemplateContentList()) &gt; -1 Then
MaxIndex = Ubound(NewList())
ReDim Preserve NewList(MaxIndex, 1) as String
ReDim Preserve NewContentList(MaxIndex) as String
a = -1
For n = 0 To MaxIndex
bAssignFileName = True
If InterruptProcess() Then
ReadCollectionPaths() = False
Exit Function
End If
CurFileContent = &quot;&quot;
CurFileName = NewList(n,0)
If (FieldInList(NewList(n,1), XMLTemplateList())) Then
CurFileContent = GetRealFileContent(CurFileName)
t = SearchArrayforPartString(CurFileContent, XMLTemplateContentList())
bAssignFileName = (t &gt; -1)
If bAssignFileName Then
CurFileContent = XMLTemplateContentList(t)
End If
NewList(n,1) = CurFileContent
End If
CurExtension = NewList(n,1)
If bAssignFileName Then
If a &lt; n Then
a = a + 1
NewList(a,0) = CurFileName
NewList(a,1) = CurExtension
If CurFileContent = &quot;&quot; Then
CurFileContent = CurExtension
End If
ApplIndex = GetApplicationIndex(CurFileContent, sFiltername())
NewContentList(a) = ApplIndex
End If
End If
Next n
If a &lt; MaxIndex And a &gt; -1 Then
ReDim Preserve NewList(a, 1) as String
End If
If a &gt; -1 Then
AddListtoFilesList(FilesList(), NewList(), NewContentList())
End If
End If
Else
MaxIndex = Ubound(NewList())
ReDim Preserve NewContentList(MaxIndex) as String
For s = 0 To MaxIndex
CurExtension = NewList(s,1)
NewContentList(s) = GetApplicationIndex(CurExtension, sFiltername())
Next s
AddListtoFilesList(FilesList(), NewList(), NewContentList())
End If
End If
Next i
ReadCollectionPaths() = Ubound(FilesList()) &gt; -1
End Function
Function GetApplicationIndex(CurFileContent as String, sFilterName() as String) as Integer
Dim Index as Integer
Dim i as Integer
Index = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0)
If Index &gt;= MaxApplCount Then
Index = Index - MaxApplCount
End If
For i = 0 To MaxApplCount - 1
If Applications(i, SBAPPLKEY) = Index Then
GetApplicationIndex() = i
Exit Function
End If
Next i
GetApplicationIndex() = - 1
End Function
Function InterruptProcess() as Boolean
If bCancelTask Or RetValue = 0 Then
bConversionIsRunning = False
InterruptProcess() = True
Exit Function
End if
InterruptProcess() = False
End Function
Sub AddCollectionPath(ApplIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer)
MaxCollectIndex = MaxCollectIndex + 1
PathCollection(MaxCollectIndex, 0) = Applications(ApplIndex, DocIndex)
PathCollection(MaxCollectIndex, 1) = Applications(ApplIndex, RecursiveIndex)
AddFilterNameToPathItem(ApplIndex, MaxCollectIndex, sFiltername(), DistIndex)
End Sub
Function SetExtension(LocExtension) as String
if (Instr(LocExtension, &quot;vnd.sun.xml.impress&quot;)) &gt; 0 then
SetExtension() = &quot;vor|sti|std&quot;
elseif (Instr(LocExtension, &quot;vnd.sun.xml.writer&quot;)) &gt; 0 then
SetExtension() = &quot;vor|stw&quot;
elseif (Instr(LocExtension, &quot;vnd.sun.xml.calc&quot;)) &gt; 0 then
SetExtension() = &quot;vor|stc&quot;
elseif (Instr(LocExtension, &quot;vnd.sun.xml.draw&quot;)) &gt; 0 then
SetExtension() = &quot;vor|std|sti&quot;
endif
End Function
Sub AddFilterNameToPathItem(ApplIndex as Integer, CollectIndex as Integer, sFiltername() as String, DistIndex as Integer)
Dim iKey as Integer
Dim CurListString as String
Dim LocExtension as String
Dim LocContentString as String
Dim LocXMLTemplateContent as String
iKey = Applications(ApplIndex, SBAPPLKEY)
CurListString = PathCollection(CollectIndex, 2)
LocExtension = sFilterName(iKey +DistIndex, 0)
If Instr(LocExtension, &quot;vnd.sun.xml.&quot;) = 1 Then
LocExtension = SetExtension(LocExtension)
LocContentString = sFilterName(iKey +DistIndex, 0)
LocContentString = ReplaceString(LocContentString, &quot;|&quot;, &quot;;&quot;)
LocXMLTemplateContent = PathCollection(CollectIndex, 3)
If LocXMLTemplateContent = &quot;&quot; Then
LocXMLTemplateContent = LocContentString
Else
LocXMLTemplateContent = LocXMLTemplateContent &amp; &quot;|&quot; &amp; LocContentString
End If
PathCollection(CollectIndex, 3) = LocXMLTemplateContent
End If
If CurListString = &quot;&quot; Then
PathCollection(CollectIndex, 2) = LocExtension
Else
If Instr(CurListString, LocExtension) = 0 Then
PathCollection(CollectIndex, 2) = CurListString &amp; &quot;|&quot; &amp; LocExtension
End If
End If
End Sub
Sub CheckIfToAddPathToCollection(ApplIndex as Integer, bDoConvertIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer)
Dim CollectIndex as Integer
Dim bCheckDocuType as Boolean
bCheckDocuType = Applications(ApplIndex, bDoConvertIndex)
If bCheckDocuType Then
CollectIndex = GetIndexInMultiArray(PathCollection(), Applications(ApplIndex,DocIndex), 0)
If (CollectIndex &gt;-1) Then
If Applications(ApplIndex, RecursiveIndex) &lt;&gt; PathCollection(CollectIndex, 1) Then
AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex)
Else
AddFilterNameToPathItem(ApplIndex, CollectIndex, sFilterName(), DistIndex)
End If
Else
AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex)
End If
End If
End Sub
Sub CollectPaths(sFiltername() as String)
Dim i as Integer
Dim XMLTemplateContentString as String
MaxCollectIndex = -1
For i = 0 To ApplCount-1
CheckIfToAddPathToCollection(i, SBDOCCONVERT, SBDOCSOURCE, SBDOCRECURSIVE, sFilterName(), 0)
Next i
XMLTemplateCount = 0
XMLTemplateContentString = &quot;&quot;
For i = 0 To ApplCount-1
CheckIfToAddPathToCollection(i, SBTEMPLCONVERT, SBTEMPLSOURCE, SBTEMPLRECURSIVE, sFilterName(), MaxApplCount)
Next i
End Sub
Sub ConvertAllDocuments(sFilterName() as String)
Dim FileProperties(1) as new com.sun.star.beans.PropertyValue
Dim PWFileProperties(2) as New com.sun.star.beans.PropertyValue
Dim WriterWebProperties(0) as new com.sun.star.beans.PropertyValue
Dim OpenProperties(4) as new com.sun.star.beans.PropertyValue
Dim oInteractionHandler as Object
Dim InteractionTypes(0) as Long
Dim FilesList(0,2) as String
Dim sViewPath as String
Dim i as Integer
Dim FilterIndex as Integer
Dim sSourceUrl as String
Dim CurFilename as String
Dim oDocument as Object
Dim sExtension as String
Dim OldExtension as String
Dim CurFound as Integer
Dim TotFound as Integer
Dim TargetStemDir as String
Dim SourceStemDir as String
Dim TargetDir as String
Dim sTargetUrl as String
Dim CurFilterName as String
Dim ApplIndex as Integer
Dim Index as Integer
Dim bIsDocument as Boolean
Dim bDoSave as Boolean
Dim sCurFileExists as String
Dim MaxFileIndex as Integer
Dim bContainsBasicMacro as Boolean
Dim bIsPassWordProtected as Boolean
Dim iOverwrite as Integer
Dim sMimeTypeorExtension as String
Dim sPrevMimeTypeorExtension as String
bConversionisrunning = True
InteractionTypes(0) = com.sun.star.task.PasswordRequestMode.PASSWORD_REENTER
oInteractionHandler = createUnoService(&quot;com.sun.star.task.InteractionHandler&quot;)
oInteractionHandler.initialize(InteractionTypes())
iGeneralOverwrite = SBOVERWRITEUNDEFINED
bConversionIsRunning = True
bLogExists = false
AbsTemplateFound = 0
AbsDocuFound = 0
CollectPaths(sFiltername())
If Not ReadCollectionPaths(FilesList(), sFilterName()) Then
TotFound = 0
SetProgressDisplay(0)
bConversionisrunning = false
FinalizeDialogButtons()
Exit Sub
End If
TotFound = Ubound(FilesList()) + 1
If FilesList(0,0) = &quot;&quot; Then &apos; Querying the number of fields in a multidimensional Array is unsecure
TotFound = 0 &apos; because it will return the value 0 (and not -1) even when the Array is empty
SetProgressDisplay(0)
End If
BubbleSortList(FilesList(), true)
If TotFound &gt; 0 Then
CreateLogDocument(OpenProperties())
InitializeProgressPage(ImportDialog)
OpenProperties(0).Name = &quot;Hidden&quot;
OpenProperties(0).Value = True
OpenProperties(1).Name = &quot;AsTemplate&quot;
OpenProperties(1).Value = False
OpenProperties(2).Name = &quot;MacroExecutionMode&quot;
OpenProperties(2).Value = com.sun.star.document.MacroExecMode.NEVER_EXECUTE
OpenProperties(3).Name = &quot;UpdateDocMode&quot;
OpenProperties(3).Value = com.sun.star.document.UpdateDocMode.NO_UPDATE
OpenProperties(4).Name = &quot;InteractionHandler&quot;
OpenProperties(4).Value = oInteractionHandler
MaxFileIndex = Ubound(FilesList(),1)
FileCount = 0
For i = 0 To MaxFileIndex
sComment = &quot;&quot;
If InterruptProcess() Then
Exit For
End If
bDoSave = True
sSourceUrl = FilesList(i,0)
sPrevMimeTypeorExtension = sMimeTypeorExtension
sMimeTypeorExtension = FilesList(i,1)
CurFiltername = GetFilterName(sMimeTypeorExtension, sFilterName(), sExtension, FilterIndex)
ApplIndex = FilesList(i,2)
If sMimeTypeorExtension &lt;&gt; sPrevMimeTypeorExtension Then
CreateLogTable(ApplIndex, sMimeTypeOrExtension, sFiltername())
End If
If ApplIndex &gt; Ubound(Applications) or (ApplIndex &lt; 0) Then
Msgbox &quot;Applicationindex out of bounds:&quot; &amp; sSourcUrl
End If
sViewPath = ConvertFromUrl(sSourceUrl) &apos; CutPathView(sSourceUrl, 70)
ImportDialog.LabelCurDocument.Label = Str(i+1) &amp; &quot;/&quot; &amp; MaxFileIndex + 1 &amp; &quot; (&quot; &amp; sViewPath &amp; &quot;)&quot;
Select Case lcase(sExtension)
Case &quot;odt&quot;, &quot;ods&quot;, &quot;odp&quot;, &quot;odg&quot;, &quot;odm&quot;, &quot;odf&quot;
SourceStemDir = RTrimStr(Applications(ApplIndex,SBDOCSOURCE), &quot;/&quot;)
TargetStemDir = RTrimStr(Applications(ApplIndex,SBDOCTARGET), &quot;/&quot;)
Case Else &apos; Templates and Helper-Applications remain
SourceStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLSOURCE), &quot;/&quot;)
TargetStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLTARGET), &quot;/&quot;)
End Select
sTargetUrl = ReplaceString(sSourceUrl, TargetStemDir, SourceStemDir)
CurFilename = GetFileNameWithoutExtension(sTargetUrl, &quot;/&quot;)
OldExtension = GetFileNameExtension(sTargetUrl)
sTargetUrl = RTrimStr(sTargetUrl, OldExtension)
sTargetUrl = sTargetUrl &amp; sExtension
TargetDir = RTrimStr(sTargetUrl, CurFilename &amp; &quot;.&quot; &amp; sExtension)
If (oUcb.Exists(sTargetUrl)) Then
If (iGeneralOverwrite &lt;&gt; SBOVERWRITEALWAYS) Then
If (iGeneralOverwrite = SBOVERWRITEUNDEFINED) Then
ShowOverwriteAllDialog(sTargetUrl, sTitle)
bDoSave = (iGeneralOverwrite = SBOVERWRITEQUERY) Or (iGeneralOverwrite = SBOVERWRITEALWAYS)
Elseif iGeneralOverwrite = SBOVERWRITENEVER Then
bDoSave = False
ElseIf ((iGeneralOverWrite = SBOVERWRITEQUERY) OR (iGeneralOverwrite = SBOVERWRITECANCEL)) Then
&apos; Todo: According to AS there might come a new feature that storeasUrl could possibly rise a UI dialog.
&apos; In this case my own UI becomes obsolete
sCurFileExists = ReplaceString(sFileExists, ConvertFromUrl(sTargetUrl), &quot;&lt;1&gt;&quot;)
sCurFileExists = ReplaceString(sCurFileExists, chr(13), &quot;&lt;CR&gt;&quot;)
iOverWrite = Msgbox (sCurFileExists, 32 + 3, sTitle)
Select Case iOverWrite
Case 1 &apos; OK
&apos; In the FileProperty-Bean this is already default
bDoSave = True
Case 2 &apos; Abort
CancelTask(False)
bDoSave = False
Case 7 &apos; No
bDoSave = False
End Select
End If
End If
End If
If bDoSave Then
If Not oUcb.Exists(TargetDir) Then
bDoSave = CreateFolder(TargetDir)
End If
If bDoSave Then
oDocument = StarDesktop.LoadComponentFromURL(sSourceUrl, &quot;_default&quot;, 0, OpenProperties())
If Not IsNull(oDocument) Then
InsertSourceUrlToLogDocument(sSourceUrl, &quot;&quot;)
bIsPassWordProtected = CheckPassWordProtection(oDocument)
CheckIfMacroExists(oDocument.BasicLibraries, sComment)
On Local Error Goto NOSAVING
If bIsPassWordProtected Then
PWFileProperties(0).Name = &quot;FilterName&quot;
PWFileProperties(0).Value = CurFilterName
PWFileProperties(1).Name = &quot;Overwrite&quot;
PWFileProperties(1).Value = True
PWFileProperties(2).Name = &quot;Password&quot;
PWFileProperties(2).Value = sCurPassWord
oDocument.StoreAsUrl(sTargetUrl, PWFileProperties())
Else
FileProperties(0).Name = &quot;FilterName&quot;
FileProperties(0).Value = CurFilterName
FileProperties(1).Name = &quot;Overwrite&quot;
FileProperties(1).Value = True
oDocument.StoreAsUrl(sTargetUrl,FileProperties())
End If
&apos; Todo: Make sure that an errorbox pops up when saving fails
NOSAVING:
If Err &lt;&gt; 0 Then
sCurcouldnotsaveDocument = ReplaceString(scouldnotsaveDocument, ConvertFromUrl(sTargetUrl), &quot;&lt;1&gt;&quot;)
sComment = ConcatComment(sComment, sCurCouldnotsaveDocument)
Resume LETSGO
LETSGO:
Else
FileCount = FileCount + 1
End If
oDocument.Dispose()
InsertTargetUrlToLogDocument(sTargetUrl, sComment)
Else
sCurcouldnotopenDocument = ReplaceString(scouldnotopenDocument, ConvertFromUrl(sSourceUrl), &quot;&lt;1&gt;&quot;)
sComment = ConcatComment(sComment, sCurCouldnotopenDocument)
InsertSourceUrlToLogDocument(sSourceUrl, sComment)
End If
End If
End If
Next i
End If
AddLogStatistics()
FinalizeDialogButtons()
bConversionIsRunning = False
Exit Sub
RTError:
Msgbox sRTErrorDesc, 16, sRTErrorHeader
End Sub
Sub AddListtoFilesList(FirstList(), SecList(), NewContentList() as String)
Dim sLocExtension as String
Dim FirstStart as Integer
Dim FirstEnd as Integer
Dim i as Integer
Dim s as Integer
If FirstList(0,0) = &quot;&quot; Then
FirstStart = Ubound(FirstList(),1)
Else
FirstStart = Ubound(FirstList(),1) + 1
End If
FirstEnd = FirstStart + Ubound(SecList(),1)
ReDim Preserve FirstList(FirstEnd,2)
s = 0
For i = FirstStart To FirstEnd
FirstList(i,0) = SecList(s,0)
FirstList(i,1) = SecList(s,1)
sLocExtension = lcase(FirstList(i,1))
Select Case sLocExtension
Case &quot;sdw&quot;, &quot;sdc&quot;, &quot;sda&quot;, &quot;sdd&quot;, &quot;smf&quot;, &quot;sgl&quot;, &quot;doc&quot;, &quot;docx&quot;, &quot;docm&quot;, &quot;xls&quot;, &quot;xlsx&quot;, &quot;xlsm&quot;, &quot;ppt&quot;, &quot;pps&quot;, &quot;pptx&quot;, &quot;pptm&quot;, &quot;ppsx&quot;, &quot;ppsm&quot;, &quot;pub&quot;, &quot;sxi&quot;, &quot;sxw&quot;, &quot;sxd&quot;, &quot;sxg&quot;, &quot;sxm&quot;, &quot;sxc&quot;
AbsDocuFound = AbsDocuFound + 1
Case else
AbsTemplateFound = AbsTemplateFound + 1
End Select
FirstList(i,2) = CStr(NewContentList(s))
s = s + 1
Next i
SetProgressDisplay(Ubound(FirstList()) + 1)
End Sub
Function GetTargetTemplatePath(Index as Integer)
Select Case WizardMode
Case SBMICROSOFTMODE
GetTargetTemplatePath() = SOTemplatePath &amp; &quot;/&quot; &amp; sTemplateGroupName
End Select
End Function
&apos; Retrieves the second value for a next to &apos;SearchString&apos; in
&apos; a two-dimensional string-Array
Function GetFilterName(sMimetypeorExtension as String, sFilterName(), sExtension as string, FilterIndex as Integer) as String
Dim i as Integer
Dim MaxIndex as Integer
Dim sLocFilterlist() as String
For i = 0 To Ubound(sFiltername(),1)
If Instr(1,sFilterName(i,0),sMimeTypeOrExtension) &lt;&gt; 0 Then
sLocFilterList() = ArrayoutofString(sFiltername(i,0),&quot;|&quot;, MaxIndex)
If MaxIndex = 0 Then
sExtension = sFiltername(i,2)
GetFilterName = sFilterName(i,1)
Else
Dim b as Integer
Dim sLocExtensionList() as String
b = SearchArrayForPartString(sMimetypeOrExtension, sLocFilterList())
sLocFilterList() = ArrayoutofString(sFiltername(i,1),&quot;|&quot;, MaxIndex)
GetFilterName = sLocFilterList(b)
sLocExtensionList() = ArrayoutofString(sFilterName(i,2), &quot;|&quot;, MaxIndex)
sExtension = sLocExtensionList(b)
End If
Exit For
End If
Next
FilterIndex = i
End Function
Function SearchArrayforPartString(SearchString as String, LocList()) as Integer
Dim i as Integer
Dim a as Integer
Dim StringList() as String
For i = Lbound(LocList(),1) to Ubound(LocList(),1)
StringList() = ArrayoutofString(LocList(i), &quot;|&quot;)
For a = 0 To Ubound(StringList())
If (Instr(1, SearchString, StringList(a)) &lt;&gt; 0) Then
SearchArrayForPartString() = i
Exit Function
End If
Next a
Next i
SearchArrayForPartString() = -1
End Function
Sub CreateLogTable(ApplIndex as Integer, CurFileContent as String, sFilterName() as String)
Dim oLogCursor as Object
Dim oLogRows as Object
Dim FilterIndex as Integer
Dim sDocumentType as String
Dim oTextCursor
Dim oCell
If Not bLogExists Then
Exit Sub
End If
FilterIndex = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0)
sDocumentType = sFiltername(FilterIndex,3)
oLogCursor = oLogDocument.Text.createTextCursor()
oLogCursor.GotoEnd(False)
If Not bIsFirstLogTable Then
oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
Else
bisFirstLogTable = False
End If
oLogCursor.HyperLinkURL = &quot;&quot;
oLogCursor.HyperLinkName = &quot;&quot;
oLogCursor.HyperLinkTarget = &quot;&quot;
oLogCursor.ParaStyleName = &quot;Heading 1&quot;
oLogCursor.setString(sDocumentType)
oLogCursor.CollapsetoEnd()
oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
oLogTable = oLogDocument.CreateInstance(&quot;com.sun.star.text.TextTable&quot;)
oLogTable.RepeatHeadline = true
oLogCursor.Text.InsertTextContent(oLogCursor, oLogTable, True)
oTextCursor = oLogTable.GetCellbyPosition(0,0).createTextCursor()
oTextCursor.SetString(sSourceDocuments)
oTextCursor = oLogTable.GetCellbyPosition(1,0).createTextCursor()
oTextCursor.SetString(sTargetDocuments)
bInsertRow = False
End Sub
Function GetSize(iWidth, iHeight) As New com.sun.star.awt.Size
Dim aSize As New com.sun.star.awt.Size
aSize.Width = iWidth
aSize.Height = iHeight
GetSize() = aSize
End Function
Sub InsertCommandButtonatViewCursor(oLocDocument, oLocCursor, TargetUrl as String, Optional aSize)
Dim oDocument
Dim oController
Dim oCommandButton
Dim oShape
Dim oDrawPage
Dim oCommandControl
Dim oEvent
Dim oCell
oCommandButton = oLocDocument.createInstance(&quot;com.sun.star.form.component.CommandButton&quot;)
oShape = oLocDocument.CreateInstance (&quot;com.sun.star.drawing.ControlShape&quot;)
If IsMissing(aSize) Then
oShape.Size = GetSize(4000, 600)
End If
oCommandButton.Label = FileNameoutofPath(Targeturl)
oCommandButton.TargetFrame = &quot;_default&quot;
oCommandButton.ButtonType = com.sun.star.form.FormButtonType.URL
oCommandbutton.DispatchUrlInternal = True
oCommandButton.TargetURL = ConverttoUrl(TargetUrl)
oShape.Control = oCommandbutton
oLocCursor.Text.InsertTextContent(oLocCursor, oShape, True)
End Sub
Sub CreateLogDocument(HiddenProperties())
Dim OpenProperties(0) as new com.sun.star.beans.PropertyValue
Dim NoArgs()
Dim i as Integer
Dim bLogIsThere as Boolean
If ImportDialog.chkLogfile.State = 1 Then
i = 2
OpenProperties(0).Name = &quot;Hidden&quot;
OpenProperties(0).Value = True
oLogDocument = StarDesktop.LoadComponentFromURL(&quot;private:factory/swriter&quot;, &quot;_default&quot;, 4, OpenProperties())
SOWorkPath = RTrimStr(SOWorkPath,&quot;/&quot;)
sLogUrl = SOWorkPath &amp; &quot;/Logfile.odt&quot;
Do
bLogIsThere = oUcb.Exists(sLogUrl)
If bLogIsThere Then
If i = 2 Then
sLogUrl = ReplaceString(sLogUrl, &quot;/Logfile_2.odt&quot;, &quot;/Logfile.odt&quot;)
Else
sLogUrl = ReplaceString(sLogUrl, &quot;/Logfile_&quot; &amp; cStr(i) &amp; &quot;.odt&quot;, &quot;/Logfile_&quot; &amp; cStr(i-1) &amp; &quot;.odt&quot;)
End If
i = i + 1
End If
Loop Until Not bLogIsThere
bLogExists = True
oLogDocument.StoreAsUrl(sLogUrl, NoArgs())
End If
End Sub
Sub InsertTargetUrlToLogDocument(sTargetUrl as String, sComment as String)
Dim oCell
Dim oTextCursor
Dim CurFilterTracingpath as String
If (bLogExists) And (sTargetUrl &lt;&gt; &quot;&quot;) Then
If sTargetUrl &lt;&gt; &quot;&quot; Then
oCell = oLogTable.GetCellbyPosition(1,oLogTable.Rows.Count-1)
InsertCommentToLogCell(sComment, oCell)
InsertHyperLinkToLogCell(sTargetUrl, oCell)
oLogDocument.Store()
End If
End If
End Sub
Sub InsertSourceUrlToLogDocument(SourceUrl as String, sComment) &apos;
Dim oCell as Object
If bLogExists Then
If bInsertRow Then
oLogTable.Rows.InsertByIndex(oLogTable.Rows.Count,1)
Else
bInsertRow = True
End If
oCell = oLogTable.GetCellbyPosition(0,oLogTable.Rows.Count-1)
InsertCommentToLogCell(sComment, oCell)
InsertHyperLinkToLogCell(SourceUrl, oCell)
oLogDocument.Store()
End If
End Sub
Sub InsertHyperLinkToLogCell(sUrl as String, oCell as Object)
Dim oLogCursor as Object
Dim LocFileName as String
oLogCursor = oCell.createTextCursor()
oLogCursor.CollapseToStart()
oLogCursor.HyperLinkURL = sUrl
oLogCursor.HyperLinkName = sUrl
oLogCursor.HyperLinkTarget = sUrl
LocFileName = FileNameOutOfPath(sUrl)
oCell.InsertString(oLogCursor, LocFileName,False)
End Sub
Sub InsertCommentToLogCell(sComment as string, oCell as Object)
Dim oCommentCursor as Object
If sComment &lt;&gt; &quot;&quot; Then
oCommentCursor = oCell.createTextCursor()
oCell.insertControlCharacter(oCommentCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
oCell.insertString(oCommentCursor, sComment, false)
End If
End Sub
Sub AddLogStatistics()
Dim oCell as Object
Dim oLogCursor as Object
Dim MaxRowIndex as Integer
If bLogExists Then
MaxRowIndex = oLogTable.Rows.Count
sLogSummary = ReplaceString(sLogSummary, FileCount, &quot;&lt;COUNT&gt;&quot;)
&apos; oLogTable.Rows.InsertByIndex(MaxRowIndex, 1)
&apos; oCell = oLogTable.GetCellbyPosition(0, MaxRowIndex)
&apos; oLogCursor = oCell.createTextCursor()
&apos; oCell.InsertString(oLogCursor, sLogSummary,False)
&apos; MergeRange(oLogTable, oCell, 1)
oLogCursor = oLogDocument.Text.CreateTextCursor
oLogCursor.gotoEnd(False)
oLogCursor.HyperLinkURL = &quot;&quot;
oLogCursor.HyperLinkName = &quot;&quot;
oLogCursor.HyperLinkTarget = &quot;&quot;
oLogCursor.SetString(sLogSummary)
oLogDocument.Store()
oLogDocument.Dispose()
bLogExists = False
End If
End Sub
Function CheckIfMacroExists(oBasicLibraries as Object, sComment as String) as Boolean
Dim ModuleNames() as String
Dim ModuleName as String
Dim MaxLibIndex as Integer
Dim MaxModuleIndex as Integer
Dim bMacroExists as Boolean
Dim n as Integer
Dim m as Integer
Dim LibName as String
Dim sBasicCode as String
Dim oLibrary as Object
bMacroExists = False
bMacroExists = oBasicLibraries.hasElements
If bMacroExists Then
MaxLibIndex = Ubound(oBasicLibraries.ElementNames())
For n = 0 To MaxLibIndex
LibName = oBasicLibraries.ElementNames(n)
If oBasicLibraries.isLibraryLoaded(LibName) Then
oLibrary = oBasicLibraries.getbyName(LibName)
If oLibrary.hasElements() Then
MaxModuleIndex = Ubound(oLibrary.ElementNames())
For m = 0 To MaxModuleIndex
ModuleName = oLibrary.ElementNames(m)
sBasicCode = oLibrary.getbyName(ModuleName)
If sBasicCode &lt;&gt; &quot;&quot; Then
ConcatComment(sComment, sReeditMacro)
CheckIfMacroExists() = True
Exit Function
End If
Next m
End If
End If
Next n
End If
CheckIfMacroExists() = False
End Function
Function CheckPassWordProtection(oDocument as Object)
Dim bIsPassWordProtected as Boolean
Dim i as Integer
Dim oArgs()
Dim MaxIndex as Integer
Dim sblabla as String
bIsPassWordProtected = false
oArgs() = oDocument.getArgs()
MaxIndex = Ubound(oArgs())
For i = 0 To MaxIndex
sblabla = oArgs(i).Name
If oArgs(i).Name = &quot;Password&quot; Then
bIsPassWordProtected = True
sCurPassWord = oArgs(i).Value
Exit For
End If
Next i
CheckPassWordProtection() = bIsPassWordProtected
End Function
Sub OpenLogDocument()
bShowLogFile = True
ImportDialogArea.endexecute()
End Sub
Sub MergeRange(oTable as Object, oCell as Object, MergeCount as Integer)
Dim oTableCursor as Object
oTableCursor = oTable.createCursorByCellName(oCell.CellName)
oTableCursor.goRight(MergeCount, True)
oTableCursor.mergeRange()
End Sub
Function ConcatComment(sComment as String, AdditionalComment as String)
If sComment = &quot;&quot; Then
sComment = AdditionalComment
Else
sComment = sComment &amp; chr(13) + AdditionalComment
End If
ConcatComment = sComment
End Function
</script:module>

View File

@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="ImportDialog" dlg:left="96" dlg:top="28" dlg:width="270" dlg:height="210" dlg:page="4" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_DIALOG" dlg:closeable="true" dlg:moveable="true" dlg:title="ImportDialog">
<dlg:bulletinboard>
<dlg:text dlg:id="lblTemplateExport" dlg:tab-index="0" dlg:left="12" dlg:top="94" dlg:width="60" dlg:height="8" dlg:page="2" dlg:value="lblTemplateExport"/>
<dlg:textfield dlg:id="txtTemplateImportPath" dlg:tab-index="1" dlg:left="73" dlg:top="76" dlg:width="170" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_LBTEMPLATEPATH">
<script:event script:event-name="on-textchange" script:macro-name="vnd.sun.star.script:ImportWizard.Main.ToggleNextButton?language=Basic&amp;location=application" script:language="Script"/>
</dlg:textfield>
<dlg:textfield dlg:id="txtTemplateExportPath" dlg:tab-index="2" dlg:left="73" dlg:top="92" dlg:width="170" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_EDTEMPLATEPATH"/>
<dlg:checkbox dlg:id="chkDocumentPath" dlg:tab-index="3" dlg:left="12" dlg:top="121" dlg:width="240" dlg:height="10" dlg:page="2" dlg:tag="Document" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CBDOCUMENT" dlg:value="chkDocumentPath" dlg:checked="true">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:ImportWizard.DialogModul.ToggleInputPaths?language=Basic&amp;location=application" script:language="Script"/>
</dlg:checkbox>
<dlg:checkbox dlg:id="chkDocumentSearchSubDir" dlg:tab-index="4" dlg:left="12" dlg:top="134" dlg:width="240" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CBDOCUMENTRECURSE" dlg:value="chkDocumentSearchSubDir" dlg:checked="false"/>
<dlg:text dlg:id="lblDocumentImport" dlg:tab-index="5" dlg:left="10" dlg:top="151" dlg:width="60" dlg:height="8" dlg:page="2" dlg:value="lblDocumentImport"/>
<dlg:text dlg:id="lblDocumentExport" dlg:tab-index="6" dlg:left="10" dlg:top="167" dlg:width="60" dlg:height="8" dlg:page="2" dlg:value="lblDocumentExport"/>
<dlg:textfield dlg:id="txtDocumentImportPath" dlg:tab-index="7" dlg:left="73" dlg:top="149" dlg:width="170" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_LBDOCUMENTPATH">
<script:event script:event-name="on-textchange" script:macro-name="vnd.sun.star.script:ImportWizard.Main.ToggleNextButton?language=Basic&amp;location=application" script:language="Script"/>
</dlg:textfield>
<dlg:textfield dlg:id="txtDocumentExportPath" dlg:tab-index="8" dlg:left="73" dlg:top="165" dlg:width="170" dlg:height="12" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_EDDOCUMENTPATH"/>
<dlg:text dlg:id="SummaryHeaderLabel" dlg:tab-index="9" dlg:left="6" dlg:top="37" dlg:width="258" dlg:height="8" dlg:page="3" dlg:value="SummaryHeaderLabel"/>
<dlg:textfield dlg:id="SummaryTextbox" dlg:tab-index="10" dlg:left="5" dlg:top="48" dlg:width="259" dlg:height="125" dlg:page="3" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_3_TBSUMMARY" dlg:vscroll="true" dlg:multiline="true" dlg:readonly="true"/>
<dlg:text dlg:id="LabelRetrieval" dlg:tab-index="11" dlg:left="10" dlg:top="67" dlg:width="255" dlg:height="8" dlg:page="4" dlg:value="LabelRetrieval"/>
<dlg:text dlg:id="LabelCurTemplateRetrieval" dlg:tab-index="12" dlg:left="15" dlg:top="79" dlg:width="249" dlg:height="8" dlg:page="4" dlg:value="LabelCurTemplateRetrieval"/>
<dlg:text dlg:id="LabelCurDocumentRetrieval" dlg:tab-index="13" dlg:left="15" dlg:top="91" dlg:width="249" dlg:height="8" dlg:page="4" dlg:value="LabelCurDocumentRetrieval"/>
<dlg:text dlg:id="LabelCurProgress" dlg:tab-index="14" dlg:left="10" dlg:top="106" dlg:width="255" dlg:height="8" dlg:page="4" dlg:value="LabelCurProgress"/>
<dlg:text dlg:id="LabelCurDocument" dlg:tab-index="15" dlg:left="15" dlg:top="118" dlg:width="249" dlg:height="20" dlg:page="4" dlg:value="LabelCurDocument" dlg:multiline="true"/>
<dlg:img dlg:id="ImportPreview" dlg:tab-index="16" dlg:left="6" dlg:top="6" dlg:width="258" dlg:height="26" dlg:scale-image="false"/>
<dlg:button dlg:id="cmdBack" dlg:tab-index="17" dlg:left="155" dlg:top="190" dlg:width="50" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_0_CMDPREV" dlg:value="cmdBack">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:ImportWizard.Main.PrevStep?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdCancel" dlg:tab-index="18" dlg:left="6" dlg:top="190" dlg:width="50" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_0_CMDCANCEL" dlg:value="cmdCancel">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:ImportWizard.Main.CancelTask?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdHelp" dlg:tab-index="19" dlg:left="65" dlg:top="190" dlg:width="50" dlg:height="14" dlg:value="cmdHelp" dlg:button-type="help"/>
<dlg:button dlg:id="cmdGoOn" dlg:tab-index="20" dlg:left="214" dlg:top="190" dlg:width="50" dlg:height="14" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_0_CMDNEXT" dlg:value="cmdGoOn">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:ImportWizard.Main.NextStep?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:text dlg:id="WelcomeTextLabel" dlg:tab-index="21" dlg:left="6" dlg:top="38" dlg:width="258" dlg:height="20" dlg:page="1" dlg:value="WelcomeTextLabel" dlg:multiline="true"/>
<dlg:text dlg:id="WelcomeTextLabel3" dlg:tab-index="22" dlg:left="6" dlg:top="58" dlg:width="258" dlg:height="12" dlg:page="1" dlg:value="WelcomeTextLabel3"/>
<dlg:button dlg:id="cmdTemplateImport" dlg:tab-index="23" dlg:left="248" dlg:top="75" dlg:width="14" dlg:height="14" dlg:page="2" dlg:tag="txtTemplateImportPath" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CMDTEMPLATEPATHSELECT" dlg:value="...">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:ImportWizard.DialogModul.TakoverFolderName?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdTemplateExport" dlg:tab-index="24" dlg:left="248" dlg:top="91" dlg:width="14" dlg:height="14" dlg:page="2" dlg:tag="txtTemplateExportPath" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CMDTEMPLATEPATHSELECT2" dlg:value="...">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:ImportWizard.DialogModul.TakoverFolderName?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdDocumentImport" dlg:tab-index="25" dlg:left="248" dlg:top="148" dlg:width="14" dlg:height="14" dlg:page="2" dlg:tag="txtDocumentImportPath" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CMDDOCUMENTPATHSELECT" dlg:value="...">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:ImportWizard.DialogModul.TakoverFolderName?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:button dlg:id="cmdDocumentExport" dlg:tab-index="26" dlg:left="248" dlg:top="164" dlg:width="14" dlg:height="14" dlg:page="2" dlg:tag="txtDocumentExportPath" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CMDDOCUMENTPATHSELECT2" dlg:value="...">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:ImportWizard.DialogModul.TakoverFolderName?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
<dlg:radiogroup>
<dlg:radio dlg:id="optMSDocuments" dlg:tab-index="27" dlg:left="6" dlg:top="72" dlg:width="258" dlg:height="9" dlg:page="1" dlg:tag="MS" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_0_OPTMSDOCUMENTS" dlg:value="optMSDocuments" dlg:checked="true">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:ImportWizard.Main.ToggleCheckboxes?language=Basic&amp;location=application" script:language="Script"/>
</dlg:radio>
</dlg:radiogroup>
<dlg:checkbox dlg:id="chkMSApplication1" dlg:tab-index="29" dlg:disabled="true" dlg:left="12" dlg:top="85" dlg:width="141" dlg:height="9" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CHKWORD" dlg:value="chkMSApplication1" dlg:checked="false">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:ImportWizard.Main.ToggleNextButton?language=Basic&amp;location=application" script:language="Script"/>
</dlg:checkbox>
<dlg:checkbox dlg:id="chkMSApplication2" dlg:tab-index="30" dlg:disabled="true" dlg:left="155" dlg:top="85" dlg:width="109" dlg:height="9" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CHKEXCEL" dlg:value="chkMSApplication2" dlg:checked="false">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:ImportWizard.Main.ToggleNextButton?language=Basic&amp;location=application" script:language="Script"/>
</dlg:checkbox>
<dlg:checkbox dlg:id="chkMSApplication3" dlg:tab-index="31" dlg:disabled="true" dlg:left="12" dlg:top="98" dlg:width="141" dlg:height="9" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CHKPOWERPOINT" dlg:value="chkMSApplication3" dlg:checked="false">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:ImportWizard.Main.ToggleNextButton?language=Basic&amp;location=application" script:language="Script"/>
</dlg:checkbox>
<dlg:checkbox dlg:id="chkTemplatePath" dlg:tab-index="36" dlg:left="12" dlg:top="48" dlg:width="240" dlg:height="10" dlg:page="2" dlg:tag="Template" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CBTEMPLATE" dlg:value="chkTemplatePath" dlg:checked="true">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:ImportWizard.DialogModul.ToggleInputPaths?language=Basic&amp;location=application" script:language="Script"/>
</dlg:checkbox>
<dlg:checkbox dlg:id="chkTemplateSearchSubDir" dlg:tab-index="37" dlg:left="12" dlg:top="61" dlg:width="240" dlg:height="10" dlg:page="2" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_2_CBTEMPLATERECURSE" dlg:value="chkTemplateSearchSubDir" dlg:checked="false"/>
<dlg:text dlg:id="lblTemplateImport" dlg:tab-index="38" dlg:left="12" dlg:top="78" dlg:width="60" dlg:height="8" dlg:page="2" dlg:value="lblTemplateImport"/>
<dlg:checkbox dlg:id="chkLogfile" dlg:tab-index="39" dlg:left="6" dlg:top="171" dlg:width="136" dlg:height="9" dlg:page="1" dlg:help-url="HID:WIZARDS_HID_DLGIMPORT_0_CHKLOGFILE" dlg:value="chkLogfile" dlg:checked="true"/>
<dlg:fixedline dlg:id="hlnTemplates" dlg:tab-index="40" dlg:left="6" dlg:top="37" dlg:width="258" dlg:height="8" dlg:page="2" dlg:value="hlnTemplates"/>
<dlg:fixedline dlg:id="hlnDocuments" dlg:tab-index="41" dlg:left="6" dlg:top="110" dlg:width="258" dlg:height="8" dlg:page="2" dlg:value="hlnDocuments"/>
<dlg:fixedline dlg:id="FixedLine1" dlg:tab-index="42" dlg:left="6" dlg:top="181" dlg:width="258" dlg:height="6"/>
<dlg:fixedline dlg:id="hlnProgress" dlg:tab-index="43" dlg:left="6" dlg:top="55" dlg:width="258" dlg:height="8" dlg:page="4" dlg:value="hlnProgress"/>
<dlg:button dlg:id="cmdShowLogFile" dlg:tab-index="44" dlg:disabled="true" dlg:left="75" dlg:top="142" dlg:width="120" dlg:height="14" dlg:page="4" dlg:value="cmdShowLogFile">
<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:ImportWizard.FilesModul.OpenLogDocument?language=Basic&amp;location=application" script:language="Script"/>
</dlg:button>
</dlg:bulletinboard>
</dlg:window>

View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Language" script:language="StarBasic">Option Explicit
Public sMSTemplateCheckbox(2) As String
Public sMSDocumentCheckbox(2) As String
Public sTemplateCheckbox(SBMAXAPPLCOUNT-1) As String
Public sDocumentCheckbox(SBMAXAPPLCOUNT-1) As String
Public sTemplateGroupName As String
Public sSearchInSubDir as String
Public sPathErrorTemplates(SBMAXAPPLCOUNT-1) As String
Public sPathErrorDocument(SBMAXAPPLCOUNT-1) As String
Public sPathErrorStarDoc(SBMAXAPPLCOUNT-1) As String
Public sStarDocLabel(SBMAXAPPLCOUNT-1) As String
Public sImportLabel As String, sExportLabel As String
Public SOApplicationName(5) As String
Public sHelpButton As String, sCancelButton As String, sBackButton As String, sNextButton As String
Public sSumInclusiveSubDir As String, sSumSaveDocuments As String
Public sSummaryHeader As String
Public sWelcometextLabel1 As String, sWelcometextLabel3 As String
Public sBeginButton As String, sMsgDirNotThere As String
Public sQueryForNewCreation As String, sPathError3 As String
Public sNoDirCreation As String
Public sProgressMoreDocs As String, sProgressMoreTemplates as String
Public sFileExists As String, sMorePathsError3 As String
Public sConvertError1 As String, sConvertError2 As String, sPathDialogMessage As String
Public sRTErrorDesc As String, sRTErrorHeader As String
Public sProgressPage_1 As String, sProgressPage_2 As String, sProgressPage_3 as String
Public sProgressFound as String, sProgresspage_5 as String
Public sContainerName(1) as String
Public sReady as String, sTitle as String
Public sCloseButton as String
Public sSourceDocuments as String
Public sTargetDocuments as String
Public sSumMSDocuments(3) as String
Public sSumMSTemplates(3) as String
Public ModuleList(3) as String
Public sLogSummary as String
Public sReeditMacro as String
Public sOverwriteallFiles as String
Public sCouldnotopenDocument as String
Public sCurcouldnotopenDocument as String
Public sCouldnotsaveDocument as String
Public sCurcouldnotsaveDocument as String
Sub LoadLanguage()
If InitResources(&quot;ImportWizard&quot;) then
sHelpButton = GetResText(&quot;HelpButton&quot;)
sCancelButton = GetResText(&quot;CancelButton&quot;)
sBackButton = GetResText(&quot;BackButton&quot;)
sNextButton = GetResText(&quot;NextButton&quot;)
sBeginButton = GetResText(&quot;BeginButton&quot;)
sCloseButton = GetResText(&quot;CloseButton&quot;)
sWelcometextLabel1 = ReplaceString(GetResText(&quot;WelcometextLabel1&quot;), GetProductName(),&quot;%PRODUCTNAME&quot;)
sWelcometextLabel3 = GetResText(&quot;WelcometextLabel3&quot;)
&apos; Microsoft Documents
sMSTemplateCheckBox(0) = GetResText(&quot;MSTemplateCheckbox_1_&quot;)
sMSTemplateCheckBox(1) = GetResText(&quot;MSTemplateCheckbox_2_&quot;)
sMSTemplateCheckBox(2) = GetResText(&quot;MSTemplateCheckbox_3_&quot;)
&apos; DocumentCheckbox- Captions
sMSDocumentCheckBox(0) = GetResText(&quot;MSDocumentCheckbox_1_&quot;)
sMSDocumentCheckBox(1) = GetResText(&quot;MSDocumentCheckbox_2_&quot;)
sMSDocumentCheckBox(2) = GetResText(&quot;MSDocumentCheckbox_3_&quot;)
&apos;StarOffice Applicationnames
sContainerName(0) = GetResText(&quot;MSContainerName&quot;)
sSummaryHeader = GetResText(&quot;SummaryHeader&quot;)
sTemplateGroupName = GetResText(&quot;GroupnameDefault&quot;)
sProgressMoreDocs = GetResText(&quot;ProgressMoreDocs&quot;)
sProgressMoreTemplates = GetResText(&quot;ProgressMoreTemplates&quot;)
sNoDirCreation = GetResText(&quot;NoDirCreation&quot;)
sMsgDirNotThere = GetResText(&quot;MsgDirNotThere&quot;)
sQueryForNewCreation = GetResText(&quot;QueryfornewCreation&quot;)
sFileExists = GetResText(&quot;FileExists&quot;)
sMorePathsError3 = GetResText(&quot;MorePathsError3&quot;)
sConvertError1 = GetResText(&quot;ConvertError1&quot;)
sConvertError2 = GetResText(&quot;ConvertError2&quot;)
sRTErrorDesc = GetResText(&quot;RTErrorDesc&quot;)
sRTErrorHeader = GetResText(&quot;RTErrorHeader&quot;)
sOverwriteallFiles = GetResText(&quot;OverwriteallFiles&quot;)
sReeditMacro = GetResText(&quot;ReeditMacro&quot;)
sCouldnotsaveDocument = GetResText(&quot;CouldNotsaveDocument&quot;)
sCouldnotopenDocument = GetResText(&quot;CouldNotopenDocument&quot;)
sPathDialogMessage = GetResText(&quot;PathDialogMessage&quot;)
sTitle = GetResText(&quot;DialogTitle&quot;)
sProgressPage_1 = GetResText(&quot;ProgressPage1&quot;)
sProgressPage_2 = GetResText(&quot;ProgressPage2&quot;)
sProgressPage_3 = GetResText(&quot;ProgressPage3&quot;)
sProgressFound = GetResText(&quot;ProgressFound&quot;)
sProgressPage_5 = GetResText(&quot;ProgressPage5&quot;)
sReady = GetResText(&quot;Ready&quot;)
sSourceDocuments = GetResText(&quot;SourceDocuments&quot;)
sTargetDocuments = GetResText(&quot;TargetDocuments&quot;)
sLogSummary = GetResText(&quot;LogfileSummary&quot;)
sSumInclusiveSubDir = GetResText(&quot;SumInclusiveSubDir&quot;)
sSumSaveDocuments = GetResText(&quot;SumSaveDokumente&quot;)
sSumMSDocuments(0) = GetResText(&quot;SumMSTextDocuments&quot;)
sSumMSDocuments(1) = GetResText(&quot;SumMSTableDocuments&quot;)
sSumMSDocuments(2) = GetResText(&quot;SumMSDrawDocuments&quot;)
sSumMSTemplates(0) = GetResText(&quot;SumMSTextTemplates&quot;)
sSumMSTemplates(1) = GetResText(&quot;SumMSTableTemplates&quot;)
sSumMSTemplates(2) = GetResText(&quot;SumMSDrawTemplates&quot;)
With ImportDialog
sImportLabel = GetResText(&quot;TextImportLabel&quot;)
sExportLabel = GetResText(&quot;TextExportLabel&quot;)
sSearchInSubDir = GetResText(&quot;SearchInSubDir&quot;)
.chkTemplateSearchSubDir.Label = sSearchInSubDir
.lblDocumentImport.Label = sImportLabel
.lblDocumentExport.Label = sExportLabel
.chkDocumentSearchSubDir.Label = sSearchInSubDir
.lblTemplateImport.Label = sImportLabel
.lblTemplateExport.Label = sExportLabel
.chkLogfile.Label = GetResText(&quot;CreateLogfile&quot;)
.chkLogfile.Helptext = GetResText(&quot;LogfileHelpText&quot;)
.cmdShowLogFile.Label = GetResText(&quot;ShowLogfile&quot;)
End With
ModuleList(0) = &quot;com.sun.star.text.TextDocument&quot;
ModuleList(1) = &quot;com.sun.star.sheet.SpreadsheetDocument&quot;
ModuleList(2) = &quot;com.sun.star.drawing.DrawingDocument/com.sun.star.presentation.PresentationDocument&quot;
ModuleList(3) = &quot;com.sun.star.formula.FormulaProperties/com.sun.star.text.GlobalDocument&quot;
End If
End Sub
</script:module>

View File

@@ -0,0 +1,291 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Main" script:language="StarBasic">Option Explicit
REM ***** BASIC *****
Public HeaderPreviews(4) as Object
Public ImportDialog as Object
Public ImportDialogArea as Object
Public oFactoryKey as Object
Public bShowLogFile as Boolean
&apos; If the ProgressPage is already on Top The Dialog will be immediately closed when this flag is
&apos; set to False
Public bConversionIsRunning as Boolean
Public RetValue as Integer
Sub Main()
Dim NoArgs() as New com.sun.star.beans.PropertyValue
bShowLogFile=FALSE
If Not bDebugWizard Then
On Local Error Goto RTError
End If
BasicLibraries.LoadLibrary(&quot;Tools&quot;)
RetValue = 10
bIsFirstLogTable = True
bConversionIsRunning = False
sCRLF = CHR(13) &amp; CHR(10)
oUcb = createUnoService(&quot;com.sun.star.ucb.SimpleFileAccess&quot;)
oFactoryKey = GetRegistryKeyContent(&quot;org.openoffice.Setup/Office/Factories&quot;)
If GetImportWizardPaths() = False Then
Exit Sub
End If
bCancelTask = False
bDoKeepApplValues = False
CurOffice = 0
ImportDialogArea = LoadDialog(&quot;ImportWizard&quot;,&quot;ImportDialog&quot;)
ImportDialog = ImportDialogArea.Model
LoadLanguage()
WizardMode = SBMICROSOFTMODE
MaxApplCount = 3
FillStep_Welcome()
RepaintHeaderPreview()
ImportDialog.ImportPreview.BackGroundColor = RGB(0,60,126)
ImportDialog.cmdGoOn.DefaultButton = True
ImportDialogArea.GetControl(&quot;optMSDocuments&quot;).SetFocus()
ToggleCheckboxesWithBoolean(True)
RetValue = ImportDialogArea.Execute()
If bShowLogFile=TRUE Then
OpenDocument(sLogUrl, NoArgs())
End if
If RetValue = 0 Then
CancelTask()
End If
ImportDialogArea.Dispose()
End
Exit Sub
RTError:
Msgbox sRTErrorDesc, 16, sRTErrorHeader
End Sub
Sub NextStep()
Dim iCurStep as Integer
If Not bDebugWizard Then
On Error Goto RTError
End If
bConversionIsRunning = False
iCurStep = ImportDialog.Step
Select Case iCurStep
Case 1
FillStep_InputPaths(0, True)
Case 2
If CheckInputPaths Then
SaveStep_InputPath
If CurOffice &lt; ApplCount - 1 Then
CurOffice = CurOffice + 1
TakeOverPathSettings()
FillStep_InputPaths(CurOffice, False)
Else
FillStep_Summary()
End If
End If
Case 3
FillStep_Progress()
Select Case WizardMode
Case SBMICROSOFTMODE
Call ConvertAllDocuments(MSFilterName())
End Select
Case 4
CancelTask(True)
End Select
If ((ImportDialog.chkLogfile.State &lt;&gt; 1) OR (iCurStep &lt;&gt; 3)) Then
ImportDialog.cmdGoOn.DefaultButton = True
End If
RepaintHeaderPreview()
Exit Sub
RTError:
Msgbox sRTErrorDesc, 16, sRTErrorHeader
End Sub
Sub PrevStep()
Dim iCurStep as Integer
If Not bDebugWizard Then
On Error Goto RTError
End If
bConversionIsRunning = False
iCurStep = ImportDialog.Step
Select Case iCurStep
Case 4
ImportDialog.cmdCancel.Label = sCancelButton
FillStep_Summary()
Case 3
FillStep_InputPaths(Applcount-1, False)
Case 2
SaveStep_InputPath
If CurOffice &gt; 0 Then
CurOffice = CurOffice - 1
FillStep_InputPaths(CurOffice, False)
Else
FillStep_Welcome()
ToggleCheckboxesWithBoolean(True)
bDoKeepApplValues = True
End If
End Select
ImportDialog.cmdGoOn.DefaultButton = True
RepaintHeaderPreview()
Exit Sub
RTError:
Msgbox sRTErrorDesc, 16, sRTErrorHeader
End Sub
Sub CancelTask()
If bConversionIsRunning Then
If Msgbox(sConvertError1, 36, sConvertError2) = 6 Then
bCancelTask = True
bInterruptSearch = True
Else
bCancelTask = False
ImportDialog.cmdCancel.Enabled = True
End If
Else
ImportDialogArea.EndExecute()
End If
End Sub
Sub TemplateDirSearchDialog()
CallDirSearchDialog(ImportDialog.TemplateImportPath)
End Sub
Sub RepaintHeaderPreview()
Dim Bitmap As Object
Dim CurStep as Integer
Dim sBitmapPath as String
Dim LocPrefix as String
CurStep = ImportDialog.Step
LocPrefix = WizardMode
LocPrefix = ReplaceString(LocPrefix,&quot;XML&quot;, &quot;SO&quot;)
If CurStep = 2 Then
sBitmapPath = SOBitmapPath &amp; LocPrefix &amp; &quot;-Import_&quot; &amp; CurStep &amp; &quot;-&quot; &amp; Applications(CurOffice,SBAPPLKEY) + 1 &amp; &quot;.png&quot;
Else
sBitmapPath = SOBitmapPath &amp; &quot;Import_&quot; &amp; CurStep &amp; &quot;.png&quot;
End If
ImportDialog.ImportPreview.ImageURL = sBitmapPath
End Sub
Sub CheckModuleInstallation()
Dim i as Integer
For i = 1 To MaxApplCount
ImportDialogArea.GetControl(&quot;chk&quot; &amp; WizardMode &amp; &quot;Application&quot; &amp; i).Model.Enabled = Abs(CheckInstalledModule(i-1))
Next i
End Sub
Function CheckInstalledModule(Index as Integer) as Boolean
Dim ModuleName as String
Dim NameList() as String
Dim MaxIndex as Integer
Dim i as Integer
ModuleName = ModuleList(Index)
If Instr(1,ModuleName,&quot;/&quot;) &lt;&gt; 0 Then
CheckInstalledModule() = False
NameList() = ArrayoutOfString(ModuleName,&quot;/&quot;, MaxIndex)
For i = 0 To MaxIndex
If oFactoryKey.HasByName(NameList(i)) Then
CheckInstalledModule() = True
End If
Next i
Else
CheckInstalledModule() = oFactoryKey.HasByName(ModuleName)
End If
End Function
Sub ToggleCheckboxes(oEvent as Object)
Dim bMSEnable as Boolean
WizardMode = oEvent.Source.Model.Tag
bMSEnable = WizardMode = &quot;MS&quot;
ToggleCheckboxesWithBoolean(bMSEnable)
End Sub
Sub ToggleCheckboxesWithBoolean(bMSEnable as Boolean)
If bMSEnable = True Then
WizardMode = SBMICROSOFTMODE
MaxApplCount = 3
Else
&apos;Not supposed to happen - is there an assert in BASIC...
End If
With ImportDialogArea
.GetControl(&quot;chkMSApplication1&quot;).Model.Enabled = bMSEnable
.GetControl(&quot;chkMSApplication2&quot;).Model.Enabled = bMSEnable
.GetControl(&quot;chkMSApplication3&quot;).Model.Enabled = bMSEnable
End With
CheckModuleInstallation()
bDoKeepApplValues = False
ToggleNextButton()
End Sub
Sub ToggleNextButton()
Dim iCurStep as Integer
Dim bDoEnable as Boolean
Dim i as Integer
iCurStep = ImportDialog.Step
Select Case iCurStep
Case 1
With ImportDialog
If .optMSDocuments.State = 1 Then
bDoEnable = .chkMSApplication1.State = 1 Or .chkMSApplication2.State = 1 Or .chkMSApplication3.State = 1
End If
End With
bDoKeepApplValues = False
Case 2
bDoEnable = CheckControlPath(ImportDialog.chkTemplatePath, ImportDialog.txtTemplateImportPath, True)
bDoEnable = CheckControlPath(ImportDialog.chkDocumentPath, ImportDialog.txtDocumentImportPath, bDoEnable)
End Select
ImportDialog.cmdGoOn.Enabled = bDoEnable
End Sub
Sub TakeOverPathSettings()
&apos;Takes over the Pathsettings from the first selected application to the next applications
If Applications(CurOffice,SBDOCSOURCE) = &quot;&quot; Then
Applications(CurOffice,SBDOCSOURCE) = Applications(0,SBDOCSOURCE)
Applications(CurOffice,SBDOCTARGET) = Applications(0,SBDOCTARGET)
Applications(CurOffice,SBTEMPLSOURCE) = Applications(0,SBTEMPLSOURCE)
Applications(CurOffice,SBTEMPLTARGET) = Applications(0,SBTEMPLTARGET)
End If
End Sub
Function GetImportWizardPaths() as Boolean
SOBitmapPath = GetOfficeSubPath(&quot;Template&quot;, &quot;../wizard/bitmap&quot;)
If SOBitmapPath &lt;&gt; &quot;&quot; Then
SOWorkPath = GetPathSettings(&quot;Work&quot;, False)
If SOWorkPath &lt;&gt; &quot;&quot; Then
SOTemplatePath = GetPathSettings(&quot;Template_writable&quot;,False,0)
If SOTemplatePath &lt;&gt; &quot;&quot; Then
GetImportWizardPaths() = True
Exit Function
End If
End If
End If
GetImportWizardPaths() = False
End Function
</script:module>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="ImportWizard" library:readonly="true" library:passwordprotected="false">
<library:element library:name="ImportDialog"/>
</library:library>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="ImportWizard" library:readonly="true" library:passwordprotected="false">
<library:element library:name="Main"/>
<library:element library:name="DialogModul"/>
<library:element library:name="Language"/>
<library:element library:name="FilesModul"/>
<library:element library:name="API"/>
</library:library>

View File

@@ -0,0 +1,996 @@
<?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="SF_Database" script:language="StarBasic" script:moduleType="normal">REM =======================================================================================================================
REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
REM === The SFDatabases library is one of the associated libraries. ===
REM === Full documentation is available on https://help.libreoffice.org/ ===
REM =======================================================================================================================
Option Compatible
Option ClassModule
Option Explicit
&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
&apos;&apos;&apos; SF_Database
&apos;&apos;&apos; ===========
&apos;&apos;&apos; Management of databases embedded in or related to Base documents
&apos;&apos;&apos; Each instance of the current class represents a single database, with essentially its tables, queries and data
&apos;&apos;&apos;
&apos;&apos;&apos; The exchanges with the database are done in SQL only.
&apos;&apos;&apos; To make them more readable, use optionally square brackets to surround table/query/field names
&apos;&apos;&apos; instead of the (RDBMS-dependent) normal surrounding character (usually, double-quote, single-quote or other).
&apos;&apos;&apos; SQL statements may be run in direct or indirect mode. In direct mode the statement is transferred literally
&apos;&apos;&apos; without syntax checking nor review to the database system.
&apos;&apos;&apos;
&apos;&apos;&apos; The provided interfaces include simple tables, queries and fields lists, and access to database metadata.
&apos;&apos;&apos;
&apos;&apos;&apos; Service invocation and usage:
&apos;&apos;&apos; 1) To access any database at anytime
&apos;&apos;&apos; Dim myDatabase As Object
&apos;&apos;&apos; Set myDatabase = CreateScriptService(&quot;SFDatabases.Database&quot;, FileName, , [ReadOnly], [User, [Password]])
&apos;&apos;&apos; &apos; Args:
&apos;&apos;&apos; &apos; FileName: the name of the Base file compliant with the SF_FileSystem.FileNaming notation
&apos;&apos;&apos; &apos; RegistrationName: the name of a registered database (mutually exclusive with FileName)
&apos;&apos;&apos; &apos; ReadOnly: Default = True
&apos;&apos;&apos; &apos; User, Password: additional connection arguments to the database server
&apos;&apos;&apos; &apos; ... Run queries, SQL statements, ...
&apos;&apos;&apos; myDatabase.CloseDatabase()
&apos;&apos;&apos;
&apos;&apos;&apos; 2) To access the database related to the current Base document
&apos;&apos;&apos; Dim myDoc As Object, myDatabase As Object, ui As Object
&apos;&apos;&apos; Set ui = CreateScriptService(&quot;UI&quot;)
&apos;&apos;&apos; Set myDoc = ui.OpenBaseDocument(&quot;myDb.odb&quot;)
&apos;&apos;&apos; Set myDatabase = myDoc.GetDatabase() &apos; user and password are supplied here, if needed
&apos;&apos;&apos; &apos; ... Run queries, SQL statements, ...
&apos;&apos;&apos; myDoc.CloseDocument()
&apos;&apos;&apos;
&apos;&apos;&apos; Detailed user documentation:
&apos;&apos;&apos; https://help.libreoffice.org/latest/en-US/text/sbasic/shared/03/sf_database.html?DbPAR=BASIC
&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
REM ================================================================== EXCEPTIONS
Private Const DBREADONLYERROR = &quot;DBREADONLYERROR&quot;
Private Const SQLSYNTAXERROR = &quot;SQLSYNTAXERROR&quot;
REM ============================================================= PRIVATE MEMBERS
Private [Me] As Object
Private [_Parent] As Object
Private ObjectType As String &apos; Must be DATABASE
Private ServiceName As String
Private _DataSource As Object &apos; com.sun.star.comp.dba.ODatabaseSource
Private _Connection As Object &apos; com.sun.star.sdbc.XConnection
Private _URL As String &apos; Text on status bar
Private _Location As String &apos; File name
Private _ReadOnly As Boolean
Private _MetaData As Object &apos; com.sun.star.sdbc.XDatabaseMetaData
REM ============================================================ MODULE CONSTANTS
REM ===================================================== CONSTRUCTOR/DESTRUCTOR
REM -----------------------------------------------------------------------------
Private Sub Class_Initialize()
Set [Me] = Nothing
Set [_Parent] = Nothing
ObjectType = &quot;DATABASE&quot;
ServiceName = &quot;SFDatabases.Database&quot;
Set _DataSource = Nothing
Set _Connection = Nothing
_URL = &quot;&quot;
_Location = &quot;&quot;
_ReadOnly = True
Set _MetaData = Nothing
End Sub &apos; SFDatabases.SF_Database Constructor
REM -----------------------------------------------------------------------------
Private Sub Class_Terminate()
Call Class_Initialize()
End Sub &apos; SFDatabases.SF_Database Destructor
REM -----------------------------------------------------------------------------
Public Function Dispose() As Variant
Call Class_Terminate()
Set Dispose = Nothing
End Function &apos; SFDatabases.SF_Database Explicit Destructor
REM ================================================================== PROPERTIES
REM -----------------------------------------------------------------------------
Property Get Queries() As Variant
&apos;&apos;&apos; Return the list of available queries in the database
Queries = _PropertyGet(&quot;Queries&quot;)
End Property &apos; SFDatabases.SF_Database.Queries (get)
REM -----------------------------------------------------------------------------
Property Get Tables() As Variant
&apos;&apos;&apos; Return the list of available Tables in the database
Tables = _PropertyGet(&quot;Tables&quot;)
End Property &apos; SFDatabases.SF_Database.Tables (get)
REM -----------------------------------------------------------------------------
Property Get XConnection() As Variant
&apos;&apos;&apos; Return a com.sun.star.sdbc.XConnection UNO object
XConnection = _PropertyGet(&quot;XConnection&quot;)
End Property &apos; SFDatabases.SF_Database.XConnection (get)
REM -----------------------------------------------------------------------------
Property Get XMetaData() As Variant
&apos;&apos;&apos; Return a com.sun.star.sdbc.XDatabaseMetaData UNO object
XMetaData = _PropertyGet(&quot;XMetaData&quot;)
End Property &apos; SFDatabases.SF_Database.XMetaData (get)
REM ===================================================================== METHODS
REM -----------------------------------------------------------------------------
Public Sub CloseDatabase()
&apos;&apos;&apos; Close the current database connection
Const cstThisSub = &quot;SFDatabases.Database.CloseDatabase&quot;
Const cstSubArgs = &quot;&quot;
On Local Error GoTo 0 &apos; Disable useless error checking
Check:
ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
Try:
With _Connection
If Not IsNull(_Connection) Then
If ScriptForge.SF_Session.HasUnoMethod(_Connection, &quot;flush&quot;) Then .flush()
.close()
.dispose()
End If
Dispose()
End With
Finally:
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Sub
End Sub
REM -----------------------------------------------------------------------------
Public Function DAvg(Optional ByVal Expression As Variant _
, Optional ByVal TableName As Variant _
, Optional ByVal Criteria As Variant _
) As Variant
&apos;&apos;&apos; Compute the aggregate function AVG() on a field or expression belonging to a table
&apos;&apos;&apos; filtered by a WHERE-clause.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Expression: an SQL expression
&apos;&apos;&apos; TableName: the name of a table
&apos;&apos;&apos; Criteria: an optional WHERE clause without the word WHERE
DAvg = _DFunction(&quot;Avg&quot;, Expression, TableName, Criteria)
End Function &apos; SFDatabases.SF_Database.DAvg
REM -----------------------------------------------------------------------------
Public Function DCount(Optional ByVal Expression As Variant _
, Optional ByVal TableName As Variant _
, Optional ByVal Criteria As Variant _
) As Variant
&apos;&apos;&apos; Compute the aggregate function COUNT() on a field or expression belonging to a table
&apos;&apos;&apos; filtered by a WHERE-clause.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Expression: an SQL expression
&apos;&apos;&apos; TableName: the name of a table
&apos;&apos;&apos; Criteria: an optional WHERE clause without the word WHERE
DCount = _DFunction(&quot;Count&quot;, Expression, TableName, Criteria)
End Function &apos; SFDatabases.SF_Database.DCount
REM -----------------------------------------------------------------------------
Public Function DLookup(Optional ByVal Expression As Variant _
, Optional ByVal TableName As Variant _
, Optional ByVal Criteria As Variant _
, Optional ByVal OrderClause As Variant _
) As Variant
&apos;&apos;&apos; Compute the aggregate function Lookup() on a field or expression belonging to a table
&apos;&apos;&apos; filtered by a WHERE-clause.
&apos;&apos;&apos; To order the results, a pvOrderClause may be precised. The 1st record will be retained.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Expression: an SQL expression
&apos;&apos;&apos; TableName: the name of a table
&apos;&apos;&apos; Criteria: an optional WHERE clause without the word WHERE
&apos;&apos;&apos; pvOrderClause: an optional order clause incl. &quot;DESC&quot; if relevant
DLookup = _DFunction(&quot;Lookup&quot;, Expression, TableName, Criteria, OrderClause)
End Function &apos; SFDatabases.SF_Database.DLookup
REM -----------------------------------------------------------------------------
Public Function DMax(Optional ByVal Expression As Variant _
, Optional ByVal TableName As Variant _
, Optional ByVal Criteria As Variant _
) As Variant
&apos;&apos;&apos; Compute the aggregate function MAX() on a field or expression belonging to a table
&apos;&apos;&apos; filtered by a WHERE-clause.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Expression: an SQL expression
&apos;&apos;&apos; TableName: the name of a table
&apos;&apos;&apos; Criteria: an optional WHERE clause without the word WHERE
DMax = _DFunction(&quot;Max&quot;, Expression, TableName, Criteria)
End Function &apos; SFDatabases.SF_Database.DMax
REM -----------------------------------------------------------------------------
Public Function DMin(Optional ByVal Expression As Variant _
, Optional ByVal TableName As Variant _
, Optional ByVal Criteria As Variant _
) As Variant
&apos;&apos;&apos; Compute the aggregate function MIN() on a field or expression belonging to a table
&apos;&apos;&apos; filtered by a WHERE-clause.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Expression: an SQL expression
&apos;&apos;&apos; TableName: the name of a table
&apos;&apos;&apos; Criteria: an optional WHERE clause without the word WHERE
DMin = _DFunction(&quot;Min&quot;, Expression, TableName, Criteria)
End Function &apos; SFDatabases.SF_Database.DMin
REM -----------------------------------------------------------------------------
Public Function DSum(Optional ByVal Expression As Variant _
, Optional ByVal TableName As Variant _
, Optional ByVal Criteria As Variant _
) As Variant
&apos;&apos;&apos; Compute the aggregate function Sum() on a field or expression belonging to a table
&apos;&apos;&apos; filtered by a WHERE-clause.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Expression: an SQL expression
&apos;&apos;&apos; TableName: the name of a table
&apos;&apos;&apos; Criteria: an optional WHERE clause without the word WHERE
DSum = _DFunction(&quot;Sum&quot;, Expression, TableName, Criteria)
End Function &apos; SFDatabases.SF_Database.DSum
REM -----------------------------------------------------------------------------
Public Function GetProperty(Optional ByVal PropertyName As Variant) As Variant
&apos;&apos;&apos; Return the actual value of the given property
&apos;&apos;&apos; Args:
&apos;&apos;&apos; PropertyName: the name of the property as a string
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; The actual value of the property
&apos;&apos;&apos; Exceptions:
&apos;&apos;&apos; ARGUMENTERROR The property does not exist
&apos;&apos;&apos; Examples:
&apos;&apos;&apos; myDatabase.GetProperty(&quot;Queries&quot;)
Const cstThisSub = &quot;SFDatabases.Database.GetProperty&quot;
Const cstSubArgs = &quot;&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
GetProperty = Null
Check:
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not ScriptForge.SF_Utils._Validate(PropertyName, &quot;PropertyName&quot;, V_STRING, Properties()) Then GoTo Catch
End If
Try:
GetProperty = _PropertyGet(PropertyName)
Finally:
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Database.GetProperty
REM -----------------------------------------------------------------------------
Public Function GetRows(Optional ByVal SQLCommand As Variant _
, Optional ByVal DirectSQL As Variant _
, Optional ByVal Header As Variant _
, Optional ByVal MaxRows As Variant _
) As Variant
&apos;&apos;&apos; Return the content of a table, a query or a SELECT SQL statement as an array
&apos;&apos;&apos; Args:
&apos;&apos;&apos; SQLCommand: a table name, a query name or a SELECT SQL statement
&apos;&apos;&apos; DirectSQL: when True, no syntax conversion is done by LO. Default = False
&apos;&apos;&apos; Ignored when SQLCommand is a table or a query name
&apos;&apos;&apos; Header: When True, a header row is inserted on the top of the array with the column names. Default = False
&apos;&apos;&apos; MaxRows: The maximum number of returned rows. If absent, all records are returned
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; a 2D array(row, column), even if only 1 column and/or 1 record
&apos;&apos;&apos; an empty array if no records returned
&apos;&apos;&apos; Example:
&apos;&apos;&apos; Dim a As Variant
&apos;&apos;&apos; a = myDatabase.GetRows(&quot;SELECT [First Name], [Last Name] FROM [Employees] ORDER BY [Last Name]&quot;, Header := True)
Dim vResult As Variant &apos; Return value
Dim oResult As Object &apos; com.sun.star.sdbc.XResultSet
Dim oQuery As Object &apos; com.sun.star.ucb.XContent
Dim sSql As String &apos; SQL statement
Dim bDirect &apos; Alias of DirectSQL
Dim lCols As Long &apos; Number of columns
Dim lRows As Long &apos; Number of rows
Dim oColumns As Object
Dim i As Long
Const cstThisSub = &quot;SFDatabases.Database.GetRows&quot;
Const cstSubArgs = &quot;SQLCommand, [DirectSQL=False], [Header=False], [MaxRows=0]&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
vResult = Array()
Check:
If IsMissing(DirectSQL) Or IsEmpty(DirectSQL) Then DirectSQL = False
If IsMissing(Header) Or IsEmpty(Header) Then Header = False
If IsMissing(MaxRows) Or IsEmpty(MaxRows) Then MaxRows = 0
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not ScriptForge.SF_Utils._Validate(SQLCommand, &quot;SQLCommand&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(DirectSQL, &quot;DirectSQL&quot;, ScriptForge.V_BOOLEAN) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(Header, &quot;Header&quot;, ScriptForge.V_BOOLEAN) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(MaxRows, &quot;MaxRows&quot;, ScriptForge.V_NUMERIC) Then GoTo Finally
End If
Try:
&apos; Table, query of SQL ? Prepare resultset
If ScriptForge.SF_Array.Contains(Tables, SQLCommand, CaseSensitive := True, SortOrder := &quot;ASC&quot;) Then
sSql = &quot;SELECT * FROM [&quot; &amp; SQLCommand &amp; &quot;]&quot;
bDirect = True
ElseIf ScriptForge.SF_Array.Contains(Queries, SQLCommand, CaseSensitive := True, SortOrder := &quot;ASC&quot;) Then
Set oQuery = _Connection.Queries.getByName(SQLCommand)
sSql = oQuery.Command
bDirect = Not oQuery.EscapeProcessing
ElseIf ScriptForge.SF_String.StartsWith(SQLCommand, &quot;SELECT&quot;, CaseSensitive := False) Then
sSql = SQLCommand
bDirect = DirectSQL
Else
GoTo Finally
End If
&apos; Execute command
Set oResult = _ExecuteSql(sSql, bDirect)
If IsNull(oResult) Then GoTo Finally
With oResult
&apos;Initialize output array with header row
Set oColumns = oResult.getColumns()
lCols = oColumns.Count - 1
If Header Then
lRows = 0
ReDim vResult(0 To lRows, 0 To lCols)
For i = 0 To lCols
vResult(lRows, i) = oColumns.getByIndex(i).Name
Next i
If MaxRows &gt; 0 Then MaxRows = MaxRows + 1
Else
lRows = -1
End If
&apos; Load data
.first()
Do While Not .isAfterLast() And (MaxRows = 0 Or lRows &lt; MaxRows - 1)
lRows = lRows + 1
If lRows = 0 Then
ReDim vResult(0 To lRows, 0 To lCols)
Else
ReDim Preserve vResult(0 To lRows, 0 To lCols)
End If
For i = 0 To lCols
vResult(lRows, i) = _GetColumnValue(oResult, i + 1)
Next i
.next()
Loop
End With
Finally:
GetRows = vResult
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Database.GetRows
REM -----------------------------------------------------------------------------
Public Function Methods() As Variant
&apos;&apos;&apos; Return the list of public methods of the Database service as an array
Methods = Array( _
&quot;CloseDatabase&quot; _
, &quot;DAvg&quot; _
, &quot;DCount&quot; _
, &quot;DLookup&quot; _
, &quot;DMax&quot; _
, &quot;DMin&quot; _
, &quot;DSum&quot; _
, &quot;GetRows&quot; _
, &quot;OpenQuery&quot; _
, &quot;OpenSql&quot; _
, &quot;OpenTable&quot; _
, &quot;RunSql&quot; _
)
End Function &apos; SFDatabases.SF_Database.Methods
REM -----------------------------------------------------------------------------
Public Function OpenQuery(Optional ByVal QueryName As Variant) As Object
&apos;&apos;&apos; Open the query given by its name
&apos;&apos;&apos; The datasheet will live independently from any other (typically Base) component
&apos;&apos;&apos; Args:
&apos;&apos;&apos; QueryName: a valid query name as a case-sensitive string
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; A Datasheet class instance if the query could be opened, otherwise Nothing
&apos;&apos;&apos; Exceptions:
&apos;&apos;&apos; Query name is invalid
&apos;&apos;&apos; Example:
&apos;&apos;&apos; oDb.OpenQuery(&quot;myQuery&quot;)
Dim oOpen As Object &apos; Return value
Const cstThisSub = &quot;SFDatabases.Database.OpenQuery&quot;
Const cstSubArgs = &quot;QueryName&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
Set oOpen = Nothing
Check:
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not ScriptForge.SF_Utils._Validate(QueryName, &quot;QueryName&quot;, V_STRING, Queries) Then GoTo Finally
End If
Try:
Set oOpen = _OpenDatasheet(QueryName, com.sun.star.sdb.CommandType.QUERY _
, _Connection.Queries.getByName(QueryName).EscapeProcessing)
Finally:
Set OpenQuery = oOpen
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDocuments.SF_Base.OpenQuery
REM -----------------------------------------------------------------------------
Public Function OpenSql(Optional ByRef Sql As Variant _
, Optional ByVal DirectSql As Variant _
) As Object
&apos;&apos;&apos; Open the datasheet based on a SQL SELECT statement.
&apos;&apos;&apos; The datasheet will live independently from any other (typically Base) component
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Sql: a valid Sql statement as a case-sensitive string.
&apos;&apos;&apos; Identifiers may be surrounded by square brackets
&apos;&apos;&apos; DirectSql: when True, the statement is processed by the targeted RDBMS
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; A Datasheet class instance if it could be opened, otherwise Nothing
&apos;&apos;&apos; Example:
&apos;&apos;&apos; oDb.OpenSql(&quot;SELECT * FROM [Customers] ORDER BY [CITY]&quot;)
Dim oOpen As Object &apos; Return value
Const cstThisSub = &quot;SFDatabases.Database.OpenSql&quot;
Const cstSubArgs = &quot;Sql, [DirectSql=False]&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
Set oOpen = Nothing
Check:
If IsMissing(DirectSql) Or IsEmpty(DirectSql) Then DirectSql = False
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not ScriptForge.SF_Utils._Validate(Sql, &quot;Sql&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(DirectSql, &quot;DirectSql&quot;, ScriptForge.V_BOOLEAN) Then GoTo Finally
End If
Try:
Set oOpen = _OpenDatasheet(_ReplaceSquareBrackets(Sql), com.sun.star.sdb.CommandType.COMMAND, Not DirectSql)
Finally:
Set OpenSql = oOpen
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDocuments.SF_Base.OpenSql
REM -----------------------------------------------------------------------------
Public Function OpenTable(Optional ByVal TableName As Variant) As Object
&apos;&apos;&apos; Open the table given by its name
&apos;&apos;&apos; The datasheet will live independently from any other (typically Base) component
&apos;&apos;&apos; Args:
&apos;&apos;&apos; TableName: a valid table name as a case-sensitive string
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; A Datasheet class instance if the table could be opened, otherwise Nothing
&apos;&apos;&apos; Exceptions:
&apos;&apos;&apos; Table name is invalid
&apos;&apos;&apos; Example:
&apos;&apos;&apos; oDb.OpenTable(&quot;myTable&quot;)
Dim oOpen As Object &apos; Return value
Const cstThisSub = &quot;SFDatabases.Database.OpenTable&quot;
Const cstSubArgs = &quot;TableName&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
Set oOpen = Nothing
Check:
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not ScriptForge.SF_Utils._Validate(TableName, &quot;TableName&quot;, V_STRING, Tables) Then GoTo Finally
End If
Try:
Set oOpen = _OpenDatasheet(TableName, com.sun.star.sdb.CommandType.TABLE, True)
Finally:
Set OpenTable = oOpen
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDocuments.SF_Base.OpenTable
REM -----------------------------------------------------------------------------
Public Function Properties() As Variant
&apos;&apos;&apos; Return the list or properties of the Database class as an array
Properties = Array( _
&quot;Queries&quot; _
, &quot;Tables&quot; _
, &quot;XConnection&quot; _
, &quot;XMetaData&quot; _
)
End Function &apos; SFDatabases.SF_Database.Properties
REM -----------------------------------------------------------------------------
Public Function RunSql(Optional ByVal SQLCommand As Variant _
, Optional ByVal DirectSQL As Variant _
) As Boolean
&apos;&apos;&apos; Execute an action query (table creation, record insertion, ...) or SQL statement on the current database
&apos;&apos;&apos; Args:
&apos;&apos;&apos; SQLCommand: a query name or an SQL statement
&apos;&apos;&apos; DirectSQL: when True, no syntax conversion is done by LO. Default = False
&apos;&apos;&apos; Ignored when SQLCommand is a query name
&apos;&apos;&apos; Exceptions:
&apos;&apos;&apos; DBREADONLYERROR The method is not applicable on a read-only database
&apos;&apos;&apos; Example:
&apos;&apos;&apos; myDatabase.RunSql(&quot;INSERT INTO [EMPLOYEES] VALUES(25, &apos;SMITH&apos;, &apos;John&apos;)&quot;, DirectSQL := True)
Dim bResult As Boolean &apos; Return value
Dim oStatement As Object &apos; com.sun.star.sdbc.XStatement
Dim oQuery As Object &apos; com.sun.star.ucb.XContent
Dim sSql As String &apos; SQL statement
Dim bDirect &apos; Alias of DirectSQL
Const cstQuery = 2, cstSql = 3
Const cstThisSub = &quot;SFDatabases.Database.RunSql&quot;
Const cstSubArgs = &quot;SQLCommand, [DirectSQL=False]&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
bResult = False
Check:
If IsMissing(DirectSQL) Or IsEmpty(DirectSQL) Then DirectSQL = False
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not ScriptForge.SF_Utils._Validate(SQLCommand, &quot;SQLCommand&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(DirectSQL, &quot;DirectSQL&quot;, ScriptForge.V_BOOLEAN) Then GoTo Finally
End If
If _ReadOnly Then GoTo Catch_ReadOnly
Try:
&apos; Query of SQL ?
If ScriptForge.SF_Array.Contains(Queries, SQLCommand, CaseSensitive := True, SortOrder := &quot;ASC&quot;) Then
Set oQuery = _Connection.Queries.getByName(SQLCommand)
sSql = oQuery.Command
bDirect = Not oQuery.EscapeProcessing
ElseIf Not ScriptForge.SF_String.StartsWith(SQLCommand, &quot;SELECT&quot;, CaseSensitive := False) Then
sSql = SQLCommand
bDirect = DirectSQL
Else
GoTo Finally
End If
&apos; Execute command
bResult = _ExecuteSql(sSql, bDirect)
Finally:
RunSql = bResult
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
Catch_ReadOnly:
ScriptForge.SF_Exception.RaiseFatal(DBREADONLYERROR)
GoTo Finally
End Function &apos; SFDatabases.SF_Database.RunSql
REM -----------------------------------------------------------------------------
Public Function SetProperty(Optional ByVal PropertyName As Variant _
, Optional ByRef Value As Variant _
) As Boolean
&apos;&apos;&apos; Set a new value to the given property
&apos;&apos;&apos; Args:
&apos;&apos;&apos; PropertyName: the name of the property as a string
&apos;&apos;&apos; Value: its new value
&apos;&apos;&apos; Exceptions
&apos;&apos;&apos; ARGUMENTERROR The property does not exist
Const cstThisSub = &quot;SFDatabases.Database.SetProperty&quot;
Const cstSubArgs = &quot;PropertyName, Value&quot;
If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
SetProperty = False
Check:
If SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not SF_Utils._Validate(PropertyName, &quot;PropertyName&quot;, V_STRING, Properties()) Then GoTo Catch
End If
Try:
Select Case UCase(PropertyName)
Case Else
End Select
Finally:
SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Database.SetProperty
REM =========================================================== PRIVATE FUNCTIONS
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _DFunction(ByVal psFunction As String _
, Optional ByVal pvExpression As Variant _
, Optional ByVal pvTableName As Variant _
, Optional ByVal pvCriteria As Variant _
, Optional ByVal pvOrderClause As Variant _
) As Variant
&apos;&apos;&apos; Build and execute a SQL statement computing the aggregate function psFunction
&apos;&apos;&apos; on a field or expression pvExpression belonging to a table pvTableName
&apos;&apos;&apos; filtered by a WHERE-clause pvCriteria.
&apos;&apos;&apos; To order the results, a pvOrderClause may be precised.
&apos;&apos;&apos; Only the 1st record will be retained anyway.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; psFunction an optional aggregate function: SUM, COUNT, AVG, LOOKUP
&apos;&apos;&apos; pvExpression: an SQL expression
&apos;&apos;&apos; pvTableName: the name of a table, NOT surrounded with quoting char
&apos;&apos;&apos; pvCriteria: an optional WHERE clause without the word WHERE
&apos;&apos;&apos; pvOrderClause: an optional order clause incl. &quot;DESC&quot; if relevant
&apos;&apos;&apos; (meaningful only for LOOKUP)
Dim vResult As Variant &apos; Return value
Dim oResult As Object &apos; com.sun.star.sdbc.XResultSet
Dim sSql As String &apos; SQL statement.
Dim sExpr As String &apos; For inclusion of aggregate function
Dim sTarget as String &apos; Alias of pvExpression
Dim sWhere As String &apos; Alias of pvCriteria
Dim sOrderBy As String &apos; Alias of pvOrderClause
Dim sLimit As String &apos; TOP 1 clause
Dim sProductName As String &apos; RDBMS as a string
Const cstAliasField = &quot;[&quot; &amp; &quot;TMP_ALIAS_ANY_FIELD&quot; &amp; &quot;]&quot; &apos; Alias field in SQL expression
Dim cstThisSub As String : cstThisSub = &quot;SFDatabases.SF_Database.D&quot; &amp; psFunction
Const cstSubArgs = &quot;Expression, TableName, [Criteria=&quot;&quot;&quot;&quot;], [OrderClause=&quot;&quot;&quot;&quot;]&quot;
Const cstLookup = &quot;Lookup&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
vResult = Null
Check:
If IsMissing(pvCriteria) Or IsEmpty(pvCriteria) Then pvCriteria = &quot;&quot;
If IsMissing(pvOrderClause) Or IsEmpty(pvOrderClause) Then pvOrderClause = &quot;&quot;
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not ScriptForge.SF_Utils._Validate(pvExpression, &quot;Expression&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(pvTableName, &quot;TableName&quot;, V_STRING, Tables) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(pvCriteria, &quot;Criteria&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(pvOrderClause, &quot;OrderClause&quot;, V_STRING) Then GoTo Finally
End If
Try:
If pvCriteria &lt;&gt; &quot;&quot; Then sWhere = &quot; WHERE &quot; &amp; pvCriteria Else sWhere = &quot;&quot;
If pvOrderClause &lt;&gt; &quot;&quot; Then sOrderBy = &quot; ORDER BY &quot; &amp; pvOrderClause Else sOrderBy = &quot;&quot;
sLimit = &quot;&quot;
pvTableName = &quot;[&quot; &amp; pvTableName &amp; &quot;]&quot;
sProductName = UCase(_MetaData.getDatabaseProductName())
Select Case sProductName
Case &quot;MYSQL&quot;, &quot;SQLITE&quot;
If psFunction = cstLookup Then
sTarget = pvExpression
sLimit = &quot; LIMIT 1&quot;
Else
sTarget = UCase(psFunction) &amp; &quot;(&quot; &amp; pvExpression &amp; &quot;)&quot;
End If
sSql = &quot;SELECT &quot; &amp; sTarget &amp; &quot; AS &quot; &amp; cstAliasField &amp; &quot; FROM &quot; &amp; psTableName &amp; sWhere &amp; sOrderBy &amp; sLimit
Case &quot;FIREBIRD (ENGINE12)&quot;
If psFunction = cstLookup Then sTarget = &quot;FIRST 1 &quot; &amp; pvExpression Else sTarget = UCase(psFunction) &amp; &quot;(&quot; &amp; pvExpression &amp; &quot;)&quot;
sSql = &quot;SELECT &quot; &amp; sTarget &amp; &quot; AS &quot; &amp; cstAliasField &amp; &quot; FROM &quot; &amp; pvTableName &amp; sWhere &amp; sOrderBy
Case Else &apos; Standard syntax - Includes HSQLDB
If psFunction = cstLookup Then sTarget = &quot;TOP 1 &quot; &amp; pvExpression Else sTarget = UCase(psFunction) &amp; &quot;(&quot; &amp; pvExpression &amp; &quot;)&quot;
sSql = &quot;SELECT &quot; &amp; sTarget &amp; &quot; AS &quot; &amp; cstAliasField &amp; &quot; FROM &quot; &amp; pvTableName &amp; sWhere &amp; sOrderBy
End Select
&apos; Execute the SQL statement and retain the first column of the first record
Set oResult = _ExecuteSql(sSql, True)
If Not IsNull(oResult) And Not IsEmpty(oResult) Then
If Not oResult.first() Then Goto Finally
If oResult.isAfterLast() Then GoTo Finally
vResult = _GetColumnValue(oResult, 1, True) &apos; Force return of binary field
End If
Set oResult = Nothing
Finally:
_DFunction = vResult
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Database._DFunction
REM -----------------------------------------------------------------------------
Private Function _ExecuteSql(ByVal psSql As String _
, ByVal pbDirect As Boolean _
) As Variant
&apos;&apos;&apos; Return a read-only Resultset based on a SELECT SQL statement or execute the given action SQL (INSERT, CREATE TABLE, ...)
&apos;&apos;&apos; The method raises a fatal error when the SQL statement cannot be interpreted
&apos;&apos;&apos; Args:
&apos;&apos;&apos; psSql : the SQL statement. Square brackets are replaced by the correct field surrounding character
&apos;&apos;&apos; pbDirect: when True, no syntax conversion is done by LO. Default = False
&apos;&apos;&apos; Exceptions
&apos;&apos;&apos; SQLSYNTAXERROR The given SQL statement is incorrect
Dim vResult As Variant &apos; Return value - com.sun.star.sdbc.XResultSet or Boolean
Dim oStatement As Object &apos; com.sun.star.sdbc.XStatement
Dim sSql As String &apos; Alias of psSql
Dim bSelect As Boolean &apos; True when SELECT statement
Dim bErrorHandler As Boolean &apos; Can be set off to ease debugging of complex SQL statements
Set vResult = Nothing
bErrorHandler = ScriptForge.SF_Utils._ErrorHandling()
If bErrorHandler Then On Local Error GoTo Catch
Try:
sSql = _ReplaceSquareBrackets(psSql)
bSelect = ScriptForge.SF_String.StartsWith(sSql, &quot;SELECT&quot;, CaseSensitive := False)
Set oStatement = _Connection.createStatement()
With oStatement
If bSelect Then
.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_INSENSITIVE
.ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.READ_ONLY
End If
.EscapeProcessing = Not pbDirect
&apos; Setup the result set
If bErrorHandler Then On Local Error GoTo Catch_Sql
If bSelect Then Set vResult = .executeQuery(sSql) Else vResult = .execute(sSql)
End With
Finally:
_ExecuteSql = vResult
Set oStatement = Nothing
Exit Function
Catch_Sql:
ScriptForge.SF_Exception.RaiseFatal(SQLSYNTAXERROR, sSql)
GoTo Finally
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Database._ExecuteSql
REM -----------------------------------------------------------------------------
Private Function _GetColumnValue(ByRef poResultSet As Object _
, ByVal plColIndex As Long _
, Optional ByVal pbReturnBinary As Boolean _
) As Variant
&apos;&apos;&apos; Get the data stored in the current record of a result set in a given column
&apos;&apos;&apos; The type of the column is found in the resultset&apos;s metadata
&apos;&apos;&apos; Args:
&apos;&apos;&apos; poResultSet: com.sun.star.sdbc.XResultSet or com.sun.star.awt.XTabControllerModel
&apos;&apos;&apos; plColIndex: the index of the column to extract the value from. Starts at 1
&apos;&apos;&apos; pbReturnBinary: when True, the method returns the content of a binary field,
&apos;&apos;&apos; as long as its length does not exceed a maximum length.
&apos;&apos;&apos; Default = False: binary fields are not returned, only their length
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; The Variant value found in the column
&apos;&apos;&apos; Dates and times are returned as Basic dates
&apos;&apos;&apos; Null values are returned as Null
&apos;&apos;&apos; Errors or strange data types are returned as Null as well
Dim vValue As Variant &apos; Return value
Dim lType As Long &apos; SQL column type: com.sun.star.sdbc.DataType
Dim vDateTime As Variant &apos; com.sun.star.util.DateTime
Dim oStream As Object &apos; Long character or binary streams
Dim bNullable As Boolean &apos; The field is defined as accepting Null values
Dim lSize As Long &apos; Binary field length
Const cstMaxBinlength = 2 * 65535
On Local Error Goto 0 &apos; Disable error handler
vValue = Empty &apos; Default value if error
If IsMissing(pbReturnBinary) Then pbReturnBinary = False
With com.sun.star.sdbc.DataType
lType = poResultSet.MetaData.getColumnType(plColIndex)
bNullable = ( poResultSet.MetaData.IsNullable(plColIndex) = com.sun.star.sdbc.ColumnValue.NULLABLE )
Select Case lType
Case .ARRAY : vValue = poResultSet.getArray(plColIndex)
Case .BINARY, .VARBINARY, .LONGVARBINARY, .BLOB
Set oStream = poResultSet.getBinaryStream(plColIndex)
If bNullable Then
If Not poResultSet.wasNull() Then
If Not ScriptForge.SF_Session.HasUNOMethod(oStream, &quot;getLength&quot;) Then &apos; When no recordset
lSize = cstMaxBinLength
Else
lSize = CLng(oStream.getLength())
End If
If lSize &lt;= cstMaxBinLength And pbReturnBinary Then
vValue = Array()
oStream.readBytes(vValue, lSize)
Else &apos; Return length of field, not content
vValue = lSize
End If
End If
End If
If Not IsNull(oStream) Then oStream.closeInput()
Case .BIT, .BOOLEAN : vValue = poResultSet.getBoolean(plColIndex)
Case .DATE
vDateTime = poResultSet.getDate(plColIndex)
If Not poResultSet.wasNull() Then vValue = DateSerial(CInt(vDateTime.Year), CInt(vDateTime.Month), CInt(vDateTime.Day))
Case .DISTINCT, .OBJECT, .OTHER, .STRUCT
vValue = Null
Case .DOUBLE, .REAL : vValue = poResultSet.getDouble(plColIndex)
Case .FLOAT : vValue = poResultSet.getFloat(plColIndex)
Case .INTEGER, .SMALLINT : vValue = poResultSet.getInt(plColIndex)
Case .BIGINT : vValue = CLng(poResultSet.getLong(plColIndex))
Case .DECIMAL, .NUMERIC : vValue = poResultSet.getDouble(plColIndex)
Case .SQLNULL : vValue = poResultSet.getNull(plColIndex)
Case .OBJECT, .OTHER, .STRUCT : vValue = Null
Case .REF : vValue = poResultSet.getRef(plColIndex)
Case .TINYINT : vValue = poResultSet.getShort(plColIndex)
Case .CHAR, .VARCHAR : vValue = poResultSet.getString(plColIndex)
Case .LONGVARCHAR, .CLOB
If bNullable Then
If Not poResultSet.wasNull() Then vValue = poResultSet.getString(plColIndex)
Else
vValue = &quot;&quot;
End If
Case .TIME
vDateTime = poResultSet.getTime(plColIndex)
If Not poResultSet.wasNull() Then vValue = TimeSerial(vDateTime.Hours, vDateTime.Minutes, vDateTime.Seconds)&apos;, vDateTime.HundredthSeconds)
Case .TIMESTAMP
vDateTime = poResultSet.getTimeStamp(plColIndex)
If Not poResultSet.wasNull() Then vValue = DateSerial(CInt(vDateTime.Year), CInt(vDateTime.Month), CInt(vDateTime.Day)) _
+ TimeSerial(vDateTime.Hours, vDateTime.Minutes, vDateTime.Seconds)&apos;, vDateTime.HundredthSeconds)
Case Else
vValue = poResultSet.getString(plColIndex) &apos;GIVE STRING A TRY
If IsNumeric(vValue) Then vValue = Val(vValue) &apos;Required when type = &quot;&quot;, sometimes numeric fields are returned as strings (query/MSAccess)
End Select
If bNullable Then
If poResultSet.wasNull() Then vValue = Null
End If
End With
_GetColumnValue = vValue
End Function &apos; SFDatabases.SF_Database.GetColumnValue
REM -----------------------------------------------------------------------------
Public Function _OpenDatasheet(Optional ByVal psCommand As Variant _
, piDatasheetType As Integer _
, pbEscapeProcessing As Boolean _
) As Object
&apos;&apos;&apos; Open the datasheet given by its name and its type
&apos;&apos;&apos; The datasheet will live independently from any other component
&apos;&apos;&apos; Args:
&apos;&apos;&apos; psCommand: a valid table or query name or an SQL statement as a case-sensitive string
&apos;&apos;&apos; piDatasheetType: one of the com.sun.star.sdb.CommandType constants
&apos;&apos;&apos; pbEscapeProcessing: == Not DirectSql
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; A Datasheet class instance if the datasheet could be opened, otherwise Nothing
Dim oOpen As Object &apos; Return value
Dim oNewDatasheet As Object &apos; com.sun.star.lang.XComponent
Dim oURL As Object &apos; com.sun.star.util.URL
Dim oDispatch As Object &apos; com.sun.star.frame.XDispatch
Dim vArgs As Variant &apos; Array of property values
On Local Error GoTo Catch
Set oOpen = Nothing
Try:
&apos; Setup the dispatcher
Set oURL = New com.sun.star.util.URL
oURL.Complete = &quot;.component:DB/DataSourceBrowser&quot;
Set oDispatch = StarDesktop.queryDispatch(oURL, &quot;_blank&quot;, com.sun.star.frame.FrameSearchFlag.CREATE)
&apos; Setup the arguments of the component to create
With ScriptForge.SF_Utils
vArgs = Array( _
._MakePropertyValue(&quot;ActiveConnection&quot;, _Connection) _
, ._MakePropertyValue(&quot;CommandType&quot;, piDatasheetType) _
, ._MakePropertyValue(&quot;Command&quot;, psCommand) _
, ._MakePropertyValue(&quot;ShowMenu&quot;, True) _
, ._MakePropertyValue(&quot;ShowTreeView&quot;, False) _
, ._MakePropertyValue(&quot;ShowTreeViewButton&quot;, False) _
, ._MakePropertyValue(&quot;Filter&quot;, &quot;&quot;) _
, ._MakePropertyValue(&quot;ApplyFilter&quot;, False) _
, ._MakePropertyValue(&quot;EscapeProcessing&quot;, pbEscapeProcessing) _
)
End With
&apos; Open the targeted datasheet
Set oNewDatasheet = oDispatch.dispatchWithReturnValue(oURL, vArgs)
If Not IsNull(oNewDatasheet) Then Set oOpen = ScriptForge.SF_Services.CreateScriptService(&quot;SFDatabases.Datasheet&quot;, oNewDatasheet, [Me])
Finally:
Set _OpenDatasheet = oOpen
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDocuments.SF_Base._OpenDatasheet
REM -----------------------------------------------------------------------------
Private Function _PropertyGet(Optional ByVal psProperty As String) As Variant
&apos;&apos;&apos; Return the value of the named property
&apos;&apos;&apos; Args:
&apos;&apos;&apos; psProperty: the name of the property
Dim cstThisSub As String
Const cstSubArgs = &quot;&quot;
cstThisSub = &quot;SFDatabases.Database.get&quot; &amp; psProperty
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
Select Case psProperty
Case &quot;Queries&quot;
If Not IsNull(_Connection) Then _PropertyGet = _Connection.Queries.getElementNames() Else _PropertyGet = Array()
Case &quot;Tables&quot;
If Not IsNull(_Connection) Then _PropertyGet = _Connection.Tables.getElementNames() Else _PropertyGet = Array()
Case &quot;XConnection&quot;
Set _PropertyGet = _Connection
Case &quot;XMetaData&quot;
Set _PropertyGet = _MetaData
Case Else
_PropertyGet = Null
End Select
Finally:
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Database._PropertyGet
REM -----------------------------------------------------------------------------
Private Function _ReplaceSquareBrackets(ByVal psSql As String) As String
&apos;&apos;&apos; Returns the input SQL command after replacement of square brackets by the table/field names quoting character
Dim sSql As String &apos; Return value
Dim sQuote As String &apos; RDBMS specific table/field surrounding character
Dim sConstQuote As String &apos; Delimiter for string constants in SQL - usually the single quote
Const cstDouble = &quot;&quot;&quot;&quot; : Const cstSingle = &quot;&apos;&quot;
Try:
sQuote = _MetaData.IdentifierQuoteString
sConstQuote = Iif(sQuote = cstSingle, cstDouble, cstSingle)
&apos; Replace the square brackets
sSql = Join(ScriptForge.SF_String.SplitNotQuoted(psSql, &quot;[&quot;, , sConstQuote), sQuote)
sSql = Join(ScriptForge.SF_String.SplitNotQuoted(sSql, &quot;]&quot;, , sConstQuote), sQuote)
Finally:
_ReplaceSquareBrackets = sSql
Exit Function
End Function &apos; SFDatabases.SF_Database._ReplaceSquareBrackets
REM -----------------------------------------------------------------------------
Private Function _Repr() As String
&apos;&apos;&apos; Convert the Database instance to a readable string, typically for debugging purposes (DebugPrint ...)
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Return:
&apos;&apos;&apos; &quot;[DATABASE]: Location (Statusbar)&quot;
_Repr = &quot;[DATABASE]: &quot; &amp; _Location &amp; &quot; (&quot; &amp; _URL &amp; &quot;)&quot;
End Function &apos; SFDatabases.SF_Database._Repr
REM ============================================ END OF SFDATABASES.SF_DATABASE
</script:module>

View File

@@ -0,0 +1,894 @@
<?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="SF_Datasheet" script:language="StarBasic" script:moduleType="normal">REM =======================================================================================================================
REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
REM === The SFDatabases library is one of the associated libraries. ===
REM === Full documentation is available on https://help.libreoffice.org/ ===
REM =======================================================================================================================
Option Compatible
Option ClassModule
Option Explicit
&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
&apos;&apos;&apos; SF_Datasheet
&apos;&apos;&apos; ============
&apos;&apos;&apos; A datasheet is the visual representation of tabular data produced by a database.
&apos;&apos;&apos; In the user interface of LibreOffice it is the result of the opening of
&apos;&apos;&apos; a table or a query. In this case the concerned Base document must be open.
&apos;&apos;&apos;
&apos;&apos;&apos; In the context of ScriptForge, a datasheet may be opened automatically by script code :
&apos;&apos;&apos; - either by reproducing the behaviour of the user interface
&apos;&apos;&apos; - or at any moment. In this case the Base document may or may not be opened.
&apos;&apos;&apos; Additionally, any SELECT SQL statement may trigger the datasheet display.
&apos;&apos;&apos;
&apos;&apos;&apos; The proposed API allows for either datasheets (opened manually of by code) in particular
&apos;&apos;&apos; to know which cell is selected and its content.
&apos;&apos;&apos;
&apos;&apos;&apos; Service invocation:
&apos;&apos;&apos; 1) From an open Base document
&apos;&apos;&apos; Set ui = CreateScriptService(&quot;UI&quot;)
&apos;&apos;&apos; Set oBase = ui.getDocument(&quot;/home/user/Documents/myDb.odb&quot;)
&apos;&apos;&apos; Set oSheet1 = oBase.OpenTable(&quot;Customers&quot;) &apos; or OpenQuery(...)
&apos;&apos;&apos; Set oSheet2 = oBase.Datasheets(&quot;Products&quot;) &apos; when the datasheet has been opened manually
&apos;&apos;&apos; 2) Independently from a Base document
&apos;&apos;&apos; Set oDatabase = CreateScriptService(&quot;Database&quot;, &quot;/home/user/Documents/myDb.odb&quot;)
&apos;&apos;&apos; Set oSheet = oDatabase.OpenTable(&quot;Customers&quot;)
&apos;&apos;&apos;
&apos;&apos;&apos; Detailed user documentation:
&apos;&apos;&apos; https://help.libreoffice.org/latest/en-US/text/sbasic/shared/03/sf_datasheet.html?DbPAR=BASIC
&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
REM ================================================================== EXCEPTIONS
Private Const DOCUMENTDEADERROR = &quot;DOCUMENTDEADERROR&quot;
REM ============================================================= PRIVATE MEMBERS
Private [Me] As Object
Private [_Parent] As Object &apos; Base instance when opened from a Base document by code
&apos; or Database instance when opened without Base document
Private ObjectType As String &apos; Must be DATASHEET
Private ServiceName As String
Private _Component As Object &apos; com.sun.star.lang.XComponent - org.openoffice.comp.dbu.ODatasourceBrowser
Private _Frame As Object &apos; com.sun.star.frame.XFrame
Private _ParentBase As Object &apos; The parent SF_Base instance (may be void)
Private _ParentDatabase As Object &apos; The parent SF_Database instance (must not be void)
Private _SheetType As String &apos; TABLE, QUERY or SQL
Private _ParentType As String &apos; BASE or DATABASE
Private _BaseFileName As String &apos; URL format of parent Base file
Private _Command As String &apos; Table name, query name or SQL statement
Private _DirectSql As Boolean &apos; When True, SQL processed by RDBMS
Private _TabControllerModel As Object &apos; com.sun.star.awt.XTabControllerModel - com.sun.star.comp.forms.ODatabaseForm
Private _ControlModel As Object &apos; com.sun.star.awt.XControlModel - com.sun.star.form.OGridControlModel
Private _ControlView As Object &apos; com.sun.star.awt.XControl - org.openoffice.comp.dbu.ODatasourceBrowser
Private _ColumnHeaders As Variant &apos; List of column headers as an array of strings
REM ============================================================ MODULE CONSTANTS
REM ====================================================== CONSTRUCTOR/DESTRUCTOR
REM -----------------------------------------------------------------------------
Private Sub Class_Initialize()
Set [Me] = Nothing
Set [_Parent] = Nothing
ObjectType = &quot;DATASHEET&quot;
ServiceName = &quot;SFDatabases.Datasheet&quot;
Set _Component = Nothing
Set _Frame = Nothing
Set _ParentBase = Nothing
Set _ParentDatabase = Nothing
_SheetType = &quot;&quot;
_ParentType = &quot;&quot;
_BaseFileName = &quot;&quot;
_Command = &quot;&quot;
_DirectSql = False
Set _TabControllerModel = Nothing
Set _ControlModel = Nothing
Set _ControlView = Nothing
_ColumnHeaders = Array()
End Sub &apos; SFDatabases.SF_Datasheet Constructor
REM -----------------------------------------------------------------------------
Private Sub Class_Terminate()
Call Class_Initialize()
End Sub &apos; SFDatabases.SF_Datasheet Destructor
REM -----------------------------------------------------------------------------
Public Function Dispose() As Variant
Call Class_Terminate()
Set Dispose = Nothing
End Function &apos; SFDatabases.SF_Datasheet Explicit Destructor
REM ================================================================== PROPERTIES
REM -----------------------------------------------------------------------------
Property Get ColumnHeaders() As Variant
&apos;&apos;&apos; Returns the list of column headers of the datasheet as an array of strings
ColumnHeaders = _PropertyGet(&quot;ColumnHeaders&quot;)
End Property &apos; SFDatabases.SF_Datasheet.ColumnHeaders
REM -----------------------------------------------------------------------------
Property Get CurrentColumn() As String
&apos;&apos;&apos; Returns the currently selected column by its name
CurrentColumn = _PropertyGet(&quot;CurrentColumn&quot;)
End Property &apos; SFDatabases.SF_Datasheet.CurrentColumn
REM -----------------------------------------------------------------------------
Property Get CurrentRow() As Long
&apos;&apos;&apos; Returns the currently selected row by its number &gt;= 1
CurrentRow = _PropertyGet(&quot;CurrentRow&quot;)
End Property &apos; SFDatabases.SF_Datasheet.CurrentRow
REM -----------------------------------------------------------------------------
Property Get DatabaseFileName() As String
&apos;&apos;&apos; Returns the file name of the Base file in FSO.FileNaming format
DatabaseFileName = _PropertyGet(&quot;DatabaseFileName&quot;)
End Property &apos; SFDatabases.SF_Datasheet.DatabaseFileName
REM -----------------------------------------------------------------------------
Property Get Filter() As Variant
&apos;&apos;&apos; The Filter is a SQL WHERE clause without the WHERE keyword
Filter = _PropertyGet(&quot;Filter&quot;)
End Property &apos; SFDatabases.SF_Datasheet.Filter (get)
REM -----------------------------------------------------------------------------
Property Let Filter(Optional ByVal pvFilter As Variant)
&apos;&apos;&apos; Set the updatable property Filter
&apos;&apos;&apos; Table and field names may be surrounded by square brackets
&apos;&apos;&apos; When the argument is the zero-length string, the actual filter is removed
_PropertySet(&quot;Filter&quot;, pvFilter)
End Property &apos; SFDatabases.SF_Datasheet.Filter (let)
REM -----------------------------------------------------------------------------
Property Get LastRow() As Long
&apos;&apos;&apos; Returns the total number of rows
&apos;&apos;&apos; The process may imply to move the cursor to the last available row.
&apos;&apos;&apos; Afterwards the cursor is reset to the current row.
LastRow = _PropertyGet(&quot;LastRow&quot;)
End Property &apos; SFDatabases.SF_Datasheet.LastRow
REM -----------------------------------------------------------------------------
Property Get OrderBy() As Variant
&apos;&apos;&apos; The Order is a SQL ORDER BY clause without the ORDER BY keywords
OrderBy = _PropertyGet(&quot;OrderBy&quot;)
End Property &apos; SFDocuments.SF_Form.OrderBy (get)
REM -----------------------------------------------------------------------------
Property Let OrderBy(Optional ByVal pvOrderBy As Variant)
&apos;&apos;&apos; Set the updatable property OrderBy
&apos;&apos;&apos; Table and field names may be surrounded by square brackets
&apos;&apos;&apos; When the argument is the zero-length string, the actual sort is removed
_PropertySet(&quot;OrderBy&quot;, pvOrderBy)
End Property &apos; SFDocuments.SF_Form.OrderBy (let)
REM -----------------------------------------------------------------------------
Property Get ParentDatabase() As Object
&apos;&apos;&apos; Returns the database instance to which the datasheet belongs
Set ParentDatabase = _PropertyGet(&quot;ParentDatabase&quot;)
End Property &apos; SFDatabases.SF_Datasheet.ParentDatabase
REM -----------------------------------------------------------------------------
Property Get Source() As String
&apos;&apos;&apos; Returns the source of the data: table name, query name or sql statement
Source = _PropertyGet(&quot;Source&quot;)
End Property &apos; SFDatabases.SF_Datasheet.Source
REM -----------------------------------------------------------------------------
Property Get SourceType() As String
&apos;&apos;&apos; Returns thetype of source of the data: TABLE, QUERY or SQL
SourceType = _PropertyGet(&quot;SourceType&quot;)
End Property &apos; SFDatabases.SF_Datasheet.SourceType
REM -----------------------------------------------------------------------------
Property Get XComponent() As Object
&apos;&apos;&apos; Returns the com.sun.star.lang.XComponent UNO object representing the datasheet
XComponent = _PropertyGet(&quot;XComponent&quot;)
End Property &apos; SFDocuments.SF_Document.XComponent
REM -----------------------------------------------------------------------------
Property Get XControlModel() As Object
&apos;&apos;&apos; Returns the com.sun.star.lang.XControl UNO object representing the datasheet
XControlModel = _PropertyGet(&quot;XControlModel&quot;)
End Property &apos; SFDocuments.SF_Document.XControlModel
REM -----------------------------------------------------------------------------
Property Get XTabControllerModel() As Object
&apos;&apos;&apos; Returns the com.sun.star.lang.XTabControllerModel UNO object representing the datasheet
XTabControllerModel = _PropertyGet(&quot;XTabControllerModel&quot;)
End Property &apos; SFDocuments.SF_Document.XTabControllerModel
REM ===================================================================== METHODS
REM -----------------------------------------------------------------------------
Public Sub Activate()
&apos;&apos;&apos; Make the actual datasheet active
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; Examples:
&apos;&apos;&apos; oSheet.Activate()
Dim oContainer As Object &apos; com.sun.star.awt.XWindow
Const cstThisSub = &quot;SFDatabases.Datasheet.Activate&quot;
Const cstSubArgs = &quot;&quot;
If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
Check:
SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
If Not _IsStillAlive() Then GoTo Finally
Try:
Set oContainer = _Component.Frame.ContainerWindow
With oContainer
If .isVisible() = False Then .setVisible(True)
.IsMinimized = False
.setFocus()
.toFront() &apos; Force window change in Linux
Wait 1 &apos; Bypass desynchro issue in Linux
End With
Finally:
SF_Utils._ExitFunction(cstThisSub)
Exit Sub
Catch:
GoTo Finally
End Sub &apos; SFDatabases.SF_Datasheet.Activate
REM -----------------------------------------------------------------------------
Public Function CloseDatasheet() As Boolean
&apos;&apos;&apos; Close the actual datasheet
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; True when successful
&apos;&apos;&apos; Examples:
&apos;&apos;&apos; oSheet.CloseDatasheet()
Dim bClose As Boolean &apos; Return value
Const cstThisSub = &quot;SFDatabases.Datasheet.CloseDatasheet&quot;
Const cstSubArgs = &quot;&quot;
If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
bClose = False
Check:
SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
If Not _IsStillAlive() Then GoTo Finally
Try:
_TabControllerModel.close()
_Frame.close(True)
_Frame.dispose()
Dispose()
bClose = True
Finally:
CloseDatasheet = bClose
SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet.CloseDatasheet
REM -----------------------------------------------------------------------------
Public Function CreateMenu(Optional ByVal MenuHeader As Variant _
, Optional ByVal Before As Variant _
, Optional ByVal SubmenuChar As Variant _
) As Object
&apos;&apos;&apos; Create a new menu entry in the datasheet&apos;s menubar
&apos;&apos;&apos; The menu is not intended to be saved neither in the LibreOffice global environment, nor elsewhere
&apos;&apos;&apos; The method returns a SFWidgets.Menu instance. Its methods let define the menu further.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; MenuHeader: the name/header of the menu
&apos;&apos;&apos; Before: the place where to put the new menu on the menubar (string or number &gt;= 1)
&apos;&apos;&apos; When not found =&gt; last position
&apos;&apos;&apos; SubmenuChar: the delimiter used in menu trees. Default = &quot;&gt;&quot;
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; A SFWidgets.Menu instance or Nothing
&apos;&apos;&apos; Examples:
&apos;&apos;&apos; Dim oMenu As Object
&apos;&apos;&apos; Set oMenu = oDoc.CreateMenu(&quot;My menu&quot;, Before := &quot;Styles&quot;)
&apos;&apos;&apos; With oMenu
&apos;&apos;&apos; .AddItem(&quot;Item 1&quot;, Command := &quot;.uno:About&quot;)
&apos;&apos;&apos; &apos;...
&apos;&apos;&apos; .Dispose() &apos; When definition is complete, the menu instance may be disposed
&apos;&apos;&apos; End With
&apos;&apos;&apos; &apos; ...
Dim oMenu As Object &apos; return value
Const cstThisSub = &quot;SFDatabases.Datasheet.CreateMenu&quot;
Const cstSubArgs = &quot;MenuHeader, [Before=&quot;&quot;&quot;&quot;], [SubmenuChar=&quot;&quot;&gt;&quot;&quot;]&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
Set oMenu = Nothing
Check:
If IsMissing(Before) Or IsEmpty(Before) Then Before = &quot;&quot;
If IsMissing(SubmenuChar) Or IsEmpty(SubmenuChar) Then SubmenuChar = &quot;&quot;
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not _IsStillAlive() Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(MenuHeader, &quot;MenuHeader&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(Before, &quot;Before&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(SubmenuChar, &quot;SubmenuChar&quot;, V_STRING) Then GoTo Finally
End If
Try:
Set oMenu = ScriptForge.SF_Services.CreateScriptService(&quot;SFWidgets.Menu&quot;, _Component, MenuHeader, Before, SubmenuChar)
Finally:
Set CreateMenu = oMenu
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Document.CreateMenu
REM -----------------------------------------------------------------------------
Public Function GetProperty(Optional ByVal PropertyName As Variant) As Variant
&apos;&apos;&apos; Return the actual value of the given property
&apos;&apos;&apos; Args:
&apos;&apos;&apos; PropertyName: the name of the property as a string
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; The actual value of the propRATTCerty
&apos;&apos;&apos; If the property does not exist, returns Null
Const cstThisSub = &quot;SFDatabases.Datasheet.GetProperty&quot;
Const cstSubArgs = &quot;&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
GetProperty = Null
Check:
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not ScriptForge.SF_Utils._Validate(PropertyName, &quot;PropertyName&quot;, V_STRING, Properties()) Then GoTo Catch
End If
Try:
GetProperty = _PropertyGet(PropertyName)
Finally:
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet.GetProperty
REM -----------------------------------------------------------------------------
Public Function GetText(Optional ByVal Column As Variant) As String
&apos;&apos;&apos; Get the text in the given column of the current row.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Column: the name of the column as a string or its position (&gt;= 1). Default = the current column
&apos;&apos;&apos; If the argument exceeds the number of columns, the last column is selected.
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; The text in the cell as a string as how it is displayed
&apos;&apos;&apos; Note that the position of the cursor is left unchanged.
&apos;&apos;&apos; Examples:
&apos;&apos;&apos; oSheet.GetText(&quot;ShipCity&quot;)) &apos; Extract the text on the current row from the column &quot;ShipCity&quot;
Dim sText As String &apos; Return Text
Dim lCol As Long &apos; Numeric index of Column in lists of columns
Dim lMaxCol As Long &apos; Index of last column
Const cstThisSub = &quot;SFDatabases.Datasheet.GetText&quot;
Const cstSubArgs = &quot;[Column=0]&quot;
If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
sText = &quot;&quot;
Check:
If IsMissing(Column) Or IsEmpty(Column) Then Column = 0
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not _IsStillAlive() Then GoTo Finally
If VarType(Column) &lt;&gt; V_STRING Then
If Not ScriptForge.SF_Utils._Validate(Column, &quot;Column&quot;, ScriptForge.V_NUMERIC) Then GoTo Catch
Else
If Not ScriptForge.SF_Utils._Validate(Column, &quot;Column&quot;, V_STRING, _ColumnHeaders) Then GoTo Catch
End If
End If
Try:
&apos; Position the column - The index to be passed starts at 0
With _ControlView
If VarType(Column) = V_STRING Then
lCol = ScriptForge.SF_Array.IndexOf(_ColumnHeaders, Column, CaseSensitive := False)
Else
lCol = -1
If Column &gt;= 1 Then
lMaxCol = .Count - 1
If Column &gt; lMaxCol + 1 Then lCol = lMaxCol Else lCol = Column - 1
End If
End If
If lCol &gt;= 0 Then sText = .getByIndex(lCol).Text
End With
Finally:
GetText = sText
SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet.GetText
REM -----------------------------------------------------------------------------
Public Function GetValue(Optional ByVal Column As Variant) As Variant
&apos;&apos;&apos; Get the value in the given column of the current row.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Column: the name of the column as a string or its position (&gt;= 1). Default = the current column
&apos;&apos;&apos; If the argument exceeds the number of columns, the last column is selected.
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; The value in the cell as a valid Basic type
&apos;&apos;&apos; Typical types are: STRING, INTEGER, LONG, FLOAT, DOUBLE, DATE, NULL
&apos;&apos;&apos; Binary types are returned as a LONG giving their length, not their content
&apos;&apos;&apos; An EMPTY return value means that the value could not be retrieved.
&apos;&apos;&apos; Note that the position of the cursor is left unchanged.
&apos;&apos;&apos; Examples:
&apos;&apos;&apos; oSheet.GetValue(&quot;ShipCity&quot;)) &apos; Extract the value on the current row from the column &quot;ShipCity&quot;
Dim vValue As Variant &apos; Return value
Dim lCol As Long &apos; Numeric index of Column in lists of columns
Dim lMaxCol As Long &apos; Index of last column
Const cstThisSub = &quot;SFDatabases.Datasheet.GetValue&quot;
Const cstSubArgs = &quot;[Column=0]&quot;
If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
vValue = Empty
Check:
If IsMissing(Column) Or IsEmpty(Column) Then Column = 0
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not _IsStillAlive() Then GoTo Finally
If VarType(Column) &lt;&gt; V_STRING Then
If Not ScriptForge.SF_Utils._Validate(Column, &quot;Column&quot;, ScriptForge.V_NUMERIC) Then GoTo Catch
Else
If Not ScriptForge.SF_Utils._Validate(Column, &quot;Column&quot;, V_STRING, _ColumnHeaders) Then GoTo Catch
End If
End If
Try:
&apos; Position the column - The index to be passed starts at 1
If VarType(Column) = V_STRING Then
lCol = ScriptForge.SF_Array.IndexOf(_ColumnHeaders, Column, CaseSensitive := False) + 1
Else
lCol = 0
If Column &gt;= 1 Then
lMaxCol = _ControlView.Count
If Column &gt; lMaxCol Then lCol = lMaxCol Else lCol = Column
End If
End If
&apos; The _TabControllerModel acts exactly as a result set, from which the generic _GetColumnValue can extract the searched value
If lCol &gt;= 1 Then vValue = _ParentDatabase._GetColumnValue(_TabControllerModel, lCol)
Finally:
GetValue = vValue
SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet.GetValue
REM -----------------------------------------------------------------------------
Public Function GoToCell(Optional ByVal Row As Variant _
, Optional ByVal Column As Variant _
) As Boolean
&apos;&apos;&apos; Set the cursor on the given row and the given column.
&apos;&apos;&apos; If the requested row exceeds the number of available rows, the cursor is set on the last row.
&apos;&apos;&apos; If the requested column exceeds the number of available columns, the selected column is the last one.
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Row: the row number (&gt;= 1) as a numeric value. Default= no change
&apos;&apos;&apos; Column: the name of the column as a string or its position (&gt;= 1). Default = the current column
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; True when successful
&apos;&apos;&apos; Examples:
&apos;&apos;&apos; oSheet.GoToCell(1000000, &quot;ShipCity&quot;)) &apos; Set the cursor on he last row, column &quot;ShipCity&quot;
Dim bGoTo As Boolean &apos; Return value
Dim lCol As Long &apos; Numeric index of Column in list of columns
Dim lMaxCol As Long &apos; Index of last column
Const cstThisSub = &quot;SFDatabases.Datasheet.GoToCell&quot;
Const cstSubArgs = &quot;[Row=0], [Column=0]&quot;
If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
bGoTo = False
Check:
If IsMissing(Row) Or IsEmpty(Row) Then Row = 0
If IsMissing(Column) Or IsEmpty(Column) Then Column = 0
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not _IsStillAlive() Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(Row, &quot;Row&quot;, ScriptForge.V_NUMERIC) Then GoTo Catch
If VarType(Column) &lt;&gt; V_STRING Then
If Not ScriptForge.SF_Utils._Validate(Column, &quot;Column&quot;, ScriptForge.V_NUMERIC) Then GoTo Catch
Else
If Not ScriptForge.SF_Utils._Validate(Column, &quot;Column&quot;, V_STRING, _ColumnHeaders) Then GoTo Catch
End If
End If
Try:
&apos; Position the row
With _TabControllerModel
If Row &lt;= 0 Then Row = .Row Else .absolute(Row)
&apos; Does Row exceed the total number of rows ?
If .IsRowCountFinal And Row &gt; .RowCount Then .absolute(.RowCount)
End With
&apos; Position the column
With _ControlView
If VarType(Column) = V_STRING Then
lCol = ScriptForge.SF_Array.IndexOf(_ColumnHeaders, Column, CaseSensitive := False)
Else
lCol = -1
If Column &gt;= 1 Then
lMaxCol = .Count - 1
If Column &gt; lMaxCol + 1 Then lCol = lMaxCol Else lCol = Column - 1
End If
End If
If lCol &gt;= 0 Then .setCurrentColumnPosition(lCol)
End With
bGoTo = True
Finally:
GoToCell = bGoTo
SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet.GoToCell
REM -----------------------------------------------------------------------------
Public Function Methods() As Variant
&apos;&apos;&apos; Return the list of public methods of the Model service as an array
Methods = Array( _
&quot;Activate&quot; _
, &quot;CloseDatasheet&quot; _
, &quot;CreateMenu&quot; _
, &quot;GetText&quot; _
, &quot;GetValue&quot; _
, &quot;GoToCell&quot; _
, &quot;RemoveMenu&quot; _
)
End Function &apos; SFDatabases.SF_Datasheet.Methods
REM -----------------------------------------------------------------------------
Public Function Properties() As Variant
&apos;&apos;&apos; Return the list or properties of the Model class as an array
Properties = Array( _
&quot;ColumnHeaders&quot; _
, &quot;CurrentColumn&quot; _
, &quot;CurrentRow&quot; _
, &quot;DatabaseFileName&quot; _
, &quot;Filter&quot; _
, &quot;LastRow&quot; _
, &quot;OrderBy&quot; _
, &quot;ParentDatabase&quot; _
, &quot;Source&quot; _
, &quot;SourceType&quot; _
, &quot;XComponent&quot; _
, &quot;XControlModel&quot; _
, &quot;XTabControllerModel&quot; _
)
End Function &apos; SFDatabases.SF_Datasheet.Properties
REM -----------------------------------------------------------------------------
Public Function RemoveMenu(Optional ByVal MenuHeader As Variant) As Boolean
&apos;&apos;&apos; Remove a menu entry in the document&apos;s menubar
&apos;&apos;&apos; The removal is not intended to be saved neither in the LibreOffice global environment, nor in the document
&apos;&apos;&apos; Args:
&apos;&apos;&apos; MenuHeader: the name/header of the menu, without tilde &quot;~&quot;, as a case-sensitive string
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; True when successful
&apos;&apos;&apos; Examples:
&apos;&apos;&apos; oDoc.RemoveMenu(&quot;File&quot;)
&apos;&apos;&apos; &apos; ...
Dim bRemove As Boolean &apos; Return value
Dim oLayout As Object &apos; com.sun.star.comp.framework.LayoutManager
Dim oMenuBar As Object &apos; com.sun.star.awt.XMenuBar or stardiv.Toolkit.VCLXMenuBar
Dim sName As String &apos; Menu name
Dim iMenuId As Integer &apos; Menu identifier
Dim iMenuPosition As Integer &apos; Menu position &gt;= 0
Dim i As Integer
Const cstTilde = &quot;~&quot;
Const cstThisSub = &quot;SFDatabases.Datasheet.RemoveMenu&quot;
Const cstSubArgs = &quot;MenuHeader&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
bRemove = False
Check:
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not _IsStillAlive() Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(MenuHeader, &quot;MenuHeader&quot;, V_STRING) Then GoTo Finally
End If
Try:
Set oLayout = _Component.Frame.LayoutManager
Set oMenuBar = oLayout.getElement(&quot;private:resource/menubar/menubar&quot;).XMenuBar
&apos; Search the menu identifier to remove by its name, Mark its position
With oMenuBar
iMenuPosition = -1
For i = 0 To .ItemCount - 1
iMenuId = .getItemId(i)
sName = Replace(.getItemText(iMenuId), cstTilde, &quot;&quot;)
If MenuHeader= sName Then
iMenuPosition = i
Exit For
End If
Next i
&apos; Remove the found menu item
If iMenuPosition &gt;= 0 Then
.removeItem(iMenuPosition, 1)
bRemove = True
End If
End With
Finally:
RemoveMenu = bRemove
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet.RemoveMenu
REM -----------------------------------------------------------------------------
Public Function SetProperty(Optional ByVal PropertyName As Variant _
, Optional ByRef Value As Variant _
) As Boolean
&apos;&apos;&apos; Set a new value to the given property
&apos;&apos;&apos; Args:
&apos;&apos;&apos; PropertyName: the name of the property as a string
&apos;&apos;&apos; Value: its new value
&apos;&apos;&apos; Exceptions
&apos;&apos;&apos; ARGUMENTERROR The property does not exist
Const cstThisSub = &quot;SFDatabases.Datasheet.SetProperty&quot;
Const cstSubArgs = &quot;PropertyName, Value&quot;
If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
SetProperty = False
Check:
If SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not SF_Utils._Validate(PropertyName, &quot;PropertyName&quot;, V_STRING, Properties()) Then GoTo Catch
End If
Try:
SetProperty = _PropertySet(PropertyName, Value)
Finally:
SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet.SetProperty
REM =========================================================== PRIVATE FUNCTIONS
REM -----------------------------------------------------------------------------
Public Sub _Initialize()
&apos;&apos;&apos; Called immediately after instance creation to complete the initial values
&apos;&apos;&apos; An eventual error must be trapped in the calling routine to cancel the instance creation
Dim iType As Integer &apos; One of the com.sun.star.sdb.CommandType constants
Dim oColumn As Object &apos; A single column
Dim oColumnDescriptor As Object &apos; A single column descriptor
Dim FSO As Object : Set FSO = ScriptForge.SF_FileSystem
Dim i As Long
Try:
If IsNull([_Parent]) Then _ParentType = &quot;&quot; Else _ParentType = [_Parent].ObjectType
With _Component
&apos; The existence of _Component.Selection must be checked upfront
_Command = ScriptForge.SF_Utils._GetPropertyValue(.Selection, &quot;Command&quot;)
iType = ScriptForge.SF_Utils._GetPropertyValue(.Selection, &quot;CommandType&quot;)
Select Case iType
Case com.sun.star.sdb.CommandType.TABLE : _SheetType = &quot;TABLE&quot;
Case com.sun.star.sdb.CommandType.QUERY : _SheetType = &quot;QUERY&quot;
Case com.sun.star.sdb.CommandType.COMMAND : _SheetType = &quot;SQL&quot;
End Select
_BaseFileName = ScriptForge.SF_Utils._GetPropertyValue(.Selection, &quot;DataSourceName&quot;)
_DirectSql = Not ScriptForge.SF_Utils._GetPropertyValue(.Selection, &quot;EscapeProcessing&quot;)
&apos; Useful UNO objects
Set _Frame = .Frame
Set _ControlView = .CurrentControl
Set _TabControllerModel = .com_sun_star_awt_XTabController_getModel()
Set _ControlModel = _ControlView.getModel()
End With
&apos; Retrieve the parent database instance
With _TabControllerModel
Select Case _ParentType
Case &quot;BASE&quot;
Set _ParentDatabase = [_Parent].GetDatabase(.User, .Password)
Set _ParentBase = [_Parent]
Case &quot;DATABASE&quot;
Set _ParentDatabase = [_Parent]
Set _ParentBase = Nothing
Case &quot;&quot; &apos; Derive the DATABASE instance from what can be found in the Component
Set _ParentDatabase = ScriptForge.SF_Services.CreateScriptService(&quot;SFDatabases.Database&quot; _
, FSO._ConvertFromUrl(_BaseFileName), , , .User, .Password)
_ParentType = &quot;DATABASE&quot;
Set _ParentBase = Nothing
End Select
&apos; Load column headers
_ColumnHeaders = .getColumns().getElementNames()
End With
Finally:
Exit Sub
End Sub &apos; SFDatabases.SF_Datasheet._Initialize
REM -----------------------------------------------------------------------------
Private Function _IsStillAlive(Optional ByVal pbError As Boolean) As Boolean
&apos;&apos;&apos; Returns True if the datasheet has not been closed manually or incidentally since the last use
&apos;&apos;&apos; If dead the actual instance is disposed. The execution is cancelled when pbError = True (default)
&apos;&apos;&apos; Args:
&apos;&apos;&apos; pbError: if True (default), raise a fatal error
Dim bAlive As Boolean &apos; Return value
Dim sName As String &apos; Used in error message
On Local Error GoTo Catch &apos; Anticipate DisposedException errors or alike
If IsMissing(pbError) Then pbError = True
Try:
&apos; Check existence of datasheet
bAlive = Not IsNull(_Component.ComponentWindow)
Finally:
If pbError And Not bAlive Then
sName = _Command
Dispose()
If pbError Then ScriptForge.SF_Exception.RaiseFatal(DOCUMENTDEADERROR, sName)
End If
_IsStillAlive = bAlive
Exit Function
Catch:
bAlive = False
On Error GoTo 0
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet._IsStillAlive
REM -----------------------------------------------------------------------------
Private Function _PropertyGet(Optional ByVal psProperty As String) As Variant
&apos;&apos;&apos; Return the value of the named property
&apos;&apos;&apos; Args:
&apos;&apos;&apos; psProperty: the name of the property
Dim lRow As Long &apos; Actual row number
Dim cstThisSub As String
Const cstSubArgs = &quot;&quot;
cstThisSub = &quot;SFDatabases.Datasheet.get&quot; &amp; psProperty
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
If Not _IsStillAlive(False) Then GoTo Finally
Select Case psProperty
Case &quot;ColumnHeaders&quot;
_PropertyGet = _ColumnHeaders
Case &quot;CurrentColumn&quot;
_PropertyGet = _ColumnHeaders(_ControlView.getCurrentColumnPosition())
Case &quot;CurrentRow&quot;
_PropertyGet = _TabControllerModel.Row
Case &quot;DatabaseFileName&quot;
_PropertyGet = ScriptForge.SF_FileSystem._ConvertFromUrl(_BaseFileName)
Case &quot;Filter&quot;
_PropertyGet = _TabControllerModel.Filter
Case &quot;LastRow&quot;
With _TabControllerModel
If .IsRowCountFinal Then
_PropertyGet = .RowCount
Else
lRow = .Row
If lRow &gt; 0 Then
.last()
_PropertyGet = .RowCount
.absolute(lRow)
Else
_PropertyGet = 0
End If
End If
End With
Case &quot;OrderBy&quot;
_PropertyGet = _TabControllerModel.Order
Case &quot;ParentDatabase&quot;
Set _PropertyGet = _ParentDatabase
Case &quot;Source&quot;
_PropertyGet = _Command
Case &quot;SourceType&quot;
_PropertyGet = _SheetType
Case &quot;XComponent&quot;
Set _PropertyGet = _Component
Case &quot;XControlModel&quot;
Set _PropertyGet = _ControlModel
Case &quot;XTabControllerModel&quot;
Set _PropertyGet = _TabControllerModel
Case Else
_PropertyGet = Null
End Select
Finally:
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet._PropertyGet
REM -----------------------------------------------------------------------------
Private Function _PropertySet(Optional ByVal psProperty As String _
, Optional ByVal pvValue As Variant _
) As Boolean
&apos;&apos;&apos; Set the new value of the named property
&apos;&apos;&apos; Args:
&apos;&apos;&apos; psProperty: the name of the property
&apos;&apos;&apos; pvValue: the new value of the given property
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; True if successful
Dim bSet As Boolean &apos; Return value
Dim cstThisSub As String
Const cstSubArgs = &quot;Value&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
bSet = False
cstThisSub = &quot;SFDatabases.Datasheet.set&quot; &amp; psProperty
ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
If Not _IsStillAlive() Then GoTo Finally
bSet = True
Select Case UCase(psProperty)
Case UCase(&quot;Filter&quot;)
If Not ScriptForge.SF_Utils._Validate(pvValue, &quot;Filter&quot;, V_STRING) Then GoTo Finally
With _TabControllerModel
If Len(pvValue) &gt; 0 Then .Filter = _ParentDatabase._ReplaceSquareBrackets(pvValue) Else .Filter = &quot;&quot;
.ApplyFilter = ( Len(pvValue) &gt; 0 )
.reload()
End With
Case UCase(&quot;OrderBy&quot;)
If Not ScriptForge.SF_Utils._Validate(pvValue, &quot;OrderBy&quot;, V_STRING) Then GoTo Finally
With _TabControllerModel
If Len(pvValue) &gt; 0 Then .Order = _ParentDatabase._ReplaceSquareBrackets(pvValue) Else .Order = &quot;&quot;
.reload()
End With
Case Else
bSet = False
End Select
Finally:
_PropertySet = bSet
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Datasheet._PropertySet
REM -----------------------------------------------------------------------------
Private Function _Repr() As String
&apos;&apos;&apos; Convert the Datasheet instance to a readable string, typically for debugging purposes (DebugPrint ...)
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Return:
&apos;&apos;&apos; &quot;[DATASHEET]: tablename,base file url&quot;
_Repr = &quot;[DATASHEET]: &quot; &amp; _Command &amp; &quot;,&quot; &amp; _BaseFileName
End Function &apos; SFDatabases.SF_Datasheet._Repr
REM ============================================ END OF SFDATABASES.SF_DATASHEET
</script:module>

View File

@@ -0,0 +1,270 @@
<?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="SF_Register" script:language="StarBasic" script:moduleType="normal">REM =======================================================================================================================
REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
REM === The SFDatabases library is one of the associated libraries. ===
REM === Full documentation is available on https://help.libreoffice.org/ ===
REM =======================================================================================================================
Option Compatible
Option Explicit
&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
&apos;&apos;&apos; SF_Register
&apos;&apos;&apos; ===========
&apos;&apos;&apos; The ScriptForge framework includes
&apos;&apos;&apos; the master ScriptForge library
&apos;&apos;&apos; a number of &quot;associated&quot; libraries SF*
&apos;&apos;&apos; any user/contributor extension wanting to fit into the framework
&apos;&apos;&apos;
&apos;&apos;&apos; The main methods in this module allow the current library to cling to ScriptForge
&apos;&apos;&apos; - RegisterScriptServices
&apos;&apos;&apos; Register the list of services implemented by the current library
&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
REM ================================================================== EXCEPTIONS
Private Const BASEDOCUMENTOPENERROR = &quot;BASEDOCUMENTOPENERROR&quot;
REM ============================================================== PUBLIC METHODS
REM -----------------------------------------------------------------------------
Public Sub RegisterScriptServices() As Variant
&apos;&apos;&apos; Register into ScriptForge the list of the services implemented by the current library
&apos;&apos;&apos; Each library pertaining to the framework must implement its own version of this method
&apos;&apos;&apos;
&apos;&apos;&apos; It consists in successive calls to the RegisterService() and RegisterEventManager() methods
&apos;&apos;&apos; with 2 arguments:
&apos;&apos;&apos; ServiceName: the name of the service as a case-insensitive string
&apos;&apos;&apos; ServiceReference: the reference as an object
&apos;&apos;&apos; If the reference refers to a module, then return the module as an object:
&apos;&apos;&apos; GlobalScope.Library.Module
&apos;&apos;&apos; If the reference is a class instance, then return a string referring to the method
&apos;&apos;&apos; containing the New statement creating the instance
&apos;&apos;&apos; &quot;libraryname.modulename.function&quot;
With GlobalScope.ScriptForge.SF_Services
.RegisterService(&quot;Database&quot;, &quot;SFDatabases.SF_Register._NewDatabase&quot;) &apos; Reference to the function initializing the service
.RegisterService(&quot;DatabaseFromDocument&quot;, &quot;SFDatabases.SF_Register._NewDatabaseFromSource&quot;)
.RegisterService(&quot;Datasheet&quot;, &quot;SFDatabases.SF_Register._NewDatasheet&quot;)
End With
End Sub &apos; SFDatabases.SF_Register.RegisterScriptServices
REM =========================================================== PRIVATE FUNCTIONS
REM -----------------------------------------------------------------------------
Public Function _NewDatabase(Optional ByVal pvArgs As Variant) As Object
&apos;&apos;&apos; Create a new instance of the SF_Database class
&apos;&apos;&apos; Args:
&apos;&apos;&apos; FileName : the name of the file (compliant with the SF_FileSystem.FileNaming notation)
&apos;&apos;&apos; RegistrationName: mutually exclusive with FileName. Used when database is registered
&apos;&apos;&apos; ReadOnly : (boolean). Default = True
&apos;&apos;&apos; User : connection parameters
&apos;&apos;&apos; Password
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; The instance or Nothing
&apos;&apos;&apos; Exceptions:
&apos;&apos;&apos; BASEDOCUMENTOPENERROR The database file could not be opened or connected
Dim oDatabase As Object &apos; Return value
Dim vFileName As Variant &apos; alias of pvArgs(0)
Dim vRegistration As Variant &apos; Alias of pvArgs(1)
Dim vReadOnly As Variant &apos; Alias of pvArgs(2)
Dim vUser As Variant &apos; Alias of pvArgs(3)
Dim vPassword As Variant &apos; Alias of pvArgs(4)
Dim oDBContext As Object &apos; com.sun.star.sdb.DatabaseContext
Const cstService = &quot;SFDatabases.Database&quot;
Const cstGlobal = &quot;GlobalScope&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
Check:
If IsMissing(pvArgs) Or IsEmpty(pvArgs) Then pvArgs = Array()
If UBound(pvArgs) &gt;= 0 Then vFileName = pvArgs(0) Else vFileName = &quot;&quot;
If IsEmpty(vFileName) Then vFileName = &quot;&quot;
If UBound(pvArgs) &gt;= 1 Then vRegistration = pvArgs(1) Else vRegistration = &quot;&quot;
If IsEmpty(vRegistration) Then vRegistration = &quot;&quot;
If UBound(pvArgs) &gt;= 2 Then vReadOnly = pvArgs(2) Else vReadOnly = True
If IsEmpty(vReadOnly) Then vReadOnly = True
If UBound(pvArgs) &gt;= 3 Then vUser = pvArgs(3) Else vUser = &quot;&quot;
If IsEmpty(vUser) Then vUser = &quot;&quot;
If UBound(pvArgs) &gt;= 4 Then vPassword = pvArgs(4) Else vPassword = &quot;&quot;
If IsEmpty(vPassword) Then vPassword = &quot;&quot;
If Not ScriptForge.SF_Utils._Validate(vFileName, &quot;FileName&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(vRegistration, &quot;RegistrationName&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(vReadOnly, &quot;ReadOnly&quot;, ScriptForge.V_BOOLEAN) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(vUser, &quot;User&quot;, V_STRING) Then GoTo Finally
If Not ScriptForge.SF_Utils._Validate(vPassword, &quot;Password&quot;, V_STRING) Then GoTo Finally
Set oDatabase = Nothing
&apos; Check the existence of FileName
With ScriptForge
Set oDBContext = .SF_Utils._GetUNOService(&quot;DatabaseContext&quot;)
If Len(vFileName) = 0 Then &apos; FileName has precedence over RegistrationName
If Len(vRegistration) = 0 Then GoTo CatchError
If Not oDBContext.hasRegisteredDatabase(vRegistration) Then GoTo CatchError
vFileName = .SF_FileSystem._ConvertFromUrl(oDBContext.getDatabaseLocation(vRegistration))
End If
If Not .SF_FileSystem.FileExists(vFileName) Then GoTo CatchError
End With
Try:
&apos; Create the database Basic object and initialize attributes
Set oDatabase = New SF_Database
With oDatabase
Set .[Me] = oDatabase
._Location = ConvertToUrl(vFileName)
Set ._DataSource = oDBContext.getByName(._Location)
Set ._Connection = ._DataSource.getConnection(vUser, vPassword)
._ReadOnly = vReadOnly
Set ._MetaData = ._Connection.MetaData
._URL = ._MetaData.URL
End With
Finally:
Set _NewDatabase = oDatabase
Exit Function
Catch:
GoTo Finally
CatchError:
ScriptForge.SF_Exception.RaiseFatal(BASEDOCUMENTOPENERROR, &quot;FileName&quot;, vFileName, &quot;RegistrationName&quot;, vRegistration)
GoTo Finally
End Function &apos; SFDatabases.SF_Register._NewDatabase
REM -----------------------------------------------------------------------------
Public Function _NewDatabaseFromSource(Optional ByVal pvArgs As Variant) As Object
&apos; ByRef poDataSource As Object _
&apos; , ByVal psUser As String _
&apos; , ByVal psPassword As String _
&apos; ) As Object
&apos;&apos;&apos; Create a new instance of the SF_Database class from the given datasource
&apos;&apos;&apos; established in the SFDocuments.Base service
&apos;&apos;&apos; THIS SERVICE MUST NOT BE CALLED FROM A USER SCRIPT
&apos;&apos;&apos; Args:
&apos;&apos;&apos; DataSource: com.sun.star.sdbc.XDataSource
&apos;&apos;&apos; User, Password : connection parameters
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; The instance or Nothing
&apos;&apos;&apos; Exceptions:
&apos;&apos;&apos; managed in the calling routines when Nothing is returned
Dim oDatabase As Object &apos; Return value
Dim oConnection As Object &apos; com.sun.star.sdbc.XConnection
Dim oDataSource As Object &apos; Alias of pvArgs(0)
Dim sUser As String &apos; Alias of pvArgs(1)
Dim sPassword As String &apos; Alias of pvArgs(2)
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
Set oDatabase = Nothing
Try:
&apos; Get arguments
Set oDataSource = pvArgs(0)
sUser = pvArgs(1)
sPassword = pvArgs(2)
&apos; Setup the connection
If oDataSource.IsPasswordRequired Then
Set oConnection = oDataSource.getConnection(sUser, sPassword)
Else
Set oConnection = oDataSource.getConnection(&quot;&quot;, &quot;&quot;)
End If
&apos; Create the database Basic object and initialize attributes
If Not IsNull(oConnection) Then
Set oDatabase = New SF_Database
With oDatabase
Set .[Me] = oDatabase
._Location = &quot;&quot;
Set ._DataSource = oDataSource
Set ._Connection = oConnection
._ReadOnly = oConnection.isReadOnly()
Set ._MetaData = oConnection.MetaData
._URL = ._MetaData.URL
End With
End If
Finally:
Set _NewDatabaseFromSource = oDatabase
Exit Function
Catch:
GoTo Finally
End Function &apos; SFDatabases.SF_Register._NewDatabaseFromSource
REM -----------------------------------------------------------------------------
Public Function _NewDatasheet(Optional ByVal pvArgs As Variant) As Object
&apos; Optional ByRef poComponent As Object _
&apos; , Optional ByRef poParent As Object _
&apos; ) As Object
&apos;&apos;&apos; Create a new instance of the SF_Datasheet class
&apos;&apos;&apos; Called from
&apos;&apos;&apos; base.Datasheets()
&apos;&apos;&apos; base.OpenTable()
&apos;&apos;&apos; base.OpenQuery()
&apos;&apos;&apos; database.OpenTable()
&apos;&apos;&apos; database.OpenQuery()
&apos;&apos;&apos; database.OpenSql()
&apos;&apos;&apos; Args:
&apos;&apos;&apos; Component: the component of the new datasheet
&apos;&apos;&apos; com.sun.star.lang.XComponent - org.openoffice.comp.dbu.ODatasourceBrowser
&apos;&apos;&apos; Parent: the parent SF_Database or SF_Base instance having produced the new datasheet
&apos;&apos;&apos; When absent, the SF_Database instance will be derived from the component
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; The instance or Nothing
Dim oDatasheet As Object &apos; Return value
Dim oParent As Object &apos; The parent SF_Database or SF_Base instance having produced the new datasheet
Dim oComponent As Object &apos; The component of the new datasheet
Dim oWindow As Object &apos; ui.Window user-defined type
Dim oUi As Object : Set oUi = ScriptForge.SF_Services.CreateScriptService(&quot;ScriptForge.UI&quot;)
Const TABLEDATA = &quot;TableData&quot;
Const QUERYDATA = &quot;QueryData&quot;
Const SQLDATA = &quot;SqlData&quot;
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
Set oDatasheet = Nothing
Check:
&apos; Get, check and assign arguments
If Not IsArray(pvArgs) Then GoTo Catch
If UBound(pvArgs) &gt;= 0 Then
Set oComponent = pvArgs(0)
End If
If UBound(pvArgs) = 0 Then
Set oParent = Nothing
ElseIf UBound(pvArgs) = 1 Then
Set oParent = pvArgs(1)
Else
GoTo Catch
End If
&apos; Check the validity of the proposed window: is it really a datasheet ? Otherwise, do nothing
If IsNull(oComponent) Then GoTo Catch
Set oWindow = oUi._IdentifyWindow(oComponent)
With oWindow
If .DocumentType &lt;&gt; TABLEDATA And .DocumentType &lt;&gt; QUERYDATA And .DocumentType &lt;&gt; SQLDATA Then GoTo Catch
End With
If IsEmpty(oComponent.Selection) Then GoTo Catch
Try:
Set oDatasheet = New SF_Datasheet
With oDatasheet
Set .[Me] = oDatasheet
Set .[_Parent] = oParent
Set ._Component = oComponent
&apos; Achieve the initialization
._Initialize()
End With
Finally:
Set _NewDatasheet = oDatasheet
Exit Function
Catch:
Set oDatasheet = Nothing
GoTo Finally
End Function &apos; SFDatabases.SF_Register._NewDatasheet
REM ============================================== END OF SFDATABASES.SF_REGISTER
</script:module>

View File

@@ -0,0 +1,26 @@
<?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="__License" script:language="StarBasic" script:moduleType="normal">
&apos;&apos;&apos; Copyright 2019-2022 Jean-Pierre LEDURE, Rafael LIMA, Alain ROMEDENNE
REM =======================================================================================================================
REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
REM === The SFDatabases library is one of the associated libraries. ===
REM === Full documentation is available on https://help.libreoffice.org/ ===
REM =======================================================================================================================
&apos;&apos;&apos; ScriptForge is distributed in the hope that it will be useful,
&apos;&apos;&apos; but WITHOUT ANY WARRANTY; without even the implied warranty of
&apos;&apos;&apos; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
&apos;&apos;&apos; ScriptForge is free software; you can redistribute it and/or modify it under the terms of either (at your option):
&apos;&apos;&apos; 1) The Mozilla Public License, v. 2.0. If a copy of the MPL was not
&apos;&apos;&apos; distributed with this file, you can obtain one at http://mozilla.org/MPL/2.0/ .
&apos;&apos;&apos; 2) The GNU Lesser General Public License as published by
&apos;&apos;&apos; the Free Software Foundation, either version 3 of the License, or
&apos;&apos;&apos; (at your option) any later version. If a copy of the LGPL was not
&apos;&apos;&apos; distributed with this file, see http://www.gnu.org/licenses/ .
</script:module>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="SFDatabases" library:readonly="false" library:passwordprotected="false"/>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="SFDatabases" library:readonly="false" library:passwordprotected="false">
<library:element library:name="SF_Register"/>
<library:element library:name="__License"/>
<library:element library:name="SF_Database"/>
<library:element library:name="SF_Datasheet"/>
</library:library>

Some files were not shown because too many files have changed in this diff Show More