Project

General

Profile

Revision 1074

Can now add robots through the GUI.

View differences:

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