
-----------------------------------------------------------------------------
--# Attaching data to GtkButtons
-- Can pass integers or atoms which can be used directly.
-- Strings and more complex Euphoria objects are passed via pointer, 
-- which is created automatically, but must be 'unpacked' before use.
-----------------------------------------------------------------------------

include GtkEngine.e

sequence items = {
    {"Excesso Gasoline","gallon",3.599}, -- item #1
    {"Slippery Oil",    "quart", 2.49} -- item #2
}
enum NAME, UNIT, PRICE

constant pix = create(GdkPixbuf,"thumbnails/gconf-editor.png")

constant win = create(GtkWindow,
    "size=200x150,border_width=10,position=1,$destroy=Quit")

constant panel = create(GtkBox,"orientation=VERTICAL")
    add(win,panel)

constant img = create(GtkImage,pix)
    add(panel,img)

constant lbl1 = create(GtkLabel,"Lou's Service Station")
    add(panel,lbl1)

constant lbl2 = create(GtkLabel,"font=8,text='Associating data with buttons")
    add(panel,lbl2)

constant btnbox = create(GtkButtonBox)
    pack(panel,-btnbox)
    add(btnbox,{
	create(GtkButton,"Gas",_("Foo"),1),
	create(GtkButton,"Oil",_("Foo"),2)}) 

show_all(win)
main()

------------------------------------------------
function Foo(atom ctl, integer n) -- n is item #
------------------------------------------------
    Info(win,"Lou's Gas & Oil",
        items[n][NAME],  
        sprintf("$%2.2f per %s",{items[n][PRICE],items[n][UNIT]}))
    return 1
end function



