1 /*
2  *      This program is free software; you can redistribute it and/or modify
3  *      it under the terms of the GNU General Public License as published by
4  *      the Free Software Foundation; either version 2 of the License, or
5  *      (at your option) any later version.
6  *
7  *      This program is distributed in the hope that it will be useful,
8  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  *      GNU General Public License for more details.
11  *
12  *      You should have received a copy of the GNU General Public License
13  *      along with this program; if not, write to the Free Software
14  *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 #include <string.h>
17 #include <gtk/gtk.h>
18 #include <glib/gi18n.h>
19 #include "callback.h"
20 #include "config.h"
21 #include "def.h"
22 
23 /* interface_create: take cares of building the interface.
24  * Please keep this function at the end of this file.
25  */
interface_create(struct _prog * prog_data)26 void interface_create(struct _prog *prog_data)
27 {
28 	GtkWidget *fenetre;
29 	GtkWidget *vbox;
30 	GtkWidget *hbox;
31 	GtkWidget *button;
32 	GtkWidget *aire_de_dessin;
33 	GtkWidget *icon;
34 	GtkWidget *label_msg;
35 	GtkWidget *frame_game;
36 	GtkWidget *frame_pts;
37 	GtkWidget *table_game;
38 	GtkWidget *table_pts;
39 	GtkWidget *label_gamestat_left;
40 	GtkWidget *label_gameturn_left;
41 	GtkWidget *label_gametrump_left;
42 	GtkWidget *label_gamestat_right;
43 	GtkWidget *label_gameturn_right;
44 	GtkWidget *label_ptsleft;
45 	GtkWidget *label_ptsright;
46 	GtkWidget *vbox_pts;
47 	GtkWidget *vboxtable;
48 	GtkWidget *scrolling;
49 	GtkWidget *hboxfamily;
50 	GtkWidget *table_annonces;
51 	GtkWidget *vbox_annonces;
52 	GtkWidget *frame_annonces;
53 	GtkWidget *vboxmenu;
54 
55 	char *iconfile = (char*) g_malloc(sizeof(gchar)*strlen(DATA_DIR)+20 );
56 
57 	if(iconfile)
58 		g_sprintf(iconfile, "%s/belooted.png", DATA_DIR);
59 
60 	prog_data->allwidgets = (GtkWidget **) g_malloc(sizeof(GtkWidget *)* 22);
61 
62 	if(prog_data->allwidgets != NULL)
63 	{
64 		fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);
65 		gtk_window_set_title( GTK_WINDOW(fenetre), _("Belooted") );
66 
67 		if(g_file_test(iconfile, G_FILE_TEST_EXISTS)  )
68 			gtk_window_set_icon_from_file(GTK_WINDOW(fenetre), iconfile, NULL);
69 
70 
71 		vboxmenu = gtk_vbox_new(FALSE, 0);
72 
73 		gtk_container_add( GTK_CONTAINER(fenetre), vboxmenu);
74 
75 
76 		hbox = gtk_hbox_new(FALSE, 0);
77 		gtk_box_pack_start(GTK_BOX(vboxmenu), hbox, TRUE, TRUE, 0);
78 
79 		aire_de_dessin = gtk_drawing_area_new();
80 		gtk_box_pack_start(GTK_BOX(hbox), aire_de_dessin, TRUE, TRUE, 2);
81 
82 		gtk_widget_set_size_request( aire_de_dessin, 430, 430);
83 
84 		vbox = gtk_vbox_new(FALSE, 0);
85 
86 		gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 2);
87 
88 		gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
89 
90 
91 		frame_game = gtk_frame_new( _("Round") );
92 
93 		gtk_frame_set_label_align(GTK_FRAME(frame_game), 0.5, 0.5);
94 
95 		gtk_box_pack_start(GTK_BOX(vbox), frame_game, FALSE, TRUE, 2);
96 
97 		gtk_frame_set_shadow_type(GTK_FRAME(frame_game), GTK_SHADOW_ETCHED_IN);
98 
99 		table_game = gtk_table_new(3, 2, FALSE);
100 
101 		gtk_container_add( GTK_CONTAINER(frame_game), table_game);
102 
103 		gtk_container_set_border_width(GTK_CONTAINER(table_game), 20);
104 
105 		gtk_table_set_col_spacings(GTK_TABLE(table_game), 20);
106 		gtk_table_set_row_spacings(GTK_TABLE(table_game), 5);
107 
108 
109 
110 		label_gamestat_left = gtk_label_new( _("Master:") );
111 		label_gametrump_left = gtk_label_new( _("Trump:") );
112 		label_gameturn_left = gtk_label_new( _("Turn:") );
113 
114 		gtk_misc_set_alignment(GTK_MISC(label_gamestat_left), 1, 0.5);
115 		gtk_misc_set_alignment(GTK_MISC(label_gameturn_left), 1, 0.5);
116 		gtk_misc_set_alignment(GTK_MISC(label_gametrump_left), 1, 0.5);
117 
118 		gtk_table_attach_defaults(GTK_TABLE(table_game),
119 			label_gameturn_left,
120 			/*left, right, top, bot*/ 0, 1, 0, 1);
121 
122 		gtk_table_attach_defaults(GTK_TABLE(table_game),
123 			label_gametrump_left,
124 			0, 1, 1, 2);
125 
126 		gtk_table_attach_defaults(GTK_TABLE(table_game),
127 			label_gamestat_left,
128 			0, 1, 2, 3);
129 
130 
131 		icon = gtk_image_new();
132 
133 		gtk_widget_set_size_request(icon, 16, 16);
134 
135 		gtk_misc_set_alignment(GTK_MISC(icon), 0, 0.5);
136 
137 
138 		label_gamestat_right = gtk_label_new( _("N/a") );
139 		label_gameturn_right = gtk_label_new( _("None") );
140 
141 		gtk_misc_set_alignment(GTK_MISC(label_gamestat_right), 0, 0.5);
142 		gtk_misc_set_alignment(GTK_MISC(label_gameturn_right), 0, 0.5);
143 
144 		gtk_table_attach_defaults(GTK_TABLE(table_game),
145 			label_gameturn_right,
146 			1, 2, 0, 1);
147 
148 		gtk_table_attach_defaults(GTK_TABLE(table_game),
149 			icon,
150 			 1, 2, 1, 2);
151 
152 		gtk_table_attach_defaults(GTK_TABLE(table_game),
153 			label_gamestat_right,
154 			1, 2, 2, 3);
155 
156 
157 		frame_annonces = gtk_frame_new( _("Game Score") );
158 
159 		gtk_frame_set_label_align(GTK_FRAME(frame_annonces), 0.5, 0.5);
160 
161 		gtk_box_pack_start(GTK_BOX(vbox), frame_annonces, TRUE, TRUE, 2);
162 
163 		gtk_frame_set_shadow_type(GTK_FRAME(frame_annonces), GTK_SHADOW_ETCHED_IN);
164 
165 		vbox_annonces = gtk_vbox_new(FALSE, 2);
166 
167 		gtk_container_add( GTK_CONTAINER(frame_annonces), vbox_annonces);
168 
169 		gtk_container_set_border_width(GTK_CONTAINER(vbox_annonces), 5);
170 
171 		table_annonces = gtk_table_new(4, 2, TRUE);
172 
173 		gtk_table_set_col_spacings(GTK_TABLE(table_annonces), 5);
174 		gtk_table_set_row_spacings(GTK_TABLE(table_annonces), 10);
175 
176 
177 		gtk_box_pack_start(GTK_BOX(vbox_annonces), table_annonces, FALSE, TRUE, 5);
178 
179 
180 		gtk_table_attach_defaults(GTK_TABLE(table_annonces),
181 			gtk_label_new( _("You") ),
182 			0, 1, 0, 1);
183 
184 		gtk_table_attach_defaults(GTK_TABLE(table_annonces),
185 			gtk_label_new( _("Computer") ),
186 			1, 2, 0, 1);
187 
188 		prog_data->allwidgets[20] = gtk_label_new(NULL);
189 		prog_data->allwidgets[21] = gtk_label_new(NULL);
190 		gtk_table_attach_defaults(GTK_TABLE(table_annonces),
191 			prog_data->allwidgets[20],
192 			0, 1, 1, 2);
193 
194 		gtk_table_attach_defaults(GTK_TABLE(table_annonces),
195 			prog_data->allwidgets[21],
196 			1, 2, 1, 2);
197 
198 		prog_data->allwidgets[18] = gtk_label_new(NULL);
199 		prog_data->allwidgets[19] = gtk_label_new(NULL);
200 		gtk_table_attach_defaults(GTK_TABLE(table_annonces),
201 			prog_data->allwidgets[18],
202 			0, 1, 2, 3);
203 
204 		gtk_table_attach_defaults(GTK_TABLE(table_annonces),
205 			prog_data->allwidgets[19],
206 			1, 2, 2, 3);
207 
208 		label_ptsleft = gtk_label_new(NULL);
209 		label_ptsright = gtk_label_new(NULL);
210 		gtk_table_attach_defaults(GTK_TABLE(table_annonces),
211 			label_ptsleft,
212 			0, 1, 3, 4);
213 
214 		gtk_table_attach_defaults(GTK_TABLE(table_annonces),
215 			label_ptsright,
216 			1, 2, 3, 4);
217 
218 
219 
220 		/* ------------------ Game score part */
221 
222 		vbox_pts = gtk_vbox_new(FALSE, 2);
223 
224 		gtk_box_pack_start( GTK_BOX(vbox_annonces), vbox_pts, TRUE , TRUE, 2);
225 
226 		table_pts = gtk_table_new(0, 2, TRUE);
227 
228 
229 		scrolling = gtk_scrolled_window_new(
230 			NULL, NULL);
231 
232 		gtk_box_pack_start( GTK_BOX(vbox_pts),
233 			scrolling, TRUE, TRUE, 2 );
234 
235 		gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolling),
236 			GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
237 
238 		vboxtable = gtk_vbox_new(FALSE, 2);
239 
240 		gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolling), vboxtable);
241 
242 
243 		gtk_box_pack_start(GTK_BOX(vboxtable), table_pts, FALSE, TRUE, 2);
244 
245 
246 		gtk_container_set_border_width(GTK_CONTAINER(table_pts), 10);
247 
248 		gtk_table_set_col_spacings(GTK_TABLE(table_pts), 5);
249 		gtk_table_set_row_spacings(GTK_TABLE(table_pts), 5);
250 
251 
252 
253 
254 
255 
256 
257 
258 		label_msg = gtk_label_new(NULL);
259 
260 		gtk_box_pack_start(GTK_BOX(vbox_annonces), label_msg, FALSE, FALSE, 2);
261 
262 
263 
264 
265 
266 
267 		/* -------------------- Bottom Part */
268 
269 
270 
271 
272 		hboxfamily = gtk_hbox_new(TRUE, 2);
273 
274 		gtk_box_pack_start(GTK_BOX(vbox), hboxfamily, FALSE, TRUE, 2);
275 
276 
277 		prog_data->allwidgets[10] = gtk_button_new();
278 		prog_data->allwidgets[11] = gtk_button_new();
279 		prog_data->allwidgets[12] = gtk_button_new();
280 		prog_data->allwidgets[13] = gtk_button_new();
281 
282 		gtk_box_pack_start(GTK_BOX(hboxfamily),
283 			prog_data->allwidgets[10],
284 			FALSE, TRUE, 2);
285 		gtk_box_pack_start(GTK_BOX(hboxfamily),
286 			prog_data->allwidgets[11],
287 			FALSE, TRUE, 2);
288 		gtk_box_pack_start(GTK_BOX(hboxfamily),
289 			prog_data->allwidgets[12],
290 			FALSE, TRUE, 2);
291 		gtk_box_pack_start(GTK_BOX(hboxfamily),
292 			prog_data->allwidgets[13],
293 			FALSE, TRUE, 2);
294 
295 
296 		prog_data->allwidgets[14] = gtk_image_new();
297 		prog_data->allwidgets[15] = gtk_image_new();
298 		prog_data->allwidgets[16] = gtk_image_new();
299 		prog_data->allwidgets[17] = gtk_image_new();
300 
301 
302 		gtk_container_add( GTK_CONTAINER(prog_data->allwidgets[10]), prog_data->allwidgets[14]);
303 		gtk_container_add( GTK_CONTAINER(prog_data->allwidgets[11]), prog_data->allwidgets[15]);
304 		gtk_container_add( GTK_CONTAINER(prog_data->allwidgets[12]), prog_data->allwidgets[16]);
305 		gtk_container_add( GTK_CONTAINER(prog_data->allwidgets[13]), prog_data->allwidgets[17]);
306 
307 
308 		button= gtk_button_new_with_label( _("Start") );
309 		gtk_widget_set_sensitive(button, FALSE);
310 
311 		gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, TRUE, 2);
312 
313 
314 
315 		/* ----------------------- Signals */
316 
317 		g_signal_connect( G_OBJECT(fenetre), "destroy", G_CALLBACK(quit), prog_data );
318 		g_signal_connect( G_OBJECT(fenetre), "check_resize", G_CALLBACK(resize), prog_data );
319 
320 
321 
322 		g_signal_connect( G_OBJECT(prog_data->allwidgets[10]), "clicked", G_CALLBACK(click_diamond), prog_data);
323 		g_signal_connect( G_OBJECT(prog_data->allwidgets[11]), "clicked", G_CALLBACK(click_spade), prog_data);
324 		g_signal_connect( G_OBJECT(prog_data->allwidgets[12]), "clicked", G_CALLBACK(click_heart), prog_data);
325 		g_signal_connect( G_OBJECT(prog_data->allwidgets[13]), "clicked", G_CALLBACK(click_club), prog_data);
326 
327 		g_signal_connect( G_OBJECT(button), "clicked", G_CALLBACK(event_start), prog_data);
328 
329 		g_signal_connect( G_OBJECT(aire_de_dessin), "realize", G_CALLBACK(realisation), prog_data );
330 		g_signal_connect( G_OBJECT(aire_de_dessin), "expose_event", G_CALLBACK(rafraichissement), prog_data );
331 
332 		gtk_widget_add_events(aire_de_dessin, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_MOTION_MASK );
333 
334 		g_signal_connect(G_OBJECT(aire_de_dessin), "button_press_event", G_CALLBACK(button_press_event), prog_data);
335 		g_signal_connect(G_OBJECT(aire_de_dessin), "button_release_event", G_CALLBACK(button_release_event), prog_data);
336 
337 		g_signal_connect(G_OBJECT(aire_de_dessin), "motion_notify_event", G_CALLBACK(motion_notify_event), prog_data);
338 
339 		g_signal_connect( G_OBJECT(fenetre), "key_press_event", G_CALLBACK(key_down), prog_data );
340 
341 
342 		/* ---------------------------- Pointers */
343 
344 
345 		prog_data->allwidgets[0] = fenetre;
346 		prog_data->allwidgets[1] = scrolling;
347 		prog_data->allwidgets[2] = button;
348 		prog_data->allwidgets[3] = label_ptsleft;
349 		prog_data->allwidgets[4] = label_ptsright;
350 		prog_data->allwidgets[5] = icon;
351 		prog_data->allwidgets[6] = label_msg;
352 		prog_data->allwidgets[7] = label_gamestat_right;
353 		prog_data->allwidgets[8] = label_gameturn_right;
354 		prog_data->allwidgets[9] = table_pts;
355 
356 
357 		prog_data->area = aire_de_dessin;
358 	}
359 
360 
361 }
362