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

103 lines
3.8 KiB
Elixir

---------------------------------------------------------------------------
--# Demo of many numeric widgets built with Glade
-- would take hundreds of lines of code
-- if coded 'by hand', but only a few if the interface is designed by Glade.
---------------------------------------------------------------------------
include GtkEngine.e
-- Use the following if you want to load the Glade code at runtime.
-- This will happen even if the program is bound or compiled, which means
-- that changes to the .glade file could improve (or break!) your program:
-- add(builder,"~/demos/examples/glade/widgets.glade")
-- Use the 2 lines below instead of the one above
-- if you prefer to load the glade XML as an include:
include widgets.xml
add(builder,widgets:XML)
-- If you do this, it will likewise be included each time the program is
-- interpreted, and therefore subject to the xml code being edited.
-- HOWEVER - when your program is bound or compiled, the glade XML will be
-- bound into the program, and latter changes to the .xml will no longer
-- have any affect on your program.
connect("window1","destroy","Quit")
main()
-- All functions which respond to the interface MUST be declared global!
-- Controls can be referenced by string ID, rather than by handle.
-- The string ID is assigned automatically by Glade when object is created,
-- but can be changed on the Glade Properties/General tab (ID:) if you
-- prefer a more meaningful name.
-- DON'T change the Widget name: field under the Properties/Common tab!
--------------------------------------------------------------------------------------
global function on_radiobuttons_toggled(atom self, atom scale)
--------------------------------------------------------------------------------------
-- Two calls to this function are made each time a radio button is clicked,
-- one as the previously-selected button is toggled 'off', and another
-- as the newly-clicked button it toggled 'on'.
-- We use the 'active' property to decide which one to respond to.
-- Each button's 'name' field is used to pass the percentage to set.
-- There seems to be little use for that field otherwise.
atom percent = 0
if get(self,"active") then
percent = to_number(get(self,"name"))
set(scale,"value",percent)
end if
return 1
end function
--------------------------------------------------------------
global function on_switch1_active_notify(atom self, atom spin)
--------------------------------------------------------------
set("spinner1","active",get(self,"active")) -- toggle it
return 1
end function
--------------------------------------------------
global function on_scale1_value_changed(atom self)
--------------------------------------------------
atom val = get(self,"value")
set("progressbar1","fraction",val * .01)
set("levelbar1","value",val)
set("show_text","active",val != 0)
return 1
end function
-----------------------------------------------
global function on_show_text_toggled(atom self)
-----------------------------------------------
set("progressbar1","show text",get(self,"active"))
return 1
end function
--------------------------------------------
global function on_digits_changed(atom self)
--------------------------------------------
integer decimals = get(self,"active")-1 -- indexes are zero-based
set("value","digits",decimals)
set("scale1","digits",decimals)
return 1
end function
----------------------------------------
global function on_help_about_activate()
----------------------------------------
return Info("window1","About...","Widgets",
sprintf("This is a demo of several\nGtk numeric controls\n\n"
&"Current value <span color='red'>%g</span>",get("levelbar1","value")),,
"~/demos/thumbnails/applications-development.svg")
end function