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