Réorganisation d'un treegadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Réorganisation d'un treegadget

Message 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
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Lance un bout de code, je n'ai pas le courage de me taper un code du début.
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message par KrisJNT »

Je peux t'en envoyer un si tu veux, mais, il s'agit juste d'un TreeGadget normal... :)
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Oui c'est cela, complété avec des parents enfants, et en décrivant bien ce que tu veux faire.
a+
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message 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 
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message par KrisJNT »

Merci SpaceMan !

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