ListIconGadget, icons in other columns

Share your advanced PureBasic knowledge/code with the community.
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4747
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

ListIconGadget, icons in other columns

Post by Fangbeast »

I was playing around with this code years ago (With help) and just wanted to make sure it was compatible with the latest PB that I have in case I need it for something.

You can't use it and SetGadgetItemImage in the same code as that command clears the ListIconGadget image list as does ClearGadgetItems. So either you have icons in one column only with the pb command or any column you like with this one.

Otherwise, you'd have to remember to put BuildImageList in many, many places:):)

Use it, or not :):)
; // Visual designer created form code //

Define EventID, MenuID, GadgetID, WindowID

;- Window Constants

Enumeration 1
#Window_ChangeIconTest
EndEnumeration

#WindowIndex = #PB_Compiler_EnumerationValue

;- Gadget Constants

Enumeration 1
; Window_ChangeIconTest
#Gadget_ChangeIconTest_Itemlist
#Gadget_ChangeIconTest_Changeicon
#Gadget_ChangeIconTest_Exitdaproggi
EndEnumeration

#GadgetIndex = #PB_Compiler_EnumerationValue

Procedure.i Window_ChangeIconTest()
If OpenWindow(#Window_ChangeIconTest, 0, 0, 820, 600, "Change icon API test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
ListIconGadget(#Gadget_ChangeIconTest_Itemlist, 5, 5, 810, 555, "Randomtext", 200, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(#Gadget_ChangeIconTest_Itemlist, 1, "Otherstuff", 200)
AddGadgetColumn(#Gadget_ChangeIconTest_Itemlist, 2, "Dontknow", 200)
AddGadgetColumn(#Gadget_ChangeIconTest_Itemlist, 3, "Burntoast", 200)
ButtonGadget(#Gadget_ChangeIconTest_Changeicon, 5, 565, 195, 30, "Random icon change")
SetGadgetFont(#Gadget_ChangeIconTest_Changeicon, LoadFont(#Gadget_ChangeIconTest_Changeicon, "Comic Sans MS", 12))
ButtonGadget(#Gadget_ChangeIconTest_Exitdaproggi, 620, 565, 195, 30, "Exit program now")
SetGadgetFont(#Gadget_ChangeIconTest_Exitdaproggi, LoadFont(#Gadget_ChangeIconTest_Exitdaproggi, "Comic Sans MS", 12))
HideWindow(#Window_ChangeIconTest, #False)
ProcedureReturn WindowID(#Window_ChangeIconTest)
EndIf
EndProcedure

; // All program specific variables, structures etc //

#ListIconHeadingArea = -1 ;

#AtTheEndOfTheList = -1 ;

; // Add icons to rows other than the first one in ListIconGadget //

#LVM_SETEXTENDEDLISTVIEWSTYLE = $1036 ;
#LVS_EX_SUBITEMIMAGES = $2 ;

; // //

Enumeration 1
#Image_ListNormal ;
#Image_ListEmpty ;

#Image_ListArchived ;
#Image_ListDeleted ;
#Image_ListFavourite ;
#Image_ListLocked ;
EndEnumeration

#ImageIndex = #PB_Compiler_EnumerationValue

; // // _16x16

CatchImage(#Image_ListNormal, ?_Image_ListNormal) ;
CatchImage(#Image_ListEmpty, ?_Image_ListEmpty) ;

CatchImage(#Image_ListArchived, ?_Image_ListArchived) ;
CatchImage(#Image_ListDeleted, ?_Image_ListDeleted) ;
CatchImage(#Image_ListFavourite, ?_Image_ListFavourite) ;
CatchImage(#Image_ListLocked, ?_Image_ListLocked) ;

; // //

Structure IconData
HeaderListIcon.i ; ListIconGadget image list handle

ListNormal.i ;
ListEmpty.i ;

ListArchived.i ;
ListDeleted.i ;
ListFavourite.i ;
ListLocked.i ;
EndStructure

; // //

Global Icon.IconData ;

; // //

Declare BuildImageList(Gadget.i) ;
Declare ChangeIcon(MyGadget.i, MyRow.i, MyColumn.i, MyIcon.i) ;

; // //

DataSection
_Image_ListNormal: : IncludeBinary "Images\_16x16\Normal.ico" ;
_Image_ListEmpty: : IncludeBinary "Images\_16x16\Empty.ico" ;

_Image_ListArchived: : IncludeBinary "Images\_16x16\Archived.ico" ;
_Image_ListDeleted: : IncludeBinary "Images\_16x16\Deleted.ico" ;
_Image_ListFavourite: : IncludeBinary "Images\_16x16\Favourite.ico" ;
_Image_ListLocked: : IncludeBinary "Images\_16x16\Locked.ico" ;
EndDataSection

; // Rebuild the image list as it gets trashed by the clear command //

Procedure BuildImageList(Gadget.i)

; Create a new image list for the ListIconGadget if it doesn't exist or has been destroyed

If Icon\HeaderListIcon = #False
Icon\HeaderListIcon = ImageList_Create_(16, 16, #ILC_MASK | #ILC_COLOR32, 0, 6)

Icon\ListEmpty = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListEmpty))
Icon\ListNormal = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListNormal))

Icon\ListArchived = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListArchived))
Icon\ListDeleted = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListDeleted))
Icon\ListFavourite = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListFavourite))
Icon\ListLocked = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListLocked))

EndIf

; Set the new imagelist to the gadget

SendMessage_(GadgetID(Gadget.i), #LVM_SETIMAGELIST, #LVSIL_SMALL, Icon\HeaderListIcon)
ImageList_SetBkColor_(Icon\HeaderListIcon, #CLR_NONE)
SendMessage_(GadgetID(Gadget.i), #LVM_SETEXTENDEDLISTVIEWSTYLE, #LVS_EX_SUBITEMIMAGES, #LVS_EX_SUBITEMIMAGES)

EndProcedure

; // Update each column of a ListIconGadget with a user defined icon as needed //

Procedure ChangeIcon(MyGadget.i, MyRow.i, MyColumn.i, MyIcon.i)
LVG.lv_item
LVG\mask = #LVIF_IMAGE | #LVIF_TEXT
LVG\iItem = MyRow.i
LVG\iSubItem = MyColumn.i
ChangeText.s = GetGadgetItemText(MyGadget.i, MyRow.i, MyColumn.i)
LVG\pszText = @ChangeText.s
LVG\iImage = MyIcon.i
SendMessage_(GadgetID(MyGadget.i), #LVM_SETITEM, 0, @LVG)
EndProcedure

; // Main event handler for this small test program //

If Window_ChangeIconTest()

Define quitChangeIconTest = #False

AddGadgetItem(#Gadget_ChangeIconTest_Itemlist, #AtTheEndOfTheList, "Stuff" + #LF$ + "the" + #LF$ + "proverbial" + #LF$ + "duck", ImageID(#Image_ListNormal))

; Create a new image list for the ListIconGadgets and add the new icons to it. This has to be done after each
; ClearGadgetItems is used as that command trashes the image list.

BuildImageList(#Gadget_ChangeIconTest_Itemlist)

Repeat

EventID = WaitWindowEvent()
MenuID = EventMenu()
GadgetID = EventGadget()
WindowID = EventWindow()

Select EventID
Case #PB_Event_CloseWindow
Select WindowID
Case #Window_ChangeIconTest
quitChangeIconTest = #True
EndSelect

Case #PB_Event_Gadget

Select GadgetID

Case #Gadget_ChangeIconTest_Changeicon

ChangeIcon(#Gadget_ChangeIconTest_Itemlist, 0, Random(3), Icon\ListArchived )
ChangeIcon(#Gadget_ChangeIconTest_Itemlist, 0, Random(3), Icon\ListDeleted)
ChangeIcon(#Gadget_ChangeIconTest_Itemlist, 0, Random(3), Icon\ListFavourite)
ChangeIcon(#Gadget_ChangeIconTest_Itemlist, 0, Random(3), Icon\ListLocked)

Case #Gadget_ChangeIconTest_Exitdaproggi

quitChangeIconTest = #True

EndSelect

EndSelect

Until quitChangeIconTest

CloseWindow(#Window_ChangeIconTest)

EndIf

End
Amateur Radio, D-STAR/VK3HAF