REM
REM Demo to show how to use GTK-server
REM The GTK-server tries to access the incoming string directly (LIB interface) to spare memory.
REM For that reason, the command needs to be copied to a variable first.
REM PvE - March 2009.
REM Adapted for newer BaCon versions - Feb 2012.
REM

REM Get central function from GTK-server
IMPORT "gtk" FROM "libgtk-server.so" TYPE char* ALIAS gtk$

REM Wrap around function
FUNCTION gui$(STRING c$)

        dat$ = c$
        RETURN gtk$(dat$)

END FUNCTION

REM Setup GUI
REM gui$("gtk_server_cfg -log=/tmp/log.txt")
gui$("gtk_init NULL NULL")
gui$("glade_init")

REM Get Glade file
xml$ = gui$("glade_xml_new ./demo.glade NULL NULL")
gui$(CONCAT$("glade_xml_signal_autoconnect ", xml$))

REM Get main window ID and connect signal
window$ = gui$(CONCAT$("glade_xml_get_widget ", xml$, " window"))
gui$(CONCAT$("gtk_server_connect ", window$, " delete-event window"))

REM Get exit button ID and connect signal
exit$ = gui$(CONCAT$("glade_xml_get_widget ", xml$, " exit_button"))
gui$(CONCAT$("gtk_server_connect ", exit$, " clicked exit_button"))

REM Get print button ID and connect signal
button$ = gui$(CONCAT$("glade_xml_get_widget ", xml$, " print_button"))
gui$(CONCAT$("gtk_server_connect ", button$, " clicked print_button"))

REM Get entry ID
entry$ = gui$(CONCAT$("glade_xml_get_widget ", xml$, " entry"))

REM Mainloop
WHILE (NOT(EQUAL(event$, "window")) AND NOT(EQUAL(event$, "exit_button"))) DO

        event$ = gui$("gtk_server_callback wait")

        IF EQUAL(event$, "print_button") THEN
                result$ = gui$(CONCAT$("gtk_entry_get_text ", entry$))
                PRINT result$
        ENDIF
WEND

REM Exit GTK
gui$("gtk_server_exit")