#!/usr/bin/newlisp # # DirectGTK using (callback). # # PvE, january 2009. No need for GTK-server. # #---------------------------------------------------------------------------------------------- # Define libraries for each platform (case ostype ("Win32" (set 'GTK "libgtk-win32-2.0-0.dll") (set 'GOBJECT "libgobject-2.0-0.dll")) ("OSX" (set 'GTK "/Library/Frameworks/Gtk.framework/Libraries/libgtk-quartz-2.0.0.dylib") (set 'GOBJECT "/Library/Frameworks/GLib.framework/Libraries/libgobject-2.0.0.dylib")) (true ; libnames adjusted and tested on Linux UBUNTU 9.04 (L.M.) (set 'GTK "/usr/lib/libgtk-x11-2.0.so.0") (set 'GOBJECT "/usr/lib/libgobject-2.0.so.0"))) # Get the necessary functions (import GOBJECT "g_signal_connect_data") (import GTK "gtk_init") (import GTK "gtk_window_new") (import GTK "gtk_window_set_title") (import GTK "gtk_window_set_default_size") (import GTK "gtk_window_set_position") (import GTK "gtk_table_new") (import GTK "gtk_container_add") (import GTK "gtk_button_new_with_label") (import GTK "gtk_table_attach_defaults") (import GTK "gtk_entry_new") (import GTK "gtk_widget_show_all") (import GTK "gtk_entry_get_text") (import GTK "gtk_main") (import GTK "gtk_exit") # Callback to exit program (define (exit_prog) (gtk_exit 0) (exit)) # This callback receives the signaled widget (the button), and receives the additional data too, namely the entry (define (print_content button widget) (println (get-string (gtk_entry_get_text widget)))) # This callback receives the signaled widget which was the entry itself (define (print_entry widget) (println (get-string (gtk_entry_get_text widget)))) # Initialize GTK (gtk_init 0 0) # Define the mainwindow (set 'win (gtk_window_new 0)) (gtk_window_set_title win "DirectGTK") (gtk_window_set_default_size win 150 100) (gtk_window_set_position win 1) # Connect the delete signal to the mainwindow (g_signal_connect_data win "delete-event" (callback 0 'exit_prog) 0 0 0) # Define a table (set 'table (gtk_table_new 30 30 1)) (gtk_container_add win table) # Define the other widgets (set 'entry (gtk_entry_new)) (gtk_table_attach_defaults table entry 2 28 5 15) (g_signal_connect_data entry "activate" (callback 1 'print_entry) 0 0 0) (set 'button1 (gtk_button_new_with_label "Exit")) (gtk_table_attach_defaults table button1 17 28 20 25) (g_signal_connect_data button1 "clicked" (callback 0 'exit_prog) 0 0 0) (set 'button2 (gtk_button_new_with_label "Print text")) (gtk_table_attach_defaults table button2 2 13 20 25) # Define a callback and send the entry as additional data (g_signal_connect_data button2 "clicked" (callback 2 'print_content) entry 0 0) # Show (gtk_widget_show_all win) # Mainloop (gtk_main)