' *****************************************************
' PROGRAM: butbox.bac
' PURPOSE: demo of buttons using gtk
' AUTHOR: FB2BaCon James C. Fuller, 2010
' C2FB by TinyCla, 2006
' DEPENDS: gcc, bacon, bash
' PLATFORM: Puppy Linux(actually, any *nix)
' DATE: 25-10-2010
' *****************************************************
' *********************
' CONSTANTS
' *********************
CONST gtk_LIB$ = "libgtk-x11-2.0.so"
CONST glib_LIB$ = "libglib-2.0.so"
CONST gobject_LIB$ = "libgobject-2.0.so"
CONST GTK_WINDOW_TOPLEVEL = 0
CONST GTK_BUTTONBOX_SPREAD = 1
CONST GTK_BUTTONBOX_EDGE = 2
CONST GTK_BUTTONBOX_START = 3
CONST GTK_BUTTONBOX_END = 4
' *********************
' END CONSTANTS
' *********************
' *********************
' IMPORTS
' *********************
IMPORT "gtk_init(int*,void*)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_window_new(int)" FROM gtk_LIB$ TYPE long
IMPORT "gtk_window_set_title(long,char*)" FROM gtk_LIB$ TYPE void
IMPORT "g_signal_connect_data(long,char*,void*,long,long,int)" FROM "libgobject-2.0.so.0" TYPE void
IMPORT "gtk_main_quit(void)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_widget_show(long)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_main" FROM gtk_LIB$ TYPE void
IMPORT "gtk_container_set_border_width(long,int)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_vbox_new(int,int)" FROM gtk_LIB$ TYPE long
IMPORT "gtk_container_add(long,long)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_frame_new(char*)" FROM gtk_LIB$ TYPE long
IMPORT "gtk_box_pack_start(long,long,int,int,int)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_hbox_new(int,int)" FROM gtk_LIB$ TYPE long
IMPORT "gtk_widget_show_all(long)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_hbutton_box_new" FROM gtk_LIB$ TYPE long
IMPORT "gtk_vbutton_box_new" FROM gtk_LIB$ TYPE long
IMPORT "gtk_button_box_set_layout(long,int)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_box_set_spacing(long,int)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_button_box_set_child_size(long,int,int)" FROM gtk_LIB$ TYPE void
IMPORT "gtk_button_new_from_stock(char*)" FROM gtk_LIB$ TYPE long
' *********************
' END IMPORTS
' *********************
' *********************
' SUB & FUNCTIONS
' *********************
'-----------------
FUNCTION CREATE_BBOX(NUMBER horizontal, STRING title, NUMBER spacing, NUMBER child_w, NUMBER child_h, NUMBER layout)
'-----------------
LOCAL frame, bbox, button
frame = gtk_frame_new(title)
IF horizontal > 0 THEN
bbox = gtk_hbutton_box_new()
ELSE
bbox = gtk_vbutton_box_new()
END IF
gtk_container_set_border_width(bbox, 5)
gtk_container_add(frame, bbox)
' Set the appearance of the button box
gtk_button_box_set_layout(bbox, layout)
gtk_box_set_spacing(bbox, spacing)
gtk_button_box_set_child_size(bbox, child_w, child_h)
button = gtk_button_new_from_stock("gtk-ok")
gtk_container_add(bbox, button)
button = gtk_button_new_from_stock("gtk-cancel")
gtk_container_add(bbox, button)
button = gtk_button_new_from_stock("gtk-help")
gtk_container_add(bbox, button)
RETURN frame
END FUNCTION
'-----------------
SUB BACMAIN()
'-----------------
LOCAL win, main_vbox, vbox,hbox, frame_horz, frame_vert
gtk_init(0, 0)
win = gtk_window_new(GTK_WINDOW_TOPLEVEL)
gtk_window_set_title(win, "Button Boxes")
g_signal_connect_data(win, "destroy", gtk_main_quit, 0, 0, 0)
gtk_container_set_border_width(win, 10)
main_vbox = gtk_vbox_new(0, 0)
gtk_container_add(win, main_vbox)
frame_horz = gtk_frame_new("Horizontal Button Boxes")
gtk_box_pack_start(main_vbox, frame_horz, 1, 1, 10)
vbox = gtk_vbox_new(0, 0)
gtk_container_set_border_width(vbox,10)
gtk_container_add(frame_horz,vbox)
gtk_box_pack_start(vbox, CREATE_BBOX(TRUE, "Spread (spacing 40)", 40, 85, 20, GTK_BUTTONBOX_SPREAD), TRUE, TRUE, 0)
gtk_box_pack_start(vbox, CREATE_BBOX(TRUE, "Edge (spacing 30)", 30, 85, 20, GTK_BUTTONBOX_EDGE), TRUE, TRUE, 5)
gtk_box_pack_start(vbox, CREATE_BBOX(TRUE, "Start (spacing 20)", 20, 85, 20, GTK_BUTTONBOX_START), TRUE, TRUE, 5)
gtk_box_pack_start(vbox, CREATE_BBOX(TRUE, "End (spacing 10)", 10, 85, 20, GTK_BUTTONBOX_END), TRUE, TRUE, 5)
frame_vert = gtk_frame_new("Vertical Button Boxes")
gtk_box_pack_start(main_vbox, frame_vert, TRUE, TRUE, 10)
hbox = gtk_hbox_new(FALSE, 0)
gtk_container_set_border_width(hbox, 10)
gtk_container_add(frame_vert, hbox)
gtk_box_pack_start(hbox, CREATE_BBOX(FALSE, "Spread (spacing 5)", 5, 85, 20, GTK_BUTTONBOX_SPREAD), TRUE, TRUE, 0)
gtk_box_pack_start(hbox, CREATE_BBOX(FALSE, "Edge (spacing 30)", 30, 85, 20, GTK_BUTTONBOX_EDGE), TRUE, TRUE, 5)
gtk_box_pack_start(hbox, CREATE_BBOX(FALSE, "Start (spacing 20)", 20, 85, 20, GTK_BUTTONBOX_START), TRUE, TRUE, 5)
gtk_box_pack_start(hbox, CREATE_BBOX(FALSE, "End (spacing 20)", 20, 85, 20, GTK_BUTTONBOX_END), TRUE, TRUE, 5)
gtk_widget_show_all(win)
' Enter the event loop
gtk_main()
END SUB
' *********************
' END SUBS & FUNCTIONS
' *********************
' *********************
' MAIN
' *********************
BACMAIN
END
' *********************
' END MAIN
' *********************