The gsv module implements an interface to the gtk-server. This server makes it possible for an ANS forth engine to show a gtk GUI. Due to the fact that using this module requires an external tool, this module has an environmental dependency. See [GTKserver] for how to use this module.
include ffl/gsv.fs
\ Open the connection to the gtk-server and load all definitions from the gtk-server.cfg file
s" gtk-server.cfg" s" ffl-fifo" gsv+open 0= [IF]
: event>widget ( c-addr u -- n = Convert the event string to a widget id )
0. 2swap >number 2drop d>s
;
0 value window \ the event widgets
0 value exit-button
: gsv-example
gtk_init \ Initialise toolkit
\ Create toplevel window
GTK_WINDOW_TOPLEVEL gtk_window_new to window
s" This is a title" window gtk_window_set_title
\ Layout the widgets with a table
1 30 30 gtk_table_new >r
r@ window gtk_container_add
\ Add a label to the window
s" Hello world" gtk_label_new >r
7 3 29 1 r@ r'@ gtk_table_attach_defaults
r> gtk_widget_show
\ Add the exit button to the window
s" Exit" gtk_button_new_with_label to exit-button
27 23 28 20 exit-button r@ gtk_table_attach_defaults
exit-button gtk_widget_show
r> gtk_widget_show \ Table
window gtk_widget_show \ Window
\ Main loop
BEGIN
s" WAIT" gtk_server_callback
event>widget CASE
window OF true ENDOF
exit-button OF true ENDOF
false swap
ENDCASE
UNTIL
0 gtk_exit
;
gsv-example
gsv+close drop
[ELSE]
.( No gtk-server fifo, is the gtk-server running ? ) cr
[THEN]
\ ==============================================================================