SortableGridDataModel cannot be notified for changes

Oliver Brinzing Oliver.Brinzing at gmx.de
Sun Nov 24 13:27:01 UTC 2024


Am 23.11.2024 um 17:26 schrieb Pierre Vacher:
> I try to use the SortableGridDataModel
> <https://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/grid/SortableGridDataModel.html>
> service with the help of my own XMutableGridDataModel

some time ago I created a basic demo

HTH
Oliver

OPTION EXPLICIT

Dim oDialogControl as Object
Dim oGridControl as Object
Dim oBtnControl as Object

Sub GridControlTest()

	Dim oColumnModel as Object
	Dim oColumn1 as Object
	Dim oColumn2 as Object
	Dim oColumn3 as Object

	Dim oGridModel as Object
	Dim oDataModel as Object
	Dim oDataListener as Object

	Dim oListener as Object

	Dim oBtnModel as Object
	Dim oBtnListener as Object

	Dim oDialog as Object
	Dim oDialogModel as Object
	Dim oWinListener as Object

	Dim i as Integer

	oDialogModel = createUnoService("com.sun.star.awt.UnoControlDialogModel")
	oDialogModel.Title = "GridControl Test"
	oDialogModel.sizeable = True

	oDialogControl = createUnoService("com.sun.star.awt.UnoControlDialog")
	oDialogControl.setModel( oDialogModel )
	oDialogControl.setPosSize( 100, 100, 300, 200, com.sun.star.awt.PosSize.POSSIZE)

	oGridModel = oDialogModel.createInstance("com.sun.star.awt.grid.UnoControlGridModel")
	oGridModel.Name = "MyGrid"

	' oDataModel = createUnoService("com.sun.star.awt.grid.DefaultGridDataModel")
	oDataModel = oGridModel.GridDataModel
	For i = 0 To 10
		oDataModel.addRow (""&i, Array(Chr(97+i), Chr(65+i), ""&i*10))
	Next i

  	oDataListener = CreateUnoListener("XGridData_", "com.sun.star.awt.grid.XGridDataListener")
	oDataModel.addGridDataListener(oDataListener)

'	oColumnModel = createUnoService("com.sun.star.awt.grid.DefaultGridColumnModel")
	oColumnModel = oGridModel.ColumnModel

    	oColumn1 = createUnoService("com.sun.star.awt.grid.GridColumn")
	oColumn1.Title = "City"
	oColumn1.ColumnWidth = 20
	oColumn1.MinWidth = 10
	oColumn1.MaxWidth = 50
	oColumn1.Resizeable = True
'	oColumn1.Flexibility = 1

  	oColumn2 = createUnoService("com.sun.star.awt.grid.GridColumn")
	oColumn2.Title = "Country"
	oColumn2.ColumnWidth = 50
	oColumn2.MinWidth = 20
	oColumn2.MaxWidth = 80
	oColumn2.Resizeable = True
'	oColumn2.Flexibility = 1

  	oColumn3 = createUnoService("com.sun.star.awt.grid.GridColumn")
	oColumn3.Title = "Test"
	oColumn3.ColumnWidth = 30
	oColumn3.MinWidth = 10
	oColumn3.MaxWidth = 50
	oColumn3.Resizeable = True
'	oColumn3.Flexibility = 1

	oColumnModel.addColumn(oColumn1)
	oColumnModel.addColumn(oColumn2)
	oColumnModel.addColumn(oColumn3)

	oGridModel.ShowColumnHeader = True
	oGridModel.ShowRowHeader = True
	oGridModel.HScroll = True
	oGridModel.VScroll = True
	oGridModel.Sizeable = True

	oDialogModel.insertByName("MyGrid", oGridModel)
	oGridControl = oDialogControl.getControl("MyGrid")

	oDialogControl.addControl("MyGrid", oGridControl)
	oGridControl.setPosSize(10, 10, 280, 140, com.sun.star.awt.PosSize.POSSIZE)

  	oListener = CreateUnoListener("XGridSelection_", "com.sun.star.awt.grid.XGridSelectionListener")
	oGridControl.addSelectionListener(oListener)

	oBtnModel = createUnoService("com.sun.star.awt.UnoControlButtonModel")
	oBtnModel.setPropertyValues( Array("Label", "Name"), Array("Close", "TestBtn"))
	oBtnControl = createUnoService("com.sun.star.awt.UnoControlButton")

	oBtnControl.setModel(oBtnModel)
     oBtnControl.setPosSize(10, 160, 290, 30, com.sun.star.awt.PosSize.POSSIZE)
   	oDialogControl.addControl("MyButton", oBtnControl)

	oBtnListener = CreateUnoListener("close_", "com.sun.star.awt.XActionListener")
	oBtnControl.addActionListener(oBtnListener)

	oWinListener = createUnoListener("win_", "com.sun.star.awt.XWindowListener")
	oDialogControl.addWindowListener(oWinListener)

	oDialogControl.setVisible(True)
	oDialogControl.execute()
End Sub

Sub win_windowShown(oEvt)
End Sub

Sub win_windowResized(oEvt)
	If Not isNull(oEvt) Then
  		If Not isNull(oBtnControl) Then
  			oBtnControl.setPosSize(10, oEvt.Height - 40, oEvt.Width -20, 30, com.sun.star.awt.PosSize.POSSIZE)
		EndIf

  		If Not isNull(oGridControl) Then
  			oGridControl.setPosSize(10, 10, oEvt.Width -20, oEvt.Height-60, com.sun.star.awt.PosSize.POSSIZE)
  			oGridControl.setVisible(False)
  			Wait(1)
  			oGridControl.setVisible(True)
		EndIf
	EndIf
End Sub

Sub win_windowMoved(oEvt)
End Sub

Sub win_windowHidden(oEvt)
End Sub

Sub close_actionPerformed(oEvt)
	oDialogControl.endExecute()
End Sub

Sub XGridSelection_selectionChanged(oEvt)

Dim oSrc as Object
Dim r as Long
Dim c as Long
Dim sData as String

	oSrc = oEvt.Source
	r = oSrc.getCurrentRow
	c = oSrc.getCurrentColumn
	sData = oSrc.getModel().GridDataModel.getCellData(c,r)

	MsgBox(r & "," & c & " - " & sData)

	oSrc.getModel().GridDataModel.sortByColumn ( c, false )

End Sub

Sub XGridSelection_disposing(oEvt)
End Sub

Sub XGridData_rowsInserted(oEvt)
	Msgbox "XGridData_rowsInserted"
End Sub

Sub XGridData_rowsRemoved(oEvt)
	Msgbox "XGridData_rowsRemoved"
End Sub

Sub XGridData_dataChanged(oEvt)
	Msgbox "XGridData_dataChanged"
End Sub

Sub XGridData_rowHeadingChanged(oEvt)
	Msgbox "XGridData_rowHeadingChanged"
End Sub

Sub XGridData_disposing(oEvt)
End Sub



More information about the LibreOffice mailing list