Page 1 sur 1

[RESOLUS] TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 15:20
par microdevweb
Image

Voila j'aimerais savoir comment récupérer l'ID du parent...
Exemple (voir image) lord d'un drag and drop, l'utilisateur fait glisser une image, j'aimerais savoir si c'est sur Preload ou create et si c'est sur Intro ou Niveau 1.

Je penses que vais être obligé d'utiliser les appis SendMessage_ etc..., mais s'il y a un autre solution.

Merci

Re: TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 15:29
par G-Rom
Si les fonctions native ne te le permet pas ( ce que j'ignore ) , tu peu structuré plus ton code pour remonté sur les parents , à la manière d'un scenegraph.

Code : Tout sélectionner

Structure node
  *parent.node  ; si NULL c'est que tu est en haut
  List childreen.node()
  gadgetID.l
EndStructure


Procedure AddChildreen(*this.node, *child.node)
  *child\parent = *this
  AddElement(*this\childreen())
  *this\childreen() = *child
EndProcedure


...

Re: TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 15:50
par microdevweb
Merci G-Rom,
j'ai trouvé également cette solution

Code : Tout sélectionner

Procedure GetParentTree(Parent,Id,TreeId)
      Protected Niv,N
      For N=Id To 0 Step -1
            Niv=GetGadgetItemAttribute(TreeId,N,#PB_Tree_SubLevel)
            If Niv=Parent
                  ProcedureReturn N
            EndIf
      Next
EndProcedure

Debug GetGadgetItemText(#TreeProject,GetParentTree(0,GetGadgetState(#TreeProject),#TreeProject))
;Renverra Intro ou Niveau 1


Re: [RESOLUS] TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 17:04
par falsam
je pense que ta procédure te renverra "Intro" systématiquement.

Re: [RESOLUS] TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 17:53
par falsam
Sauf mauvaise compréhension de la procédure GetParentTree(), un code pour illustrer mon doute précédent.

Essaye de glisser des éléments de la liste vers l'arbre.

Le parent renvoyé par la procédure GetParentTree() est systématiquement "Intro".

Code : Tout sélectionner

EnableExplicit

Enumeration
  #mf
  #mflist
  #mftree
EndEnumeration

Procedure GetParentTree(Parent,Id,TreeId)
  Protected Niv,N
  For N=Id To 0 Step -1
    Niv=GetGadgetItemAttribute(TreeId, N, #PB_Tree_SubLevel)
    If Niv=Parent
      ProcedureReturn N  
    EndIf
  Next
EndProcedure


Procedure OnDrag()
  Protected Files.s = ""       
  Protected n
  
  For n = 0 To CountGadgetItems(#mflist)-1
    If GetGadgetItemState(#mflist, n) & #PB_Explorer_Selected
      Files + GetGadgetText(#mflist) + GetGadgetItemText(#mflist, n) + Chr(10)  
    EndIf
  Next
  
  If Files <> ""
    DragFiles(Files)
  EndIf
EndProcedure

Procedure OnDrop()
  Protected n
  Protected Index = GetGadgetState(#mftree)
  Protected Parent.s = GetGadgetItemText(#mftree, GetParentTree(0, Index, #mftree))
  Protected Files.s = EventDropFiles()
  
  Debug parent
  
  If Parent <> "Intro"
    For n = 0 To CountString(Files, Chr(10))
      Debug StringField(Files, n+1, Chr(10))
      AddGadgetItem(#mftree, Index+1 , StringField(Files, n+1, Chr(10)), 0, 3)
    Next
    SetGadgetItemState(#mftree, Index, #PB_Tree_Expanded)
  EndIf
  
EndProcedure


OpenWindow(#mf, 0, 0, 800, 600, "test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ExplorerListGadget(#mflist, 10, 10, 300, 580, GetHomeDirectory(), #PB_Explorer_MultiSelect)
TreeGadget(#mftree, 400, 10, 390, 580)

AddGadgetItem(#mftree, -1, "Intro")         ;Item 0
AddGadgetItem(#mftree, -1, "Preload", 0, 1) ;Item 1
AddGadgetItem(#mftree, -1, "Image", 0, 2)
AddGadgetItem(#mftree, -1, "Sprite", 0, 2)
AddGadgetItem(#mftree, -1, "Sound", 0, 2)

AddGadgetItem(#mftree, -1, "Create", 0, 1)  ;Item 5
AddGadgetItem(#mftree, -1, "Image", 0, 2)
AddGadgetItem(#mftree, -1, "Sprite", 0, 2)
AddGadgetItem(#mftree, -1, "Sound", 0, 2)

SetGadgetItemState(#mftree, 0, #PB_Tree_Expanded)
SetGadgetItemState(#mftree, 1, #PB_Tree_Expanded)
SetGadgetItemState(#mftree, 5, #PB_Tree_Expanded)

EnableGadgetDrop(#mftree, #PB_Drop_Files,  #PB_Drag_Copy)

BindGadgetEvent(#mflist, @OnDrag(), #PB_EventType_DragStart)
BindEvent(#PB_Event_GadgetDrop, @OnDrop(), #mf, #mftree)

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend

Re: [RESOLUS] TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 19:10
par microdevweb
Bonjour falsam, dans le cadre mon projet elle fonctionne. Parent est égale au nœud parent en partant de 0 (Intro,Niveau 1) 1( image, Sprite etc...)
je ferais un petit exemple pour les personnes que cela intéresse (quant j'aurais 5 minutes)
Image

Re: [RESOLUS] TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 19:29
par microdevweb
Voila comme promis un code exemple, Une fois lancé faites un drag and drop sur un item de l'arbre

Code : Tout sélectionner

Procedure GetParentTree(Parent,Id,TreeId)
      Protected Niv,N
      For N=Id To 0 Step -1
            Niv=GetGadgetItemAttribute(TreeId,N,#PB_Tree_SubLevel)
            If Niv=Parent
                  ProcedureReturn N
            EndIf
      Next
EndProcedure
Procedure DropTree()
      Debug GetGadgetItemText(0,GetParentTree(0,GetGadgetState(0),0))
EndProcedure
OpenWindow(0,0,0,800,600,"teste",#PB_Window_SystemMenu)
TreeGadget(0,0,0,800,600)
AddGadgetItem(0,CountGadgetItems(0),"Node 1")
AddGadgetItem(0,CountGadgetItems(0),"Child 1",0,1)
AddGadgetItem(0,CountGadgetItems(0),"Item 1",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Item 2",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Child 2",0,1)
AddGadgetItem(0,CountGadgetItems(0),"Item 1",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Item 2",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Node 2")
AddGadgetItem(0,CountGadgetItems(0),"Child 1",0,1)
AddGadgetItem(0,CountGadgetItems(0),"Item 1",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Item 2",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Child 2",0,1)
AddGadgetItem(0,CountGadgetItems(0),"Item 1",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Item 2",0,2)
EnableGadgetDrop(0,#PB_Drop_Files,#PB_Drag_Copy)
BindEvent(#PB_Event_GadgetDrop,@DropTree(),0,0)
For N=0 To CountGadgetItems(0)-1
      SetGadgetItemState(0,N,#PB_Tree_Expanded)
Next
Repeat
      gEvent=WaitWindowEvent()
Until gEvent=#PB_Event_CloseWindow

Re: [RESOLUS] TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 20:51
par Micheao
Merci pour ce partage

Re: [RESOLUS] TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 21:29
par falsam
@microdevweb: Je persiste, ta procédure ne donne pas le noeud parent.

Si tu glisses un élément (média) dans Item2 du nœud Child2 lui même faisant parti du nœud Node 1, alors ta procédure retourne effectivement Node 1.

Mais comment tu sais si tu glisses dans item2 de child 2 ou item2 de child1 ?

La procédure aurait du te donner le parent directement au dessus c'est à dire Child 2 ou Child 1. Mais peut être que ça n'a pas d'importance pour ton projet :)

Re: [RESOLUS] TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 22:31
par microdevweb
@Falsam,

C'est parce que je voulais pouvoir choisir le niveau du parent
comme ça tu à le premier parent

Code : Tout sélectionner

Procedure GetParentTree(Parent,Id,TreeId)
      Protected Niv,N
      For N=Id To 0 Step -1
            Niv=GetGadgetItemAttribute(TreeId,N,#PB_Tree_SubLevel)
            If Niv=Parent
                  ProcedureReturn N
            EndIf
      Next
EndProcedure
Procedure DropTree()
     Niv=GetGadgetItemAttribute(0,GetGadgetState(0),#PB_Tree_SubLevel)
      If Niv>0
            Debug "Parent:"+GetGadgetItemText(0,GetParentTree(Niv-1,GetGadgetState(0),0))
      Else
            Debug "Je suis le premier parent"
      EndIf
EndProcedure
OpenWindow(0,0,0,800,600,"teste",#PB_Window_SystemMenu)
TreeGadget(0,0,0,800,600)
AddGadgetItem(0,CountGadgetItems(0),"Node 1")
AddGadgetItem(0,CountGadgetItems(0),"Child 1",0,1)
AddGadgetItem(0,CountGadgetItems(0),"Item 1",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Item 2",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Child 2",0,1)
AddGadgetItem(0,CountGadgetItems(0),"Item 1",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Item 2",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Node 2")
AddGadgetItem(0,CountGadgetItems(0),"Child 1",0,1)
AddGadgetItem(0,CountGadgetItems(0),"Item 1",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Item 2",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Child 2",0,1)
AddGadgetItem(0,CountGadgetItems(0),"Item 1",0,2)
AddGadgetItem(0,CountGadgetItems(0),"Item 2",0,2)
EnableGadgetDrop(0,#PB_Drop_Files,#PB_Drag_Copy)
BindEvent(#PB_Event_GadgetDrop,@DropTree(),0,0)
For N=0 To CountGadgetItems(0)-1
      SetGadgetItemState(0,N,#PB_Tree_Expanded)
Next
Repeat
      gEvent=WaitWindowEvent()
Until gEvent=#PB_Event_CloseWindow

Re: [RESOLUS] TreeGadget Récupérer ID parent

Publié : lun. 15/juin/2015 22:33
par falsam
Merci microdevweb :)