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

152 lines
4.6 KiB
Elixir

---------------------------------------------------------------------------------------
--# Demonstrates how to connect and process changes to listviews.
-- When you use CellRendererToggles as a set of radio buttons,
-- you have to handle the action yourself, this function is not
-- built into GTK. See RadioToggled function below.
-- However, I can't think of many reasons you might want to have
-- radio buttons in a list. You'd usually just set the list to
-- select mode single, and click on one to select.
----------------------------------------------------------------------------------------
include GtkEngine.e
constant docs = `<u><b>GtkListView</b></u>
First column is editable,
second and third clickable.
Run from x-term to see changes.
`
constant win = create(GtkWindow,"position=1,border_width=10,$destroy=Quit")
constant panel = create(GtkBox,"orientation=VERTICAL")
add(win,panel)
constant lbl = create(GtkLabel)
set(lbl,"markup",docs)
add(panel,lbl)
sequence distros = {
{"Debian", FALSE, FALSE, "debian.org", "debian-swirl"},
{"OpenSuse", TRUE, FALSE, "suse.de", "xfce-system"},
{"Fedora", FALSE, FALSE, "redhat.com", "xfce-system"},
{"Ubuntu", TRUE, FALSE, "ubuntu.org","ubuntu-logo"},
{"Mint", TRUE, TRUE, "linuxmint.org","cs-linuxmint"}
}
for i = 1 to length(distros) do
distros[i][5] = create(GdkPixbuf,distros[i][5],20,20,1)
end for
display(distros)
constant liststore = create(GtkListStore,{gSTR,gBOOL,gBOOL,gSTR,gPIX})
set(liststore,"data",distros)
constant treeview = create(GtkTreeView,{
{"model",liststore},
{"tooltip column",4}})
constant selection = get(treeview,"selection")
constant rend0 = create(GtkCellRendererPixbuf) ?rend0
constant col0 = create(GtkTreeViewColumn) ? col0
set(col0,"pack start",rend0)
set(col0,"add attribute",rend0,"pixbuf",5)
set(treeview,"append column",col0)
constant rend1 = create(GtkCellRendererText)
set(rend1,"editable",TRUE)
constant col1 = create(GtkTreeViewColumn,{
{"title","Linux Distro"},
{"pack start",rend1},
{"fixed width",90},
{"add attribute",rend1,"text",1}})
set(treeview,"append column",col1)
connect(rend1,"edited",_("NameEdited"))
constant rend2 = create(GtkCellRendererToggle)
set(rend2,"activatable",TRUE)
constant col2 = create(GtkTreeViewColumn,{
{"title","Have"},
{"pack start",rend2},
{"fixed width",40},
{"add attribute",rend2,"active",2}})
set(treeview,"append column",col2)
connect(rend2,"toggled",_("CheckToggled"),rend2)
constant rend3 = create(GtkCellRendererToggle,{
{"radio",TRUE},
{"activatable",TRUE},
{"cell-background","skyblue"}})
connect(rend3,"toggled",_("RadioToggled"))
constant col3 = create(GtkTreeViewColumn,{
{"title","Best"},
{"pack start",rend3},
{"fixed width",40},
{"add attribute",rend3,"active",3}})
set(treeview,"append column",col3)
add(panel,treeview)
constant box = create(GtkButtonBox),
btn1 = create(GtkButton,"gtk-quit","Quit"),
btn2 = create(GtkButton,"gtk-ok",_("ShowList"))
add(box,{btn1,btn2})
pack_end(panel,box)
show_all(win)
main()
------------------------------------------------------------------------
function NameEdited(atom rend, object path, object newtext)
------------------------------------------------------------------------
-- the newtext param contains the updated text
integer row = get(selection,"selected row")
set(liststore,"col data",row,1,peek_string(newtext))
return 1
end function
-----------------------------------------------------------
function CheckToggled(atom ctl, atom rend)
-----------------------------------------------------------
-- there's no new value param provided for this function,
-- so we have to get the value from the store, flip it,
-- and put it back;
integer row = get(selection,"selected row")
distros[row][2] = not get(ctl,"active")
set(liststore,"clear")
set(liststore,"data",distros)
return 1
end function
-----------------------------------------------------------------
function RadioToggled()
-----------------------------------------------------------------
integer row = get(selection,"selected row")
-- toggle all buttons;
distros = get(liststore,"data")
for i = 1 to length(distros) do
distros[i][3] = (i=row)
end for
set(liststore,"clear")
set(liststore,"data",distros)
return 1
end function
-----------------------------------------------------------------
function ShowList()
-----------------------------------------------------------------
object data = get(liststore,"data")
for i = 1 to length(data) do
display("Distro: [:9] Tried: [] Favorite: [] URL: []",data[i])
end for
return 1
end function