Embedding external libraries - GTK demo
Mar 30, 2013 9:24:03 GMT 1
Post by bigbass on Mar 30, 2013 9:24:03 GMT 1
another C code example converted to PROTO syntax
*could use some help with the callbacks I set everything to quit for the demo
maybe this could be a way to add more stand alone widgets
at the moment we already have these in HUG but there are still more widgets
that have the potential to be added
#include <glib.h>
#include <gtk/gtk.h>
static gboolean close_application( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
gtk_main_quit ();
return FALSE;
}
int main( int argc,
char *argv[] )
{
GtkWidget *window = NULL;
GtkWidget *box1;
GtkWidget *box2;
GtkWidget *button;
GtkWidget *separator;
GSList *group;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "delete-event",
G_CALLBACK (close_application),
NULL);
gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
box1 = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), box1);
gtk_widget_show (box1);
box2 = gtk_vbox_new (FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
gtk_widget_show (box2);
button = gtk_radio_button_new_with_label (NULL, "button1");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_show (button);
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
button = gtk_radio_button_new_with_label (group, "button2");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_show (button);
button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button), "button3");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_show (button);
separator = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
gtk_widget_show (separator);
box2 = gtk_vbox_new (FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
gtk_widget_show (box2);
button = gtk_button_new_with_label ("close");
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (close_application),
window);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_set_can_default (button, TRUE);
gtk_widget_grab_default (button);
gtk_widget_show (button);
gtk_widget_show (window);
gtk_main ();
return 0;
}
call it radio-proto.bac
simplified some things
*could use some help with the callbacks I set everything to quit for the demo
maybe this could be a way to add more stand alone widgets
at the moment we already have these in HUG but there are still more widgets
that have the potential to be added
#include <glib.h>
#include <gtk/gtk.h>
static gboolean close_application( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
gtk_main_quit ();
return FALSE;
}
int main( int argc,
char *argv[] )
{
GtkWidget *window = NULL;
GtkWidget *box1;
GtkWidget *box2;
GtkWidget *button;
GtkWidget *separator;
GSList *group;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "delete-event",
G_CALLBACK (close_application),
NULL);
gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
box1 = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), box1);
gtk_widget_show (box1);
box2 = gtk_vbox_new (FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
gtk_widget_show (box2);
button = gtk_radio_button_new_with_label (NULL, "button1");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_show (button);
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
button = gtk_radio_button_new_with_label (group, "button2");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_show (button);
button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button), "button3");
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_show (button);
separator = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
gtk_widget_show (separator);
box2 = gtk_vbox_new (FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
gtk_widget_show (box2);
button = gtk_button_new_with_label ("close");
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (close_application),
window);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_set_can_default (button, TRUE);
gtk_widget_grab_default (button);
gtk_widget_show (button);
gtk_widget_show (window);
gtk_main ();
return 0;
}
call it radio-proto.bac
simplified some things
PRAGMA LDFLAGS `pkg-config --libs gtk+-3.0`
PRAGMA OPTIONS `pkg-config --cflags gtk+-3.0`
PRAGMA COMPILER gcc
OPTION PARSE FALSE
PROTO gtk_init, gtk_window_new
PROTO gtk_window_set_title
PROTO gtk_container_add
PROTO gtk_container_set_border_width
PROTO gtk_vbox_new
PROTO gtk_box_pack_start
PROTO gtk_widget_show
PROTO gtk_radio_button_new_with_label_from_widget
PROTO gtk_toggle_button_set_active
PROTO gtk_button_new_with_label
PROTO gtk_hseparator_new
PROTO gtk_widget_set_can_default
PROTO gtk_widget_grab
PROTO gtk_widget_grab_default
PROTO gtk_main
PROTO gtk_main_quit
PROTO g_signal_connect_data
GTK_WINDOW_TOPLEVEL = 0
'==============
SUB exit_prog
'==============
gtk_main_quit
END SUB
gtk_init(0, 0)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL)
g_signal_connect_data(window, "delete-event", exit_prog, 0, 0, 0)
gtk_window_set_title (window, "radio buttons")
gtk_container_set_border_width (window, 0)
box1 = gtk_vbox_new (FALSE, 0)
gtk_container_add (window, box1)
gtk_widget_show (box1)
box2 = gtk_vbox_new (FALSE, 10)
gtk_container_set_border_width (box2, 10)
gtk_box_pack_start (box1, box2, TRUE, TRUE, 0)
gtk_widget_show (box2)
button = gtk_radio_button_new_with_label (NULL, "button1")
gtk_box_pack_start (box2, button, TRUE, TRUE, 0)
gtk_widget_show (button)
group = gtk_radio_button_get_group (button)
button = gtk_radio_button_new_with_label (group, "button2")
gtk_toggle_button_set_active (button, TRUE)
gtk_box_pack_start (box2, button, TRUE, TRUE, 0)
gtk_widget_show (button)
g_signal_connect_data(button, "clicked", exit_prog, 0, 0, 0)
button = gtk_radio_button_new_with_label_from_widget (button, "button3")
gtk_box_pack_start (box2, button, TRUE, TRUE, 0)
gtk_widget_show (button)
g_signal_connect_data(button, "clicked", exit_prog, 0, 0, 0)
separator = gtk_hseparator_new ()
gtk_box_pack_start (box1, separator, FALSE, TRUE, 0)
gtk_widget_show (separator)
box2 = gtk_vbox_new (FALSE, 10)
gtk_container_set_border_width (box2, 10)
gtk_box_pack_start (box1, box2, FALSE, TRUE, 0)
gtk_widget_show (box2)
button = gtk_button_new_with_label ("close")
g_signal_connect_data(button, "clicked", exit_prog, 0, 0, 0)
gtk_box_pack_start (box2, button, TRUE, TRUE, 0)
gtk_widget_set_can_default (button, TRUE)
gtk_widget_grab_default (button)
gtk_widget_show (button)
gtk_widget_show (window)
gtk_main