Revision 1074 branches/simulator/projects/simulator/simulator/gui/gtk_gui.c
| gtk_gui.c | ||
|---|---|---|
| 5 | 5 |
#include "gtk_gui.h" |
| 6 | 6 |
#include "gtk_environment_view.h" |
| 7 | 7 |
|
| 8 |
#include "robot.h" |
|
| 9 |
|
|
| 10 |
#define NEW_ROBOT 1 |
|
| 11 |
#define PAUSE 2 |
|
| 12 |
#define RESUME 3 |
|
| 13 |
|
|
| 8 | 14 |
GtkWidget* window; |
| 9 | 15 |
GtkWidget* view = NULL; |
| 10 | 16 |
|
| 11 | 17 |
void destroy_callback(int arg) |
| 12 | 18 |
{
|
| 19 |
robots_cleanup(); |
|
| 13 | 20 |
gtk_main_quit(); |
| 14 | 21 |
} |
| 15 | 22 |
|
| 23 |
void make_new_robot(void) |
|
| 24 |
{
|
|
| 25 |
GtkWidget *dialog; |
|
| 26 |
|
|
| 27 |
gdk_threads_leave(); |
|
| 28 |
robots_pause(); |
|
| 29 |
gdk_threads_enter(); |
|
| 30 |
|
|
| 31 |
dialog = gtk_file_chooser_dialog_new ("Open File",
|
|
| 32 |
GTK_WINDOW(window), |
|
| 33 |
GTK_FILE_CHOOSER_ACTION_OPEN, |
|
| 34 |
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
|
| 35 |
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, |
|
| 36 |
NULL); |
|
| 37 |
|
|
| 38 |
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) |
|
| 39 |
{
|
|
| 40 |
char *filename; |
|
| 41 |
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); |
|
| 42 |
robot_create(filename); |
|
| 43 |
g_free (filename); |
|
| 44 |
} |
|
| 45 |
gtk_widget_destroy (dialog); |
|
| 46 |
|
|
| 47 |
gdk_threads_leave(); |
|
| 48 |
robots_resume(); |
|
| 49 |
gdk_threads_enter(); |
|
| 50 |
} |
|
| 51 |
|
|
| 52 |
static gboolean menuhandler(int type) |
|
| 53 |
{
|
|
| 54 |
switch (type) |
|
| 55 |
{
|
|
| 56 |
case NEW_ROBOT: |
|
| 57 |
make_new_robot(); |
|
| 58 |
break; |
|
| 59 |
case PAUSE: |
|
| 60 |
gdk_threads_leave(); |
|
| 61 |
robots_pause(); |
|
| 62 |
gdk_threads_enter(); |
|
| 63 |
break; |
|
| 64 |
case RESUME: |
|
| 65 |
gdk_threads_leave(); |
|
| 66 |
robots_resume(); |
|
| 67 |
gdk_threads_enter(); |
|
| 68 |
break; |
|
| 69 |
} |
|
| 70 |
|
|
| 71 |
return TRUE; |
|
| 72 |
} |
|
| 73 |
|
|
| 74 |
GtkWidget* make_menu_bar(GtkWidget* window, GtkWidget* other) |
|
| 75 |
{
|
|
| 76 |
GtkWidget* menu_bar; |
|
| 77 |
GtkWidget* file_item; |
|
| 78 |
GtkWidget* file_menu; |
|
| 79 |
GtkWidget* menu_item; |
|
| 80 |
GtkWidget* vbox; |
|
| 81 |
|
|
| 82 |
file_menu = gtk_menu_new(); |
|
| 83 |
gtk_widget_show(file_menu); |
|
| 84 |
|
|
| 85 |
menu_item = gtk_menu_item_new_with_label("New Robot");
|
|
| 86 |
gtk_widget_show(menu_item); |
|
| 87 |
gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), menu_item); |
|
| 88 |
g_signal_connect_swapped(G_OBJECT(menu_item), "activate", |
|
| 89 |
G_CALLBACK(menuhandler), (gint*)NEW_ROBOT); |
|
| 90 |
|
|
| 91 |
menu_item = gtk_menu_item_new_with_label("Pause");
|
|
| 92 |
gtk_widget_show(menu_item); |
|
| 93 |
gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), menu_item); |
|
| 94 |
g_signal_connect_swapped(G_OBJECT(menu_item), "activate", |
|
| 95 |
G_CALLBACK(menuhandler), (gint*)PAUSE); |
|
| 96 |
|
|
| 97 |
menu_item = gtk_menu_item_new_with_label("Resume");
|
|
| 98 |
gtk_widget_show(menu_item); |
|
| 99 |
gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), menu_item); |
|
| 100 |
g_signal_connect_swapped(G_OBJECT(menu_item), "activate", |
|
| 101 |
G_CALLBACK(menuhandler), (gint*)RESUME); |
|
| 102 |
|
|
| 103 |
file_item = gtk_menu_item_new_with_label("File");
|
|
| 104 |
gtk_widget_show(file_item); |
|
| 105 |
gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item), file_menu); |
|
| 106 |
menu_bar = gtk_menu_bar_new(); |
|
| 107 |
|
|
| 108 |
vbox = gtk_vbox_new (FALSE, 0); |
|
| 109 |
gtk_container_add (GTK_CONTAINER (window), vbox); |
|
| 110 |
gtk_widget_show (vbox); |
|
| 111 |
gtk_box_pack_start (GTK_BOX (vbox), menu_bar, FALSE, FALSE, 2); |
|
| 112 |
gtk_widget_show(menu_bar); |
|
| 113 |
|
|
| 114 |
gtk_box_pack_end (GTK_BOX (vbox), other, TRUE, TRUE, 2); |
|
| 115 |
gtk_widget_show(other); |
|
| 116 |
|
|
| 117 |
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), file_item); |
|
| 118 |
|
|
| 119 |
return menu_bar; |
|
| 120 |
} |
|
| 121 |
|
|
| 16 | 122 |
int gtk_gui_run(int argc, char** argv) |
| 17 | 123 |
{
|
| 18 |
//g_thread_init(NULL); |
|
| 19 | 124 |
gdk_threads_init(); |
| 20 | 125 |
gdk_threads_enter(); |
| 21 | 126 |
gtk_init(&argc, &argv); |
| ... | ... | |
| 23 | 128 |
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
| 24 | 129 |
gtk_window_set_title(GTK_WINDOW(window), "Colony Simulator"); |
| 25 | 130 |
gtk_window_maximize(GTK_WINDOW(window)); |
| 26 |
//g_signal_connect(G_OBJECT(window), "delete_event", |
|
| 27 |
// G_CALLBACK(delete_event), NULL); |
|
| 28 |
|
|
| 131 |
gtk_container_set_border_width(GTK_CONTAINER(window), 0); |
|
| 29 | 132 |
g_signal_connect(G_OBJECT(window), "destroy", |
| 30 | 133 |
G_CALLBACK(destroy_callback), NULL); |
| 31 |
|
|
| 32 |
gtk_container_set_border_width(GTK_CONTAINER(window), 0); |
|
| 33 | 134 |
|
| 34 | 135 |
view = gtk_environment_view_new(); |
| 35 |
gtk_container_add(GTK_CONTAINER(window), view); |
|
| 36 |
gtk_widget_show(view); |
|
| 37 | 136 |
|
| 137 |
make_menu_bar(window, view); |
|
| 38 | 138 |
gtk_widget_show(window); |
| 39 | 139 |
|
| 40 | 140 |
gtk_main(); |
Also available in: Unified diff