listIcongadget() et removegadgetitem()
Publié : jeu. 31/août/2017 8:25
Salut
Toujours pour mon application (level editor 2D), j'utilise une listviewgadget pour afficher une liste des sprites de mon niveau (avec des options pour en afficher certains ou pas).
Le problème, c'est lorsque je supprime un sprite, je mets à jour cette liste avec removeGadgetItem(), et là, bam, ça me fait un trou dans ma liste (lignes vides) :

Vous savez comment je peux résoudre ça ?
Au départ, j'effaçais tous les éléments et je recréais la liste en fonction de la liste de sprites, mais le problème, c'est que sur des maps contenant des centaines voire milliers de sprites, c'est beaucoup trop long de recréer les gadgetitem dès que je supprime un sprite.
Un code pour illustrer le problème :
j'avais testé en faisant ça quand je supprime un element :
SetGadgetAttribute(0, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
SetGadgetAttribute(0, #PB_ListIcon_DisplayMode, #PB_ListIcon_SmallIcon)
Mais le problème, c'est que si j'ai plusieurs centaines de sprites, c'est aussi extrêmement long à recalculer...
Une idée de ce que je pourrais faire pour éviter ces lignes vides ?
EDIT :
bon, en utilisant TreeGadget() à la place, je n'ai plus ce problème.
Donc, finalement, je vais utiliser un TreeGadget() au lieu d'un LIstIconGadget(), en plus, je pourrais ajouter des dossier pour les types de sprites si besoin
c'te classe
Cependant, si vous avez une technique avec les listIconGadget() ça m'intéresse
Par contre, visiblement, on ne peut pas changer la taille des icones (imageID()) des treegadgets avec AddgadgetItem() ?
Toujours pour mon application (level editor 2D), j'utilise une listviewgadget pour afficher une liste des sprites de mon niveau (avec des options pour en afficher certains ou pas).
Le problème, c'est lorsque je supprime un sprite, je mets à jour cette liste avec removeGadgetItem(), et là, bam, ça me fait un trou dans ma liste (lignes vides) :

Vous savez comment je peux résoudre ça ?
Au départ, j'effaçais tous les éléments et je recréais la liste en fonction de la liste de sprites, mais le problème, c'est que sur des maps contenant des centaines voire milliers de sprites, c'est beaucoup trop long de recréer les gadgetitem dès que je supprime un sprite.
Un code pour illustrer le problème :
Code : Tout sélectionner
If OpenWindow(0,0,0,270,140,"ListViewGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0,10,10,250,120,"",250)
If LoadImage(0, #PB_Compiler_Home+"Examples\Sources\Data\File.bmp") ; changez le chemin/fichier contenant votre image 32x32 pixel
SetGadgetAttribute(0, #PB_ListIcon_DisplayMode, #PB_ListIcon_SmallIcon)
For a=1 To 12
AddGadgetItem (0,-1,"Elément "+Str(a)+" de la boîte à liste",ImageID(0)) ; défini le contenu de la boîte de liste
Next
EndIf
RemoveGadgetItem(0,2)
RemoveGadgetItem(0,4)
RemoveGadgetItem(0,5)
RemoveGadgetItem(0,7)
; SetGadgetState(0,9) ; sélectionne le dixième élément (la numérotation commmence à 0)
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
SetGadgetAttribute(0, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
SetGadgetAttribute(0, #PB_ListIcon_DisplayMode, #PB_ListIcon_SmallIcon)
Mais le problème, c'est que si j'ai plusieurs centaines de sprites, c'est aussi extrêmement long à recalculer...
Une idée de ce que je pourrais faire pour éviter ces lignes vides ?
EDIT :
bon, en utilisant TreeGadget() à la place, je n'ai plus ce problème.
Donc, finalement, je vais utiliser un TreeGadget() au lieu d'un LIstIconGadget(), en plus, je pourrais ajouter des dossier pour les types de sprites si besoin

c'te classe

Cependant, si vous avez une technique avec les listIconGadget() ça m'intéresse

Par contre, visiblement, on ne peut pas changer la taille des icones (imageID()) des treegadgets avec AddgadgetItem() ?