75 lines
2.3 KiB
Elixir
75 lines
2.3 KiB
Elixir
|
|
--# Passing data using multiple maps
|
|
|
|
include GtkEngine.e
|
|
|
|
include std/map.e
|
|
|
|
constant docs = `<u><b>Passing data using Maps</b></u>
|
|
|
|
Another way to attach data to controls.
|
|
|
|
This creates a separate map for each person, and
|
|
passes just that map to the called routine.
|
|
|
|
These maps can be loaded directly from Euphoria sequences,
|
|
without having to name the individual fields. Fields must
|
|
be in the proper order, since they are later referenced by
|
|
number.
|
|
|
|
Maps can be saved to disk, and loaded as necessary.
|
|
`
|
|
constant jerrymap = load_map(locate_file("resources/jerry.map"))
|
|
constant justinmap = load_map(locate_file("resources/justin.map"))
|
|
|
|
constant win = create(GtkWindow,"border=10,size=300x100,position=1")
|
|
connect(win,"destroy","Quit")
|
|
|
|
constant panel = create(GtkBox,"orientation=VERTICAL")
|
|
add(win,panel)
|
|
|
|
constant lbl = create(GtkLabel)
|
|
set(lbl,"markup",docs)
|
|
add(panel,lbl)
|
|
|
|
constant
|
|
btn1 = create(GtkButton,"gtk-quit","Quit"),
|
|
btn2 = create(GtkButton,"emblem-ok-symbolic#_Jerry","ShowInfo",jerrymap), -- link by map id;
|
|
btn3 = create(GtkButton,"emblem-ok-symbolic#_Justin","ShowInfo",justinmap),
|
|
btn4 = create(GtkButton,"gtk-save","Save"),
|
|
box = create(GtkButtonBox)
|
|
-- set(btn4,"sensitive",FALSE)
|
|
add(box,{btn1,btn2,btn3,btn4})
|
|
pack(panel,-box)
|
|
|
|
show_all(win)
|
|
main()
|
|
|
|
--------------------------------------------------------------
|
|
global function ShowInfo(atom ctl, object themap) -- map id;
|
|
---------------------------------------------------------------
|
|
object data = map:get(themap,"Data")
|
|
Info(,,data[1], -- must retrieve items by position;
|
|
format(" age: [2]\n bal: $[3]",data),,
|
|
locate_file(data[$]))
|
|
return 1
|
|
end function
|
|
|
|
-----------------------
|
|
global function Save()
|
|
-----------------------
|
|
-- here's how to save a couple of maps, no keys;
|
|
|
|
map:put(jerrymap,"Data",{"Jerry Smith",16, 49.95, "Buffalo, NY","000-555-1212","thumbnails/Jerry.jpg"})
|
|
map:put(justinmap,"Data",{"Justin Jones",14, 12.99, "Reno, NV", "123-456-6789","thumbnails/Justin.jpg"})
|
|
|
|
-- SM_RAW map info is encoded, so not readable except to a programmer,
|
|
-- and is considered a Binary mime type, so there probably aren't any
|
|
-- apps installed which can read it if clicked on...
|
|
|
|
save_map(jerrymap,canonical_path("~/demos/resources/jerry.map"),SM_RAW)
|
|
save_map(justinmap,canonical_path("~/demos/resources/justin.map"),SM_TEXT)
|
|
|
|
return 1
|
|
end function
|