big-bass - 2013-06-08
Widget examples

HSCALE

image

Example code: hscale-gtk2-proto.bac

PRAGMA LDFLAGS `pkg-config --cflags --libs gtk+-2.0`

'--- 
'---  GTK example with BACON
'---  March 2009 - PvE.
'---  Adapted November 2009. adapted for Hscale 2013 alexfish
'---  Ported to PROTO/PRAGMA/IMPORT syntax 2013 bigbass


'---  Get needed functions from GTK

PROTO gtk_table_attach_defaults
PROTO gtk_window_set_title
PROTO gtk_button_new_from_stock
'PROTO gtk_range_get_value
PROTO gtk_table_new
PROTO gtk_window_new
PROTO gtk_container_add
PROTO gtk_exit
'PROTO gtk_hscale_new_with_range
PROTO gtk_init
PROTO gtk_label_new
PROTO gtk_widget_show_all
PROTO gtk_main

PROTO g_signal_connect_data

'----------------------------------------------------
' get around low level pointers  USING IMPORT
'----------------------------------------------------
CONST Gtk$ = "libgtk-x11-2.0.so.0"


'-- Get needed functions from GTK using IMPORT
IMPORT "gtk_hscale_new_with_range(double,double,double)" FROM Gtk$ TYPE long
IMPORT "gtk_range_get_value(long)" FROM Gtk$ TYPE double

'----------------------------------------------------

'---  Callback for closing window
SUB exit_prog
    PRINT "QUIT"
    gtk_exit(0)

END SUB



SUB Changed
    LOCAL get
    get = gtk_range_get_value( Hscale )
    PRINT " CHANGED ",get
END SUB

'--- Main program starts here
gtk_init(0, 0)

window = gtk_window_new(0)

gtk_window_set_title(window, "scale PROTO")
table = gtk_table_new(15, 15, 1)
gtk_container_add(window, table)    
Hscale = gtk_hscale_new_with_range(0,1000,1)


button = gtk_button_new_from_stock("gtk-quit")

gtk_table_attach_defaults(table, button, 10, 14, 12, 14)
gtk_table_attach_defaults(table,Hscale, 1, 14, 3, 14)

'--- Use as callback the defined SUB
g_signal_connect_data(button, "clicked",exit_prog, 0, 0, 0)
g_signal_connect_data(Hscale, "value-changed", Changed ,0, 0, 0)
g_signal_connect_data(window, "delete-event", exit_prog, 0, 0, 0)


'--- Show whole GUI
gtk_widget_show_all(window)

gtk_main

KEYPRESSED

gets key pressed and displays it in terminal
and in the title
*mouse must stay in the window to catch the event

Example code: keypressed-gtk2-proto.bac

PRAGMA LDFLAGS `pkg-config --cflags --libs gtk+-2.0`
PRAGMA INCLUDE gtk-2.0/gtk/gtk.h

'--- GTK
PROTO gtk_init
PROTO gtk_main
PROTO gtk_widget_show
PROTO gtk_window_new
PROTO gtk_exit
PROTO gtk_window_set_title

'---extras
PROTO g_signal_connect_data
PROTO g_printerr

'--- GDK
PROTO gdk_keyval_name


'--- Declare variables
DECLARE *window TYPE GtkWidget
DECLARE *event TYPE GdkEventKey


FUNCTION key_event(GtkWidget *widget, GdkEventKey *event)

    g_printerr("%s\n", gdk_keyval_name (event->keyval))

    keypressed$ = gdk_keyval_name (event->keyval)
    gtk_window_set_title(GTK_WINDOW(window), keypressed$ )
    RETURN FALSE
END FUNCTION



'--- Callback for closing window
SUB exit_prog
    PRINT "QUIT"
    gtk_exit(0)
END SUB




gtk_init (0, 0)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL)
gtk_window_set_title(GTK_WINDOW(window), "get key press")

'--- Use as callback the defined SUB/FUNCTIONS
g_signal_connect_data(window, "delete-event", exit_prog, 0, 0, 0)
g_signal_connect_data(window, "key-release-event", G_CALLBACK(key_event) ,0, 0, 0)
gtk_widget_show (window)
gtk_main
 

Last edit: big-bass 2021-04-28