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

124 lines
3.6 KiB
Elixir

------------------------------------------------------------------------
--# Tool Palette and buttons
-- To create a button with an icon, attach the icon widget as the
-- first parameter. Second param can be anything.
-- Icon can be a widget you create, such as the LeftArrow below,
-- or the name of a gtk-stock item, themed icon, etc
-- For a text button, send a null as the first parameter.
-- Second param will be the text to use.
-- Third param is the function to call when clicked, 4th is [opt] data.
-- Note:
-- If you set tooltip text for the ToolPalette, then you MUST set
-- tooltip text for the buttons, otherwise they display the same
-- tooltip as the ToolPalette, which can be confusing.
-------------------------------------------------------------------------
include GtkEngine.e
include std/sort.e
constant WIDTH = 300, HEIGHT = 300
chdir(canonical_path("~/demos"))
object images =
dir("screenshots/*.jpg") & dir("screenshots/*.gif") & dir("screenshots/*.png")
images = sort(vslice(images,D_NAME))
images = images[3..$]
for i = 1 to length(images) do
images[i] = locate_file("screenshots/"& images[i])
end for
integer n = 1
constant win = create(GtkWindow,"border=10,size=500x200,position=1,icon=face-smile,$destroy=Quit")
constant panel = create(GtkBox,"orientation=VERTICAL")
add(win,panel)
constant pal = create(GtkToolPalette,{
{"icon size",GTK_ICON_SIZE_SMALL_TOOLBAR},
{"orientation",VERTICAL},
{"style",GTK_TOOLBAR_BOTH},
{"size request",-1,100}}) -- allow room to show icons;
add(panel,pal)
constant group = create(GtkToolItemGroup,{
{"header relief",GTK_RELIEF_NORMAL},
{"label","Tool Palette - click to hide/show toolbuttons"}})
add(pal,group)
constant btn1 = create(GtkToolButton,{
{"stock_id","gtk-quit"},
{"label","Exit"},
{"tooltip text","Click to quit"}})
connect(btn1,"clicked","Quit")
set(group,"insert",btn1,-1)
constant btn2 = create(GtkToolButton,
"stock id=gtk-go-back,label=Back,tooltip_text='Previous Pix'")
connect(btn2,"clicked",_("Go"))
set(group,"insert",btn2,-1)
constant btn3 = create(GtkToolButton,{
{"stock id","gtk-go-forward"},
{"label","Fwd"},
{"tooltip text","Next Pix"},
{"connect","clicked",_("Go")}})
set(group,"insert",btn3,-1)
constant btn4 = create(GtkMenuToolButton,
"label=More...,arrow_tooltip_text='Click to open submenu'")
set(group,"insert",btn4,-1)
constant submenu = create(GtkMenu), -- submenu for btn4;
item1 = create(GtkMenuItem,"gtk-yes#Yes",,TRUE),
item2 = create(GtkMenuItem,"gtk-no#No",,FALSE),
item3 = create(GtkMenuItem,"gtk-quit#Quit","Bail")
set(submenu,"append",{item1,item2,item3})
set(item1,"sensitive",FALSE)
set(item2,"sensitive",FALSE)
show_all(submenu)
set(btn4,"menu",submenu)
object pix = create(GdkPixbuf,images[n],WIDTH,HEIGHT,TRUE)
object img = create(GtkImage,pix)
add(panel,img)
constant lbl = create(GtkLabel)
set(lbl,"text",images[n])
pack(panel,-lbl)
show_all(win)
main()
-----------------------------------------
function Go(atom ctl, atom data)
-----------------------------------------
switch ctl do
case btn2 then n -= 1
case btn3 then n += 1
end switch
if n > length(images) then n = 1 end if
n = ensure_in_range(n,{1,length(images)})
pix = create(GdkPixbuf,images[n],WIDTH,HEIGHT,TRUE)
set(img,"from pixbuf",pix)
set(lbl,"text",images[n])
return 1
end function
--------------------------
global function Bail()
--------------------------
Info(win,"Thanks!",
"Thank you","Please come again!",,"face-smile")
return Quit()
end function