eumandy/eugtk/examples/test121.ex
2016-11-25 00:33:18 -07:00

106 lines
2.8 KiB
Elixir

------------------------------------------------------------------------
--# GtkTreeView with a drop-down Combo column
-- lets user select from a limited list of choices.
------------------------------------------------------------------------
include GtkEngine.e
constant docs = `<u><b>Combo in ListView</b></u>
Click a cell in the <i>Combo</i> column
<i>twice</i> to drop-down a list of manufacturers
`
constant win = create(GtkWindow,"size=400x200,border_width=10,position=1,$destroy=Quit")
constant panel = create(GtkBox,"orientation=VERTICAL")
add(win,panel)
constant lbl = create(GtkLabel)
pack(panel,lbl)
set(lbl,"markup",docs)
constant tv = create(GtkTreeView)
constant category_selection = get(tv,"selection")
add(panel,tv)
constant
rend1 = create(GtkCellRendererText),
col1 = create(GtkTreeViewColumn,{
{"title","Text"},
{"pack start",rend1},
{"fixed width",100},
{"expand",TRUE},
{"add attribute",rend1,"text",1}})
constant col2 = create(GtkTreeViewColumn)
constant rend2 = create(GtkCellRendererCombo)
connect(rend2,"changed",_("SelectionChanged"))
set(col2,{
{"title","Combo"},
{"pack start",rend2},
{"fixed width",150},
{"add attribute",rend2,"text",2}})
set(tv,"append columns",{col1,col2})
constant categories = {
{"Television","Samsung"},
{"Mobile Phone","LG"},
{"DVD Player","Sony"}
}
constant manufacturers = {
{"Sony"},
{"LG"},
{"Panasonic"},
{"Toshiba"},
{"Nokia"},
{"Samsung"}
}
constant model1 = create(GtkListStore,{gSTR,gSTR})
set(tv,"model",model1)
set(model1,"data",categories)
constant model2 = create(GtkListStore,{gSTR})
set(model2,"data",manufacturers)
set(rend2,{
{"property","model",model2},
{"text-column",0},
{"editable",TRUE}})
constant box = create(GtkButtonBox,"margin_top=10"),
btn1 = create(GtkButton,"gtk-quit","Quit"),
btn2 = create(GtkButton,"gtk-ok",_("PrintContents"))
add(box,{btn1,btn2})
pack(panel,-box)
show_all(win)
if minor_version > 14 then
-- set(win,"interactive debugging",TRUE)
end if
main()
------------------------------------------------------------------------
function SelectionChanged(atom combo, atom path, atom iter)
------------------------------------------------------------------------
object newval = get(model2,"value",iter,1)
integer row = get(category_selection,"selected row")
set(model1,"col data",row,2,newval)
return 0
end function
------------------------------------------------------------------------
function PrintContents() -- run from an xterm
------------------------------------------------------------------------
object results = get(model1,"data"), txt = ""
display(results)
for i = 1 to length(results) do
txt &= results[i][1] & " = " & results[i][2] & "\n"
end for
Info(win,"Your Choices",txt)
return 1
end function