123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- <?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 ' Must be COMMANDBAR
- Private _This As Object ' Workaround for absence of This builtin function
- Private _Parent As Object
- Private _Name As String
- Private _ResourceURL As String
- Private _Window As Object ' com.sun.star.frame.XFrame
- Private _Module As String
- Private _Toolbar As Object
- Private _BarBuiltin As Integer ' 1 = builtin, 2 = custom stored in LO/AOO (Base), 3 = custom stored in document (Form)
- Private _BarType As Integer ' See msoBarTypeXxx constants
- REM -----------------------------------------------------------------------------------------------------------------------
- REM --- CONSTRUCTORS / DESTRUCTORS ---
- REM -----------------------------------------------------------------------------------------------------------------------
- Private Sub Class_Initialize()
- _Type = OBJCOMMANDBAR
- Set _This = Nothing
- Set _Parent = Nothing
- _Name = ""
- _ResourceURL = ""
- Set _Window = Nothing
- _Module = ""
- Set _Toolbar = Nothing
- _BarBuiltin = 0
- _BarType = -1
- End Sub ' Constructor
- REM -----------------------------------------------------------------------------------------------------------------------
- Private Sub Class_Terminate()
- On Local Error Resume Next
- Call Class_Initialize()
- End Sub ' Destructor
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Sub Dispose()
- Call Class_Terminate()
- End Sub ' Explicit destructor
- REM -----------------------------------------------------------------------------------------------------------------------
- REM --- CLASS GET/LET/SET PROPERTIES ---
- REM -----------------------------------------------------------------------------------------------------------------------
- REM -----------------------------------------------------------------------------------------------------------------------
- Property Get BuiltIn() As Boolean
- BuiltIn = _PropertyGet("BuiltIn")
- End Property ' BuiltIn (get)
- REM -----------------------------------------------------------------------------------------------------------------------
- Property Get Name() As String
- Name = _PropertyGet("Name")
- End Property ' Name (get)
- Public Function pName() As String ' For compatibility with < V0.9.0
- pName = _PropertyGet("Name")
- End Function ' pName (get)
- REM -----------------------------------------------------------------------------------------------------------------------
- Property Get ObjectType() As String
- ObjectType = _PropertyGet("ObjectType")
- End Property ' ObjectType (get)
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function Parent() As Object
- Parent = _Parent
- End Function ' Parent (get) V6.4.0
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function Properties(ByVal Optional pvIndex As Variant) As Variant
- ' Return
- ' a Collection object if pvIndex absent
- ' 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 ' Properties
- REM -----------------------------------------------------------------------------------------------------------------------
- Property Get Visible() As Variant
- Visible = _PropertyGet("Visible")
- End Property ' Visible (get)
- Property Let Visible(ByVal pvValue As Variant)
- Call _PropertySet("Visible", pvValue)
- End Property ' Visible (set)
- REM -----------------------------------------------------------------------------------------------------------------------
- REM --- CLASS METHODS ---
- REM -----------------------------------------------------------------------------------------------------------------------
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function CommandBarControls(Optional ByVal pvIndex As Variant) As Variant
- ' Return an object of type CommandBarControl indicated by its index
- ' Index is different from UNO index: separators do not count
- ' If no pvIndex argument, return a Collection type
- If _ErrorHandler() Then On Local Error Goto Error_Function
- Const cstThisSub = "CommandBar.CommandBarControls"
- 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 < 0 Then Goto Trace_IndexError
- End If
- Select Case _BarType
- Case msoBarTypeNormal, msoBarTypeMenuBar
- Case Else : Goto Error_NotApplicable ' Status bar not supported
- End Select
- Set oLayout = _Window.LayoutManager
- vElements = oLayout.getElements()
- iIndexToolbar = _FindElement(vElements())
- If iIndexToolbar < 0 Then Goto Error_NotApplicable ' 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, "Type", 1) <> 1 Then ' 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 ' 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 ' 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 ' CommandBarControls V1,3,0
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function Controls(Optional ByVal pvIndex As Variant) As Variant
- ' Alias for CommandBarControls (VBA)
- If _ErrorHandler() Then On Local Error Goto Error_Function
- Const cstThisSub = "CommandBar.Controls"
- 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 ' Controls V1,3,0
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
- ' Return property value of psProperty property name
- Utils._SetCalledSub("CommandBar.getProperty")
- If IsMissing(pvProperty) Then Call _TraceArguments()
- getProperty = _PropertyGet(pvProperty)
- Utils._ResetCalledSub("CommandBar.getProperty")
-
- End Function ' getProperty
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function hasProperty(ByVal Optional pvProperty As Variant) As Boolean
- ' 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 ' hasProperty
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function Reset() As Boolean
- ' Reset a whole command bar to its initial values
- If _ErrorHandler() Then On Local Error Goto Error_Function
- Const cstThisSub = "CommandBar.Reset"
- 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 ' Reset V1.3.0
- REM -----------------------------------------------------------------------------------------------------------------------
- REM --- PRIVATE FUNCTIONS ---
- REM -----------------------------------------------------------------------------------------------------------------------
- REM -----------------------------------------------------------------------------------------------------------------------
- Private Function _FindElement(pvElements As Variant) As Integer
- ' 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("BuiltIn", "Name", "ObjectType", "Visible")
- End Function ' _PropertiesList
- REM -----------------------------------------------------------------------------------------------------------------------
- Private Function _PropertyGet(ByVal psProperty As String) As Variant
- ' Return property value of the psProperty property name
- If _ErrorHandler() Then On Local Error Goto Error_Function
- Dim cstThisSub As String
- cstThisSub = "CommandBar.get" & psProperty
- Utils._SetCalledSub(cstThisSub)
- _PropertyGet = Nothing
- Dim oLayout As Object, iElementIndex As Integer
-
- Select Case UCase(psProperty)
- Case UCase("BuiltIn")
- _PropertyGet = ( _BarBuiltin = 1 )
- Case UCase("Name")
- _PropertyGet = _Name
- Case UCase("ObjectType")
- _PropertyGet = _Type
- Case UCase("Visible")
- Set oLayout = _Window.LayoutManager
- iElementIndex = _FindElement(oLayout.getElements())
- If iElementIndex < 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 ' _PropertyGet
- REM -----------------------------------------------------------------------------------------------------------------------
- Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean
- ' Return True if property setting OK
- If _ErrorHandler() Then On Local Error Goto Error_Function
- Dim cstThisSub As String
- cstThisSub = "CommandBar.set" & psProperty
- Utils._SetCalledSub(cstThisSub)
- _PropertySet = True
- Dim iArgNr As Integer
- Dim oLayout As Object, iElementIndex As Integer
- Select Case UCase(_A2B_.CalledSub)
- Case UCase("setProperty") : iArgNr = 3
- Case UCase("CommandBar.setProperty") : iArgNr = 2
- Case UCase(cstThisSub) : iArgNr = 1
- End Select
-
- If Not hasProperty(psProperty) Then Goto Trace_Error
- Select Case UCase(psProperty)
- Case UCase("Visible")
- If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
- Set oLayout = _Window.LayoutManager
- With oLayout
- iElementIndex = _FindElement(.getElements())
- If iElementIndex < 0 Then
- If pvValue Then
- .createElement(_ResourceURL)
- .showElement(_ResourceURL)
- End If
- Else
- If pvValue <> .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 ' _PropertySet
- </script:module>
|