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

Jean-Pierre Ledure (via logerrit) logerrit at kemper.freedesktop.org
Fri Aug 27 15:01:49 UTC 2021


 vcl/skia/osx/gdiimpl.cxx                         |    3 
 wizards/source/scriptforge/SF_PythonHelper.xba   |    2 
 wizards/source/scriptforge/python/scriptforge.py |    6 
 wizards/source/sfdialogs/SF_DialogControl.xba    |  298 ++++++++++++++++++++++-
 4 files changed, 301 insertions(+), 8 deletions(-)

New commits:
commit e4a3c4ba511724bcc8997249a921da609345410b
Author:     Jean-Pierre Ledure <jp at ledure.be>
AuthorDate: Fri Aug 27 15:03:14 2021 +0200
Commit:     Jean-Pierre Ledure <jp at ledure.be>
CommitDate: Fri Aug 27 17:01:26 2021 +0200

    ScriptForge - (SF_DialogControl) add management of table controls in dialogs
    
    With the method SetTableData(), feed a tablecontrol
    with a sortable and selectable array of data.
    Columns and rows may receive a header.
    Column widths are adjusted manually by the user or
    with the same method.
    Alignments can be set as well by script.
    
      oControl.SetTableData(DataArray, Widths, Alignments)
        DataArray: the set of data to display in the table control,
          including optional column/row headers
          Is a 2D array in Basic, is a tuple of tuples inPython
        Widths: the column's relative widths as a 1D array,
          each element corresponding with a column.
          If the array is shorter than the number of columns,
          the last value is kept for the next columns.
          Example:
            Widths := Array(1, 2)
          means that the first column is half as wide as all
          the other columns.
          When the argument is absent, the columns are evenly
          spreaded over the control.
        Alignments: the column's horizontal alignment as a string
          with length = number of columns.
          Possible characters are:
            L(EFT), C(ENTER), R(IGHT) or space (default behaviour)
          Default: LEFT for strings, RIGHT for numbers
    
    Impact on existing properties: ListIndex, Value
    New properties: XGridColumnModel, XGridDataModel
    
    All properties and methods are available from user
    scripts written either in Basic or in Python.
    
    Change-Id: I70582cd0ba48ee3b9b9a292d8a47dbc1229b1fe6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121148
    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/scriptforge/SF_PythonHelper.xba b/wizards/source/scriptforge/SF_PythonHelper.xba
index 62ce902b2091..5b919ba5abe1 100644
--- a/wizards/source/scriptforge/SF_PythonHelper.xba
+++ b/wizards/source/scriptforge/SF_PythonHelper.xba
@@ -764,6 +764,8 @@ Try:
 						If Script = "GetRows" Then		vReturn = vBasicObject.GetRows(vArgs(0), vArgs(1), vArgs(2), vArgs(3))
 					Case "SFDialogs.Dialog"
 						If Script = "Controls" Then		vReturn = vBasicObject.Controls(vArgs(0))
+					Case "SFDialogs.DialogControl"
+						If Script = "SetTableData" Then	vReturn = vBasicObject.SetTableData(vArgs(0), vArgs(1), vArgs(2))
 					Case "SFDocuments.Document"
 						If Script = "Forms" Then		vReturn = vBasicObject.Forms(vArgs(0))
 					Case "SFDocuments.Base"
diff --git a/wizards/source/scriptforge/python/scriptforge.py b/wizards/source/scriptforge/python/scriptforge.py
index 714418ffd09c..498da0637dd7 100644
--- a/wizards/source/scriptforge/python/scriptforge.py
+++ b/wizards/source/scriptforge/python/scriptforge.py
@@ -1687,7 +1687,8 @@ class SFDialogs:
                                  OnTextChanged = False, Page = True, Parent = False, Picture = True,
                                  RootNode = False, RowSource = True, Text = False, TipText = True,
                                  TripleState = True, Value = True, Visible = True,
-                                 XControlModel = False, XControlView = False, XTreeDataModel = False)
+                                 XControlModel = False, XControlView = False, XGridColumnModel = False,
+                                 XGridDataModel = False, XTreeDataModel = False)
 
         # Root related properties do not start with X and, nevertheless, return a UNO object
         @property
@@ -1713,6 +1714,9 @@ class SFDialogs:
         def SetFocus(self):
             return self.ExecMethod(self.vbMethod, 'SetFocus')
 
+        def SetTableData(self, dataarray, widths = (1,), alignments = ''):
+            return self.ExecMethod(self.vbMethod + self.flgArrayArg, 'SetTableData', dataarray, widths, alignments)
+
         def WriteLine(self, line = ''):
             return self.ExecMethod(self.vbMethod, 'WriteLine', line)
 
diff --git a/wizards/source/sfdialogs/SF_DialogControl.xba b/wizards/source/sfdialogs/SF_DialogControl.xba
index 71ef6a3ce201..e6d6b8571af3 100644
--- a/wizards/source/sfdialogs/SF_DialogControl.xba
+++ b/wizards/source/sfdialogs/SF_DialogControl.xba
@@ -23,11 +23,15 @@ Option Explicit
 '''		Essentially a single property "Value" maps many alternative UNO properties depending each on
 '''		the control type.
 '''
-'''		A special attention is given to controls with type TreeControl.
-'''		It is easy with the API proposed in the current class to populate a tree, either
-'''			- branch by branch (CreateRoot and AddSubNode), or
-'''			- with a set of branches at once (AddSubtree)
-'''		Additionally populating a TreeControl can be done statically or dynamically
+'''		A special attention is given to controls with types TreeControl and TableControl
+'''			It is easy with the API proposed in the current class to populate a tree, either
+'''				- branch by branch (CreateRoot and AddSubNode), or
+'''				- with a set of branches at once (AddSubtree)
+'''			Additionally populating a TreeControl can be done statically or dynamically
+'''
+'''			With the method SetTableData(), feed a tablecontrol with a sortable and selectable
+'''			array of data. Columns and rows may receive a header. Column widths are adjusted manually by the user or
+'''			with the same method. Alignments can be set as well by script.
 '''
 '''		Service invocation:
 '''			Dim myDialog As Object, myControl As Object
@@ -64,6 +68,8 @@ Private _DialogName			As String		' Parent dialog name
 Private _ControlModel		As Object		' com.sun.star.awt.XControlModel
 Private _ControlView		As Object		' com.sun.star.awt.XControl - stardiv.Toolkit.UnoDialogControl
 Private _TreeDataModel		As Object		' com.sun.star.awt.tree.MutableTreeDataModel
+Private _GridColumnModel	As Object		' com.sun.star.awt.grid.XGridColumnModel
+Private _GridDataModel		As Object		' com.sun.star.awt.grid.XGridDataModel
 
 '	Control attributes
 Private	_ImplementationName	As String
@@ -76,6 +82,9 @@ Private _OnNodeExpanded		As String		' Script to invoke when a node is expan
 Private _SelectListener		As Object		' com.sun.star.view.XSelectionChangeListener
 Private _ExpandListener		As Object		' com.sun.star.awt.tree.XTreeExpansionListener
 
+'	Table control attributes
+Private _ColumnWidths		As Variant		' Array of column widths
+
 REM ============================================================ MODULE CONSTANTS
 
 Private Const CTLBUTTON			= "Button"
@@ -95,6 +104,7 @@ Private Const CTLPATTERNFIELD	= "PatternField"
 Private Const CTLPROGRESSBAR	= "ProgressBar"
 Private Const CTLRADIOBUTTON	= "RadioButton"
 Private Const CTLSCROLLBAR		= "ScrollBar"
+Private Const CTLTABLECONTROL	= "TableControl"
 Private Const CTLTEXTFIELD		= "TextField"
 Private Const CTLTIMEFIELD		= "TimeField"
 Private Const CTLTREECONTROL	= "TreeControl"
@@ -113,12 +123,15 @@ Private Sub Class_Initialize()
 	Set _ControlModel = Nothing
 	Set _ControlView = Nothing
 	Set _TreeDataModel = Nothing
+	Set _GridColumnModel = Nothing
+	Set _GridDataModel = Nothing
 	_ImplementationName = ""
 	_ControlType = ""
 	_OnNodeSelected = ""
 	_OnNodeExpanded = ""
 	Set _SelectListener = Nothing
 	Set _ExpandListener = Nothing
+	_ColumnWidths = Array()
 End Sub		'	SFDialogs.SF_DialogControl Constructor
 
 REM -----------------------------------------------------------------------------
@@ -492,6 +505,18 @@ Property Get XControlView() As Object
 	XControlView = _PropertyGet("XControlView", Nothing)
 End Property	'	SFDialogs.SF_DialogControl.XControlView (get)
 
+REM -----------------------------------------------------------------------------
+Property Get XGridColumnModel() As Object
+'''	The XGridColumnModel property returns the mutable data model UNO object of the tree control
+	XGridColumnModel = _PropertyGet("XGridColumnModel", Nothing)
+End Property	'	SFDialogs.SF_DialogControl.XGridColumnModel (get)
+
+REM -----------------------------------------------------------------------------
+Property Get XGridDataModel() As Object
+'''	The XGridDataModel property returns the mutable data model UNO object of the tree control
+	XGridDataModel = _PropertyGet("XGridDataModel", Nothing)
+End Property	'	SFDialogs.SF_DialogControl.XGridDataModel (get)
+
 REM -----------------------------------------------------------------------------
 Property Get XTreeDataModel() As Object
 '''	The XTreeDataModel property returns the mutable data model UNO object of the tree control
@@ -895,6 +920,8 @@ Public Function Properties() As Variant
 					, "Visible" _
 					, "XControlModel" _
 					, "XControlView" _
+					, "XGridColumnModel" _
+					, "XGridDataModel" _
 					, "XTreeDataModel" _
 					)
 
@@ -971,6 +998,216 @@ Catch:
 	GoTo Finally
 End Function	'	SFDialogs.SF_DialogControl.SetProperty
 
+REM -----------------------------------------------------------------------------
+Public Function SetTableData(Optional ByRef DataArray As Variant _
+								, Optional ByRef Widths As Variant _
+								, Optional ByRef Alignments As Variant _
+								) As Boolean
+'''	Fill a table control with the given data. Preexisting data is erased
+'''	The Basic IDE allows to define if the control has a row and/or a column header
+'''	When it is the case, the array in argument should contain those headers resp. in the first
+'''	column and/or in the first row
+'''	A column in the control shall be sortable when the data (headers excluded) in that column
+'''	is homogeneously filled either with numbers or with strings
+'''	Columns containing strings will be left-aligned, those with numbers will be right-aligned
+'''	Args:
+'''		DataArray: the set of data to display in the table control, including optional column/row headers
+'''			Is a 2D array in Basic, is a tuple of tuples when called from Python
+'''		Widths: the column's relative widths as a 1D array, each element corresponding with a column
+'''				If the array is shorter than the number of columns, the last value is kept for the next columns.
+'''				Example:
+'''					Widths := Array(1, 2)
+'''				means that the first column is half as wide as all the other columns
+'''				When the argument is absent, the columns are evenly spreaded over the control
+'''		Alignments: the column's horizontal alignment as a string with length = number of columns.
+'''				Possible characters are:
+'''					L(EFT), C(ENTER), R(IGHT) or space (default behaviour)
+'''	Returns:
+'''		True when successful
+'''	Examples:
+'''		Dim myTable As Object, bSet As Boolean, vData As Variant
+'''			Set myTable = myDialog.Controls("myTableControl")	'	This control has only column headers
+'''			vData = Array("Col1", "Col2", "Col3")
+'''			vData = SF_Array.AppendRow(vData, Array(1, 2, 3))
+'''			vData = SF_Array.AppendRow(vData, Array(4, 5, 6))
+'''			vData = SF_Array.AppendRow(vData, Array(7, 8, 9))
+'''			bSet = myTable.SetTableData(vData, Alignments := " C ")
+
+Dim bData As Boolean			'	Return value
+Dim iDims As Integer			'	Number of dimensions of DataArray
+Dim lMin1 As Long				'	LBound1 of input array
+Dim lMax1 As Long				'	UBound1 of input array
+Dim lMin2 As Long				'	LBound2 of input array
+Dim lMax2 As Long				'	UBound2 of input array
+Dim lControlWidth As Long		'	Width of the table control
+Dim lMinW As Long				'	lBound of Widths
+Dim lMaxW As Long				'	UBound of vWidths
+Dim lMinRow As Long				'	Row index of effective data subarray
+Dim lMinCol As Long				'	Column index of effective data subarray
+Dim vRowHeaders As Variant		'	Array of row headers
+Dim sRowHeader As String		'	A single row header
+Dim vColHeaders As Variant		'	Array of column headers
+Dim oColumn As Object			'	com.sun.star.awt.grid.XGridColumn
+Dim dWidth As Double			'	A single item of Widths
+Dim dRelativeWidth As Double	'	Sum of Widths up to the number of columns
+Dim dWidthFactor As Double		'	Factor to apply to relative widths to get absolute column widths
+Dim vDataRow As Variant			'	A single row content in the tablecontrol
+Dim vDataItem As Variant		'	A single DataArray item
+Dim sAlign As String			'	Column's hprizontal alignments (single chars: L, C, R, space)
+Dim lAlign As Long				'	com.sun.star.style.HorizontalAlignment.XXX
+Dim i As Long, j As Long, k As Long
+
+Const cstRowHdrWidth = 12	'	Estimated width of the row header
+
+Const cstThisSub = "SFDialogs.DialogControl.SetTableData"
+Const cstSubArgs = "DataArray, [Widths=Array(1)], [Alignments=""""]"
+
+	If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
+	bData = False
+
+Check:
+	If IsMissing(Widths) Or IsEmpty(Widths) Then Widths = Array(1)
+	If IsMissing(Alignments) Or IsEmpty(Alignments) Then Alignments = ""
+	If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
+		If _ControlType <> CTLTABLECONTROL Then GoTo CatchType
+		If Not ScriptForge.SF_Utils._ValidateArray(DataArray, "DataArray") Then GoTo Catch		'	Dimensions are checked below
+		If Not ScriptForge.SF_Utils._ValidateArray(Widths, "Widths", 1, ScriptForge.V_NUMERIC, True) Then GoTo Catch
+		If Not ScriptForge.SF_Utils._Validate(Alignments, "Alignments", V_STRING) Then GoTo Catch
+	End If
+
+Try:
+	'	Erase any pre-existing data and columns
+	_GridDataModel.removeAllRows()
+	For i = _GridColumnModel.ColumnCount - 1 To 0 Step -1
+		_GridColumnModel.removeColumn(i)
+	Next i
+
+	'	LBounds, UBounds - Basic or Pytho
+	iDims = ScriptForge.SF_Array.CountDims(DataArray)
+	Select Case iDims
+		Case -1, 0		:	GoTo Catch
+		Case 1					'	Called probably from Python
+			lMin1 = LBound(DataArray, 1)			:	lMax1 = UBound(DataArray, 1)
+			If Not IsArray(DataArray(0)) Then GoTo Catch
+			If UBound(DataArray(0)) < LBound(DataArray(0)) Then GoTo Catch	'	No columns
+			lMin2 = LBound(DataArray(0))			:	lMax2 = UBound(DataArray(0))
+		Case 2
+			lMin1 = LBound(DataArray, 1)	:	lMax1 = UBound(DataArray, 1)
+			lMin2 = LBound(DataArray, 2)	:	lMax2 = UBound(DataArray, 2)
+		Case Else	:	GoTo Catch
+	End Select
+
+	'	Extract headers from data array
+	lMinW = LBound(Widths)			:	lMaxW = UBound(Widths)
+	With _ControlModel
+		If .ShowColumnHeader Then
+			lMinRow = lMin1 + 1
+			If iDims = 1 Then
+				vColHeaders = DataArray(lMin1)
+			Else
+				vColHeaders = ScriptForge.SF_Array.ExtractRow(DataArray, lMin1)
+			End If
+		Else
+			lMinRow = lMin1
+			vColHeaders = Array()
+		End If
+		If .ShowRowHeader Then
+			lMinCol = lMin2 + 1
+			If iDims = 1 Then
+				vRowHeaders = Array()
+				ReDim vRowHeaders(lMin1 To lMax1)
+				For i = lMin1 To lMax1
+					vRowHeaders(i) = DataArray(i)(lMin2)
+				Next i
+			Else
+				vRowHeaders = ScriptForge.SF_Array.ExtractColumn(DataArray, lMin2)
+			End If
+		Else
+			lMinCol = lMin2
+			vRowHeaders = Array()
+		End If
+	End With
+
+	'	Create the columns
+	For j = lMinCol To lMax2
+		Set oColumn = _GridColumnModel.createColumn()
+		If _ControlModel.ShowColumnHeader Then oColumn.Title = vColHeaders(j)
+		_GridColumnModel.addColumn(oColumn)
+	Next j
+	'	Size the columns. Column sizing cannot be done before all the columns are added
+	If lMaxW >= lMinW Then		'	There must be at least 1 width given as argument
+		'	Size the columns proportionally with their relative widths
+		dRelativeWidth = 0.0
+		i = lMinW - 1
+		'	Compute the sum of the relative widths
+		For j = 0 To lMax2 - lMinCol
+			i = i + 1
+			If i >= lMinW And i <= lMaxW Then dRelativeWidth = dRelativeWidth + Widths(i) Else dRelativeWidth = dRelativeWidth + Widths(lMaxW)
+		Next j
+		'	Set absolute widths
+		If dRelativeWidth > 0.0 Then dWidthFactor = CDbl((_ControlModel.Width - cstRowHdrWidth) / dRelativeWidth) Else dWidthFactor = 1.0
+		i = lMinW - 1
+		For j = 0 To lMax2 - lMinCol
+			i = i + 1
+			If i >= lMinW And i <= lMaxW Then dWidth = CDbl(Widths(i)) Else dWidth = CDbl(Widths(lMaxW))
+			_GridColumnModel.Columns(j).ColumnWidth = CLng(dWidthFactor * dWidth)
+		Next j
+	Else
+		'	Size all columns evenly
+		For j = 0 To lMax2 - lMinCol
+			_GridColumnModel.Columns(j).ColumnWidth = (_ControlModel.Width - cstRowHdrWidth) / (lMax2 - lMonCol + 1)
+		Next j
+	End If
+
+	'	Initialize the column alignment
+	If Len(Alignments) >= lMax2 - lMinCol + 1 Then sAlign = Alignments Else sAlign = Alignments & Space(lMax2 - lMinCol + 1 - Len(Alignments))
+
+	'	Feed the table with data and define/confirm the column alignment
+	vDataRow = Array()
+	For i = lMinRow To lMax1
+		ReDim vDataRow(0 To lMax2 - lMinCol)	
+		For j = lMinCol To lMax2
+			If iDims = 1 Then vDataItem = DataArray(i)(j) Else vDataItem = DataArray(i, j)
+			If VarType(vDataItem) = V_STRING Then
+			ElseIf ScriptForge.SF_Utils._VarTypeExt(vDataItem) = ScriptForge.V_NUMERIC Then
+			Else
+				vDataItem = ScriptForge.SF_String.Represent(vDataItem)
+			End If
+			vDataRow(j - lMinCol) = vDataItem
+			'	Store alignment while processing the first row of the array
+			If i = lMinRow Then
+				k = j - lMinCol + 1
+				If Mid(sAlign, k, 1) = " " Then Mid(sAlign, k, 1) = Iif(VarType(vDataItem) = V_STRING, "L", "R")
+			End If
+		Next j
+		If _ControlModel.ShowRowHeader Then sRowHeader = vRowHeaders(i) Else sRowHeader = ""
+		_GridDataModel.addRow(sRowHeader, vDataRow)
+	Next i
+
+	'	Determine alignments of each column
+	For j = 0 To lMax2 - lMinCol
+		Select Case Mid(sAlign, j + 1, 1)
+			Case "L", " "	:	lAlign = com.sun.star.style.HorizontalAlignment.LEFT
+			Case "R"		:	lAlign = com.sun.star.style.HorizontalAlignment.RIGHT
+			Case "C"		:	lAlign = com.sun.star.style.HorizontalAlignment.CENTER
+			Case Else
+		End Select
+		_GridColumnModel.Columns(j).HorizontalAlign = lAlign
+	Next j
+
+	bData = True
+
+Finally:
+	SetTableData = bData
+	ScriptForge.SF_Utils._ExitFunction(cstThisSub)
+	Exit Function
+Catch:
+	GoTo Finally
+CatchType:
+	ScriptForge.SF_Exception.RaiseFatal(CONTROLTYPEERROR, _Name, _DialogName, _ControlType, "SetTableData")
+	GoTo Finally
+End Function	'	SFDialogs.SF_DialogControl.SetTableData
+
 REM -----------------------------------------------------------------------------
 Public Function WriteLine(Optional ByVal Line As Variant) As Boolean
 '''	Add a new line to a multiline TextField control
@@ -1204,7 +1441,11 @@ Try:
 			'	Initialize the data model
 			_ControlType = CTLTREECONTROL
 			Set _ControlModel.DataModel = ScriptForge.SF_Utils._GetUNOService("TreeDataModel")
-			_TreeDataModel = _ControlModel.DataModel
+			Set _TreeDataModel = _ControlModel.DataModel
+		Case "UnoControlGridModel"
+			_ControlType = CTLTABLECONTROL
+			Set _GridColumnModel = _ControlModel.ColumnModel
+			Set _GridDataModel = _ControlModel.GridDataModel
 		Case Else					:	_ControlType = sType
 	End Select
 
@@ -1305,6 +1546,8 @@ Const cstSubArgs = ""
 			Select Case _ControlType
 				Case CTLCOMBOBOX, CTLLISTBOX
 					If oSession.HasUNOProperty(_ControlModel, "StringItemList") Then _PropertyGet = UBound(_ControlModel.StringItemList) + 1
+				Case CTLTABLECONTROL	'	Returns zero when no table data yet
+					If oSession.HasUNOProperty(_GridDataModel, "RowCount") Then _PropertyGet = _GridDataModel.RowCount
 				Case Else	:	GoTo CatchType
 			End Select
 		Case UCase("ListIndex")
@@ -1320,6 +1563,19 @@ Const cstSubArgs = ""
 						vSelection = _ControlModel.SelectedItems
 						If UBound(vSelection) >= 0 Then _PropertyGet = vSelection(0)
 					End If
+				Case CTLTABLECONTROL
+					_PropertyGet = -1	'	No row selected, no data, multiselection
+					If oSession.HasUNOProperty(_ControlModel, "SelectionModel") _
+							And oSession.HasUNOProperty(_ControlView, "CurrentRow") Then
+						'	Other selection types (multi, range) not supported
+						If _ControlModel.SelectionModel = com.sun.star.view.SelectionType.SINGLE Then 
+							lIndex = _ControlView.CurrentRow
+							If lIndex < 0 And oSession.HasUNOProperty(_ControlView, "SelectedRows") Then
+								If UBound(_ControlView.SelectedRows) >= 0 Then lIndex = _ControlView.SelectedRows(0)
+							End If
+							_PropertyGet = lIndex
+						End If
+					End If
 				Case Else	:	GoTo CatchType
 			End Select
 		Case UCase("Locked")
@@ -1456,6 +1712,19 @@ Const cstSubArgs = ""
 					If oSession.HasUnoProperty(_ControlModel, "State") Then vGet = ( _ControlModel.State = 1 ) Else vGet = False
 				Case CTLSCROLLBAR		'Numeric
 					If oSession.HasUnoProperty(_ControlModel, "ScrollValue") Then vGet = _ControlModel.ScrollValue Else vGet = 0
+				Case CTLTABLECONTROL
+					vGet = Array()	'	Default value when no row selected, no data, multiselection
+					If oSession.HasUNOProperty(_ControlModel, "SelectionModel") _
+							And oSession.HasUNOProperty(_ControlView, "CurrentRow") Then
+						'	Other selection types (multi, range) not supported
+						If _ControlModel.SelectionModel = com.sun.star.view.SelectionType.SINGLE Then
+							lIndex = _ControlView.CurrentRow
+							If lIndex < 0 And oSession.HasUNOProperty(_ControlView, "SelectedRows") Then
+								If UBound(_ControlView.SelectedRows) >= 0 Then lIndex = _ControlView.SelectedRows(0)
+							End If
+							If lIndex >= 0 Then vGet = _GridDataModel.getRowData(lIndex)
+						End If
+					End If					
 				Case CTLTIMEFIELD
 					vGet = CDate(0)
 					If oSession.HasUnoProperty(_ControlModel, "Time") Then
@@ -1473,6 +1742,10 @@ Const cstSubArgs = ""
 			Set _PropertyGet = _ControlModel
 		Case UCase("XControlView")
 			Set _PropertyGet = _ControlView
+		Case UCase("XGridColumnModel")
+			Set _PropertyGet = _GridColumnModel
+		Case UCase("XGridDataModel")
+			Set _PropertyGet = _GridDataModel
 		Case UCase("XTreeDataModel")
 			Set _PropertyGet = _TreeDataModel
 		Case Else
@@ -1587,6 +1860,15 @@ Const cstSubArgs = "Value"
 					End If
 				Case CTLLISTBOX
 					If oSession.HasUNOProperty(_ControlModel, "SelectedItems") Then _ControlModel.SelectedItems = Array(CInt(pvValue))
+				Case CTLTABLECONTROL
+					If oSession.HasUNOProperty(_ControlModel, "SelectionModel") _
+							And oSession.HasUNOMethod(_ControlView, "selectRow") Then
+						'	Other selection types (multi, range) not supported
+						If _ControlModel.SelectionModel = com.sun.star.view.SelectionType.SINGLE _
+								And pvValue >= 0 And pvValue <= _GridDataModel.RowCount - 1 Then
+							 _ControlView.selectRow(pvValue)
+						End If
+					End If
 				Case Else	:	GoTo CatchType
 			End Select
 		Case UCase("Locked")
@@ -1768,7 +2050,9 @@ Const cstSubArgs = "Value"
 		Case UCase("Visible")
 			If Not ScriptForge.SF_Utils._Validate(pvValue, "Visible", ScriptForge.V_BOOLEAN) Then GoTo Finally
 			If oSession.HasUnoMethod(_ControlView, "setVisible") Then
-				If pvValue Then _ControlModel.EnableVisible = True
+				If pvValue Then
+					If oSession.HasUnoProperty(_ControlModel, "EnableVisible") Then _ControlModel.EnableVisible = True
+				End If
 				_ControlView.setVisible(pvValue)
 			End If
 		Case Else
commit d9e7a8dd1cb4859a4d2252a2baf697eea56fecea
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Fri Aug 27 13:56:03 2021 +0200
Commit:     Stephan Bergmann <sbergman at redhat.com>
CommitDate: Fri Aug 27 17:01:16 2021 +0200

    loplugin:external (macOS)
    
    Change-Id: Iedf17f6e075fb06b767359ad5ffbd3cebbea3188
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121144
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/vcl/skia/osx/gdiimpl.cxx b/vcl/skia/osx/gdiimpl.cxx
index c262a93c14fe..1be661629741 100644
--- a/vcl/skia/osx/gdiimpl.cxx
+++ b/vcl/skia/osx/gdiimpl.cxx
@@ -257,6 +257,8 @@ void AquaSkiaSalGraphicsImpl::drawTextLayout(const GenericSalLayout& rLayout)
     drawGenericLayout(rLayout, mrShared.maTextColor, font, verticalFont);
 }
 
+namespace
+{
 std::unique_ptr<sk_app::WindowContext> createMetalWindowContext(bool /*temporary*/)
 {
     sk_app::DisplayParams displayParams;
@@ -264,6 +266,7 @@ std::unique_ptr<sk_app::WindowContext> createMetalWindowContext(bool /*temporary
     macWindow.fMainView = nullptr;
     return sk_app::window_context_factory::MakeMetalForMac(macWindow, displayParams);
 }
+}
 
 void AquaSkiaSalGraphicsImpl::prepareSkia() { SkiaHelper::prepareSkia(createMetalWindowContext); }
 


More information about the Libreoffice-commits mailing list