| Widget examples |
|---|

thanks alexfish for this example
Example code: expander-gtk3-proto.bac
PRAGMA LDFLAGS `pkg-config --cflags --libs gtk+-3.0`
' Expander demo by alexfish `bacon converter forum`
PROTO gtk_init
PROTO gtk_window_new
PROTO gtk_main
PROTO gtk_main_quit
PROTO gtk_window_set_title
PROTO gtk_container_add
PROTO gtk_widget_show_all
PROTO gtk_window_set_default_size
PROTO gtk_window_set_title
PROTO gtk_label_new
PROTO gtk_expander_new_with_mnemonic
PROTO gtk_expander_set_expanded
PROTO gtk_box_new
PROTO gtk_box_set_homogeneous
PROTO gtk_box_pack_start
PROTO g_signal_connect_data
'=====================
SUB exit_prog
'=====================
gtk_main_quit
END SUB
'====================
GTK_WINDOW_TOPLEVEL = 0
GTK_ORIENTATION_VERTICAL = 1
gtk_init(0, 0)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL)
gtk_window_set_title (window, "Expander Example")
gtk_window_set_default_size (window, 300, 200)
g_signal_connect_data(window, "delete-event", exit_prog, 0, 0, 0)
box1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)
gtk_box_set_homogeneous (box1, TRUE)
lab1 = gtk_label_new_with_mnemonic ("BaCon ConVerter")
gtk_box_pack_start (box1, lab1, TRUE, TRUE, 2)
exp_1=gtk_expander_new_with_mnemonic("click me")
gtk_box_pack_start (box1, exp_1, TRUE, TRUE, 2)
lab2 = gtk_label_new_with_mnemonic ("BaCon is Brill")
gtk_container_add(exp_1,lab2)
gtk_container_add(window,box1)
gtk_widget_show_all (window)
gtk_main
source that was ported to PROTO
http://read.pudn.com/downloads154/sourcecode/unix_linux/679094/rule/spinButton.c__.htm
This is the first example I used pointers and included the gtk.h
the first time in about 20 examples
*I hope to later convert it to pointer free code *
Example code: spinbutton-gtk2-proto.bac
'--- updated to work wih 64 bit mint 20.1 April 26 2021
'--- set up for compiling embedded library GTK
PRAGMA OPTIONS `pkg-config --cflags gtk+-2.0`
PRAGMA LDFLAGS `pkg-config --libs gtk+-2.0`
PRAGMA INCLUDE <gtk-2.0/gtk/gtk.h>
PRAGMA COMPILER gcc
PRAGMA OPTIONS -Wno-implicit -Wno-deprecated-declarations
OPTION PARSE FALSE
PROTO gtk_window_set_title
PROTO gtk_box_pack_start
PROTO gtk_container_add
PROTO gtk_init
PROTO gtk_main
PROTO gtk_widget_show
PROTO gtk_widget_show_all
PROTO gtk_adjustment_new
PROTO gtk_button_new_with_label
PROTO gtk_hbox_new
PROTO gtk_label_new
PROTO gtk_spin_button_get_value_as_int
PROTO gtk_spin_button_new
PROTO gtk_window_new
PROTO gtk_main_quit
PROTO g_signal_connect_data
PROTO gtk_window_set_default_size
DECLARE *window TYPE GtkWidget
DECLARE *button TYPE GtkWidget
DECLARE *label TYPE GtkWidget
DECLARE *box TYPE GtkWidget
DECLARE *spin TYPE GtkWidget
DECLARE *adjustment TYPE GtkObject
'==============
SUB EXIT_PROG
'==============
gtk_main_quit
END SUB
'==============
SUB button_event
'==============
value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin))
PRINT value
END SUB
gtk_init(0, 0)
window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
gtk_window_set_default_size (GTK_WINDOW(window), 270, 50)
'---Connecting the clicked signal to the callback function
g_signal_connect_data(window, "destroy", EXIT_PROG, 0, 0, 0)
box = gtk_hbox_new(FALSE, 0)
gtk_container_add(GTK_CONTAINER(window), box)
adjustment = gtk_adjustment_new(2013, 1900, 2100, 1, 1, 0)
spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 0.5, 0)
gtk_box_pack_start(GTK_BOX(box), spin, TRUE, TRUE, 5)
gtk_widget_show(spin)
label = gtk_label_new("year")
gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0)
gtk_widget_show(label)
button = gtk_button_new_with_label("button")
gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0)
g_signal_connect_data(button, "clicked", button_event, 0, 0, 0)
gtk_widget_show(button)
gtk_widget_show(box)
gtk_widget_show(window)
gtk_main
original code ported and modified
https://developer.gnome.org/gnome-devel-demos/stable/spinbutton.c.html.en]
Example code: spinbutton-gtk3-proto.bac
PRAGMA LDFLAGS `pkg-config --cflags --libs gtk+-3.0`
PRAGMA INCLUDE gtk-3.0/gtk/gtk.h
PROTO gtk_label_set_text
PROTO gtk_container_add
PROTO gtk_container_set_border_width
PROTO gtk_grid_attach
PROTO gtk_grid_set_column_homogeneous
PROTO gtk_grid_set_column_spacing
PROTO gtk_widget_set_hexpand
PROTO gtk_widget_show_all
PROTO gtk_window_set_default_size
PROTO gtk_window_set_title
PROTO gtk_adjustment_new
PROTO gtk_application_new
PROTO gtk_window_new
PROTO gtk_grid_new
PROTO gtk_label_new
PROTO gtk_spin_button_get_value_as_int
PROTO gtk_spin_button_new
PROTO gtk_init
PROTO gtk_main
PROTO g_signal_connect_data
PROTO gtk_main_quit
'--- Declare variables
GLOBAL *window TYPE GtkWidget
GLOBAL *label TYPE GtkWidget
GLOBAL *grid TYPE GtkWidget
GLOBAL *spin_button TYPE GtkWidget
GLOBAL *adjustment TYPE GtkAdjustment
'==============
SUB EXIT_PROG
'==============
gtk_main_quit
END SUB
'--- This is the callback function.
'--- It is a handler function which reacts to the signal.
'--- In this case, it will notify the user the value of their spinbutton
'==============
SUB spin_clicked
'==============
value = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(spin_button))
PRINT value
END SUB
gtk_init(0, 0)
'--- Create a window with a title, a border width, and a default size
window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
gtk_window_set_title (GTK_WINDOW (window), "SpinButton Example")
gtk_window_set_default_size (GTK_WINDOW (window), 270, 70)
gtk_container_set_border_width (GTK_CONTAINER (window), 5)
'---Connecting the clicked signal to the callback function
g_signal_connect_data(window, "destroy", EXIT_PROG, 0, 0, 0)
'--- Create a label to be shown in the window
label = gtk_label_new ("Press enter to get the value")
'--- Create an adjustment representing an adjustable bounded value
adjustment = gtk_adjustment_new (0, 0, 100, 1, 0, 0)
'--- Create a spin button that is to be as wide as possible
spin_button = gtk_spin_button_new (adjustment, 1, 0)
gtk_widget_set_hexpand (spin_button, TRUE)
'--- Connecting the "value-changed" signal for the spinbutton
'--- to the appropriate callback function.
g_signal_connect_data(spin_button, "activate", spin_clicked, 0, 0, 0)
'--- Create a grid and arrange everything accordingly
grid = gtk_grid_new ()
gtk_grid_set_column_spacing (GTK_GRID (grid), 10)
gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE)
gtk_grid_attach (GTK_GRID (grid), spin_button, 0, 0, 1, 1)
gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1)
gtk_container_add (GTK_CONTAINER (window), grid)
gtk_widget_show_all (window)
gtk_main

Thanks alexfish for this example
Example code: assistant-gtk3-proto.bac
PRAGMA LDFLAGS `pkg-config --cflags --libs gtk+-3.0`
'@ ASSISTANT DEMO
PROTO gtk_init
PROTO gtk_main
PROTO gtk_main_quit
PROTO gtk_box_new
PROTO gtk_box_set_homogeneous
PROTO gtk_box_pack_start
PROTO gtk_assistant_new
PROTO gtk_assistant_append_page
PROTO gtk_assistant_set_page_type
PROTO gtk_assistant_commit
PROTO gtk_assistant_set_page_complete
PROTO gtk_assistant_set_page_type
PROTO gtk_assistant_set_page_title
PROTO gtk_window_set_title
PROTO gtk_widget_set_size_request
PROTO gtk_button_new_with_label
PROTO gtk_label_new_with_mnemonic
PROTO gtk_entry_new
PROTO gtk_entry_set_text
'@ Note this line may produce err in bacon2 + bacon2.bash
PROTO gtk_entry_get_text
PROTO gtk_widget_show_all
PROTO g_signal_connect_data
GTK_WINDOW_TOPLEVEL = 0
GTK_ORIENTATION_VERTICAL = 1
GTK_ASSISTANT_PAGE_CONTENT = 0
GTK_ASSISTANT_PAGE_INTRO = 1
GTK_ASSISTANT_PAGE_CONFIRM = 2
GTK_ASSISTANT_PAGE_SUMMARY = 3
GTK_ASSISTANT_PAGE_PROGRESS = 4
GTK_ASSISTANT_PAGE_CUSTOM = 5
gtk_init(0, 0)
'=====================
SUB exit_prog
'=====================
gtk_main_quit
END SUB
SUB get_name
name$ = (char *)gtk_entry_get_text(ent1)
name$ = CONCAT$("submit / " ,name$)
gtk_entry_set_text(ent2,name$)
END SUB
SUB submit
name$ = (char *)gtk_entry_get_text(ent2)
PRINT "Membership Application Approved",NL$,"Latest Member, ",name$
'@ quit
gtk_main_quit
END SUB
assist_1 = gtk_assistant_new ()
gtk_widget_set_size_request(assist_1,400,300)
gtk_window_set_title (assist_1, "GtkAssistant Example")
g_signal_connect_data(assist_1, "delete-event", exit_prog, 0, 0, 0)
g_signal_connect_data(assist_1, "apply", submit, 0, 0, 0)
box1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)
gtk_box_set_homogeneous (box1, TRUE)
box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)
gtk_box_set_homogeneous (box2, TRUE)
box3 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)
gtk_box_set_homogeneous (box3, TRUE)
box4 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)
gtk_box_set_homogeneous (box4, TRUE)
lab1 = gtk_label_new_with_mnemonic ("BaCon ConVerter")
lab2 = gtk_label_new_with_mnemonic ("Bacon is Brill")
lab3 = gtk_label_new_with_mnemonic ("Forum Membership")
ent1=gtk_entry_new()
gtk_entry_set_text(ent1,"enter name here")
but4 = gtk_button_new_with_label ("OK")
g_signal_connect_data(but4, "clicked", get_name, 0, 0, 0)
lab5 = gtk_label_new_with_mnemonic ("Submit Aplication")
ent2 = gtk_entry_new()
gtk_box_pack_start (box1, lab1, TRUE, TRUE, 2)
gtk_box_pack_start (box2, lab2, TRUE, TRUE, 2)
gtk_box_pack_start (box3, lab3, TRUE, TRUE, 2)
gtk_box_pack_start (box3, ent1, TRUE, TRUE, 2)
gtk_box_pack_start (box3, but4, TRUE, TRUE, 2)
gtk_box_pack_start (box4, lab5, TRUE, TRUE, 2)
gtk_box_pack_start (box4, ent2, TRUE, TRUE, 2)
page_1 = gtk_assistant_append_page(assist_1,box1)
gtk_assistant_set_page_title(assist_1,box1,"About")
gtk_assistant_set_page_type(assist_1, box1 , GTK_ASSISTANT_PAGE_CONTENT)
gtk_assistant_set_page_complete(assist_1,box1,TRUE)
page_2 = gtk_assistant_append_page(assist_1,box2)
gtk_assistant_set_page_title(assist_1,box2,"Introduction")
gtk_assistant_set_page_type(assist_1, box2 , GTK_ASSISTANT_PAGE_INTRO)
gtk_assistant_set_page_complete(assist_1, box2 ,TRUE)
page_3 = gtk_assistant_append_page(assist_1,box3)
gtk_assistant_set_page_title(assist_1,box3,"Details")
gtk_assistant_set_page_type(assist_1, box3 , GTK_ASSISTANT_PAGE_PROGRESS)
gtk_assistant_set_page_complete(assist_1, box3 ,TRUE)
page_4 = gtk_assistant_append_page(assist_1,box4)
gtk_assistant_set_page_title(assist_1,box4,"Register")
gtk_assistant_set_page_type(assist_1, box4 , GTK_ASSISTANT_PAGE_CONFIRM)
gtk_assistant_set_page_complete(assist_1, box4 ,TRUE)
gtk_widget_show_all (assist_1)
gtk_main