-------------------------------------------------------------------------------- --# Widgets have a "data" field which is a sort of associative list. -- You delare various named variables and attach them to the control, -- then access them later by name. All names and data MUST be strings. -- This particular demo makes using these much more complicated that it -- needs to be, because I am 'encrypting' the answers, -- and displaying them in a drop-down GtkExpander. -- For an easier introduction to the use of data fields, please look at -- Passing Data in /documentation/HowItWorks.html and test18.ex -------------------------------------------------------------------------------- include GtkEngine.e include resources/mongoose.e -- for oeu_logo as pixbuf include resources/clown.e -- for clown pixbuf (pixbufs are re-usable, unlike images) constant docs = ` Widgets have a Data space which you can use to declare and pass key/value pairs ` constant q1 = "What is purple and conquered the world?", ans1 = -- 'encoded' answer, so as not to spoil the joke for the programmer... {254,27,69,114,71,74,117,110,129,106,119,109,110,123,41,125,113,110,41,80,123,106,121,110, 42,69,56,114,71}, q2 = "What lies at the bottom of the ocean and twitches?", ans2 = -- 'top secret!' {254,23,69,114,71,74,41,119,110,123,127,120,126,124,41,128,123,110,108,116,55,69,56,114,71}, q3 = "Why is Christmas just like another day at the office?", ans3 = {254,71,98,120,126,41,109,120,41,106,117,117,41,120,111,41,125,113,110,41,128,120,123,116, 41,106,119,109,41,125,113,110,41,111,106,125,41,112,126,130,19,114,119,41,125,113,110,41, 124,126,114,125,41,112,110,125,124,41,106,117,117,41,125,113,110,41,108,123,110,109,114, 125,55} constant foo = call_back(routine_id("Foo")) -- allow for compiling w/o error constant win = create(GtkWindow, "title=`Data Passing`,border_width=10,position=1,icon=oeu_logo,$destroy=Quit") constant panel = create(GtkBox,VERTICAL,10) add(win,panel) constant lbl = create(GtkLabel) set(lbl,"markup",docs) add(panel,lbl) Box box = create(GtkButtonBox) add(panel,box) constant btn1 = add(box,create(GtkButton,"dialog-question#Question 1",foo)) set(btn1,{ {"tooltip text","World History"}, {"data","question",q1}, {"data","answer",ans1}}) constant btn2 = add(box,create(GtkButton,"dialog-question#Question 2",foo)) set(btn2,{ {"tooltip text","Science"}, {"data","question",q2}, {"data","answer",ans2}}) constant btn3 = add(box,create(GtkButton,"dialog-question#Question 3",foo)) set(btn3,{ {"tooltip text","Business"}, {"data","question",q3}, {"data","answer",ans3}}) show_all(win) main() ----------------------------------------------------- function Foo(atom ctl) ----------------------------------------------------- object title = get(ctl,"tooltip text") object question = get(ctl,"data","question") object ans = get(ctl,"data","answer") ans = deserialize(ans) ans = ans[1] atom okbtn = create(GtkButton,"gtk-ok") show(okbtn) atom dlg = create(GtkDialog,{ -- we make our own custom dialog; {"title",title}, {"icon",oeu_logo}, {"border width",10}, {"position",GTK_WIN_POS_MOUSE}, {"add action widget",okbtn,MB_OK}}) atom ca = get(dlg,"content area") atom lbl1 = add(ca,create(GtkLabel,{ {"font","Comic Sans MS, Century Schoolbook L, URW Chancery L, Bold 12"}, {"markup",question}, {"show",1}})) atom exp = add(ca,create(GtkExpander,"Click here for the answer:")) set(exp,{ {"font","12"}, {"resize toplevel",TRUE}, {"show",1}}) atom box = create(GtkBox,VERTICAL) add(exp,box) atom lbl2 = add(box,create(GtkLabel,{ {"font","Segoe Print Normal 24"}, {"color","blue"}, {"markup",ans}})) atom img = create(GtkImage,clown) add(box,img) show_all(box) set(dlg,"run") set(img,"destroy") -- small memory leak if not destroyed. set(dlg,"destroy") return 1 end function