Rappel des liens vers la documentation :
http://wiki.services.openoffice.org/wiki/Treecontrol
http://wiki.services.openoffice.org/wik ... ee_Control
Les exemples disponibles me semblent présenter le défaut de ne pas mettre en œuvre un contrôle réellement dynamique en creusant la piste des listeners.
Ci-dessous un exemple simple et rapide allant dans ce sens... Il utilise les données de la base exemple du tutoriel : débuter base à partir d'un exemple.
Le but est la consultation des données sous forme d'arborescence :
Il va de soi que l'intérêt fonctionnel est limité... le but est surtout de donner un exemple de mise en œuvre des listeners.
"Remplir" un contrôle de ce type pourrait être très long en fonction du nombre de données. Le principe sera donc de ne "garnir" que les premiers niveaux (ici les dates et références de commandes) et de ne compléter que dynamiquement, lors de la sélection d'une commande par la recherche des produits commandés. On peaufine en gérant le double-clic permettant d'afficher dans la zone de texte les données sélectionnées (je ne suis pas convaincu par l'exemple donné "sur perte de focus" dans la documentation).
Encore une fois, il s'agit ici d'une première exploration rapide des possibilités...
Code : Tout sélectionner
Option Explicit
Private oDlg as Object
Private PysConnection as object
Private oTreeDataModel as Object
Private PysSQL as string
Sub ArborescenceSimple
Dim PysListenerDblClic as object
Dim oTreeCtrl as Object
Dim oTreeModel as Object
Dim oParent as Object
Dim oChild as Object
Dim oEnfant as Object
Dim oListener as Object
Dim oElement as Object
Dim PysReqDates as object, PysDates as object, PysReqCommandes as object, PysCommandes as object
DialogLibraries.loadLibrary("Standard")
oDlg = CreateUnoDialog(DialogLibraries.Standard.SimpleTreeDialog)
oDlg.getControl("lbDescription").setText( "Un TreeView avec Listeners." )
oTreeCtrl = oDlg.getControl("TreeControl")
oTreeModel = oTreeCtrl.Model
oTreeDataModel = createUnoService("com.sun.star.awt.tree.MutableTreeDataModel")
oElement = oTreeDataModel.createNode( "Dates de commande", true )
oTreeDataModel.setRoot(oElement)
oParent = oElement
PysConnection = ThisDatabaseDocument.DataSource.getConnection("","")
PysSQL = "select distinct DateCommande from Commandes order by DateCommande"
PysReqDates = PysConnection.createStatement()
PysDates = PysReqDates.executeQuery(PysSQL)
while PysDates.next
oChild = treeAddChildElement( oTreeDataModel, oParent, PysDates.getString(1), true )
PysSQL = "SELECT Nom || ' ' || Prénom || ', Réf. : ' || RéfCommande AS ""AFF"" FROM Commandes, Clients "
PysSQL = PysSQL & "WHERE Commandes.RéfClient = Clients.RéfClient AND Commandes.DateCommande = {D '" & PysDates.getString(1) & "' } "
PysSQL = PysSQL & "ORDER BY AFF ASC"
PysReqCommandes = PysConnection.createStatement()
PysCommandes = PysReqCommandes.executeQuery(PysSQL)
oEnfant = oChild
while PysCommandes.next
oChild = treeAddChildElement( oTreeDataModel, oEnfant, PysCommandes.getString(1), true )
wend
wend
oTreeModel.DataModel = oTreeDataModel
PysListenerDblClic = createUnoListener("MouseStyleListen_", "com.sun.star.awt.XMouseListener")
oTreeCtrl.addMouselistener(PysListenerDblClic)
oListener = CreateUnoListener("Pys_","com.sun.star.awt.tree.XTreeExpansionListener")
oTreeCtrl.addTreeExpansionListener(oListener)
oDlg.execute()
oTreeCtrl.removeMouselistener(PysListenerDblClic)
oTreeCtrl.removeTreeExpansionListener(oListener)
oDlg.dispose()
End Sub
rem~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'treeAddChildElement : Add a child element to a tree item
rem~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Function treeAddChildElement (oTreeDataModel as Object, oParent As Object, sChild As String, bIsNotLeaf As Boolean) As Object
Dim oElement As Object
oElement = oTreeDataModel.createNode( sChild, bIsNotLeaf )
oParent.appendChild(oElement)
treeAddChildElement = oElement
End Function
rem~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rem~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub Pys_treeExpanding(oEvt)
rem~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dim i as double
dim PysTrav
dim PysReqUneCommande as object, PysUneCommande as object
if not(isnull(oEvt.Node.Parent)) then
if isnull(oEvt.Node.Parent.Parent) then
for i = 0 to oEvt.Node.getChildCount - 1
if oEvt.Node.getChildAt(i).getChildCount = 0 then
PysTrav = split(oEvt.Node.getChildAt(i).DisplayValue, ":")
PysSQL = "SELECT NomProduit FROM RDétailCommande WHERE RéfCommande = " & PysTrav(1)
PysReqUneCommande = PysConnection.createStatement()
PysUneCommande = PysReqUneCommande.executeQuery(PysSQL)
while PysUneCommande.next
treeAddChildElement( oTreeDataModel, oEvt.Node.getChildAt(i), PysUneCommande.getString(1), false )
wend
end if
next i
end if
end if
end sub
Sub Pys_treeExpanded(oEvt)
end sub
Sub Pys_treeCollapsing(oEvt)
end sub
Sub Pys_treeCollapsed(oEvt)
end sub
Sub Pys_requestChildNodes(oEvt)
End Sub
Sub Pys_disposing(oEvt)
End Sub
rem~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sub mouseStyleListen_mousePressed(oEvt)
rem~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if oEvt.clickCount = 2 then
oDlg.getControl("lbDescription").setText(oEvt.Source.Selection.DisplayValue)
endif
end sub
sub mouseStyleListen_mouseReleased(oEvt)
end sub
sub mouseStyleListen_mouseEntered(oEvt)
end sub
sub mouseStyleListen_mouseExited(oEvt)
end sub
sub mouseStyleListen_disposing(oEvt)
end sub