[Libreoffice-commits] core.git: wizards/source

Jean-Pierre Ledure (via logerrit) logerrit at kemper.freedesktop.org
Thu Dec 17 17:40:23 UTC 2020


 wizards/source/sfdocuments/SF_Base.xba |    6 +--
 wizards/source/sfdocuments/SF_Calc.xba |    6 +--
 wizards/source/sfdocuments/SF_Form.xba |   58 +++++++++++++++++++++++++--------
 3 files changed, 50 insertions(+), 20 deletions(-)

New commits:
commit 554949d5cacaff2d0080b3e4f6124f8c5b045d6e
Author:     Jean-Pierre Ledure <jp at ledure.be>
AuthorDate: Thu Dec 17 17:20:45 2020 +0100
Commit:     Jean-Pierre Ledure <jp at ledure.be>
CommitDate: Thu Dec 17 18:39:46 2020 +0100

    ScriptForge - (SFDocuments) new Activate() method in SF_Form class
    
    Activate
    - the parent document if Writer
    - the parent sheet if Calc
    - the parent form document if Base
    
    Change-Id: Idf2af0184111467d0a94fb27709fd6bb289c6414
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107888
    Tested-by: Jean-Pierre Ledure <jp at ledure.be>
    Tested-by: Jenkins
    Reviewed-by: Jean-Pierre Ledure <jp at ledure.be>

diff --git a/wizards/source/sfdocuments/SF_Base.xba b/wizards/source/sfdocuments/SF_Base.xba
index 8ab19d5cf103..d0900849255f 100644
--- a/wizards/source/sfdocuments/SF_Base.xba
+++ b/wizards/source/sfdocuments/SF_Base.xba
@@ -67,7 +67,7 @@ Private _FormDocuments			As Object
 
 REM ============================================================ MODULE CONSTANTS
 
-Const ISBASEFORM = 2				'	Form is stored in a Base document
+Const ISBASEFORM = 3				'	Form is stored in a Base document
 Const cstToken = "//"				'	Form names accept special characters but not slashes
 
 REM ====================================================== CONSTRUCTOR/DESTRUCTOR
@@ -238,7 +238,7 @@ Try:
 			Set .[Me] = oForm
 			Set .[_Parent] = [Me]
 			._DrawPage = cstDrawPage
-			._UsualName = FormDocument & " : " & ._Name
+			._FormDocumentName = FormDocument
 			Set ._MainForm = oMainForm
 			._FormType = ISBASEFORM
 			Set ._Form = oXForm
@@ -710,4 +710,4 @@ Private Function _Repr() As String
 End Function	'	SFDocuments.SF_Base._Repr
 
 REM ============================================ END OF SFDOCUMENTS.SF_BASE
-</script:module>
+</script:module>
\ No newline at end of file
diff --git a/wizards/source/sfdocuments/SF_Calc.xba b/wizards/source/sfdocuments/SF_Calc.xba
index 86825961630c..aeb19ffed9c7 100644
--- a/wizards/source/sfdocuments/SF_Calc.xba
+++ b/wizards/source/sfdocuments/SF_Calc.xba
@@ -869,8 +869,8 @@ Public Function Forms(Optional ByVal SheetName As Variant _
 '''		An instance of the SF_Form class if Form exists
 '''	Example:
 '''			Dim myForm As Object, myList As Variant
-'''				myList = oDoc.Forms()
-'''				Set myForm = oDoc.Forms("myForm")
+'''				myList = oDoc.Forms("ThisSheet")
+'''				Set myForm = oDoc.Forms("ThisSheet", 0)
 
 Dim oForm As Object					'	The new Form class instance
 Dim oMainForm As Object				'	com.sun.star.comp.sdb.Content
@@ -914,7 +914,7 @@ Try:
 			Set .[Me] = oForm
 			Set .[_Parent] = [Me]
 			._DrawPage = cstDrawPage
-			._UsualName = SheetName & " : " & ._Name
+			._SheetName = SheetName
 			Set ._MainForm = Nothing
 			._FormType = ISCALCFORM
 			Set ._Form = oXForm
diff --git a/wizards/source/sfdocuments/SF_Form.xba b/wizards/source/sfdocuments/SF_Form.xba
index ef83da999582..0b9303fae9b6 100644
--- a/wizards/source/sfdocuments/SF_Form.xba
+++ b/wizards/source/sfdocuments/SF_Form.xba
@@ -76,14 +76,15 @@ Private ServiceName			As String
 '	Form location
 Private _Name				As String		' Internal name of the form
 Private _DrawPage			As Long			' Index in DrawPages collection
-Private _UsualName			As String		' Name as known by user
+Private _SheetName			As String		' Name as the sheet containing the form (Calc only)
+Private _FormDocumentName	As String		' The hierarchical name of the containing form document (Base only)
 Private _FormType			As Integer		' One of the ISxxxFORM constants
 
 '	Form UNO references
 '		The forms container found in a Base document
 '		Vital for Base forms and subforms
 Private _MainForm			As Object		' com.sun.star.comp.sdb.Content
-'		The entry to the interactions with the form. Set by the _IsStillAlive() method
+'		The entry to the interactions with the form. Validity checked by the _IsStillAlive() method
 '		Each method or property requiring that the form is opened should first invoke that method
 Private _Form				As Object		' com.sun.star.form.XForm or com.sun.star.comp.forms.ODatabaseForm
 Private _Database			As Object		' Database class instance
@@ -110,6 +111,8 @@ Private Sub Class_Initialize()
 	ServiceName = "SFDocuments.Form"
 	_Name = ""
 	_DrawPage = -1
+	_SheetName = ""
+	_FormDocumentName = ""
 	_FormType = 0
 	Set _MainForm = Nothing
 	Set _Form = Nothing
@@ -124,6 +127,9 @@ End Sub		'	SFDocuments.SF_Form Destructor
 
 REM -----------------------------------------------------------------------------
 Public Function Dispose() As Variant
+	If Not IsNull(_Database) And (_FormType = ISDOCFORM Or _FormType = ISCALCFORM) Then
+		Set _Database = _Database.Dispose()
+	End If
 	Call Class_Terminate()
 	Set Dispose = Nothing
 End Function	'	SFDocuments.SF_Form Explicit Destructor
@@ -201,16 +207,19 @@ REM ===================================================================== METHOD
 REM -----------------------------------------------------------------------------
 Public Function Activate() As Boolean
 '''	Set the focus on the current Form instance
-'''	Probably called from after an event occurrence or to focus on an open fForm
+'''	Probably called from after an event occurrence or to focus on an open Base form document
+'''	If the parent document is ...
+'''		Calc		Activate the corresponding sheet
+'''		Writer		Activate the parent document
+'''		Base		Activate the parent form document
 '''	Args:
 '''	Returns:
 '''		True if focusing is successful
 '''	Example:
-'''		Dim oDlg As Object
-'''			Set oDlg = CreateScriptService(,, "myForm")	'	Form stored in current document's standard library
-'''			oDlg.Activate()
+'''			myForm.Activate()
 
 Dim bActivate As Boolean		'	Return value
+Dim oContainer As Object		'	com.sun.star.awt.XWindow
 Const cstThisSub = "SFDocuments.Form.Activate"
 Const cstSubArgs = ""
 
@@ -222,6 +231,20 @@ Check:
 		If Not _IsStillAlive() Then GoTo Finally
 	End If
 Try:
+	Select Case _FormType
+		Case ISDOCFORM		:	bActivate = [_Parent].Activate()
+		Case ISCALCFORM		:	bActivate = [_Parent].Activate(_SheetName)
+		Case ISBASEFORM
+			Set oContainer = _MainForm.Component.CurrentController.Frame.ContainerWindow
+			With oContainer
+				If .isVisible() = False Then .setVisible(True)
+				.IsMinimized = False
+				.setFocus()
+				.toFront()				'	Force window change in Linux
+				Wait 1					'	Bypass desynchro issue in Linux
+			End With
+			bActivate = True
+	End Select
 
 Finally:
 	Activate = bActivate
@@ -520,12 +543,14 @@ End Function	'	SFDocuments.SF_Form._GetListener
 REM -----------------------------------------------------------------------------
 Private Function _IsStillAlive(Optional ByVal pbError As Boolean) As Boolean
 '''	Return True if the Form is still open
-'''	If dead the actual instance is partially (part related to open forms) disposed
+'''	If dead the actual instance is disposed
 '''	and the execution is cancelled when pbError = True (default)
 '''	Args:
 '''		pbError: if True (default), raise a fatal error
 
 Dim bAlive As Boolean		'	Return value
+Dim sName As String			'	Alias of _Name
+Dim sId As String			'	Alias of FileIdent
 
 Check:
 	On Local Error GoTo Catch		'	Anticipate DisposedException errors or alike
@@ -551,12 +576,14 @@ Finally:
 Catch:
 	bAlive = False
 	On Error GoTo 0
-	'	Dispose the properties related to *open* forms
-	Set _Form = Nothing
-	If Not IsNull(_Database) And _FormType = ISDOCFORM Then Set _Database = _Database.Dispose()
-	Set _ControlCache = Nothing
+	'	Keep error message elements before disposing the instance
+	sName = _SheetName & _FormDocumentName		'	At least one of them is a zero-length string
+	sName = Iif(Len(sName) > 0, "[" & sName & "].", "") & _Name
+	sId = [_Parent]._FileIdent()
+	'	Dispose the actual forms instance
+	Dispose()
 	'	Display error message
-	If pbError Then ScriptForge.SF_Exception.RaiseFatal(FORMDEADERROR, _Name, [_Parent]._FileIdent())
+	If pbError Then ScriptForge.SF_Exception.RaiseFatal(FORMDEADERROR, sName, sId)
 	GoTo Finally
 End Function	'	SFDocuments.SF_Form._IsStillAlive
 
@@ -644,9 +671,12 @@ Private Function _Repr() As String
 '''	Return:
 '''		"[Form]: Name"
 
-	_Repr = "[Form]: " & _UsualName
+Dim sParent As String		'	To recognize the parent
+
+	sParent = _SheetName & _FormDocumentName		'	At least one of them is a zero-length string
+	_Repr = "[Form]: " & Iif(Len(sParent) > 0, sParent & "...", "") & _Name
 
 End Function	'	SFDocuments.SF_Form._Repr
 
 REM ============================================ END OF SFDOCUMENTS.SF_FORM
-</script:module>
+</script:module>
\ No newline at end of file


More information about the Libreoffice-commits mailing list