





Je viens de passer la journée la dessus,alors que pensais passer une petite heure dessus !!!
J'avais bien trouvé un code du LSI mais avec une liste et là je voulais le faire directement dans le TreeGadget.
Le but : Monter ou descendre des éléments du Tree sans changer leur profondeur !
En plus il y a une fonction qui déplace avec un DragAndDrop mais qui elle ne garde pas les profondeurs.
N’hésitez pas si vous trouvez des bug a me les signaler.
Gros poutou à tous et à +...
Code : Tout sélectionner
Procedure Monte_element_tree_meme_niveau(id_tree)
Debug "Procedure Monte_element_tree_meme_niveau(id_tree)"
pos=GetGadgetState(id_tree)
If pos>-1
niv= GetGadgetItemAttribute(id_tree,pos,#PB_Tree_SubLevel)
pos_ou_inserer=pos-1
If GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)>niv
;si l'élément précedent est plus profond
Repeat ; on recul jusqu'a être au même niveau
pos_ou_inserer-1
Until GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=niv Or pos_ou_inserer=-1
EndIf
If GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)<niv
Repeat
pos_ou_inserer-1
Until niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=<1 Or pos_ou_inserer=-1
pos_ou_inserer+1
EndIf
If pos_ou_inserer>0 Or ( pos_ou_inserer=0 And niv=0 )
pos_apres_au_meme_niv=pos
Repeat
pos_apres_au_meme_niv+1
Until GetGadgetItemAttribute(id_tree,pos_apres_au_meme_niv,#PB_Tree_SubLevel)<=niv Or pos_apres_au_meme_niv>=CountGadgetItems(id_tree)
s_pos_ou_inserer=pos_ou_inserer
pos_a_bouger=pos
For i=pos To pos_apres_au_meme_niv-1
state=GetGadgetItemData(id_tree,pos_a_bouger)
AddGadgetItem(id_tree,pos_ou_inserer,GetGadgetItemText(id_tree,pos_a_bouger),0,GetGadgetItemAttribute(id_tree,pos_a_bouger,#PB_Tree_SubLevel))
SetGadgetItemData(id_tree,pos_ou_inserer,state)
pos_ou_inserer+1
pos_a_bouger+2
Next
RemoveGadgetItem(id_tree,pos_apres_au_meme_niv)
SetGadgetState(id_tree,s_pos_ou_inserer)
EndIf
EndIf
EndProcedure
Procedure Descend_element_tree_meme_niveau(id_tree)
Debug "----------------------------"
pos=GetGadgetState(id_tree)
If pos>-1
niv= GetGadgetItemAttribute(id_tree,pos,#PB_Tree_SubLevel)
pos_apres_au_meme_niv=pos
Repeat
pos_apres_au_meme_niv+1
Until GetGadgetItemAttribute(id_tree,pos_apres_au_meme_niv,#PB_Tree_SubLevel)<=niv Or pos_apres_au_meme_niv>=CountGadgetItems(id_tree)
pos_ou_inserer=pos_apres_au_meme_niv
If GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=niv
If GetGadgetItemAttribute(id_tree,pos_ou_inserer+1,#PB_Tree_SubLevel)>niv
Repeat
pos_ou_inserer+1
Until niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)>=0 Or pos_ou_inserer>=CountGadgetItems(id_tree)
pos_ou_inserer-1
EndIf
pos_ou_inserer+1
ElseIf niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=1
pos_ou_inserer+1
ElseIf niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)>1
Repeat
pos_ou_inserer+1
Until niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=1 Or pos_ou_inserer>=CountGadgetItems(id_tree)
pos_ou_inserer+1
EndIf
If pos_ou_inserer<=CountGadgetItems(id_tree)
pos_insert=pos_ou_inserer-1
For i=pos To pos_apres_au_meme_niv-1
If GetGadgetItemAttribute(id_tree,i,#PB_Tree_SubLevel)<niv
Break
EndIf
pos_insert+1
state=GetGadgetItemData(id_tree,i)
AddGadgetItem(id_tree,pos_insert,GetGadgetItemText(id_tree,i),0,GetGadgetItemAttribute(id_tree,i,#PB_Tree_SubLevel))
SetGadgetItemData(id_tree,pos_insert,state)
Next
RemoveGadgetItem(id_tree,GetGadgetState(id_tree))
SetGadgetState(id_tree,pos_ou_inserer-(pos_apres_au_meme_niv-pos))
EndIf
EndIf
EndProcedure
Procedure DeplaceOuCopieElementTree(id_tree,pos_origine,pos_destination,type)
If pos_origine<>pos_destination
niv_origine= GetGadgetItemAttribute(id_tree,pos_origine,#PB_Tree_SubLevel)
niv_destination= GetGadgetItemAttribute(id_tree,pos_destination,#PB_Tree_SubLevel)
decal_niv=niv_destination-niv_origine+1
pos_fin_a_copier=pos_origine
Repeat
pos_fin_a_copier+1
Until GetGadgetItemAttribute(id_tree,pos_fin_a_copier,#PB_Tree_SubLevel)<=niv_origine Or pos_apres_au_meme_niv>=CountGadgetItems(id_tree)
pos_insert=pos_destination
decal_pos=0
For i=pos_origine To pos_fin_a_copier-1
pos_insert+1
niv_insert=GetGadgetItemAttribute(id_tree,i+decal_pos,#PB_Tree_SubLevel)+decal_niv
state=GetGadgetItemData(id_tree,i+decal_pos)
AddGadgetItem(id_tree,pos_insert,GetGadgetItemText(id_tree,i+decal_pos),0,GetGadgetItemAttribute(id_tree,i+decal_pos,#PB_Tree_SubLevel)+decal_niv)
SetGadgetItemData(id_tree,pos_insert,state)
If pos_origine>pos_destination
decal_pos+1
EndIf
Next
RemoveGadgetItem(id_tree,pos_origine+decal_pos)
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 320, 610, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(0, 10, 10, 250, 600,#PB_Tree_AlwaysShowSelection)
ButtonGadget(1,270,20,20,20,"^")
ButtonGadget(2,270,50,20,20,"v"); liste arborescente standard
StringGadget(3,270,80,40,20,"")
EnableGadgetDrop(0, #PB_Drop_Private, #PB_Drag_Move | #PB_Drag_Copy ,1)
; liste arborescente avec cases à cocher + sans lignes reliant les noeuds
num=-1
For a = 0 To 5
num+1
AddGadgetItem (id, -1, Str(num)+" - Partie "+Str(a)+Str(b)+Str(c)+Str(d), 0, 0) ; si vous souhaitez ajouter une image, utilisez
SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
If Random(1)=1
For b = 0 To 5
num+1
AddGadgetItem (id, -1, Str(num)+" - Sous Partie "+Str(a)+Str(b)+Str(c)+Str(d), 0, 1) ; si vous souhaitez ajouter une image, utilisez
SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
If Random(1)=1
For c = 0 To 5
num+1
AddGadgetItem (id, -1, Str(num)+" - Elément "+Str(a)+Str(b)+Str(c)+Str(d), 0, 2) ; si vous souhaitez ajouter une image, utilisez
SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
If Random(1)=1
For d = 0 To 5
num+1
AddGadgetItem (id, -1, Str(num)+" - SS Elément "+Str(a)+Str(b)+Str(c)+Str(d), 0, 3) ; si vous souhaitez ajouter une image, utilisez
SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
Next
EndIf
Next
If Random(1)=1
num+1
AddGadgetItem (id, -1, Str(num)+" - Sous Partie "+Str(a)+Str(b)+Str(c)+Str(d), 0, 1) ; si vous souhaitez ajouter une image, utilisez
SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
EndIf
EndIf
Next
EndIf
Next
For i=0 To 15;CountGadgetItems(0)
SetGadgetItemState(0,i,#PB_Tree_Expanded)
Next
Repeat
event=WaitWindowEvent()
If event=#PB_Event_Gadget
Select EventGadget()
Case 0
Select EventType()
Case #PB_EventType_LeftClick
SetGadgetText(3,Str(GetGadgetItemData(0,GetGadgetState(0))))
Case #PB_EventType_DragStart
Debug "start "+Str(GetGadgetState(0))
start=GetGadgetState(0)
DragPrivate(1,#PB_Drag_Move)
EndSelect
Case 1
Monte_element_tree_meme_niveau(0)
Case 2
Descend_element_tree_meme_niveau(0)
EndSelect
ElseIf event= #PB_Event_GadgetDrop
Select EventGadget()
Case 0
DeplaceOuCopieElementTree(0,start,GetGadgetState(0),EventDropAction())
EndSelect
EndIf
Until event= #PB_Event_CloseWindow
EndIf