summaryrefslogtreecommitdiffstats
path: root/wizards/source/sfwidgets/SF_ToolbarButton.xba
diff options
context:
space:
mode:
Diffstat (limited to 'wizards/source/sfwidgets/SF_ToolbarButton.xba')
-rw-r--r--wizards/source/sfwidgets/SF_ToolbarButton.xba565
1 files changed, 565 insertions, 0 deletions
diff --git a/wizards/source/sfwidgets/SF_ToolbarButton.xba b/wizards/source/sfwidgets/SF_ToolbarButton.xba
new file mode 100644
index 0000000000..58c594f066
--- /dev/null
+++ b/wizards/source/sfwidgets/SF_ToolbarButton.xba
@@ -0,0 +1,565 @@
+<?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_ToolbarButton" script:language="StarBasic" script:moduleType="normal">REM =======================================================================================================================
+REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
+REM === The SFWidgets 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_ToolbarButton
+&apos;&apos;&apos; ================
+&apos;&apos;&apos; Hide/show toolbar elements, read and update their current behaviour..
+&apos;&apos;&apos;
+&apos;&apos;&apos; A toolbar consists in a series of graphical controls to trigger actions.
+&apos;&apos;&apos; The &quot;Toolbar&quot; service gives access to the &quot;ToolbarButton&quot; service to manage
+&apos;&apos;&apos; the individual buttons belonging to the toolbar.
+&apos;&apos;&apos;
+&apos;&apos;&apos; Changes made by scripts to buttons belonging to toolbars stored in the application
+&apos;&apos;&apos; are persistent. They are valid for all documents of the same type.
+&apos;&apos;&apos;
+&apos;&apos;&apos; The name of a toolbar button is either:
+&apos;&apos;&apos; - in custom toolbars, a predefined name given at its creation,
+&apos;&apos;&apos; - in standard toolbars, a localized name as read in the Tools + Customize ... dialog box
+&apos;&apos;&apos;
+&apos;&apos;&apos; Service invocation:
+&apos;&apos;&apos; It is available only from an active Toolbar service.
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; Dim oCalc As Object, oToolbar As Object, oToolbarButton As Object
+&apos;&apos;&apos; Set oCalc = CreateScriptService(&quot;Calc&quot;, &quot;myFile.ods&quot;)
+&apos;&apos;&apos; Set oToolbar = oCalc.Toolbars(&quot;findbar&quot;)
+&apos;&apos;&apos; Set oToolbarButton = oToolbar.ToolbarButtons(&quot;Find Next&quot;)
+
+REM ================================================================== EXCEPTIONS
+
+REM ============================================================= PRIVATE MEMBERS
+
+Private [Me] As Object
+Private ObjectType As String &apos; Must be TOOLBARBUTTON
+Private ServiceName As String
+Private [_Parent] As Object &apos; SF_Toolbar instance owning the button
+
+Private _Index As Long &apos; Entry number in buttons lists
+Private _Label As String &apos; Label (static description)
+Private _AccessibleName As String &apos; Name found in accessible context
+Private _Element As Object &apos; com.sun.star.ui.XUIElement
+
+Private _CommandURL As String &apos; Uno command or script
+
+Private _Height As Long &apos; Height may be cached
+Private _Width As Long &apos; Width may be cached
+
+REM ============================================================ MODULE CONSTANTS
+
+REM ====================================================== CONSTRUCTOR/DESTRUCTOR
+
+REM -----------------------------------------------------------------------------
+Private Sub Class_Initialize()
+ Set [Me] = Nothing
+ ObjectType = &quot;TOOLBARBUTTON&quot;
+ ServiceName = &quot;SFWidgets.ToolbarButton&quot;
+ Set [_Parent] = Nothing
+ _Index = -1
+ _Label = &quot;&quot;
+ _AccessibleName = &quot;&quot;
+ Set _Element = Nothing
+ _CommandURL = &quot;&quot;
+ _Height = 0
+ _Width = 0
+End Sub &apos; SFWidgets.SF_ToolbarButton Constructor
+
+REM -----------------------------------------------------------------------------
+Private Sub Class_Terminate()
+ Call Class_Initialize()
+End Sub &apos; SFWidgets.SF_ToolbarButton Destructor
+
+REM -----------------------------------------------------------------------------
+Public Function Dispose() As Variant
+ Call Class_Terminate()
+ Set Dispose = Nothing
+End Function &apos; SFWidgets.SF_ToolbarButton Explicit Destructor
+
+REM ================================================================== PROPERTIES
+
+REM -----------------------------------------------------------------------------
+Property Get Caption() As String
+&apos;&apos;&apos; Returns the name of the button
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; MsgBox myButton.Caption
+
+ Caption = _PropertyGet(&quot;Caption&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.Caption (get)
+
+REM -----------------------------------------------------------------------------
+Property Get Height() As Long
+&apos;&apos;&apos; Returns the height in pixels of the button
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; MsgBox myButton.Height
+
+ Height = _PropertyGet(&quot;Height&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.Height (get)
+
+REM -----------------------------------------------------------------------------
+Property Get Index() As Long
+&apos;&apos;&apos; Returns the index of the button
+&apos;&apos;&apos; - in the Settings (com.sun.star.container.XIndexAccess) of the parent toolbar
+&apos;&apos;&apos; - in the AccessibleContext (com.sun.star.comp.toolkit.AccessibleToolBox) of the parent toolbar
+&apos;&apos;&apos; Both should be identical: the range number of the button in the toolbar, hidden buttons and separators included.
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; MsgBox myButton.Index
+
+ Index = _PropertyGet(&quot;Index&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.Index (get)
+
+REM -----------------------------------------------------------------------------
+Property Get OnClick() As Variant
+&apos;&apos;&apos; Returns the UNO command or the script (expressed in the scripting framework_URI notation) run when the button is clicked
+&apos;&apos;&apos; Read https://wiki.documentfoundation.org/Documentation/DevGuide/Scripting_Framework#Scripting_Framework_URI_Specification
+&apos;&apos;&apos; Note that no event object is passed to the script.
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; MsgBox myButton.OnClick
+
+ OnClick = _PropertyGet(&quot;OnClick&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.OnClick (get)
+
+REM -----------------------------------------------------------------------------
+Property Let OnClick(ByVal pvOnClick As Variant)
+&apos;&apos;&apos; Sets the UNO command or the script (expressed in the scripting framework_URI notation) to trigger when the button is clicked
+&apos;&apos;&apos; It is highly recommended to not modify standard buttons.
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; myButton.OnClick = &quot;.uno:About&quot;
+&apos;&apos;&apos; myButton.OnClick = &quot;vnd.sun.star.script:XrayTool._Main.Xray?language=Basic&amp;location=application&quot;
+
+ _PropertySet(&quot;OnClick&quot;, pvOnClick)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.OnClick (let)
+
+REM -----------------------------------------------------------------------------
+Property Get Parent() As Object
+&apos;&apos;&apos; Returns the parent toolbar as a SF_Toolbar object instance
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; Set oToolbar = myButton.Parent
+
+ Set Parent = _PropertyGet(&quot;Parent&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.Parent (get)
+
+REM -----------------------------------------------------------------------------
+Property Get TipText() As Variant
+&apos;&apos;&apos; Specifies the text that appears in a screentip when you hold the mouse pointer over the button
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; MsgBox myButton.TipText
+
+ TipText = _PropertyGet(&quot;TipText&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.TipText (get)
+
+REM -----------------------------------------------------------------------------
+Property Let TipText(ByVal pvTipText As Variant)
+&apos;&apos;&apos; Sets the screentip associated with the actual toolbar button
+&apos;&apos;&apos; It is highly recommended to not modify standard buttons.
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; myButton.TipText = &quot;Click here&quot;
+
+ _PropertySet(&quot;TipText&quot;, pvTipText)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.TipText (let)
+
+REM -----------------------------------------------------------------------------
+Property Get Visible() As Variant
+&apos;&apos;&apos; Returns True when the toolbar button is visible. Otherwise False.
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; MsgBox myButton.Visible
+
+ Visible = _PropertyGet(&quot;Visible&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.Visible (get)
+
+REM -----------------------------------------------------------------------------
+Property Let Visible(ByVal pvVisible As Variant)
+&apos;&apos;&apos; Sets the visible status of the toolbar button.
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; myButton.Visible = True
+
+ _PropertySet(&quot;Visible&quot;, pvVisible)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.Visible (let)
+
+REM -----------------------------------------------------------------------------
+Property Get Width() As Long
+&apos;&apos;&apos; Returns the width in pixels of the button
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; MsgBox myButton.Width
+
+ Width = _PropertyGet(&quot;Width&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.Width (get)
+
+REM -----------------------------------------------------------------------------
+Property Get X() As Long
+&apos;&apos;&apos; Returns the X (horizontal) coordinate in pixels of the top-left corner of the button
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; MsgBox myButton.X
+
+ X = _PropertyGet(&quot;X&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.X (get)
+
+REM -----------------------------------------------------------------------------
+Property Get Y() As Long
+&apos;&apos;&apos; Returns the Y (vertical) coordinate in pixels of the top-left corner of the button
+&apos;&apos;&apos; Example:
+&apos;&apos;&apos; MsgBox myButton.Y
+
+ Y = _PropertyGet(&quot;Y&quot;)
+
+End Property &apos; SFWidgets.SF_ToolbarButton.Y (get)
+
+REM ===================================================================== METHODS
+
+REM -----------------------------------------------------------------------------
+Public Function Execute() As Variant
+&apos;&apos;&apos; Execute the command stored in the toolbar button.
+&apos;&apos;&apos; The command can be a UNO command or a Basic/Python script (expressed in the scripting framework_URI notation)
+&apos;&apos;&apos; Read https://wiki.documentfoundation.org/Documentation/DevGuide/Scripting_Framework#Scripting_Framework_URI_Specification
+&apos;&apos;&apos; No argument is passed to the script to execute.
+&apos;&apos;&apos; Args:
+&apos;&apos;&apos; Returns:
+&apos;&apos;&apos; The output of the script or Null
+&apos;&apos;&apos; Examples:
+&apos;&apos;&apos; result = myButton.Execute()
+
+Dim vResult As Variant &apos; Return value
+Dim sCommand As String &apos; Command associated with button
+Dim oFrame As Object &apos; com.sun.star.comp.framework.Frame
+Dim oDispatcher As Object &apos; com.sun.star.frame.DispatchHelper
+Dim vScript As Variant &apos; Split command in script/argument
+Dim oSession As Object : Set oSession = ScriptForge.SF_Services.CreateScriptService(&quot;ScriptForge.Session&quot;)
+Dim oArgs() As new com.sun.star.beans.PropertyValue
+Const cstUnoPrefix = &quot;.uno:&quot;
+
+Const cstThisSub = &quot;SFWidgets.ToolbarButton.Execute&quot;
+Const cstSubArgs = &quot;&quot;
+
+ If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
+ vResult = Null
+
+Check:
+ ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
+
+Try:
+ sCommand = GetProperty(&quot;OnClick&quot;)
+ If Len(sCommand) &gt; 0 Then
+ &apos; A button has been clicked necessarily in the current window (Document) or one of its subcomponents (FormDocument)
+ Set oFrame = StarDesktop.ActiveFrame
+ If oFrame.Frames.Count &gt; 0 Then Set oFrame = oFrame.getActiveFrame()
+ &apos; Command or script ?
+ If ScriptForge.SF_String.StartsWith(sCommand, cstUnoPrefix) Then
+ &apos; Execute uno command
+ Set oDispatcher = ScriptForge.SF_Utils._GetUNOService(&quot;DispatchHelper&quot;)
+ oDispatcher.executeDispatch(oFrame, sCommand, &quot;&quot;, 0, oArgs())
+ oFrame.activate()
+ Else
+ &apos; Execute script
+ vResult = oSession._ExecuteScript(sCommand)
+ End If
+ End If
+
+Finally:
+ Execute = vResult
+ ScriptForge.SF_Utils._ExitFunction(cstThisSub)
+ Exit Function
+Catch:
+ GoTo Finally
+End Function &apos; SFWidgets.SF_ToolbarButton.Execute
+
+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; If the property does not exist, returns Null
+&apos;&apos;&apos; Exceptions:
+&apos;&apos;&apos; see the exceptions of the individual properties
+&apos;&apos;&apos; Examples:
+&apos;&apos;&apos; myToolbar.GetProperty(&quot;Visible&quot;)
+
+Const cstThisSub = &quot;SFWidgets.ToolbarButton.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; SFWidgets.SF_ToolbarButton.GetProperty
+
+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;Execute&quot; _
+ )
+
+End Function &apos; SFWidgets.SF_ToolbarButton.Methods
+
+REM -----------------------------------------------------------------------------
+Public Function Properties() As Variant
+&apos;&apos;&apos; Return the list or properties of the Timer a.AddItem(&quot;B&gt;B1&quot;)class as an array
+
+ Properties = Array( _
+ &quot;Caption&quot; _
+ , &quot;Height&quot; _
+ , &quot;Index&quot; _
+ , &quot;OnClick&quot; _
+ , &quot;Parent&quot; _
+ , &quot;TipText&quot; _
+ , &quot;Visible&quot; _
+ , &quot;Width&quot; _
+ , &quot;X&quot; _
+ , &quot;Y&quot; _
+ )
+
+End Function &apos; SFWidgets.SF_ToolbarButton.Properties
+
+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;SFWidgets.ToolbarButton.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; SFWidgets.SF_ToolbarButton.SetProperty
+
+REM =========================================================== PRIVATE FUNCTIONS
+
+REM -----------------------------------------------------------------------------
+Private Function _GetPosition() As Object
+&apos;&apos;&apos; Determine the position of the top-left corner of the actual button.
+&apos;&apos;&apos; Returns:
+&apos;&apos;&apos; a com.sun.star.awt.Rectangle structure
+
+Dim oElement As Object &apos; com.sun.star.ui.XUIElement
+Dim oAccessible As Object &apos; com.sun.star.comp.toolkit.AccessibleToolBoxItem
+Dim oAccessibleButton As Object &apos; com.sun.star.comp.toolkit.AccessibleToolBoxItem
+Dim oAccessibleParent As Object &apos; com.sun.star.comp.toolkit.AccessibleToolBoxItem
+Dim oRect As Object &apos; Return value As com.sun.star.awt.Rectangle
+
+Try:
+ Set oElement = _Element.GetSettings(True).getByIndex(_Index)
+ Set oRect = CreateUnoStruct(&quot;com.sun.star.awt.Rectangle&quot;)
+ If ScriptForge.SF_Utils._GetPropertyValue(oElement, &quot;IsVisible&quot;) Then
+ Set oAccessible = _Element.getRealInterface().getAccessibleContext() &apos; Toolbar level
+ Set oAccessibleParent = oAccessible.getAccessibleParent() &apos; Window level
+ Set oAccessibleButton = oAccessible.getAccessibleChild(_Index) &apos; Toolbar button level
+ &apos; The X and Y coordinates are always computed correctly when the toolbar is docked.
+ &apos; When the toolbar is floating, the Y ordinate may be overestimated with the height of
+ &apos; the tabbed bar or similar. However no mean has been found to get that height via code.
+ With oRect
+ .X = oAccessible.Location.X + oAccessibleButton.Location.X + oAccessibleParent.PosSize.X
+ .Y = oAccessible.Location.Y + oAccessibleButton.Location.Y + oAccessibleParent.PosSize.Y
+ .Height = oAccessibleButton.Size.Height
+ .Width = oAccessibleButton.Size.Width
+ End With
+ Else
+ With oRect
+ .X = -1 : .Y = -1 : .Height = 0 : .Width = 0
+ End With
+ End If
+
+Finally:
+ Set _GetPosition = oRect
+ Exit Function
+End Function &apos; SFWidgets.SF_ToolbarButton._GetPosition
+
+REM -----------------------------------------------------------------------------
+Public Sub _Initialize(ByRef poToolbarButton As Object)
+&apos;&apos;&apos; Complete the object creation process:
+&apos;&apos;&apos; - Initialize the toolbar descriptioner use
+&apos;&apos;&apos; Args:
+&apos;&apos;&apos; poToolbarButton: the toolbar description as a ui._Toolbr object
+
+Try:
+ &apos; Store the static description
+ With poToolbarButton
+ Set [_Parent] = .Toolbar
+ _Index = .Index
+ _Label = .Label
+ _AccessibleName = .AccessibleName
+ Set _Element = .Element
+ End With
+
+ &apos; Complement
+ _CommandURL = ScriptForge.SF_Utils._GetPropertyValue(_Element.getSettings(True).getByIndex(_Index), &quot;CommandURL&quot;)
+
+Finally:
+ Exit Sub
+End Sub &apos; SFWidgets.SF_ToolbarButton._Initialize
+
+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 vGet As Variant &apos; Return value
+Dim sTooltip As String &apos; ToolTip text
+Dim oElement As Object &apos; com.sun.star.ui.XUIElement
+Dim cstThisSub As String
+Const cstSubArgs = &quot;&quot;
+
+ cstThisSub = &quot;SFWidgets.ToolbarButton.get&quot; &amp; psProperty
+ If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
+
+ ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
+ _PropertyGet = Null
+
+ Select Case UCase(psProperty)
+ Case UCase(&quot;Caption&quot;)
+ _PropertyGet = Iif(Len(_Label) &gt; 0, _Label, _AccessibleName)
+ Case UCase(&quot;Height&quot;)
+ If _Height &gt; 0 Then _PropertyGet = _Height else _PropertyGet = _GetPosition().Height
+ Case UCase(&quot;Index&quot;)
+ _PropertyGet = _Index
+ Case UCase(&quot;OnClick&quot;)
+ Set oElement = _Element.GetSettings(True).getByIndex(_Index)
+ _PropertyGet = ScriptForge.SF_Utils._GetPropertyValue(oElement, &quot;CommandURL&quot;)
+ Case UCase(&quot;Parent&quot;)
+ Set _PropertyGet = [_Parent]
+ Case UCase(&quot;TipText&quot;)
+ Set oElement = _Element.GetSettings(True).getByIndex(_Index)
+ sTooltip = ScriptForge.SF_Utils._GetPropertyValue(oElement, &quot;Tooltip&quot;)
+ If Len(sTooltip) &gt; 0 Then _PropertyGet = sTooltip Else _PropertyGet = Iif(Len(_Label) &gt; 0, _Label, _AccessibleName)
+ Case UCase(&quot;Visible&quot;)
+ Set oElement = _Element.GetSettings(True).getByIndex(_Index)
+ _PropertyGet = ScriptForge.SF_Utils._GetPropertyValue(oElement, &quot;IsVisible&quot;)
+ Case UCase(&quot;Width&quot;)
+ If _Width &gt; 0 Then _PropertyGet = _Width else _PropertyGet = _GetPosition().Width
+ Case UCase(&quot;X&quot;)
+ _PropertyGet = _GetPosition().X
+ Case UCase(&quot;Y&quot;)
+ _PropertyGet = _GetPosition().Y
+ Case Else
+ _PropertyGet = Null
+ End Select
+
+Finally:
+ ScriptForge.SF_Utils._ExitFunction(cstThisSub)
+ Exit Function
+Catch:
+ GoTo Finally
+End Function &apos; SFWidgets.SF_ToolbarButton._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
+
+Dim bSet As Boolean &apos; Return value
+Dim oSettings As Object &apos; com.sun.star.container.XIndexAccess
+Dim vProperties As Variant &apos; Array of PropertyValues
+Dim bVisible As Boolean &apos; Actual Visible state
+
+Dim cstThisSub As String
+Const cstSubArgs = &quot;Value&quot;
+
+Check:
+ If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
+ bSet = False
+
+ cstThisSub = &quot;SFWidgets.ToolbarButton.set&quot; &amp; psProperty
+ ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
+
+Try:
+ bSet = True
+ Set oSettings = _Element.getSettings(True)
+ vProperties = oSettings.getByIndex(_Index)
+
+ Select Case UCase(psProperty)
+ Case UCase(&quot;OnClick&quot;)
+ If Not ScriptForge.SF_Utils._Validate(pvValue, &quot;Value&quot;, V_STRING) Then GoTo Catch
+ ScriptForge.SF_Utils._SetPropertyValue(vProperties, &quot;CommandURL&quot;, pvValue)
+ Case UCase(&quot;TipText&quot;)
+ If Not ScriptForge.SF_Utils._Validate(pvValue, &quot;Value&quot;, V_STRING) Then GoTo Catch
+ ScriptForge.SF_Utils._SetPropertyValue(vProperties, &quot;Tooltip&quot;, pvValue)
+ Case UCase(&quot;Visible&quot;)
+ If Not ScriptForge.SF_Utils._Validate(pvValue, &quot;Value&quot;, ScriptForge.V_BOOLEAN) Then GoTo Catch
+ ScriptForge.SF_Utils._SetPropertyValue(vProperties, &quot;IsVisible&quot;, pvValue)
+ Case Else
+ bSet = False
+ End Select
+
+ oSettings.replaceByIndex(_Index, vProperties)
+ _Element.setSettings(oSettings)
+
+Finally:
+ _PropertySet = bSet
+ ScriptForge.SF_Utils._ExitFunction(cstThisSub)
+ Exit Function
+Catch:
+ bSet = False
+ GoTo Finally
+End Function &apos; SFWidgets.SF_ToolbarButton._PropertySet
+
+REM -----------------------------------------------------------------------------
+Private Function _Repr() As String
+&apos;&apos;&apos; Convert the SF_ToolbarButton instance to a readable string, typically for debugging purposes (DebugPrint ...)
+&apos;&apos;&apos; Args:
+&apos;&apos;&apos; Return:
+&apos;&apos;&apos; &quot;[Toolbar]: Name, Type (dialogname)
+ _Repr = &quot;[ToolbarButton]: &quot; &amp; Iif(Len(_Label) &gt; 0, _Label, _AccessibleName) &amp; &quot; - &quot; &amp; _CommandURL
+
+End Function &apos; SFWidgets.SF_ToolbarButton._Repr
+
+REM ============================================ END OF SFWIDGETS.SF_TOOLBARBUTTON
+</script:module> \ No newline at end of file