2016-11-25 00:33:18 -07:00

114 lines
3.6 KiB
Elixir

--------------------------------------------------------------------------
--# GtkListView using pixbufs, checkboxes, editable fields, etc.
--------------------------------------------------------------------------
include GtkEngine.e
include std/utils.e
sequence names = { -- might be read from a file;
{"Jerry", 0, "Jerry.jpg", "Tampa, FL", 0},
{"Jamie", 0, "jls.jpg", "Hollywood,CA", 1},
{"Justin", 0, "Justin.jpg", "Norman,OK", 0}
}
-----------------------------------------
-- replace filenames with actual images;
-----------------------------------------
for i = 1 to length(names) do
names[i][3] = create(GdkPixbuf,"thumbnails/" & names[i][3],60,60,1)
end for
-----------------------------------------------------------------
-- create a list store to hold the data;
-----------------------------------------------------------------
constant store = create(GtkListStore,{gSTR,gINT,gPIX,gSTR})
set(store,"data",names)
------------------------------------------
-- create columns to show the data;
------------------------------------------
constant
ren1 = create(GtkCellRendererText,"editable=TRUE,$edited=EditMe"),
col1 = create(GtkTreeViewColumn,"title=Name")
set(col1,"pack start",ren1)
set(col1,"add attribute",ren1,"text",1)
if gtk:minor_version = 18 then
set(col1,"fixed width",170) -- work around bug in 3.18.6 when editing cell text;
end if
constant
ren2 = create(GtkCellRendererToggle,"activatable=TRUE,$toggled=ToggleMe"),
col2 = create(GtkTreeViewColumn,"title=Present")
set(col2,"pack start",ren2)
set(col2,"add attribute",ren2,"active",2)
constant
ren3 = create(GtkCellRendererPixbuf),
col3 = create(GtkTreeViewColumn,"title=Photo")
set(col3,"pack start",ren3)
set(col3,"add attribute",ren3,"pixbuf",3)
-------------------------------------
-- create a view to display the list
-------------------------------------
constant tv = create(GtkTreeView,{
{"model",store},
{"tooltip column",0},
{"append columns",{col1,col2,col3}}})
constant selection = get(tv,"selection")
set(selection,"mode",GTK_SELECTION_SINGLE)
--------------------------------------------
-- create a main window to hold view & ctls
--------------------------------------------
constant win = create(GtkWindow,
"title=`Test 35 - List View`,border_width=10,position=1,$destroy=Quit")
constant panel = create(GtkBox,"orientation=VERTICAL")
add(win,panel)
constant lbl = create(GtkLabel,"Double-click name to edit")
add(panel,lbl)
add(panel,tv)
constant btnbox = create(GtkButtonBox,"margin_top=5")
add(btnbox,{
create(GtkButton,"gtk-quit","Quit"),
create(GtkButton,"gtk-ok",_("ShowSelectedItem"))})
pack(panel,-btnbox)
show_all(win)
main()
--------------------------------------------------------------
global function EditMe(atom rend, object path, object newtext)
--------------------------------------------------------------
-- newtext is ptr to new contents;
integer row = get(selection,"selected row")
set(store,"col data",row,1,peek_string(newtext))
return 1
end function
------------------------------------------------
global function ToggleMe(atom rend)
------------------------------------------------
integer row = get(selection,"selected row")
set(store,"col data",row,2,not get(rend,"active"))
return 1
end function
---------------------------
function ShowSelectedItem()
---------------------------
object row = get(selection,"selected row")
object data = get(store,"row data",row)
Info(win,"Student",
format("Name: [1]",data),
format("City: [4]\nChecked: ",data) &
iif(data[2],"Yes","No"))
return 1
end function