Page 1 sur 1

Réorganisation d'un treegadget

Publié : sam. 01/nov./2008 16:25
par KrisJNT
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

Publié : lun. 03/nov./2008 14:51
par Stefou
Lance un bout de code, je n'ai pas le courage de me taper un code du début.

Publié : mar. 04/nov./2008 21:26
par KrisJNT
Je peux t'en envoyer un si tu veux, mais, il s'agit juste d'un TreeGadget normal... :)

Publié : mer. 05/nov./2008 7:28
par Stefou
Oui c'est cela, complété avec des parents enfants, et en décrivant bien ce que tu veux faire.
a+

Publié : mer. 05/nov./2008 14:35
par SpaceMan
Slt KrisJNT
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 

Publié : mer. 05/nov./2008 18:22
par KrisJNT
Merci SpaceMan !

En retouchant un peu le code pour l'adapter à ma question, c'est exactement ce qu'il me faut !!! :D