PureBasic

Forums PureBasic
Nous sommes le Sam 25/Mai/2013 5:08

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 
Auteur Message
 Sujet du message: Monter ou descendre des éléments dans un tree
MessagePosté: Sam 26/Mai/2012 17:19 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 18/Jan/2007 14:08
Messages: 218
:? :? :? Salut à tous :? :? :?

Je viens de passer la journée la dessus,alors que pensais passer une petite heure dessus !!!
J'avais bien trouvé un code du LSI mais avec une liste et là je voulais le faire directement dans le TreeGadget.

Le but : Monter ou descendre des éléments du Tree sans changer leur profondeur !

En plus il y a une fonction qui déplace avec un DragAndDrop mais qui elle ne garde pas les profondeurs.

N’hésitez pas si vous trouvez des bug a me les signaler.

Gros poutou à tous et à +...

Code:
Procedure Monte_element_tree_meme_niveau(id_tree)
  Debug "Procedure Monte_element_tree_meme_niveau(id_tree)"
  pos=GetGadgetState(id_tree)
 
  If pos>-1
    niv= GetGadgetItemAttribute(id_tree,pos,#PB_Tree_SubLevel)
   
    pos_ou_inserer=pos-1
    If GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)>niv
      ;si l'élément précedent est plus profond
      Repeat ; on recul jusqu'a être au même niveau
        pos_ou_inserer-1
      Until GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=niv Or pos_ou_inserer=-1
     
    EndIf
   

    If GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)<niv
     
      Repeat
        pos_ou_inserer-1
      Until niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=<1 Or pos_ou_inserer=-1
     
      pos_ou_inserer+1
     
    EndIf
   
   
   
    If pos_ou_inserer>0 Or ( pos_ou_inserer=0 And niv=0 )
      pos_apres_au_meme_niv=pos
      Repeat
        pos_apres_au_meme_niv+1
      Until GetGadgetItemAttribute(id_tree,pos_apres_au_meme_niv,#PB_Tree_SubLevel)<=niv Or pos_apres_au_meme_niv>=CountGadgetItems(id_tree)

      s_pos_ou_inserer=pos_ou_inserer
      pos_a_bouger=pos
      For i=pos To pos_apres_au_meme_niv-1
       
        state=GetGadgetItemData(id_tree,pos_a_bouger)
        AddGadgetItem(id_tree,pos_ou_inserer,GetGadgetItemText(id_tree,pos_a_bouger),0,GetGadgetItemAttribute(id_tree,pos_a_bouger,#PB_Tree_SubLevel))
        SetGadgetItemData(id_tree,pos_ou_inserer,state)
        pos_ou_inserer+1
        pos_a_bouger+2
      Next

      RemoveGadgetItem(id_tree,pos_apres_au_meme_niv)
      SetGadgetState(id_tree,s_pos_ou_inserer)
     
     
    EndIf
   
   
  EndIf
 
EndProcedure

Procedure Descend_element_tree_meme_niveau(id_tree)
  Debug "----------------------------"
  pos=GetGadgetState(id_tree)
 
  If pos>-1
    niv= GetGadgetItemAttribute(id_tree,pos,#PB_Tree_SubLevel)
   
    pos_apres_au_meme_niv=pos
    Repeat
      pos_apres_au_meme_niv+1
    Until GetGadgetItemAttribute(id_tree,pos_apres_au_meme_niv,#PB_Tree_SubLevel)<=niv Or pos_apres_au_meme_niv>=CountGadgetItems(id_tree)
   
    pos_ou_inserer=pos_apres_au_meme_niv
    If GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=niv

      If GetGadgetItemAttribute(id_tree,pos_ou_inserer+1,#PB_Tree_SubLevel)>niv
        Repeat
          pos_ou_inserer+1
        Until  niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)>=0 Or pos_ou_inserer>=CountGadgetItems(id_tree)
        pos_ou_inserer-1
      EndIf
      pos_ou_inserer+1
    ElseIf niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=1
      pos_ou_inserer+1
    ElseIf niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)>1
      Repeat
        pos_ou_inserer+1
      Until  niv-GetGadgetItemAttribute(id_tree,pos_ou_inserer,#PB_Tree_SubLevel)=1 Or pos_ou_inserer>=CountGadgetItems(id_tree)
      pos_ou_inserer+1
    EndIf

   
    If pos_ou_inserer<=CountGadgetItems(id_tree)
     
      pos_insert=pos_ou_inserer-1
      For i=pos To pos_apres_au_meme_niv-1
        If GetGadgetItemAttribute(id_tree,i,#PB_Tree_SubLevel)<niv
          Break
        EndIf
        pos_insert+1
        state=GetGadgetItemData(id_tree,i)
        AddGadgetItem(id_tree,pos_insert,GetGadgetItemText(id_tree,i),0,GetGadgetItemAttribute(id_tree,i,#PB_Tree_SubLevel))
        SetGadgetItemData(id_tree,pos_insert,state)
      Next
     
      RemoveGadgetItem(id_tree,GetGadgetState(id_tree))
      SetGadgetState(id_tree,pos_ou_inserer-(pos_apres_au_meme_niv-pos))
     
    EndIf
   
  EndIf
EndProcedure



Procedure DeplaceOuCopieElementTree(id_tree,pos_origine,pos_destination,type)
  If pos_origine<>pos_destination
   
    niv_origine= GetGadgetItemAttribute(id_tree,pos_origine,#PB_Tree_SubLevel)
    niv_destination= GetGadgetItemAttribute(id_tree,pos_destination,#PB_Tree_SubLevel)
   
    decal_niv=niv_destination-niv_origine+1
    pos_fin_a_copier=pos_origine
    Repeat
      pos_fin_a_copier+1
    Until GetGadgetItemAttribute(id_tree,pos_fin_a_copier,#PB_Tree_SubLevel)<=niv_origine Or pos_apres_au_meme_niv>=CountGadgetItems(id_tree)
   
    pos_insert=pos_destination
   
    decal_pos=0
    For i=pos_origine To pos_fin_a_copier-1
     
     
      pos_insert+1
      niv_insert=GetGadgetItemAttribute(id_tree,i+decal_pos,#PB_Tree_SubLevel)+decal_niv
     
      state=GetGadgetItemData(id_tree,i+decal_pos)
      AddGadgetItem(id_tree,pos_insert,GetGadgetItemText(id_tree,i+decal_pos),0,GetGadgetItemAttribute(id_tree,i+decal_pos,#PB_Tree_SubLevel)+decal_niv)
      SetGadgetItemData(id_tree,pos_insert,state)
     
      If pos_origine>pos_destination
        decal_pos+1
      EndIf
    Next
    RemoveGadgetItem(id_tree,pos_origine+decal_pos)
   
  EndIf
 
EndProcedure
 
 
If OpenWindow(0, 0, 0, 320, 610, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TreeGadget(0, 10, 10, 250, 600,#PB_Tree_AlwaysShowSelection)     
  ButtonGadget(1,270,20,20,20,"^")
  ButtonGadget(2,270,50,20,20,"v"); liste arborescente standard
  StringGadget(3,270,80,40,20,"")
  EnableGadgetDrop(0, #PB_Drop_Private, #PB_Drag_Move | #PB_Drag_Copy ,1)
 
  ; liste arborescente avec cases à cocher + sans lignes reliant les noeuds
  num=-1
 
  For a = 0 To 5
    num+1
    AddGadgetItem (id, -1, Str(num)+" - Partie  "+Str(a)+Str(b)+Str(c)+Str(d), 0, 0) ; si vous souhaitez ajouter une image, utilisez
    SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
    If Random(1)=1
      For b = 0 To 5
        num+1
        AddGadgetItem (id, -1, Str(num)+" - Sous Partie  "+Str(a)+Str(b)+Str(c)+Str(d), 0, 1) ; si vous souhaitez ajouter une image, utilisez
        SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
        If Random(1)=1
          For c = 0 To 5
            num+1
            AddGadgetItem (id, -1, Str(num)+" - Elément  "+Str(a)+Str(b)+Str(c)+Str(d), 0, 2) ; si vous souhaitez ajouter une image, utilisez
            SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
            If Random(1)=1
              For d = 0 To 5
                num+1
                AddGadgetItem (id, -1, Str(num)+" - SS Elément  "+Str(a)+Str(b)+Str(c)+Str(d), 0, 3) ; si vous souhaitez ajouter une image, utilisez
                SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
              Next
            EndIf
           
          Next
          If Random(1)=1
            num+1
            AddGadgetItem (id, -1, Str(num)+" - Sous Partie  "+Str(a)+Str(b)+Str(c)+Str(d), 0, 1) ; si vous souhaitez ajouter une image, utilisez
            SetGadgetItemData(id,num,Val(Str(num)+Str(a)+Str(b)+Str(c)+Str(d)))
          EndIf
        EndIf
       
      Next
    EndIf
  Next
 
  For i=0 To 15;CountGadgetItems(0)
    SetGadgetItemState(0,i,#PB_Tree_Expanded)
  Next
 
  Repeat
    event=WaitWindowEvent()
    If event=#PB_Event_Gadget
      Select EventGadget()
        Case 0
          Select EventType()
            Case #PB_EventType_LeftClick
              SetGadgetText(3,Str(GetGadgetItemData(0,GetGadgetState(0))))
            Case #PB_EventType_DragStart
              Debug "start "+Str(GetGadgetState(0))
              start=GetGadgetState(0)
              DragPrivate(1,#PB_Drag_Move)
             
             
          EndSelect
         
        Case 1
          Monte_element_tree_meme_niveau(0)
        Case 2
          Descend_element_tree_meme_niveau(0)
      EndSelect
    ElseIf event= #PB_Event_GadgetDrop
      Select EventGadget()
        Case 0
          DeplaceOuCopieElementTree(0,start,GetGadgetState(0),EventDropAction())
      EndSelect
     
    EndIf
   
  Until  event= #PB_Event_CloseWindow
 
 
 
 
EndIf
 
 
 


Haut
 Profil  
 
 Sujet du message: Re: Monter ou descendre des éléments dans un tree
MessagePosté: Sam 26/Mai/2012 19:08 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Merci à toi Stefou, c'est utile merci :)

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Monter ou descendre des éléments dans un tree
MessagePosté: Sam 26/Mai/2012 22:25 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4443
Localisation: Isere
Salut STEPHOU, ça faisait un bail :D
J'ai essayé je ne sais pas si c'est l'effet voulu, mais quand on drag/drop un ss element sur un autre ss element du meme niveau dans le meme element, cela ne le deplace pas a coté du sous element, comme le ferait un comportement "habituel", mais ça créé un noeud regroupant les deux sous elements 8O

Autrement joli boulot 8)

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: Monter ou descendre des éléments dans un tree
MessagePosté: Dim 27/Mai/2012 6:57 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 18/Jan/2007 14:08
Messages: 218
Salut Kwai Chang caine

Effectivement le drag and drop n'est pas top, ce n'était pas ma priorité !
Je l'ai laissé quand même, cela peut donner des idée ...

a+


Haut
 Profil  
 
 Sujet du message: Re: Monter ou descendre des éléments dans un tree
MessagePosté: Dim 27/Mai/2012 22:23 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4443
Localisation: Isere
No problem ....c'etait pour aider :wink:

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: Monter ou descendre des éléments dans un tree
MessagePosté: Mer 30/Mai/2012 14:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
Salut,

j'ai bien une solution qui traine ici : (et qui fonctionne avec le drag & drop)
viewtopic.php?f=6&t=11969&hilit=treegadget

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye