mirror of
https://gitee.com/kekingcn/file-online-preview.git
synced 2026-03-14 21:23:47 +08:00
移除office-plugin, 使用新版jodconverter
This commit is contained in:
693
server/windows-office/share/basic/SFDialogs/SF_Dialog.xba
Normal file
693
server/windows-office/share/basic/SFDialogs/SF_Dialog.xba
Normal file
@@ -0,0 +1,693 @@
|
||||
<?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_Dialog" script:language="StarBasic" script:moduleType="normal">REM =======================================================================================================================
|
||||
REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
|
||||
REM === The SFDialogs library is one of the associated libraries. ===
|
||||
REM === Full documentation is available on https://help.libreoffice.org/ ===
|
||||
REM =======================================================================================================================
|
||||
|
||||
Option Compatible
|
||||
Option ClassModule
|
||||
|
||||
Option Explicit
|
||||
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
''' SF_Dialog
|
||||
''' =========
|
||||
''' Management of dialogs defined with the Basic IDE
|
||||
''' Each instance of the current class represents a single dialog box displayed to the user
|
||||
'''
|
||||
''' A dialog box can be displayed in modal or in non-modal modes
|
||||
''' In modal mode, the box is displayed and the execution of the macro process is suspended
|
||||
''' until one of the OK or Cancel buttons is pressed. In the meantime, other user actions
|
||||
''' executed on the box can trigger specific actions.
|
||||
''' In non-modal mode, the dialog box is "floating" on the user desktop and the execution
|
||||
''' of the macro process continues normally
|
||||
''' A dialog box disappears from memory after its explicit termination.
|
||||
'''
|
||||
''' Service invocation and usage:
|
||||
''' Dim myDialog As Object, lButton As Long
|
||||
''' Set myDialog = CreateScriptService("SFDialogs.Dialog", Container, Library, DialogName)
|
||||
''' ' Args:
|
||||
''' ' Container: "GlobalScope" for preinstalled libraries
|
||||
''' ' A window name (see its definition in the ScriptForge.UI service)
|
||||
''' ' "" (default) = the current document
|
||||
''' ' Library: The (case-sensitive) name of a library contained in the container
|
||||
''' ' Default = "Standard"
|
||||
''' ' DialogName: a case-sensitive string designating the dialog where it is about
|
||||
''' ' ... Initialize controls ...
|
||||
''' lButton = myDialog.Execute() ' Default mode = Modal
|
||||
''' If lButton = myDialog.OKBUTTON Then
|
||||
''' ' ... Process controls and do what is needed
|
||||
''' End If
|
||||
''' myDialog.Terminate()
|
||||
'''
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
REM ================================================================== EXCEPTIONS
|
||||
|
||||
Private Const DIALOGDEADERROR = "DIALOGDEADERROR"
|
||||
|
||||
REM ============================================================= PRIVATE MEMBERS
|
||||
|
||||
Private [Me] As Object
|
||||
Private [_Parent] As Object
|
||||
Private ObjectType As String ' Must be DIALOG
|
||||
Private ServiceName As String
|
||||
|
||||
' Dialog location
|
||||
Private _Container As String
|
||||
Private _Library As String
|
||||
Private _Name As String
|
||||
Private _CacheIndex As Long ' Index in cache storage
|
||||
|
||||
' Dialog UNO references
|
||||
Private _DialogProvider As Object ' com.sun.star.io.XInputStreamProvider
|
||||
Private _DialogControl As Object ' com.sun.star.awt.XControl - stardiv.Toolkit.UnoDialogControl
|
||||
Private _DialogModel As Object ' com.sun.star.awt.XControlModel - stardiv.Toolkit.UnoControlDialogModel
|
||||
|
||||
' Dialog attributes
|
||||
Private _Displayed As Boolean ' True after Execute()
|
||||
Private _Modal As Boolean ' Set by Execute()
|
||||
|
||||
REM ============================================================ MODULE CONSTANTS
|
||||
|
||||
Private Const OKBUTTON = 1
|
||||
Private Const CANCELBUTTON = 0
|
||||
|
||||
REM ===================================================== CONSTRUCTOR/DESTRUCTOR
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Private Sub Class_Initialize()
|
||||
Set [Me] = Nothing
|
||||
Set [_Parent] = Nothing
|
||||
ObjectType = "DIALOG"
|
||||
ServiceName = "SFDialogs.Dialog"
|
||||
_Container = ""
|
||||
_Library = ""
|
||||
_Name = ""
|
||||
_CacheIndex = -1
|
||||
Set _DialogProvider = Nothing
|
||||
Set _DialogControl = Nothing
|
||||
Set _DialogModel = Nothing
|
||||
_Displayed = False
|
||||
_Modal = True
|
||||
End Sub ' SFDialogs.SF_Dialog Constructor
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Private Sub Class_Terminate()
|
||||
Call Class_Initialize()
|
||||
End Sub ' SFDialogs.SF_Dialog Destructor
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function Dispose() As Variant
|
||||
If _CacheIndex >= 0 Then Terminate()
|
||||
Call Class_Terminate()
|
||||
Set Dispose = Nothing
|
||||
End Function ' SFDialogs.SF_Dialog Explicit Destructor
|
||||
|
||||
REM ================================================================== PROPERTIES
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Get Caption() As Variant
|
||||
''' The Caption property refers to the title of the dialog
|
||||
Caption = _PropertyGet("Caption")
|
||||
End Property ' SFDialogs.SF_Dialog.Caption (get)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Let Caption(Optional ByVal pvCaption As Variant)
|
||||
''' Set the updatable property Caption
|
||||
_PropertySet("Caption", pvCaption)
|
||||
End Property ' SFDialogs.SF_Dialog.Caption (let)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Get Height() As Variant
|
||||
''' The Height property refers to the height of the dialog box
|
||||
Height = _PropertyGet("Height")
|
||||
End Property ' SFDialogs.SF_Dialog.Height (get)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Let Height(Optional ByVal pvHeight As Variant)
|
||||
''' Set the updatable property Height
|
||||
_PropertySet("Height", pvHeight)
|
||||
End Property ' SFDialogs.SF_Dialog.Height (let)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Get Modal() As Boolean
|
||||
''' The Modal property specifies if the dialog box has been executed in modal mode
|
||||
Modal = _PropertyGet("Modal")
|
||||
End Property ' SFDialogs.SF_Dialog.Modal (get)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Get Name() As String
|
||||
''' Return the name of the actual dialog
|
||||
Name = _PropertyGet("Name")
|
||||
End Property ' SFDialogs.SF_Dialog.Name
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Get Page() As Variant
|
||||
''' A dialog may have several pages that can be traversed by the user step by step. The Page property of the Dialog object defines which page of the dialog is active.
|
||||
''' The Page property of a control defines the page of the dialog on which the control is visible.
|
||||
''' For example, if a control has a page value of 1, it is only visible on page 1 of the dialog.
|
||||
''' If the page value of the dialog is increased from 1 to 2, then all controls with a page value of 1 disappear and all controls with a page value of 2 become visible.
|
||||
Page = _PropertyGet("Page")
|
||||
End Property ' SFDialogs.SF_Dialog.Page (get)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Let Page(Optional ByVal pvPage As Variant)
|
||||
''' Set the updatable property Page
|
||||
_PropertySet("Page", pvPage)
|
||||
End Property ' SFDialogs.SF_Dialog.Page (let)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Get Visible() As Variant
|
||||
''' The Visible property is False before the Execute() statement
|
||||
Visible = _PropertyGet("Visible")
|
||||
End Property ' SFDialogs.SF_Dialog.Visible (get)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Let Visible(Optional ByVal pvVisible As Variant)
|
||||
''' Set the updatable property Visible
|
||||
_PropertySet("Visible", pvVisible)
|
||||
End Property ' SFDialogs.SF_Dialog.Visible (let)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Get Width() As Variant
|
||||
''' The Width property refers to the Width of the dialog box
|
||||
Width = _PropertyGet("Width")
|
||||
End Property ' SFDialogs.SF_Dialog.Width (get)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Let Width(Optional ByVal pvWidth As Variant)
|
||||
''' Set the updatable property Width
|
||||
_PropertySet("Width", pvWidth)
|
||||
End Property ' SFDialogs.SF_Dialog.Width (let)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Get XDialogModel() As Object
|
||||
''' The XDialogModel property returns the model UNO object of the dialog
|
||||
XDialogModel = _PropertyGet("XDialogModel")
|
||||
End Property ' SFDialogs.SF_Dialog.XDialogModel (get)
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Property Get XDialogView() As Object
|
||||
''' The XDialogView property returns the view UNO object of the dialog
|
||||
XDialogView = _PropertyGet("XDialogView")
|
||||
End Property ' SFDialogs.SF_Dialog.XDialogView (get)
|
||||
|
||||
REM ===================================================================== METHODS
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function Activate() As Boolean
|
||||
''' Set the focus on the current dialog instance
|
||||
''' Probably called from after an event occurrence or to focus on a non-modal dialog
|
||||
''' Args:
|
||||
''' Returns:
|
||||
''' True if focusing is successful
|
||||
''' Example:
|
||||
''' Dim oDlg As Object
|
||||
''' Set oDlg = CreateScriptService(,, "myDialog") ' Dialog stored in current document's standard library
|
||||
''' oDlg.Activate()
|
||||
|
||||
Dim bActivate As Boolean ' Return value
|
||||
Const cstThisSub = "SFDialogs.Dialog.Activate"
|
||||
Const cstSubArgs = ""
|
||||
|
||||
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
|
||||
bActivate = False
|
||||
|
||||
Check:
|
||||
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
|
||||
If Not _IsStillAlive() Then GoTo Finally
|
||||
End If
|
||||
Try:
|
||||
If Not IsNull(_DialogControl) Then
|
||||
_DialogControl.setFocus()
|
||||
bActivate = True
|
||||
End If
|
||||
|
||||
Finally:
|
||||
Activate = bActivate
|
||||
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
|
||||
Exit Function
|
||||
Catch:
|
||||
GoTo Finally
|
||||
End Function ' SFDialogs.SF_Dialog.Activate
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function Controls(Optional ByVal ControlName As Variant) As Variant
|
||||
''' Return either
|
||||
''' - the list of the controls contained in the dialog
|
||||
''' - a dialog control object based on its name
|
||||
''' Args:
|
||||
''' ControlName: a valid control name as a case-sensitive string. If absent the list is returned
|
||||
''' Returns:
|
||||
''' A zero-base array of strings if ControlName is absent
|
||||
''' An instance of the SF_DialogControl class if ControlName exists
|
||||
''' Exceptions:
|
||||
''' ControlName is invalid
|
||||
''' Example:
|
||||
''' Dim myDialog As Object, myList As Variant, myControl As Object
|
||||
''' Set myDialog = CreateScriptService("SFDialogs.Dialog", Container, Library, DialogName)
|
||||
''' myList = myDialog.Controls()
|
||||
''' Set myControl = myDialog.Controls("myTextBox")
|
||||
|
||||
Dim oControl As Object ' The new control class instance
|
||||
Const cstThisSub = "SFDialogs.Dialog.Controls"
|
||||
Const cstSubArgs = "[ControlName]"
|
||||
|
||||
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
|
||||
|
||||
Check:
|
||||
If IsMissing(ControlName) Or IsEmpty(ControlName) Then ControlName = ""
|
||||
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
|
||||
If Not _IsStillAlive() Then GoTo Finally
|
||||
If Not ScriptForge.SF_Utils._Validate(ControlName, "ControlName", V_STRING) Then GoTo Finally
|
||||
End If
|
||||
|
||||
Try:
|
||||
If Len(ControlName) = 0 Then
|
||||
Controls = _DialogModel.getElementNames()
|
||||
Else
|
||||
If Not _DialogModel.hasByName(ControlName) Then GoTo CatchNotFound
|
||||
' Create the new dialog control class instance
|
||||
Set oControl = New SF_DialogControl
|
||||
With oControl
|
||||
._Name = ControlName
|
||||
Set .[Me] = oControl
|
||||
Set .[_Parent] = [Me]
|
||||
._DialogName = _Name
|
||||
Set ._ControlModel = _DialogModel.getByName(ControlName)
|
||||
Set ._ControlView = _DialogControl.getControl(ControlName)
|
||||
._Initialize()
|
||||
End With
|
||||
Set Controls = oControl
|
||||
End If
|
||||
|
||||
Finally:
|
||||
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
|
||||
Exit Function
|
||||
Catch:
|
||||
GoTo Finally
|
||||
CatchNotFound:
|
||||
ScriptForge.SF_Utils._Validate(ControlName, "ControlName", V_STRING, _DialogModel.getElementNames())
|
||||
GoTo Finally
|
||||
End Function ' SFDialogs.SF_Dialog.Controls
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Sub EndExecute(Optional ByVal ReturnValue As Variant)
|
||||
''' Ends the display of a modal dialog and gives back the argument
|
||||
''' as return value for the current Execute() action
|
||||
''' EndExecute is usually contained in the processing of a macro
|
||||
''' triggered by a dialog or control event
|
||||
''' Args:
|
||||
''' ReturnValue: must be numeric. The value passed to the running Execute() method
|
||||
''' Example:
|
||||
''' Sub OnEvent(poEvent As Variant)
|
||||
''' Dim oDlg As Object
|
||||
''' Set oDlg = CreateScriptService("SFDialogs.DialogEvent", poEvent)
|
||||
''' oDlg.EndExecute(25)
|
||||
''' End Sub
|
||||
|
||||
Dim lExecute As Long ' Alias of ReturnValue
|
||||
Const cstThisSub = "SFDialogs.Dialog.EndExecute"
|
||||
Const cstSubArgs = "ReturnValue"
|
||||
|
||||
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
|
||||
|
||||
Check:
|
||||
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
|
||||
If Not _IsStillAlive() Then GoTo Finally
|
||||
If Not ScriptForge.SF_Utils._Validate(ReturnValue, "ReturnValue", V_NUMERIC) Then GoTo Finally
|
||||
End If
|
||||
|
||||
Try:
|
||||
lExecute = CLng(ReturnValue)
|
||||
Call _DialogControl.endDialog(lExecute)
|
||||
|
||||
Finally:
|
||||
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
|
||||
Exit Sub
|
||||
Catch:
|
||||
GoTo Finally
|
||||
End Sub ' SFDialogs.SF_Dialog.EndExecute
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function Execute(Optional ByVal Modal As Variant) As Long
|
||||
''' Display the dialog and wait for its termination by the user
|
||||
''' Args:
|
||||
''' Modal: False when non-modal dialog. Default = True
|
||||
''' Returns:
|
||||
''' 0 = Cancel button pressed
|
||||
''' 1 = OK button pressed
|
||||
''' Otherwise: the dialog stopped with an EndExecute statement executed from a dialog or control event
|
||||
''' Example:
|
||||
''' Dim oDlg As Object, lReturn As Long
|
||||
''' Set oDlg = CreateScriptService(,, "myDialog") ' Dialog stored in current document's standard library
|
||||
''' lReturn = oDlg.Execute()
|
||||
''' Select Case lReturn
|
||||
|
||||
Dim lExecute As Long ' Return value
|
||||
Const cstThisSub = "SFDialogs.Dialog.Execute"
|
||||
Const cstSubArgs = "[Modal=True]"
|
||||
|
||||
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
|
||||
lExecute = -1
|
||||
|
||||
Check:
|
||||
If IsMissing(Modal) Or IsEmpty(Modal) Then Modal = True
|
||||
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
|
||||
If Not _IsStillAlive() Then GoTo Finally
|
||||
If Not ScriptForge.SF_Utils._Validate(Modal, "Modal", V_BOOLEAN) Then GoTo Finally
|
||||
End If
|
||||
|
||||
Try:
|
||||
If Modal Then
|
||||
_Modal = True
|
||||
_Displayed = True
|
||||
lExecute = _DialogControl.execute()
|
||||
Select Case lExecute
|
||||
Case 1 : lExecute = OKBUTTON
|
||||
Case 0 : lExecute = CANCELBUTTON
|
||||
Case Else
|
||||
End Select
|
||||
_Displayed = False
|
||||
Else
|
||||
_Modal = False
|
||||
_Displayed = True
|
||||
_DialogModel.DesktopAsParent = True
|
||||
_DialogControl.setVisible(True)
|
||||
lExecute = 0
|
||||
End If
|
||||
|
||||
Finally:
|
||||
Execute = lExecute
|
||||
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
|
||||
Exit Function
|
||||
Catch:
|
||||
GoTo Finally
|
||||
End Function ' SFDialogs.SF_Dialog.Execute
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function GetProperty(Optional ByVal PropertyName As Variant) As Variant
|
||||
''' Return the actual value of the given property
|
||||
''' Args:
|
||||
''' PropertyName: the name of the property as a string
|
||||
''' Returns:
|
||||
''' The actual value of the property
|
||||
''' Exceptions:
|
||||
''' ARGUMENTERROR The property does not exist
|
||||
''' Examples:
|
||||
''' oDlg.GetProperty("Caption")
|
||||
|
||||
Const cstThisSub = "Model.GetProperty"
|
||||
Const cstSubArgs = ""
|
||||
|
||||
If 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, "PropertyName", V_STRING, Properties()) Then GoTo Catch
|
||||
End If
|
||||
|
||||
Try:
|
||||
GetProperty = _PropertyGet(PropertyName)
|
||||
|
||||
Finally:
|
||||
SF_Utils._ExitFunction(cstThisSub)
|
||||
Exit Function
|
||||
Catch:
|
||||
GoTo Finally
|
||||
End Function ' SFDialogs.SF_Dialog.GetProperty
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function Methods() As Variant
|
||||
''' Return the list of public methods of the Model service as an array
|
||||
|
||||
Methods = Array( _
|
||||
"Activate" _
|
||||
, "Controls" _
|
||||
, "EndExecute" _
|
||||
, "Execute" _
|
||||
, "Terminate" _
|
||||
)
|
||||
|
||||
End Function ' SFDialogs.SF_Dialog.Methods
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function Properties() As Variant
|
||||
''' Return the list or properties of the Timer class as an array
|
||||
|
||||
Properties = Array( _
|
||||
"Caption" _
|
||||
, "Height" _
|
||||
, "Modal" _
|
||||
, "Name" _
|
||||
, "Page" _
|
||||
, "Visible" _
|
||||
, "Width" _
|
||||
)
|
||||
|
||||
End Function ' SFDialogs.SF_Dialog.Properties
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function SetProperty(Optional ByVal PropertyName As Variant _
|
||||
, Optional ByRef Value As Variant _
|
||||
) As Boolean
|
||||
''' Set a new value to the given property
|
||||
''' Args:
|
||||
''' PropertyName: the name of the property as a string
|
||||
''' Value: its new value
|
||||
''' Exceptions
|
||||
''' ARGUMENTERROR The property does not exist
|
||||
|
||||
Const cstThisSub = "SFDialogs.Dialog.SetProperty"
|
||||
Const cstSubArgs = "PropertyName, Value"
|
||||
|
||||
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, "PropertyName", 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 ' SFDialogs.SF_Dialog.SetProperty
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function Terminate() As Boolean
|
||||
''' Terminate the dialog service for the current dialog instance
|
||||
''' After termination any action on the current instance will be ignored
|
||||
''' Args:
|
||||
''' Returns:
|
||||
''' True if termination is successful
|
||||
''' Example:
|
||||
''' Dim oDlg As Object, lReturn As Long
|
||||
''' Set oDlg = CreateScriptService(,, "myDialog") ' Dialog stored in current document's standard library
|
||||
''' lreturn = oDlg.Execute()
|
||||
''' Select Case lReturn
|
||||
''' ' ...
|
||||
''' End Select
|
||||
''' oDlg.Terminate()
|
||||
|
||||
Dim bTerminate As Boolean ' Return value
|
||||
Const cstThisSub = "SFDialogs.Dialog.Terminate"
|
||||
Const cstSubArgs = ""
|
||||
|
||||
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
|
||||
bTerminate = False
|
||||
|
||||
Check:
|
||||
If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
|
||||
If Not _IsStillAlive() Then GoTo Finally
|
||||
End If
|
||||
Try:
|
||||
_DialogControl.dispose()
|
||||
Set _DialogControl = Nothing
|
||||
SF_Register._CleanCacheEntry(_CacheIndex)
|
||||
_CacheIndex = -1
|
||||
Dispose()
|
||||
|
||||
bTerminate = True
|
||||
|
||||
Finally:
|
||||
Terminate = bTerminate
|
||||
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
|
||||
Exit Function
|
||||
Catch:
|
||||
GoTo Finally
|
||||
End Function ' SFDialogs.SF_Dialog.Terminate
|
||||
|
||||
REM =========================================================== PRIVATE FUNCTIONS
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Sub _Initialize()
|
||||
''' Complete the object creation process:
|
||||
''' - Initialization of private members
|
||||
''' - Creation of the dialog graphical interface
|
||||
''' - Addition of the new object in the Dialogs buffer
|
||||
|
||||
Try:
|
||||
' Create the graphical interface
|
||||
Set _DialogControl = CreateUnoDialog(_DialogProvider)
|
||||
Set _DialogModel = _DialogControl.Model
|
||||
|
||||
' Add dialog reference to cache
|
||||
_CacheIndex = SF_Register._AddDialogToCache(_DialogControl, [Me])
|
||||
85
|
||||
Finally:
|
||||
Exit Sub
|
||||
End Sub ' SFDialogs.SF_Dialog._Initialize
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Private Function _IsStillAlive(Optional ByVal pbError As Boolean) As Boolean
|
||||
''' Return True if the dialog service is still active
|
||||
''' If dead the actual instance is disposed. The execution is cancelled when pbError = True (default)
|
||||
''' Args:
|
||||
''' pbError: if True (default), raise a fatal error
|
||||
|
||||
Dim bAlive As Boolean ' Return value
|
||||
Dim sDialog As String ' Alias of DialogName
|
||||
|
||||
Check:
|
||||
On Local Error GoTo Catch ' Anticipate DisposedException errors or alike
|
||||
If IsMissing(pbError) Then pbError = True
|
||||
|
||||
Try:
|
||||
bAlive = ( Not IsNull(_DialogProvider) And Not IsNull(_DialogControl) )
|
||||
If Not bAlive Then GoTo Catch
|
||||
|
||||
Finally:
|
||||
_IsStillAlive = bAlive
|
||||
Exit Function
|
||||
Catch:
|
||||
bAlive = False
|
||||
On Error GoTo 0
|
||||
sDialog = _Name
|
||||
Dispose()
|
||||
If pbError Then ScriptForge.SF_Exception.RaiseFatal(DIALOGDEADERROR, sDialog)
|
||||
GoTo Finally
|
||||
End Function ' SFDialogs.SF_Dialog._IsStillAlive
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Private Function _PropertyGet(Optional ByVal psProperty As String) As Variant
|
||||
''' Return the value of the named property
|
||||
''' Args:
|
||||
''' psProperty: the name of the property
|
||||
|
||||
Static oSession As Object ' Alias of SF_Session
|
||||
Dim cstThisSub As String
|
||||
Const cstSubArgs = ""
|
||||
|
||||
cstThisSub = "SFDialogs.Dialog.get" & psProperty
|
||||
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
|
||||
|
||||
ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
|
||||
If Not _IsStillAlive() Then GoTo Finally
|
||||
|
||||
If IsNull(oSession) Then Set oSession = ScriptForge.SF_Services.CreateScriptService("Session")
|
||||
Select Case psProperty
|
||||
Case "Caption"
|
||||
If oSession.HasUNOProperty(_DialogModel, "Title") Then _PropertyGet = _DialogModel.Title
|
||||
Case "Height"
|
||||
If oSession.HasUNOProperty(_DialogModel, "Height") Then _PropertyGet = _DialogModel.Height
|
||||
Case "Modal"
|
||||
_PropertyGet = _Modal
|
||||
Case "Name"
|
||||
_PropertyGet = _Name
|
||||
Case "Page"
|
||||
If oSession.HasUNOProperty(_DialogModel, "Step") Then _PropertyGet = _DialogModel.Step
|
||||
Case "Visible"
|
||||
If oSession.HasUnoMethod(_DialogControl, "isVisible") Then _PropertyGet = CBool(_DialogControl.isVisible())
|
||||
Case "Width"
|
||||
If oSession.HasUNOProperty(_DialogModel, "Width") Then _PropertyGet = _DialogModel.Width
|
||||
Case "XDialogModel"
|
||||
Set _PropertyGet = _DialogModel
|
||||
Case "XDialogView"
|
||||
Set _PropertyGet = _DialogControl
|
||||
Case Else
|
||||
_PropertyGet = Null
|
||||
End Select
|
||||
|
||||
Finally:
|
||||
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
|
||||
Exit Function
|
||||
Catch:
|
||||
GoTo Finally
|
||||
End Function ' SFDialogs.SF_Dialog._PropertyGet
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Private Function _PropertySet(Optional ByVal psProperty As String _
|
||||
, Optional ByVal pvValue As Variant _
|
||||
) As Boolean
|
||||
''' Set the new value of the named property
|
||||
''' Args:
|
||||
''' psProperty: the name of the property
|
||||
''' pvValue: the new value of the given property
|
||||
''' Returns:
|
||||
''' True if successful
|
||||
|
||||
Dim bSet As Boolean ' Return value
|
||||
Static oSession As Object ' Alias of SF_Session
|
||||
Dim cstThisSub As String
|
||||
Const cstSubArgs = "Value"
|
||||
|
||||
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
|
||||
bSet = False
|
||||
|
||||
cstThisSub = "SFDialogs.Dialog.set" & psProperty
|
||||
ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
|
||||
If Not _IsStillAlive() Then GoTo Finally
|
||||
|
||||
If IsNull(oSession) Then Set oSession = ScriptForge.SF_Services.CreateScriptService("Session")
|
||||
bSet = True
|
||||
Select Case UCase(psProperty)
|
||||
Case UCase("Caption")
|
||||
If Not ScriptForge.SF_Utils._Validate(pvValue, "Caption", V_STRING) Then GoTo Finally
|
||||
If oSession.HasUNOProperty(_DialogModel, "Title") Then _DialogModel.Title = pvValue
|
||||
Case UCase("Height")
|
||||
If Not ScriptForge.SF_Utils._Validate(pvValue, "Height", ScriptForge.V_NUMERIC) Then GoTo Finally
|
||||
If oSession.HasUNOProperty(_DialogModel, "Height") Then _DialogModel.Height = pvValue
|
||||
Case UCase("Page")
|
||||
If Not ScriptForge.SF_Utils._Validate(pvValue, "Page", ScriptForge.V_NUMERIC) Then GoTo Finally
|
||||
If oSession.HasUNOProperty(_DialogModel, "Step") Then _DialogModel.Step = CLng(pvValue)
|
||||
Case UCase("Visible")
|
||||
If Not ScriptForge.SF_Utils._Validate(pvValue, "Visible", ScriptForge.V_BOOLEAN) Then GoTo Finally
|
||||
If oSession.HasUnoMethod(_DialogControl, "setVisible") Then _DialogControl.setVisible(pvValue)
|
||||
Case UCase("Width")
|
||||
If Not ScriptForge.SF_Utils._Validate(pvValue, "Width", ScriptForge.V_NUMERIC) Then GoTo Finally
|
||||
If oSession.HasUNOProperty(_DialogModel, "Width") Then _DialogModel.Width = pvValue
|
||||
Case Else
|
||||
bSet = False
|
||||
End Select
|
||||
|
||||
Finally:
|
||||
_PropertySet = bSet
|
||||
ScriptForge.SF_Utils._ExitFunction(cstThisSub)
|
||||
Exit Function
|
||||
Catch:
|
||||
GoTo Finally
|
||||
End Function ' SFDialogs.SF_Dialog._PropertySet
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Private Function _Repr() As String
|
||||
''' Convert the Model instance to a readable string, typically for debugging purposes (DebugPrint ...)
|
||||
''' Args:
|
||||
''' Return:
|
||||
''' "[DIALOG]: Container.Library.Name"
|
||||
|
||||
_Repr = "[DIALOG]: " & _Container & "." & _Library & "." & _Name
|
||||
|
||||
End Function ' SFDialogs.SF_Dialog._Repr
|
||||
|
||||
REM ============================================ END OF SFDIALOGS.SF_DIALOG
|
||||
</script:module>
|
||||
1099
server/windows-office/share/basic/SFDialogs/SF_DialogControl.xba
Normal file
1099
server/windows-office/share/basic/SFDialogs/SF_DialogControl.xba
Normal file
File diff suppressed because it is too large
Load Diff
329
server/windows-office/share/basic/SFDialogs/SF_Register.xba
Normal file
329
server/windows-office/share/basic/SFDialogs/SF_Register.xba
Normal file
@@ -0,0 +1,329 @@
|
||||
<?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 SFDialogs library is one of the associated libraries. ===
|
||||
REM === Full documentation is available on https://help.libreoffice.org/ ===
|
||||
REM =======================================================================================================================
|
||||
|
||||
Option Compatible
|
||||
Option Explicit
|
||||
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
''' SF_Register
|
||||
''' ===========
|
||||
''' The ScriptForge framework includes
|
||||
''' the master ScriptForge library
|
||||
''' a number of "associated" libraries SF*
|
||||
''' any user/contributor extension wanting to fit into the framework
|
||||
'''
|
||||
''' The main methods in this module allow the current library to cling to ScriptForge
|
||||
''' - RegisterScriptServices
|
||||
''' Register the list of services implemented by the current library
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
REM ================================================================= DEFINITIONS
|
||||
|
||||
''' Event management of dialogs requires to being able to rebuild a Dialog object
|
||||
''' from its com.sun.star.awt.XControl - stardiv.Toolkit.UnoDialogControl UNO instance
|
||||
''' For that purpose, the started dialogs are buffered in a global array of _DialogCache types
|
||||
|
||||
Type _DialogCache
|
||||
Terminated As Boolean
|
||||
XUnoDialog As Object
|
||||
BasicDialog As Object
|
||||
End Type
|
||||
|
||||
REM ================================================================== EXCEPTIONS
|
||||
|
||||
Private Const DIALOGNOTFOUNDERROR = "DIALOGNOTFOUNDERROR"
|
||||
|
||||
REM ============================================================== PUBLIC METHODS
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Sub RegisterScriptServices() As Variant
|
||||
''' Register into ScriptForge the list of the services implemented by the current library
|
||||
''' Each library pertaining to the framework must implement its own version of this method
|
||||
'''
|
||||
''' It consists in successive calls to the RegisterService() and RegisterEventManager() methods
|
||||
''' with 2 arguments:
|
||||
''' ServiceName: the name of the service as a case-insensitive string
|
||||
''' ServiceReference: the reference as an object
|
||||
''' If the reference refers to a module, then return the module as an object:
|
||||
''' GlobalScope.Library.Module
|
||||
''' If the reference is a class instance, then return a string referring to the method
|
||||
''' containing the New statement creating the instance
|
||||
''' "libraryname.modulename.function"
|
||||
|
||||
With GlobalScope.ScriptForge.SF_Services
|
||||
.RegisterService("Dialog", "SFDialogs.SF_Register._NewDialog") ' Reference to the function initializing the service
|
||||
.RegisterEventManager("DialogEvent", "SFDialogs.SF_Register._EventManager") ' Reference to the events manager
|
||||
'TODO
|
||||
End With
|
||||
|
||||
End Sub ' SFDialogs.SF_Register.RegisterScriptServices
|
||||
|
||||
REM =========================================================== PRIVATE FUNCTIONS
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Private Function _AddDialogToCache(ByRef pvUnoDialog As Object _
|
||||
, ByRef pvBasicDialog As Object _
|
||||
) As Long
|
||||
''' Add a new entry in the cache array with the references of the actual dialog
|
||||
''' If relevant, the last entry of the cache is reused.
|
||||
''' The cache is located in the global _SF_ variable
|
||||
''' Args:
|
||||
''' pvUnoDialog: the com.sun.star.awt.XControl - stardiv.Toolkit.UnoDialogControl of the dialog box
|
||||
''' pvBasicDialog: its corresponding Basic object
|
||||
''' Returns:
|
||||
''' The index of the new or modified entry
|
||||
|
||||
Dim vCache As New _DialogCache ' Entry to be added
|
||||
Dim lIndex As Long ' UBound of _SF_.SFDialogs
|
||||
Dim vCacheArray As Variant ' Alias of _SF_.SFDialogs
|
||||
|
||||
Try:
|
||||
vCacheArray = _SF_.SFDialogs
|
||||
|
||||
If IsEmpty(vCacheArray) Then vCacheArray = Array()
|
||||
lIndex = UBound(vCacheArray)
|
||||
If lIndex < LBound(vCacheArray) Then
|
||||
ReDim vCacheArray(0 To 0)
|
||||
lIndex = 0
|
||||
ElseIf Not vCacheArray(lIndex).Terminated Then ' Often last entry can be reused
|
||||
lIndex = lIndex + 1
|
||||
ReDim Preserve vCacheArray(0 To lIndex)
|
||||
End If
|
||||
|
||||
With vCache
|
||||
.Terminated = False
|
||||
Set .XUnoDialog = pvUnoDialog
|
||||
Set .BasicDialog = pvBasicDialog
|
||||
End With
|
||||
vCacheArray(lIndex) = vCache
|
||||
|
||||
_SF_.SFDialogs = vCacheArray
|
||||
|
||||
Finally:
|
||||
_AddDialogToCache = lIndex
|
||||
Exit Function
|
||||
End Function ' SFDialogs.SF_Dialog._AddDialogToCache
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Private Sub _CleanCacheEntry(ByVal plIndex As Long)
|
||||
''' Clean the plIndex-th entry in the dialogs cache
|
||||
''' Args:
|
||||
''' plIndex: must fit within the actual boundaries of the cache, otherwise the request is ignored
|
||||
|
||||
Dim vCache As New _DialogCache ' Cleaned entry
|
||||
|
||||
With _SF_
|
||||
If Not IsArray(.SFDialogs) Then Exit Sub
|
||||
If plIndex < LBound(.SFDialogs) Or plIndex > UBound(.SFDialogs) Then Exit Sub
|
||||
|
||||
With vCache
|
||||
.Terminated = True
|
||||
Set .XUnoDialog = Nothing
|
||||
Set .BasicDialog = Nothing
|
||||
End With
|
||||
.SFDialogs(plIndex) = vCache
|
||||
End With
|
||||
|
||||
Finally:
|
||||
Exit Sub
|
||||
End Sub ' SFDialogs.SF_Dialog._CleanCacheEntry
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function _EventManager(Optional ByRef pvArgs As Variant) As Object
|
||||
''' Returns a Dialog or DialogControl object corresponding with the Basic dialog
|
||||
''' which triggered the event in argument
|
||||
''' This method should be triggered only thru the invocation of CreateScriptService
|
||||
''' Args:
|
||||
''' pvEvent: com.sun.star.xxx
|
||||
''' Returns:
|
||||
''' the output of a Dialog or DialogControl service or Nothing
|
||||
''' Example:
|
||||
''' Sub TriggeredByEvent(ByRef poEvent As Object)
|
||||
''' Dim oDlg As Object
|
||||
''' Set oDlg = CreateScriptService("SFDialogs.DialogEvent", poEvent)
|
||||
''' If Not IsNull(oDlg) Then
|
||||
''' ' ... (a valid dialog or one of its controls has been identified)
|
||||
''' End Sub
|
||||
|
||||
Dim oSource As Object ' Return value
|
||||
Dim oEventSource As Object ' Event UNO source
|
||||
Dim vEvent As Variant ' Alias of pvArgs(0)
|
||||
Dim sSourceType As String ' Implementation name of event source
|
||||
Dim oDialog As Object ' com.sun.star.awt.XControl - stardiv.Toolkit.UnoDialogControl
|
||||
Dim bControl As Boolean ' True when control event
|
||||
|
||||
' Never abort while an event is processed
|
||||
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Finally
|
||||
Set oSource = Nothing
|
||||
|
||||
Check:
|
||||
If IsMissing(pvArgs) Or IsEmpty(pvArgs) Then pvArgs = Array()
|
||||
If UBound(pvArgs) >= 0 Then vEvent = pvArgs(0) Else vEvent = Empty
|
||||
If VarType(vEvent) <> ScriptForge.V_OBJECT Then GoTo Finally
|
||||
If Not ScriptForge.SF_Session.HasUnoProperty(vEvent, "Source") Then GoTo Finally
|
||||
|
||||
Try:
|
||||
Set oEventSource = vEvent.Source
|
||||
sSourceType = ScriptForge.SF_Session.UnoObjectType(oEventSource)
|
||||
|
||||
Set oDialog = Nothing
|
||||
Select Case True
|
||||
Case sSourceType = "stardiv.Toolkit.UnoDialogControl" ' A dialog
|
||||
' Search the dialog in the cache
|
||||
Set oDialog = _FindDialogInCache(oEventSource)
|
||||
bControl = False
|
||||
Case Left(sSourceType, 16) = "stardiv.Toolkit." ' A dialog control
|
||||
Set oDialog = _FindDialogInCache(oEventSource.Context)
|
||||
bControl = True
|
||||
Case Else
|
||||
End Select
|
||||
|
||||
If Not IsNull(oDialog) Then
|
||||
If bControl Then Set oSource = oDialog.Controls(oEventSource.Model.Name) Else Set oSource = oDialog
|
||||
End If
|
||||
|
||||
Finally:
|
||||
Set _EventManager = oSource
|
||||
Exit Function
|
||||
End Function ' SFDialogs.SF_Documents._EventManager
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Private Function _FindDialogInCache(ByRef poDialog As Object) As Object
|
||||
''' Find the dialog based on its XUnoDialog
|
||||
''' The dialog must not be terminated
|
||||
''' Returns:
|
||||
''' The corresponding Basic dialog part or Nothing
|
||||
|
||||
Dim oBasicDialog As Object ' Return value
|
||||
Dim oCache As _DialogCache ' Entry in the cache
|
||||
|
||||
Set oBasicDialog = Nothing
|
||||
For Each oCache In _SF_.SFDialogs
|
||||
If EqualUnoObjects(poDialog, oCache.XUnoDialog) And Not oCache.Terminated Then
|
||||
Set oBasicDialog = oCache.BasicDialog
|
||||
Exit For
|
||||
End If
|
||||
Next oCache
|
||||
|
||||
Set _FindDialogInCache = oBasicDialog
|
||||
|
||||
End Function ' SFDialogs.SF_Documents._FindDialogInCache
|
||||
|
||||
REM -----------------------------------------------------------------------------
|
||||
Public Function _NewDialog(Optional ByVal pvArgs As Variant) As Object
|
||||
''' Create a new instance of the SF_Dialog class
|
||||
' Args:
|
||||
''' Container: either "GlobalScope" or a WindowName. Default = the active window
|
||||
''' see the definition of WindowName in the description of the UI service
|
||||
''' Library: the name of the library hosting the dialog. Default = "Standard"
|
||||
''' DialogName: The name of the dialog
|
||||
''' Library and dialog names are case-sensitive
|
||||
''' Returns: the instance or Nothing
|
||||
|
||||
Dim oDialog As Object ' Return value
|
||||
Dim vContainer As Variant ' Alias of pvArgs(0)
|
||||
Dim vLibrary As Variant ' Alias of pvArgs(1)
|
||||
Dim vDialogName As Variant ' Alias of pvArgs(2)
|
||||
Dim oLibraries As Object ' com.sun.star.comp.sfx2.DialogLibraryContainer
|
||||
Dim oLibrary As Object ' com.sun.star.container.XNameAccess
|
||||
Dim o_DialogProvider As Object ' com.sun.star.io.XInputStreamProvider
|
||||
Dim oEnum As Object ' com.sun.star.container.XEnumeration
|
||||
Dim oComp As Object ' com.sun.star.lang.XComponent
|
||||
Dim vWindow As Window ' A single component
|
||||
Dim oUi As Object ' "UI" service
|
||||
Dim bFound As Boolean ' True if WindowName is found on the desktop
|
||||
Const cstService = "SFDialogs.Dialog"
|
||||
Const cstGlobal = "GlobalScope"
|
||||
|
||||
If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
|
||||
|
||||
Check:
|
||||
If IsMissing(pvArgs) Or IsEmpty(pvArgs) Then pvArgs = Array()
|
||||
If Not IsArray(pvArgs) Then pvArgs = Array(pvArgs) ' Needed when _NewDialog called from _EventManager
|
||||
If UBound(pvArgs) >= 0 Then vContainer = pvArgs(0) Else vContainer = ""
|
||||
If UBound(pvArgs) >= 1 Then vLibrary = pvArgs(1)
|
||||
If IsEmpty(vLibrary) Then vLibrary = "Standard"
|
||||
If UBound(pvArgs) >= 2 Then vDialogName = pvArgs(2) Else vDialogName = Empty ' Use Empty to force mandatory status
|
||||
If Not ScriptForge.SF_Utils._Validate(vContainer, "Container", Array(V_STRING, ScriptForge.V_OBJECT)) Then GoTo Finally
|
||||
If Not ScriptForge.SF_Utils._Validate(vLibrary, "Library", V_STRING) Then GoTo Finally
|
||||
If Not ScriptForge.SF_Utils._Validate(vDialogName, "DialogName", V_STRING) Then GoTo Finally
|
||||
Set oDialog = Nothing
|
||||
|
||||
Try:
|
||||
' Determine the container and the library hosting the dialog
|
||||
Set oLibraries = Nothing
|
||||
If VarType(vContainer) = V_STRING Then
|
||||
If UCase(vContainer) = UCase(cstGlobal) Then Set oLibraries = GlobalScope.DialogLibraries
|
||||
End If
|
||||
If IsNull(oLibraries) Then
|
||||
Set oUi = ScriptForge.SF_Register.CreateScriptService("UI")
|
||||
Select Case VarType(vContainer)
|
||||
Case V_STRING
|
||||
If Len(vContainer) > 0 Then
|
||||
bFound = False
|
||||
Set oEnum = StarDesktop.Components().createEnumeration
|
||||
Do While oEnum.hasMoreElements
|
||||
Set oComp = oEnum.nextElement
|
||||
vWindow = oUi._IdentifyWindow(oComp)
|
||||
With vWindow
|
||||
' Does the current window match the argument ?
|
||||
If (Len(.WindowFileName) > 0 And .WindowFileName = ScriptForge.SF_FileSystem._ConvertToUrl(vContainer)) _
|
||||
Or (Len(.WindowName) > 0 And .WindowName = vContainer) _
|
||||
Or (Len(.WindowTitle) > 0 And .WindowTitle = vContainer) Then
|
||||
bFound = True
|
||||
Exit Do
|
||||
End If
|
||||
End With
|
||||
Loop
|
||||
Else
|
||||
bFound = True
|
||||
vWindow = oUi._IdentifyWindow(StarDesktop.CurrentComponent)
|
||||
End If
|
||||
Case V_OBJECT ' com.sun.star.lang.XComponent
|
||||
bFound = True
|
||||
vWindow = oUi._IdentifyWindow(vContainer)
|
||||
Set oComp = vContainer
|
||||
End Select
|
||||
If Not bFound Then GoTo CatchNotFound
|
||||
If Len(vWindow.DocumentType) = 0 Then GoTo CatchNotFound
|
||||
' The library is now fully determined
|
||||
Set oLibraries = oComp.DialogLibraries
|
||||
End If
|
||||
|
||||
' Load the library and get the dialog
|
||||
With oLibraries
|
||||
If Not .hasByName(vLibrary) Then GoTo CatchNotFound
|
||||
If Not .isLibraryLoaded(vLibrary) Then .loadLibrary(vLibrary)
|
||||
Set oLibrary = .getByName(vLibrary)
|
||||
If Not oLibrary.hasByName(vDialogName) Then GoTo CatchNotFound
|
||||
Set o_DialogProvider = oLibrary.getByName(vDialogName)
|
||||
End With
|
||||
|
||||
Set oDialog = New SF_Dialog
|
||||
With oDialog
|
||||
Set .[Me] = oDialog
|
||||
If VarType(vContainer) = V_STRING Then ._Container = vContainer Else ._Container = vWindow.WindowName
|
||||
._Library = vLibrary
|
||||
._Name = vDialogName
|
||||
Set ._DialogProvider = o_DialogProvider
|
||||
._Initialize()
|
||||
End With
|
||||
|
||||
Finally:
|
||||
Set _NewDialog = oDialog
|
||||
Exit Function
|
||||
Catch:
|
||||
GoTo Finally
|
||||
CatchNotFound:
|
||||
ScriptForge.SF_Exception.RaiseFatal(DIALOGNOTFOUNDERROR, "Service", cstService _
|
||||
, "Container", vContainer, "Library", vLibrary, "DialogName", vDialogName)
|
||||
GoTo Finally
|
||||
End Function ' SFDialogs.SF_Register._NewDialog
|
||||
|
||||
REM ============================================== END OF SFDIALOGS.SF_REGISTER
|
||||
</script:module>
|
||||
26
server/windows-office/share/basic/SFDialogs/__License.xba
Normal file
26
server/windows-office/share/basic/SFDialogs/__License.xba
Normal 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">
|
||||
''' Copyright 2019-2020 Jean-Pierre LEDURE, Jean-François NIFENECKER, Alain ROMEDENNE
|
||||
|
||||
REM =======================================================================================================================
|
||||
REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
|
||||
REM === The SFDialogs library is one of the associated libraries. ===
|
||||
REM === Full documentation is available on https://help.libreoffice.org/ ===
|
||||
REM =======================================================================================================================
|
||||
|
||||
''' ScriptForge is distributed in the hope that it will be useful,
|
||||
''' but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
''' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
''' ScriptForge is free software; you can redistribute it and/or modify it under the terms of either (at your option):
|
||||
|
||||
''' 1) 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/ .
|
||||
|
||||
''' 2) The GNU Lesser General Public License as published by
|
||||
''' the Free Software Foundation, either version 3 of the License, or
|
||||
''' (at your option) any later version. If a copy of the LGPL was not
|
||||
''' distributed with this file, see http://www.gnu.org/licenses/ .
|
||||
|
||||
</script:module>
|
||||
3
server/windows-office/share/basic/SFDialogs/dialog.xlb
Normal file
3
server/windows-office/share/basic/SFDialogs/dialog.xlb
Normal 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="SFDialogs" library:readonly="false" library:passwordprotected="false"/>
|
||||
8
server/windows-office/share/basic/SFDialogs/script.xlb
Normal file
8
server/windows-office/share/basic/SFDialogs/script.xlb
Normal 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="SFDialogs" library:readonly="false" library:passwordprotected="false">
|
||||
<library:element library:name="__License"/>
|
||||
<library:element library:name="SF_Register"/>
|
||||
<library:element library:name="SF_Dialog"/>
|
||||
<library:element library:name="SF_DialogControl"/>
|
||||
</library:library>
|
||||
Reference in New Issue
Block a user