Modifier la position d'un élément dans un ListIconGadget()

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Modifier la position d'un élément dans un ListIconGadget()

Message par Chris »

Un petit truc que j'avais fait pour un prog, (que j'ai abandonné depuis :lol:)

Comment modifier la position d'un élément dans un ListIconGadget().
(Du genre "Monter d'un cran", "Descendre d'un cran", etc...)

Bon, c'est du niveau débutant, mais ça peut toujours être utile.

Code : Tout sélectionner

; Modifier la position d'un élément dans une liste
; Auteur  : Chris
; Os      : Tous

#Window = 0

Enumeration
  #List
  #Btn_Up
  #Btn_Down
EndEnumeration

; Création d'une liste pour stocker la position des éléments
NewList ListOrder.l()

; Pour l'exemple, on la remplit avec 10 éléments
For i = 1 To 10
  AddElement(ListOrder()) : ListOrder() = i
Next

; Création de la fenêtre et des gadgets
If OpenWindow(#Window,100,100,310,210,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ListIcon")
  If CreateGadgetList(WindowID())
    ListIconGadget(#List,5,5,260,200,"Test",200,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
    ButtonGadget(#Btn_Up, 270, 60, 35, 30, "Haut") 
    ButtonGadget(#Btn_Down, 270, 100, 35, 30, "Bas") 
  EndIf
EndIf

; Affichage des éléments dans la ListIcon
ForEach ListOrder()
  AddGadgetItem(#List, -1, "Ligne "+Str(ListOrder()))
Next

Repeat
  Select WaitWindowEvent()
    Case #PB_EventGadget
      Select EventGadgetID()
        
        ; Sélection d'un élément dont on veut modifier la position
        Case #List
          If EventType() = #PB_EventType_LeftClick
            Selected = GetGadgetState(#List)
          EndIf
          
          
        Case #Btn_Up
          
          ; On veut remonter l'élément sélectionné
          If Selected > 0           ; Si il n'est pas déjà le premier
            SelectElement(ListOrder(), Selected)
            *OldPos = @ListOrder()  ; On récupère son adresse
            
            PreviousElement(ListOrder())
            *NewPos = @ListOrder()  ; On récupère l'adresse de celui qui le précède
            
            ; On échange les deux éléments
            SwapElements(ListOrder(), *OldPos, *NewPos)
            
            ; Et on réaffiche le tout
            ClearGadgetItemList(#List)
            ForEach ListOrder()
              AddGadgetItem(#List, -1, "Ligne "+Str(ListOrder()))
            Next
            
            ; On sélectionne l'élément à sa nouvelle position
            Selected -1 : SetGadgetState(#List, Selected)
          EndIf
          
        Case #Btn_Down
          ; On veut descendre l'élément sélectionné
          If Selected < CountGadgetItems(#List)-1 ; Si il n'est pas le dernier
            SelectElement(ListOrder(), Selected)
            *OldPos = @ListOrder()                ; On récupère son adresse
              
            NextElement(ListOrder())
            *NewPos = @ListOrder()                ; On récupère l'adresse de celui qui le suit
            
            ; On échange les deux éléments
            SwapElements(ListOrder(), *OldPos, *NewPos)
            
            ; Et on réaffiche le tout
            ClearGadgetItemList(#List)
            ForEach ListOrder()
              AddGadgetItem(#List, -1, "Ligne "+Str(ListOrder()))
            Next
            
            ; On sélectionne l'élément à sa nouvelle position
            Selected +1 : SetGadgetState(#List, Selected)
          EndIf
          
          
      EndSelect
    Case #PB_Event_CloseWindow
      Quit = 1
  EndSelect
Until Quit
End