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