Page 1 of 2

change ListIcon and Panel Gadget Tab, Images (!)

Posted: Wed Oct 27, 2004 12:19 am
by -pantcho-
hello all, i wanted to know if there is any way to change a TAB image
AFTER i did addgadgetitem(...,useimage(x))
how can i change it on the fly? this goes also to listicon if i have certin item that if i change it status i want to change the icon also, how can it be done...?

thanks for you help guys. :)

Posted: Wed Oct 27, 2004 1:00 am
by Chris
When i want to change the image on the PanelGadget(), i use this method.
I don't know if it is the best, but ... :!:

Code: Select all

Img1 = CreateImage(#PB_Any,16,16)
StartDrawing(ImageOutput())
Box(0,0,16,16,RGB($0,$FF,$0)) : Circle(8,8,8,RGB($0,$0,$FF))
StopDrawing()

Img2 = CreateImage(#PB_Any,16,16)
StartDrawing(ImageOutput())
Box(0,0,16,16,RGB($FF,$0,$0))
StopDrawing()

Img3 = CreateImage(#PB_Any,16,16)
StartDrawing(ImageOutput())
Box(0,0,16,16,RGB($FF,$0,$FF))
StopDrawing()

If OpenWindow(0,0,0,322,220,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"PanelGadget")
  If CreateGadgetList(WindowID(0)) 
    PanelGadget     (0,8,8,306,203) 
    AddGadgetItem (0,-1,"Panel 1", UseImage(Img1)) 
    AddGadgetItem (0,-1,"Panel 2", UseImage(Img2)) 
    ButtonGadget(2, 10, 15, 80, 24,"Button 1") 
    ButtonGadget(3, 95, 15, 80, 24,"Button 2") 
    CloseGadgetList()
  EndIf
  
  ; I get the ImageList of the PanelGadget()
  hImageList = SendMessage_(GadgetID(0),#TCM_GETIMAGELIST, 0, 0)
  ; I change the image (s)
  ImageList_Replace_(hImageList, 1, UseImage(Img3),0)
  ImageList_Replace_(hImageList, 2, UseImage(Img1),0)
  
  Delay(3000) ; Just for see the change.
  
  ; And i apply the ImageList at the PanelGadget()
  SendMessage_(GadgetID(0),#TCM_SETIMAGELIST,0,hImageList)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Quit =  #True
    EndSelect
  Until Quit
EndIf 

Posted: Wed Oct 27, 2004 1:19 am
by -pantcho-
:D :D :D
thanks chris! thats a nice example!!

and your english isnt bad at all!!! mine sucks!! :P

Posted: Wed Oct 27, 2004 4:30 am
by Chris
Another way, for to change the image of the selected tab.
The selected tab have a green image, and all the unselected tabs have a red image.

Code: Select all

Img1 = CreateImage(#PB_Any,16,16)
StartDrawing(ImageOutput())
Box(0,0,16,16,RGB($0,$FF,$0))
StopDrawing()

Img2 = CreateImage(#PB_Any,16,16)
StartDrawing(ImageOutput())
Box(0,0,16,16,RGB($FF,$0,$0))
StopDrawing()


Global Img1,Img2,Img3,Img4, SelectedItem

Procedure ChangeImage(Index) ; change image on the fly
  ;déclare TC_ITEM structure, and set Mask to #TCIF_IMAGE
  pitem.TC_ITEM
  pitem\Mask = #TCIF_IMAGE
  
  pitem\iImage = 1 ; Index of the image for selected tab
  SendMessage_(GadgetID(0), #TCM_SETITEM, Index, @pitem)
  
  pitem\iImage = 2 ; Index of the image for unseleted tab
  SendMessage_(GadgetID(0), #TCM_SETITEM, SelectedItem, @pitem)
  
  SelectedItem = GetGadgetState(0) ; New value for selected tab
EndProcedure


If OpenWindow(0,0,0,322,220,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"PanelGadget")
  If CreateGadgetList(WindowID(0)) 
    PanelGadget     (0,8,8,306,203) 
    AddGadgetItem (0,-1,"Panel 1",UseImage(Img1))
    AddGadgetItem (0,-1,"Panel 2",UseImage(Img2)) 
    AddGadgetItem (0,-1,"Panel 3",UseImage(Img2)) 
    AddGadgetItem (0,-1,"Panel 4",UseImage(Img2)) 
    ButtonGadget(2, 10, 15, 80, 24,"Button 1") 
    ButtonGadget(3, 95, 15, 80, 24,"Button 2") 
    CloseGadgetList()
  EndIf
  
  SelectedItem = GetGadgetState(0)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Quit = 1
      Case #PB_EventGadget
        Select EventGadgetID()
          
          Case 0 ; call the ChangeImage procedure
            ChangeImage(GetGadgetState(0))
        EndSelect
    EndSelect
  Until = Quit = 1
EndIf 
:roll:

Posted: Wed Oct 22, 2008 11:22 pm
by eddy
updated version for PB4.20 PB4.30
- this function updates only one panelgadget in your window.

Code: Select all


Procedure UpdatePanelIcons(panel) ; change panel images on the fly
   ;check index and selectedItem
   Static SelectedItem=-1
   If SelectedItem=-1
      SelectedItem=GetGadgetState(panel)
      ProcedureReturn
   EndIf
   Protected Index=GetGadgetState(panel)
   If Index=SelectedItem : ProcedureReturn : EndIf
   
   ;declare TC_ITEM structure, and set Mask to #TCIF_IMAGE
   Protected pitem1.TC_ITEM
   Protected pitem2.TC_ITEM
   pitem1\Mask=#TCIF_IMAGE
   pitem2\Mask=#TCIF_IMAGE
   
   ;get images
   SendMessage_(GadgetID(panel), #TCM_GETITEM, Index, @pitem1)
   SendMessage_(GadgetID(panel), #TCM_GETITEM, SelectedItem, @pitem2)
   
   ;swap images
   Swap pitem1\iImage, pitem2\iImage
   SendMessage_(GadgetID(panel), #TCM_SETITEM, Index, @pitem1)
   SendMessage_(GadgetID(panel), #TCM_SETITEM, SelectedItem, @pitem2)
   SelectedItem=GetGadgetState(panel) ; New value for selected tab   
EndProcedure

; ********************
; EXAMPLE
; ********************

Img1=CreateImage(#PB_Any, 16, 16)
StartDrawing(ImageOutput(Img1))
   Box(0, 0, 16, 16, RGB($0, $FF, $0))
StopDrawing()

Img2=CreateImage(#PB_Any, 16, 16)
StartDrawing(ImageOutput(Img2))
   Box(0, 0, 16, 16, RGB($FF, $0, $0))
StopDrawing()

OpenWindow(1, 0, 0, 300, 200, "Icon Updating", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CompilerIf #PB_Compiler_Version<430
   CreateGadgetList(WindowID(1))
CompilerEndIf

PanelGadget(2, 5, 5, 290, 190)
AddGadgetItem(2, -1, "TAB 1", ImageID(Img1))
AddGadgetItem(2, -1, "TAB 2", ImageID(Img2))
AddGadgetItem(2, -1, "TAB 3", ImageID(Img2))
CloseGadgetList()
UpdatePanelIcons(2)

Repeat
   Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
         Break
      Case #PB_Event_Gadget
         If EventGadget()=2
            UpdatePanelIcons(2)
         EndIf 
   EndSelect
ForEver 


Posted: Thu Oct 23, 2008 12:51 pm
by gnozal
Personally, I use this code :

Code: Select all

Enumeration
  #Window_0
EndEnumeration
Enumeration
  #Panel_0
EndEnumeration
Enumeration
  #Image_Panel_0_1
  #Image_Panel_0_2
EndEnumeration
DataSection
  Image_Panel_0_1:
  Data.l $00010000,$10100001,$00180000,$03680018,$00160000,$00280000,$00100000,$00200000,$00010000,$00000018,$03400000,$00000000
  Data.l $00000000,$00000000,$00000000,$47470000,$48484847,$4C464646,$27274C4C,$0C0C0C27,$04050505,$08080404,$08080808,$43080808
  Data.l $49494343,$48484849,$244B4B4B,$C4C42424,$D0D0D0C4,$CAC0C0C0,$A2A2CACA,$575757A2,$898D8D8D,$73738989,$7F7F7F73,$AE474747
  Data.l $D1D1AEAE,$DDDDDDD1,$4CC5C5C5,$BFBF4C4C,$CDCDCDBF,$C3BBBBBB,$AAAAC3C3,$3E3E3EAA,$A9878787,$7B7BA9A9,$8C8C8C7B,$A84C4C4C
  Data.l $CDCDA8A8,$DBDBDBCD,$47BFBFBF,$C0C04747,$CDCDCDC0,$C4BCBCBC,$A9A9C4C4,$3B3B3BA9,$97676767,$7D7D9797,$8989897D,$AB4B4B4B
  Data.l $D0D0ABAB,$DBDBDBD0,$48C0C0C0,$C0C04848,$CDCDCDC0,$C4BCBCBC,$A6A6C4C4,$585858A6,$61424242,$7E7E6161,$8181817E,$A1494949
  Data.l $C5C5A1A1,$D9D9D9C5,$48C0C0C0,$C0C04848,$CDCDCDC0,$C2BEBEBE,$BDBDC2C2,$A7A7A7BD,$A5AAAAAA,$A0A0A5A5,$A2A2A2A0,$A39E9E9E
  Data.l $A7A7A3A3,$BFBFBFA7,$47C4C4C4,$C0C04747,$CDCDCDC0,$B8BABBBB,$B9B9BBB8,$BFBFBFBC,$BFBEBEBE,$BEBEBFBF,$C0BCBCC0,$BBC1BDBD
  Data.l $BEBEC0BB,$BEBEBEBF,$47C4C4C4,$C1C14747,$CBCBCBC1,$EBCCCACA,$EBEBE0EB,$DEDEDEDF,$DEDEDFDF,$E9E9DEDE,$DEF2F2DE,$F1DEEFEF
  Data.l $E0E0DEF1,$C3C2C2DD,$47C3C3C3,$C1C14747,$C8C5C5C1,$BDDFEBEB,$B7B7FFBD,$FFFFFFFF,$FFFFFBFB,$C3C3FFFF,$FF8A8AFF,$8FFF9292
  Data.l $F8F8FF8F,$DEE1E1FF,$48BFBEBE,$C1C14848,$C8C3C3C1,$62DBF8F8,$6363FE62,$FEFFFFFD,$FEFEFFFF,$5E5EFEFE,$FE4E4EFE,$4EFEE4E4
  Data.l $7171FD4E,$DFF9F9FE,$48BFBABA,$C1C14848,$C8C3C3C1,$7CDCF3F3,$3C3CFF7C,$FF8D8DFE,$FFFF7676,$7777FFFF,$FF5D5DFF,$5FFFE4E4
  Data.l $8181FE5F,$DFF6F6FF,$48BFBBBB,$C1C14848,$C8C3C3C1,$75DCF5F5,$5F5FFF75,$FFE5E5FE,$59FF9B9B,$7676FF59,$FF4242FF,$43FF9595
  Data.l $AAAAFE43,$DFEFEFFF,$48BFBBBB,$C1C14848,$C8C3C3C1,$66DCF8F8,$5050FF66,$FFE5E5FE,$5BFF9A9A,$6060FF5B,$FF5353FF,$52FFEEEE
  Data.l $6E6EFE52,$E1FCFCFF,$48C1BCBC,$BFBF4848,$C5C3C3BF,$BFD9E4E4,$8181FDBF,$FD8A8AFC,$FFFD7979,$C3C3FDFF,$FD8080FD,$86FD8787
  Data.l $F3F3FC86,$D5D8D8FD,$49B4B4B4,$C9C94949,$D4D4D4C9,$FFE7E5E5,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
  Data.l $FFFFFFFF,$878686FF,$5B6A6B6B,$87875B5B,$C4C4C487,$C1BFC0C0,$BEBEC3C1,$C3BFBFC3,$C3C3BFBF,$C1C1C3C3,$C3BEBEC3,$BEC3BFBF
  Data.l $C2C2C3BE,$B8B8B8C3,$49BBBBBB,$00004949,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487
  Data.l $0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487
  Data.b $87,$C4
  Image_Panel_0_2:
  Data.l $00010000,$20200001,$00000010,$02E80000,$00160000,$00280000,$00200000,$00400000,$00010000,$00000004,$02000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$80000080,$80000000,$00800080,$00800000,$80800080,$C0C00000,$808001C0
  Data.l $00000180,$FF0000FF,$FF000100,$00FF01FF,$00FF0000,$FFFF00FF,$FFFF0100,$000001FF,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00008007,$00000000,$00000000,$07000000,$00808877,$00000000,$00000000,$77070000,$80887897,$00000000
  Data.l $00000000,$97778700,$888888FF,$00000080,$00000000,$FF278700,$88780700,$00000088,$00000000,$00FF8700,$780730B3,$00000088
  Data.l $00000000,$BB008F00,$073033B3,$00000078,$00000000,$BBBB8000,$303333F7,$00000007,$00000000,$FFBB0300,$333373BB,$00000030
  Data.l $00000000,$B3FF8378,$3033B77B,$00000000,$77000000,$37B78878,$0373BB37,$00000033,$78770000,$733B8878,$03B77B73,$000000BB
  Data.l $80787700,$B7838878,$0B0BB837,$000030BB,$00807877,$00808878,$8B3000BB,$778000B3,$00008078,$BB838878,$BBBB030B,$88870030
  Data.l $00000080,$BB838878,$33BB8B80,$70879000,$00AA0000,$33808878,$0033BBBB,$70870000,$0000AA00,$80808878,$00003333,$70879000
  Data.l $00AA00F0,$88808878,$00000000,$70870000,$0000AA00,$88808878,$00000080,$70870009,$00AA00F0,$88808878,$00000080,$70870000
  Data.l $0000AA00,$88808878,$09000080,$70870000,$880000F0,$88808878,$00090980,$70870000,$77880000,$88808878,$00000080,$70870000
  Data.l $FF778800,$88807877,$00000080,$70870000,$77FF7788,$78707777,$00000080,$88870000,$7777FF77,$77877877,$00000070,$77880000
  Data.l $777777FF,$78778778,$00000080,$88000000,$78777777,$80787787,$00000000,$00000000,$88787788,$00808888,$00000000,$00000000
  Data.l $00808800,$00000000,$00000000,$FFFF0000,$FFFFFFF9,$FFFF7FE0,$FEFF1F80,$FCFF0700,$FCFF0100,$FCFF0100,$FCFF0100,$FCFF0100
  Data.l $F0FF0100,$C0FF0300,$00FF0300,$00FC0100,$00F00100,$00C00100,$00000300,$00000700,$00000D00,$00003F00,$0000FD00,$0000FF07
  Data.l $0000FB03,$0000FF03,$0000EF03,$0000BF02,$0000FF03,$0000FF03,$0000FF03,$0000FF03,$00C0FF07,$00F0FF1F,$7FFCFF7F
  Data.b $FF,$FF
EndDataSection
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 301, 269, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    PanelGadget(#Panel_0, 16, 16, 262, 238)
      AddGadgetItem(#Panel_0, -1, "Tab #1", CatchImage(#Image_Panel_0_1, ?Image_Panel_0_1))
      AddGadgetItem(#Panel_0, -1, "Tab #2", CatchImage(#Image_Panel_0_2, ?Image_Panel_0_2))
    CloseGadgetList()
  EndIf
EndProcedure

; ======================================================================
Procedure SetPanelGadgetTabIcon(GadgetNumber.l, TabNumber.l, ImageNumber.l)
  Protected hImageList.l, pitem.TC_ITEM, hImg.l
  hImg = ImageID(ImageNumber)
  ; get the ImageList of the PanelGadget
  hImageList = SendMessage_(GadgetID(GadgetNumber), #TCM_GETIMAGELIST, 0, 0) 
  If hImageList = 0 ; no image list, create one
    hImageList = ImageList_Create_(16, 16, #ILC_COLOR32 | #ILC_MASK, 20, 100)
    SendMessage_(GadgetID(GadgetNumber), #TCM_SETIMAGELIST, 0, hImageList) 
  EndIf
  ; set image
  SendMessage_(GadgetID(GadgetNumber), #TCM_GETITEM, TabNumber, @pitem) 
  pitem\mask = #TCIF_IMAGE
  If pitem\iImage = 0 ; new image
    If GetObjectType_(hImg) = #OBJ_BITMAP 
      pitem\iImage = ImageList_Add_(hImageList, hImg, 0) 
    Else
      pitem\iImage = ImageList_ReplaceIcon_(hImageList, -1, hImg) 
    EndIf
  Else ; replace image
    If GetObjectType_(hImg) = #OBJ_BITMAP 
      pitem\iImage = ImageList_Replace_(hImageList, pitem\iImage, hImg, 0) 
    Else
      pitem\iImage = ImageList_ReplaceIcon_(hImageList, pitem\iImage, hImg) 
    EndIf
  EndIf 
  SendMessage_(GadgetID(GadgetNumber), #TCM_SETITEM, TabNumber, @pitem)
EndProcedure
Procedure ResetPanelGadgetTabIcon(GadgetNumber.l, TabNumber.l)
  Protected pitem.TC_ITEM
  SendMessage_(GadgetID(GadgetNumber), #TCM_GETITEM, TabNumber, @pitem) 
  pitem\mask = #TCIF_IMAGE
  pitem\iImage = -1
  SendMessage_(GadgetID(GadgetNumber), #TCM_SETITEM, TabNumber, @pitem)
EndProcedure
; ======================================================================

OpenWindow_Window_0()

Repeat
  
  While WindowEvent() : Wend
  
  ; demo
  i + 1
  If i % 2 = 0
    SetPanelGadgetTabIcon(#Panel_0, 0, #Image_Panel_0_1)
    SetPanelGadgetTabIcon(#Panel_0, 1, #Image_Panel_0_2)
  Else
    SetPanelGadgetTabIcon(#Panel_0, 0, #Image_Panel_0_2)
    SetPanelGadgetTabIcon(#Panel_0, 1, #Image_Panel_0_1)
  EndIf
  Delay(1000)
  If i = 10
    Break
  EndIf
  
ForEver

Posted: Thu Oct 23, 2008 1:07 pm
by eddy
Do you know how to transfer a tab icon from a panelgadget to an other one ?

Posted: Thu Oct 23, 2008 1:21 pm
by gnozal
eddy wrote:Do you know how to transfer a tab icon from a panelgadget to an other one ?
I don't understand what you mean with 'transfer', but two panelgadgets can use the same image.

Posted: Thu Oct 23, 2008 3:31 pm
by eddy
I'm coding a drag'n'drop function for panelgadgets. http://www.purebasic.fr/english/viewtopic.php?t=34590
I need to copy an tab icon in my drop function.

Panel1 ---> tab + text + icon --> Panel2

Posted: Thu Oct 23, 2008 4:14 pm
by gnozal
eddy wrote:I'm coding a drag'n'drop function for panelgadgets. http://www.purebasic.fr/english/viewtopic.php?t=34590
I need to copy an tab icon in my drop function.
Panel1 ---> tab + text + icon --> Panel2
Stupid question (I didn't try) : copying the tab info with #TCM_GETITEM from the 1st panel and pasting it with #TCM_SETITEM in the 2nd panel doesn't work ?

Posted: Thu Oct 23, 2008 4:22 pm
by eddy
#TCM_SETITEM will only update the image index to use.

Each panel have a specific imagelist.
The problem is to update these imagelists.

I will post a code sample to make some tests. It will be easier to see the problem :wink:

Posted: Thu Oct 23, 2008 4:40 pm
by gnozal
eddy wrote:#TCM_SETITEM will only update the image index to use.
If you know the image list [TCM_GETIMAGELIST] and the image index [TCM_GETITEM] in this list, iirc you can get the image handle with ImageList_GetImageInfo_().
So you can add the image handle to the 2nd panel image list and then use TCM_SETITEM.
I don't have PB available right now to test some code, sorry.

Posted: Thu Oct 23, 2008 5:35 pm
by eddy
I don't have PB available right now to test some code, sorry
Me too :wink:

Posted: Thu Oct 23, 2008 8:41 pm
by eddy
- fixed code -
Here is my test code
... I found the solution. :D

Code: Select all


; ********************
; EXAMPLE
; ********************

Ico1=CreateImage(#PB_Any, 16, 16)
StartDrawing(ImageOutput(Ico1))
   Box(0, 0, 16, 16, RGB($0, $FF, $0))
StopDrawing()

Ico2=CreateImage(#PB_Any, 16, 16)
StartDrawing(ImageOutput(Ico2))
   Box(0, 0, 16, 16, RGB($FF, $0, $0))
StopDrawing()

OpenWindow(1, 0, 0, 300, 100, "Copy panelgadget icon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CompilerIf #PB_Compiler_Version<430
   CreateGadgetList(WindowID(1))
CompilerEndIf

PanelGadget(2, 5, 5, 90, 90)
AddGadgetItem(2, -1, "Source", ImageID(Ico1))
CloseGadgetList()

PanelGadget(3, 100, 5, 190, 90)
AddGadgetItem(3, -1, "Target", ImageID(Ico2))
CloseGadgetList()

Repeat
   Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
         Break
      Case #PB_Event_Gadget
         
         TempIcon=CreateImage(#PB_Any, 16, 16)
         AddGadgetItem(3, 1, "New", ImageID(TempIcon))
         
         TC_ITEM.TC_ITEM
         TC_ITEM\Mask=#TCIF_IMAGE
         
         ;icon to copy
         SendMessage_(GadgetID(2), #TCM_GETITEM, 0, @TC_ITEM.TC_ITEM)
         i1=TC_ITEM\iImage
         l1=SendMessage_(GadgetID(2), #TCM_GETIMAGELIST, 0, 0)
         icoToCopy=ImageList_GetIcon_(l1, i1, #ILD_TRANSPARENT)
         
         ;icon to replace
         SendMessage_(GadgetID(3), #TCM_GETITEM, 1, @TC_ITEM.TC_ITEM)
         i2=TC_ITEM\iImage
         l2=SendMessage_(GadgetID(3), #TCM_GETIMAGELIST, 0, 0)
         ImageList_ReplaceIcon_(l2, i2, icoToCopy)
         
   EndSelect
ForEver

Re: change ListIcon and Panel Gadget Tab, Images (!)

Posted: Sun Feb 12, 2012 6:50 pm
by javabean
There is a kind of memory leak in Gnozal's procedure.
pitem\mask = #TCIF_IMAGE has to be set BEFORE the #TCM_GETITEM message is sent. Otherwise "pitem\iImage" is always 0 and every time the procedure is called an image is added to to Imagelist.

Here is a fixed version of Gnozal's code:

Code: Select all

Enumeration
  #Window_0
EndEnumeration
Enumeration
  #Panel_0
  #Button_0
EndEnumeration
Enumeration
  #Image_Panel_0_1
  #Image_Panel_0_2
EndEnumeration

Define.i Event, EventWindow, EventGadget, EventType, EventMenu, cnt


Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 301, 269, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    
    PanelGadget(#Panel_0, 16, 16, 262, 238)
      AddGadgetItem(#Panel_0, -1, "Tab #1", CatchImage(#Image_Panel_0_1, ?Image_Panel_0_1))
        ButtonGadget(#Button_0,5,5,100,30,"Button")

      AddGadgetItem(#Panel_0, -1, "Tab #2", CatchImage(#Image_Panel_0_2, ?Image_Panel_0_2))
    CloseGadgetList()
               
  EndIf
EndProcedure

; ======================================================================
Procedure SetPanelGadgetTabIcon(GadgetNumber.i, TabNumber.i, ImageNumber.i)
  Protected hImageList.i, pitem.TC_ITEM, hImg.i
  
  hImg = ImageID(ImageNumber)
  
  ; get the ImageList of the PanelGadget
  hImageList = SendMessage_(GadgetID(GadgetNumber), #TCM_GETIMAGELIST, 0, 0)
  If hImageList = 0 ; no image list, create one
    hImageList = ImageList_Create_(16, 16, #ILC_COLOR32 | #ILC_MASK, 20, 100)
    SendMessage_(GadgetID(GadgetNumber), #TCM_SETIMAGELIST, 0, hImageList)
  EndIf
  
  ; set image
  pitem\mask = #TCIF_IMAGE     ;set  pitem\mask BEFORE calling the #TCM_GETITEM message
  SendMessage_(GadgetID(GadgetNumber), #TCM_GETITEM, TabNumber, @pitem)
  
  If pitem\iImage = 0 ; new image
    If GetObjectType_(hImg) = #OBJ_BITMAP
      pitem\iImage = ImageList_Add_(hImageList, hImg, 0)
    Else
      pitem\iImage = ImageList_ReplaceIcon_(hImageList, -1, hImg)
    EndIf
  Else ; replace image
    If GetObjectType_(hImg) = #OBJ_BITMAP
      pitem\iImage = ImageList_Replace_(hImageList, pitem\iImage, hImg, 0)
    Else
      pitem\iImage = ImageList_ReplaceIcon_(hImageList, pitem\iImage, hImg)
    EndIf
  EndIf
  SendMessage_(GadgetID(GadgetNumber), #TCM_SETITEM, TabNumber, @pitem)
EndProcedure


Procedure ResetPanelGadgetTabIcon(GadgetNumber.i, TabNumber.i)
  Protected pitem.TC_ITEM
  pitem\mask = #TCIF_IMAGE
  SendMessage_(GadgetID(GadgetNumber), #TCM_GETITEM, TabNumber, @pitem)
  pitem\iImage = -1
  SendMessage_(GadgetID(GadgetNumber), #TCM_SETITEM, TabNumber, @pitem)
EndProcedure
; ======================================================================

OpenWindow_Window_0()
cnt = 1

Repeat
 
  Select WaitWindowEvent()
    
    Case #PB_Event_CloseWindow
      quit = 1
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
          If cnt%2
            SetPanelGadgetTabIcon(#Panel_0, 0, #Image_Panel_0_2)
            SetPanelGadgetTabIcon(#Panel_0, 1, #Image_Panel_0_1)
          Else
            SetPanelGadgetTabIcon(#Panel_0, 0, #Image_Panel_0_1)
            SetPanelGadgetTabIcon(#Panel_0, 1, #Image_Panel_0_2)        
          EndIf
          cnt = cnt+1
      EndSelect
  
  EndSelect
 
Until quit = 1
End

DataSection
  Image_Panel_0_1:
  Data.l $00010000,$10100001,$00180000,$03680018,$00160000,$00280000,$00100000,$00200000,$00010000,$00000018,$03400000,$00000000
  Data.l $00000000,$00000000,$00000000,$47470000,$48484847,$4C464646,$27274C4C,$0C0C0C27,$04050505,$08080404,$08080808,$43080808
  Data.l $49494343,$48484849,$244B4B4B,$C4C42424,$D0D0D0C4,$CAC0C0C0,$A2A2CACA,$575757A2,$898D8D8D,$73738989,$7F7F7F73,$AE474747
  Data.l $D1D1AEAE,$DDDDDDD1,$4CC5C5C5,$BFBF4C4C,$CDCDCDBF,$C3BBBBBB,$AAAAC3C3,$3E3E3EAA,$A9878787,$7B7BA9A9,$8C8C8C7B,$A84C4C4C
  Data.l $CDCDA8A8,$DBDBDBCD,$47BFBFBF,$C0C04747,$CDCDCDC0,$C4BCBCBC,$A9A9C4C4,$3B3B3BA9,$97676767,$7D7D9797,$8989897D,$AB4B4B4B
  Data.l $D0D0ABAB,$DBDBDBD0,$48C0C0C0,$C0C04848,$CDCDCDC0,$C4BCBCBC,$A6A6C4C4,$585858A6,$61424242,$7E7E6161,$8181817E,$A1494949
  Data.l $C5C5A1A1,$D9D9D9C5,$48C0C0C0,$C0C04848,$CDCDCDC0,$C2BEBEBE,$BDBDC2C2,$A7A7A7BD,$A5AAAAAA,$A0A0A5A5,$A2A2A2A0,$A39E9E9E
  Data.l $A7A7A3A3,$BFBFBFA7,$47C4C4C4,$C0C04747,$CDCDCDC0,$B8BABBBB,$B9B9BBB8,$BFBFBFBC,$BFBEBEBE,$BEBEBFBF,$C0BCBCC0,$BBC1BDBD
  Data.l $BEBEC0BB,$BEBEBEBF,$47C4C4C4,$C1C14747,$CBCBCBC1,$EBCCCACA,$EBEBE0EB,$DEDEDEDF,$DEDEDFDF,$E9E9DEDE,$DEF2F2DE,$F1DEEFEF
  Data.l $E0E0DEF1,$C3C2C2DD,$47C3C3C3,$C1C14747,$C8C5C5C1,$BDDFEBEB,$B7B7FFBD,$FFFFFFFF,$FFFFFBFB,$C3C3FFFF,$FF8A8AFF,$8FFF9292
  Data.l $F8F8FF8F,$DEE1E1FF,$48BFBEBE,$C1C14848,$C8C3C3C1,$62DBF8F8,$6363FE62,$FEFFFFFD,$FEFEFFFF,$5E5EFEFE,$FE4E4EFE,$4EFEE4E4
  Data.l $7171FD4E,$DFF9F9FE,$48BFBABA,$C1C14848,$C8C3C3C1,$7CDCF3F3,$3C3CFF7C,$FF8D8DFE,$FFFF7676,$7777FFFF,$FF5D5DFF,$5FFFE4E4
  Data.l $8181FE5F,$DFF6F6FF,$48BFBBBB,$C1C14848,$C8C3C3C1,$75DCF5F5,$5F5FFF75,$FFE5E5FE,$59FF9B9B,$7676FF59,$FF4242FF,$43FF9595
  Data.l $AAAAFE43,$DFEFEFFF,$48BFBBBB,$C1C14848,$C8C3C3C1,$66DCF8F8,$5050FF66,$FFE5E5FE,$5BFF9A9A,$6060FF5B,$FF5353FF,$52FFEEEE
  Data.l $6E6EFE52,$E1FCFCFF,$48C1BCBC,$BFBF4848,$C5C3C3BF,$BFD9E4E4,$8181FDBF,$FD8A8AFC,$FFFD7979,$C3C3FDFF,$FD8080FD,$86FD8787
  Data.l $F3F3FC86,$D5D8D8FD,$49B4B4B4,$C9C94949,$D4D4D4C9,$FFE7E5E5,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
  Data.l $FFFFFFFF,$878686FF,$5B6A6B6B,$87875B5B,$C4C4C487,$C1BFC0C0,$BEBEC3C1,$C3BFBFC3,$C3C3BFBF,$C1C1C3C3,$C3BEBEC3,$BEC3BFBF
  Data.l $C2C2C3BE,$B8B8B8C3,$49BBBBBB,$00004949,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487
  Data.l $0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487
  Data.b $87,$C4
  Image_Panel_0_2:
  Data.l $00010000,$20200001,$00000010,$02E80000,$00160000,$00280000,$00200000,$00400000,$00010000,$00000004,$02000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$80000080,$80000000,$00800080,$00800000,$80800080,$C0C00000,$808001C0
  Data.l $00000180,$FF0000FF,$FF000100,$00FF01FF,$00FF0000,$FFFF00FF,$FFFF0100,$000001FF,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00008007,$00000000,$00000000,$07000000,$00808877,$00000000,$00000000,$77070000,$80887897,$00000000
  Data.l $00000000,$97778700,$888888FF,$00000080,$00000000,$FF278700,$88780700,$00000088,$00000000,$00FF8700,$780730B3,$00000088
  Data.l $00000000,$BB008F00,$073033B3,$00000078,$00000000,$BBBB8000,$303333F7,$00000007,$00000000,$FFBB0300,$333373BB,$00000030
  Data.l $00000000,$B3FF8378,$3033B77B,$00000000,$77000000,$37B78878,$0373BB37,$00000033,$78770000,$733B8878,$03B77B73,$000000BB
  Data.l $80787700,$B7838878,$0B0BB837,$000030BB,$00807877,$00808878,$8B3000BB,$778000B3,$00008078,$BB838878,$BBBB030B,$88870030
  Data.l $00000080,$BB838878,$33BB8B80,$70879000,$00AA0000,$33808878,$0033BBBB,$70870000,$0000AA00,$80808878,$00003333,$70879000
  Data.l $00AA00F0,$88808878,$00000000,$70870000,$0000AA00,$88808878,$00000080,$70870009,$00AA00F0,$88808878,$00000080,$70870000
  Data.l $0000AA00,$88808878,$09000080,$70870000,$880000F0,$88808878,$00090980,$70870000,$77880000,$88808878,$00000080,$70870000
  Data.l $FF778800,$88807877,$00000080,$70870000,$77FF7788,$78707777,$00000080,$88870000,$7777FF77,$77877877,$00000070,$77880000
  Data.l $777777FF,$78778778,$00000080,$88000000,$78777777,$80787787,$00000000,$00000000,$88787788,$00808888,$00000000,$00000000
  Data.l $00808800,$00000000,$00000000,$FFFF0000,$FFFFFFF9,$FFFF7FE0,$FEFF1F80,$FCFF0700,$FCFF0100,$FCFF0100,$FCFF0100,$FCFF0100
  Data.l $F0FF0100,$C0FF0300,$00FF0300,$00FC0100,$00F00100,$00C00100,$00000300,$00000700,$00000D00,$00003F00,$0000FD00,$0000FF07
  Data.l $0000FB03,$0000FF03,$0000EF03,$0000BF02,$0000FF03,$0000FF03,$0000FF03,$0000FF03,$00C0FF07,$00F0FF1F,$7FFCFF7F
  Data.b $FF,$FF
EndDataSection