Menu

Page5

big-bass
Widget examples

EXPANDER

image

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

SPINBUTTON

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 

SPINBUTTON3

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 

ASSISTANT

image

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

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.