Basic Univers

; Title : Ajout d'images ou d'icônes dans une ListIconGadget()
; Autor : Denis


UseJPEGImageDecoder()
UsePNGImageDecoder()

Enumeration
  #FenetrePrincipale
  #ListIconGadget1
  #Image
EndEnumeration

Enumeration
  #MenuImporterTiles
  #MenuQuitter
  #MenuAProposDe
EndEnumeration


Procedure AddItem(gadget.l, Row.l, Column.l, Text$, ImageIndex.l)
  ; add an item with an image from the ListImage or a subitem without image
  ; put -1 to ImageIndex to not display Image
  ; fill up var to set subitem icon and text
  var.LVITEM
 
  var\Mask = #LVIF_IMAGE | #LVIF_TEXT
  var\iItem = Row         ; row number
  var\iSubItem = Column   ; subitem
  var\pszText = @Text$    ; text to set
  var\iImage = ImageIndex ; index of icon in the list
 
  ; set text + icon in the listicongadget item/subitem
  If Column
    SendMessage_(GadgetID(gadget), #LVM_SETITEM, 0, @var)
  Else
    SendMessage_(GadgetID(gadget), #LVM_INSERTITEM, 0, @var)
  EndIf
  SetGadgetItemText(#ListIconGadget1, row, text$, 1)
EndProcedure

Procedure Importer()
  Static Hwnd_ListSmall
  NomFichier$ = OpenFileRequester("Importe Tiles", "", "Fichiers Images|*.BMP;*.PNG;*.JPG"  , 0, #PB_Requester_MultiSelection)
  If NomFichier$    ; teste si la chaine existe
    Repeat
      Fichier$ = GetFilePart(NomFichier$) ; récupère seulement le nom de fichier
      If LoadImage(1, NomFichier$)
        ; modif de dernière minute , avant le create image était en dehors de la procedure !
        If CountGadgetItems(#ListIconGadget1)= 0
          ; create an Image List : first And second param are icon size
          Hwnd_ListSmall = ImageList_Create_(ImageWidth(1), ImageHeight(1), #ILC_MASK | #ILC_COLOR32, 0, 30)
          ; assign the image list to the ListIconGadget
          SendMessage_(GadgetID(#ListIconGadget1), #LVM_SETIMAGELIST, #LVSIL_SMALL, Hwnd_ListSmall)
        EndIf
        IndexImage = ImageList_Add_(Hwnd_ListSmall, ImageID(1), 0)
        Debug CountGadgetItems(#ListIconGadget1)
        Debug IndexImage
        AddItem(#ListIconGadget1, CountGadgetItems(#ListIconGadget1), 0, Fichier$, IndexImage)
        FreeImage(1)
      EndIf
      NomFichier$ = NextSelectedFileName()
    Until NomFichier$ = ""
  EndIf
EndProcedure
; ***************************************************************************

If OpenWindow(#FenetrePrincipale, 0, 0, 420, 300, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(#FenetrePrincipale))
    ListIconGadget(#ListIconGadget1, 10, 55, 400, 236, "Tiles", 398 / 5 + 70, #PB_ListIcon_FullRowSelect )
    AddGadgetColumn(#ListIconGadget1, 1, "Column", 65)

    ;/ un petit menu
    If CreateMenu(0, WindowID(#FenetrePrincipale))
      MenuTitle("Fichier")
      MenuItem(#MenuImporterTiles, "Importer Tiles...")
      MenuItem(#MenuQuitter, "Quitter")
      MenuTitle("Aide")
      MenuItem(#MenuAProposDe, "A propos de...")
    EndIf
   
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Quit = 1
        Case #PB_Event_Menu
          Select EventMenu()
            ;/Partie
            Case #MenuQuitter : Quit = 1
            Case #MenuImporterTiles
              Importer()
          EndSelect
      EndSelect
    Until Quit
   
  EndIf
EndIf

ImageList_Destroy_(Hwnd_ListSmall)
End