## gsv - gtk-server interface

### Module Description

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.

### Module Words

#### Low level, overrulable gtk-server connection words

gsv+connect ( c-addr u -- ior )
  Connect to the gtk-server via a fifo c-addr u
gsv+call ( c-addr1 u1 -- c-addr2 u2 )
  Call the gtk-server with command c-addr1 u1, resulting in response c-addr2 u2
gsv+disconnect ( -- ior )
  Disconnect from the gtk-server, the gtk-server is *NOT* closed

#### gtk-server connection words

gsv+open ( c-addr1 u1 c-addr2 u2 -- ior )
  Open the connection to the gtk-server by reading the configuration file c-addr1 u1 and connecting to c-addr2 u2
gsv+close ( -- ior )
  Close the connection to the gtk-server, the gtk-server is *NOT* closed

#### gtk-server event words

gsv+server-connect ( n1 c-addr1 u1 n2 -- c-addr2 u2 )
  Call gtk_server_connect with widgetid n2, signal c-addr1 u1 and description n2, returning the result c-addr2 u2
gsv+server-connect-after ( n1 c-addr1 u1 n2 -- c-addr2 u2 )
  Call gtk_server_connect_after with widgetid n2, signal c-addr1 u1 and description n2, returning the result c-addr2 u2

### Examples

    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]

    \ ==============================================================================

generated 03-Jun-2010 by ofcfrth-0.10.0