--# Data passing, custom buttons include GtkEngine.e object secret = load(canonical_path(locate_file("resources/secret_message"))) object docs = `Key/Value Pairs This demo shows how to use a control's data space to pass multiple key/value pairs to Eu functions. ` ifdef UNIX then -- links in labels aren't working in Windows; docs &= sprintf( `See %s. `, -- link to docs; {canonical_path("documentation/HowItWorks.html#datapassing"),"Passing Data"}) end ifdef constant win = create(GtkWindow, "title=`Flo's Bakery`,size=300x-1,border=10,position=1,$destroy=Quit") constant panel = create(GtkBox,"orientation=VERTICAL") add(win,panel) constant lbl = create(GtkLabel) set(lbl,"markup",docs) add(panel,lbl) constant box = add(panel,create(GtkButtonBox, "orientation=HORIZONTAL,layout=1,spacing=10")) constant btn1 = create(GtkButton,"gtk-quit","Quit"), btn2 = create(GtkButton,"thumbnails/pie.png#_Pie",_("Yum")), btn3 = create(GtkButton,"thumbnails/cake.png#_Cake",_("Yum")) add(box,{btn1,btn2,btn3}) set(btn2,{ -- each time "data" is declared, another data item is created. {"data","dessert","Pumpkin Pie"}, -- first is named "dessert", value is "Pumpkin Pie" {"data","price","1.95"}, -- can only pass strings, not atoms/integers {"data","format","%s"}, {"data","pix","thumbnails/pie.png"}}) set(btn3,{ {"data","dessert","Birthday Cake"}, {"data","price","2.10"}, {"data","format",secret[2]}, {"data","pix","thumbnails/cake.png"}}) show_all(win) main() -------------------------------- function Yum(atom ctl) -------------------------------- object fmt = get(ctl,"data","format") object snack = get(ctl,"data","dessert") object price = get(ctl,"data","price") object pix = get(ctl,"data","pix") Info(win,"Flo's",sprintf(fmt,{snack}),price,,pix) return 1 end function