
---------------------------------------------------------------------------------
--# Custom monetary formatting for GtkCellRenderers
---------------------------------------------------------------------------------

include GtkEngine.e
include std/locale.e
	
constant win = create(GtkWindow,
 "icon=face-cool,size=300x150,border_width=10,position=1,$destroy=Quit")

constant panel = add(win,create(GtkBox,VERTICAL))
constant scrol = pack(panel,create(GtkScrolledWindow),TRUE,TRUE)
		
sequence students = { -- name, age, amt due
    {"Sam Smith", 15, 1009.95},
    {"Sue Jones", 14, 12.99},
    {"Freddie Farkel",16,20.0054}, -- will round up
    $}
    
constant store = create(GtkListStore,{gSTR,gINT,gDBL})
	gtk:set(store,"data",students)

constant dollar = call_back(routine_id("monetary_format")) 

constant tv = add(scrol,create(GtkTreeView,{{"model",store}}))

constant 
-- note: Column is not a GTK widget, it is implemented
-- in EuGTK for convenience in creating GtkTreeViewColumns
-- and associated GtkCellRenderers with less coding...
      col1 = create(GtkColumn,"title=Name,type=text,text=1"),
      col2 = create(GtkColumn,"title=Age,type=text,text=2"),
      rend3 = create(GtkCellRendererText,{{"alignment",1,0}}),
      col3 = create(GtkTreeViewColumn,{
		{"title","Amt Due"},
		{"pack start",rend3,TRUE},
		{"add attribute",rend3,"text",3},
		{"cell data func",rend3,dollar}})
 
 gtk:add(tv,{col1,col2,col3})

show_all(win)
main()

---------------------------------------------------------------------
-- generic monetary formatting function;
-- currently broken in Windows, possibly because of locale problem?
----------------------------------------------------------------------
function monetary_format(atom layout, atom rend, atom mdl, atom iter)
----------------------------------------------------------------------
atom val = gtk:get(mdl,"col data from iter",iter,3) 
 gtk:set(rend,"property","markup",locale:money(val)) -- must set "property" here!
return 1
end function
