Bonjour !
Je voudrais savoir comment on peut faire pour remonter ou descendre des items d'un treegadget sachant que si je choisi un item fils, j'aimerai que ça soit l'item père avec tous ses enfants qui soient déplacés ?
Merci pour vos réponses,
KrisJNT
Réorganisation d'un treegadget
Slt KrisJNT
si cet exemple de Inf0Byt3 peut aider, essaie de le comprendre afin de progresser
si cet exemple de Inf0Byt3 peut aider, essaie de le comprendre afin de progresser
Code : Tout sélectionner
Structure MoveTreeItem
Text.s
Level.l
ItemData.l
ImageID.l
EndStructure
Global NewList TMV.MoveTreeItem()
Procedure.l TreeGadgetGetParent(Tree, Item)
Level = GetGadgetItemAttribute(Tree, Item, #PB_Tree_SubLevel)
Parent = Item-1
While Parent >= 0 And Level <= GetGadgetItemAttribute(Tree,Parent,#PB_Tree_SubLevel)
Parent - 1
Wend
ProcedureReturn Parent
EndProcedure
Procedure.l TreeGadgetCountChildren(Gadget,Index)
SourceLevel = GetGadgetItemAttribute(Gadget,Index, #PB_Tree_SubLevel)
ChildCount = 0
For Count = Index+1 To CountGadgetItems(Gadget)-1
If GetGadgetItemAttribute(Gadget, Count, #PB_Tree_SubLevel) > SourceLevel
ChildCount + 1
Else
Break
EndIf
Next Count
ProcedureReturn ChildCount
EndProcedure
Procedure.l TreeGadgetExpandAll(Gadget)
CurrentState = GetGadgetState(Gadget)
For Expand = 0 To CountGadgetItems(Gadget)-1
CurrentItemState = GetGadgetItemState(Gadget,Expand)
SetGadgetItemState(Gadget,Expand,CurrentItemState | #PB_Tree_Expanded)
Next
SetGadgetState(Gadget,CurrentState)
ProcedureReturn 1
EndProcedure
Procedure up()
item = GetGadgetState(0)
If item = 0
ProcedureReturn 0
EndIf
oldlevel = GetGadgetItemAttribute(0,item,#PB_Tree_SubLevel)
totalchildren = TreeGadgetCountChildren(0,item)
itemparent = TreeGadgetGetParent(0,item)
If item = itemparent+1
ProcedureReturn 0
EndIf
For n = item To item+totalchildren
AddElement(tmv())
tmv()\text = GetGadgetItemText(0,n)
tmv()\level = GetGadgetItemAttribute(0,n,#PB_Tree_SubLevel)
Next
newitem = item
Repeat
newitem - 1
If GetGadgetItemAttribute(0,newitem,#PB_Tree_SubLevel) < oldlevel
Break
EndIf
If newitem < 0
ClearList(tmv())
ProcedureReturn 0
EndIf
Until GetGadgetItemAttribute(0,newitem,#PB_Tree_SubLevel) = oldlevel
RemoveGadgetItem(0,item)
ForEach tmv()
AddGadgetItem(0,newitem+v,tmv()\text,0,tmv()\level)
v+1
Next
ClearList(tmv())
SetGadgetState(0,newitem)
EndProcedure
Procedure down()
item = GetGadgetState(0)
If item = CountGadgetItems(0)
ProcedureReturn 0
EndIf
oldlevel = GetGadgetItemAttribute(0,item,#PB_Tree_SubLevel)
totalchildren = TreeGadgetCountChildren(0,item)
itemparent = TreeGadgetGetParent(0,item)
itemparentchildren = TreeGadgetCountChildren(0,itemparent)
If item = itemparent+itemparentchildren Or item = itemparent+itemparentchildren-totalchildren
ProcedureReturn 0
EndIf
For n = item To item+totalchildren
AddElement(tmv())
tmv()\text = GetGadgetItemText(0,n)
tmv()\level = GetGadgetItemAttribute(0,n,#PB_Tree_SubLevel)
Next
newitem = item
Repeat
newitem + 1
If GetGadgetItemAttribute(0,newitem,#PB_Tree_SubLevel) < oldlevel
Break
EndIf
If newitem > CountGadgetItems(0)
ClearList(tmv())
ProcedureReturn 0
EndIf
Until GetGadgetItemAttribute(0,newitem,#PB_Tree_SubLevel) = oldlevel
newitem = newitem+TreeGadgetCountChildren(0,newitem)
If newitem = CountGadgetItems(0)
ClearList(tmv())
ProcedureReturn 0
EndIf
ForEach tmv()
itemadd = newitem+v+1
AddGadgetItem(0,itemadd,tmv()\text,0,tmv()\level)
If v = 0
SetGadgetState(0,itemadd)
EndIf
v+1
Next
RemoveGadgetItem(0,item)
ClearList(tmv())
EndProcedure
If OpenWindow(0, 0, 0, 437, 292, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
TreeGadget(0, 0, 40, 435, 250,#PB_Tree_AlwaysShowSelection)
ButtonGadget(1, 0, 0, 215, 35, "up")
ButtonGadget(2, 220, 0, 215, 35, "down")
AddGadgetItem (ID, -1, "a", 0, 0)
AddGadgetItem (ID, -1, "b", 0, 0)
AddGadgetItem (ID, -1, "c", 0, 1)
AddGadgetItem (ID, -1, "d", 0, 1)
AddGadgetItem (ID, -1, "e", 0, 2)
AddGadgetItem (ID, -1, "f", 0, 2)
AddGadgetItem (ID, -1, "g", 0, 3)
AddGadgetItem (ID, -1, "h", 0, 3)
AddGadgetItem (ID, -1, "i", 0, 2)
AddGadgetItem (ID, -1, "j", 0, 1)
AddGadgetItem (ID, -1, "k", 0, 2)
AddGadgetItem (ID, -1, "l", 0, 3)
Repeat
Event = WaitWindowEvent()
If event = #PB_Event_Gadget
Select EventGadget()
Case 1
If GetGadgetState(0) <> -1
up()
TreeGadgetExpandAll(0)
EndIf
Case 2
If GetGadgetState(0) <> -1
down()
TreeGadgetExpandAll(0)
EndIf
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIf