]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - plugins/surface_quake2/surfaceflagsdialog_quake2.cpp
transfer from internal tree r5311 branches/1.4-gpl
[xonotic/netradiant.git] / plugins / surface_quake2 / surfaceflagsdialog_quake2.cpp
1 /*\r
2 Copyright (C) 1999-2007 id Software, Inc. and contributors.\r
3 For a list of contributors, see the accompanying CONTRIBUTORS file.\r
4 \r
5 This file is part of GtkRadiant.\r
6 \r
7 GtkRadiant is free software; you can redistribute it and/or modify\r
8 it under the terms of the GNU General Public License as published by\r
9 the Free Software Foundation; either version 2 of the License, or\r
10 (at your option) any later version.\r
11 \r
12 GtkRadiant is distributed in the hope that it will be useful,\r
13 but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15 GNU General Public License for more details.\r
16 \r
17 You should have received a copy of the GNU General Public License\r
18 along with GtkRadiant; if not, write to the Free Software\r
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
20 */\r
21 \r
22 #include <gtk/gtk.h>\r
23 #include <gdk/gdkkeysyms.h>\r
24 \r
25 #include "surfdlg_plugin.h"\r
26 \r
27 #include "surfaceflagsdialog_quake2.h"\r
28 \r
29   GtkWidget *notebook1;\r
30 \r
31   GtkWidget *surface_lightbutton;\r
32   GtkWidget *surface_slickbutton;\r
33   GtkWidget *surface_skybutton;\r
34   GtkWidget *surface_warpbutton;\r
35   GtkWidget *surface_trans33button;\r
36   GtkWidget *surface_trans66button;\r
37   GtkWidget *surface_flowingbutton;\r
38   GtkWidget *surface_nodrawbutton;\r
39   GtkWidget *surface_hintbutton;\r
40   GtkWidget *surface_skipbutton;\r
41 \r
42   GtkWidget *content_solidbutton;\r
43   GtkWidget *content_windowbutton;\r
44   GtkWidget *content_auxbutton;\r
45   GtkWidget *content_lavabutton;\r
46   GtkWidget *content_slimebutton;\r
47   GtkWidget *content_waterbutton;\r
48   GtkWidget *content_mistbutton;\r
49   GtkWidget *content_areaportalbutton;\r
50   GtkWidget *content_playerclipbutton;\r
51   GtkWidget *content_monsterclipbutton;\r
52   GtkWidget *content_current0button;\r
53   GtkWidget *content_current90button;\r
54   GtkWidget *content_current180button;\r
55   GtkWidget *content_current270button;\r
56   GtkWidget *content_currentUPbutton;\r
57   GtkWidget *content_currentDOWNbutton;\r
58   GtkWidget *content_originbutton;\r
59   GtkWidget *content_detailbutton;\r
60   GtkWidget *content_translucentbutton;\r
61   GtkWidget *content_ladderbutton;\r
62 \r
63   GtkWidget *surfacebutton;\r
64   GtkWidget *contentbutton;\r
65 \r
66   GtkWidget *value_entry;\r
67   gboolean setup_buttons = TRUE;\r
68 \r
69   int working_surface_flags;\r
70   int surface_mask;\r
71   int working_content_flags;\r
72   int content_mask;\r
73   int working_value;\r
74 \r
75 inline void set_inconsistent(GtkWidget *toggle_button)\r
76 {\r
77   gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON (toggle_button), TRUE);\r
78 }\r
79 \r
80 inline void clear_inconsistent(GtkWidget *toggle_button)\r
81 {\r
82   GtkWidget *button_label;\r
83 \r
84   if ( gtk_toggle_button_get_inconsistent(GTK_TOGGLE_BUTTON (toggle_button)) )\r
85   {\r
86     gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON (toggle_button), FALSE);\r
87   }\r
88 \r
89 }\r
90 \r
91 void clear_all_inconsistent(void)\r
92 {\r
93   clear_inconsistent( surface_lightbutton );\r
94   clear_inconsistent( surface_slickbutton );\r
95   clear_inconsistent( surface_skybutton );\r
96   clear_inconsistent( surface_warpbutton );\r
97   clear_inconsistent( surface_trans33button );\r
98   clear_inconsistent( surface_trans66button );\r
99   clear_inconsistent( surface_flowingbutton );\r
100   clear_inconsistent( surface_nodrawbutton );\r
101   clear_inconsistent( surface_hintbutton );\r
102   clear_inconsistent( surface_skipbutton );\r
103 \r
104   clear_inconsistent( content_solidbutton );\r
105   clear_inconsistent( content_windowbutton );\r
106   clear_inconsistent( content_auxbutton );\r
107   clear_inconsistent( content_lavabutton );\r
108   clear_inconsistent( content_slimebutton );\r
109   clear_inconsistent( content_waterbutton );\r
110   clear_inconsistent( content_mistbutton );\r
111   clear_inconsistent( content_areaportalbutton );\r
112   clear_inconsistent( content_playerclipbutton );\r
113   clear_inconsistent( content_monsterclipbutton );\r
114   clear_inconsistent( content_current0button );\r
115   clear_inconsistent( content_current90button );\r
116   clear_inconsistent( content_current180button );\r
117   clear_inconsistent( content_current270button );\r
118   clear_inconsistent( content_currentUPbutton );\r
119   clear_inconsistent( content_currentDOWNbutton );\r
120   clear_inconsistent( content_originbutton );\r
121   clear_inconsistent( content_detailbutton );\r
122   clear_inconsistent( content_translucentbutton );\r
123   clear_inconsistent( content_ladderbutton );\r
124 }\r
125 \r
126 void clear_all_buttons_and_values()\r
127 {\r
128   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_lightbutton ), FALSE);\r
129   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_slickbutton ), FALSE);\r
130   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_skybutton ), FALSE);\r
131   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_warpbutton ), FALSE);\r
132   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_trans33button ), FALSE);\r
133   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_trans66button ), FALSE);\r
134   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_flowingbutton ), FALSE);\r
135   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_nodrawbutton ), FALSE);\r
136   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_hintbutton ), FALSE);\r
137   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_skipbutton ), FALSE);\r
138 \r
139   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_solidbutton ), FALSE);\r
140   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_windowbutton ), FALSE);\r
141   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_auxbutton ), FALSE);\r
142   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_lavabutton ), FALSE);\r
143   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_slimebutton ), FALSE);\r
144   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_waterbutton ), FALSE);\r
145   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_mistbutton ), FALSE);\r
146   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_areaportalbutton ), FALSE);\r
147   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_playerclipbutton ), FALSE);\r
148   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_monsterclipbutton ), FALSE);\r
149   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current0button ), FALSE);\r
150   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current90button ), FALSE);\r
151   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current180button ), FALSE);\r
152   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current270button ), FALSE);\r
153   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_currentUPbutton ), FALSE);\r
154   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_currentDOWNbutton ), FALSE);\r
155   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_originbutton ), FALSE);\r
156   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_detailbutton ), FALSE);\r
157   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_translucentbutton ), FALSE);\r
158   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_ladderbutton ), FALSE);\r
159 \r
160   gtk_entry_set_text( (GtkEntry *)value_entry, "");\r
161 }\r
162 \r
163 void SetFlagButtons_Quake2(texdef_to_face_t *texdef_face_list, bool b_isListEmpty)\r
164 {\r
165   int i;\r
166   int contents = 0;\r
167   int flags = 0;\r
168   int value = 0;\r
169   int diff_contents = 0;\r
170   int diff_flags = 0;\r
171   gboolean diff_value = FALSE;\r
172   char tex_buff[11];\r
173   texdef_t* tmp_texdef;\r
174   texdef_to_face_t* temp_texdef_face_list;\r
175 \r
176 \r
177   setup_buttons = TRUE;\r
178   working_surface_flags = 0;\r
179   surface_mask = 0;\r
180   working_content_flags = 0;\r
181   content_mask = 0;\r
182   working_value = 0;\r
183 \r
184   if(!b_isListEmpty)\r
185   {\r
186     tmp_texdef = &texdef_face_list->texdef;\r
187     contents = tmp_texdef->contents;\r
188     flags = tmp_texdef->flags;\r
189     value = tmp_texdef->value;\r
190 \r
191     Sys_Printf("Surface: %d\tContents: %d\tValue: %d\ttmp_texdef\n",tmp_texdef->flags,tmp_texdef->contents,tmp_texdef->value);\r
192     Sys_Printf("Surface: %d\tContents: %d\tValue: %d\n",flags,contents,value);\r
193 \r
194     for (temp_texdef_face_list = texdef_face_list->next; temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
195     {\r
196       tmp_texdef = &temp_texdef_face_list->texdef;\r
197       diff_contents |= contents ^ tmp_texdef->contents;  // Figure out which buttons are inconsistent\r
198       diff_flags |= flags ^ tmp_texdef->flags;\r
199       if (tmp_texdef->value != value)\r
200         diff_value = TRUE;\r
201 \r
202       Sys_Printf("Surface: %d\tContents: %d\tValue: %d\ttmp_texdef\n",tmp_texdef->flags,tmp_texdef->contents,tmp_texdef->value);\r
203       Sys_Printf("Surface: %d\tContents: %d\tValue: %d\n",flags,contents,value);\r
204 \r
205     }\r
206   }\r
207 \r
208 \r
209 \r
210   clear_all_inconsistent();\r
211 \r
212   // If no faces/brushes are selected, clear everything and bail\r
213    if(b_isListEmpty)\r
214   {\r
215     clear_all_buttons_and_values();\r
216     setup_buttons = FALSE;\r
217     return;\r
218   }\r
219 \r
220   // Set surface buttons to reflect brush/face flags, contents, and values\r
221   if(diff_flags & QUAKE2_SURF_LIGHT)\r
222     set_inconsistent(surface_lightbutton);\r
223   else if(flags & QUAKE2_SURF_LIGHT)\r
224         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (surface_lightbutton), TRUE);\r
225   else\r
226         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (surface_lightbutton), FALSE);\r
227 \r
228   if(diff_flags & QUAKE2_SURF_SLICK)\r
229     set_inconsistent(surface_slickbutton);\r
230   else if(flags & QUAKE2_SURF_SLICK)\r
231         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_slickbutton ), TRUE);\r
232   else\r
233         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_slickbutton ), FALSE);\r
234 \r
235   if(diff_flags & QUAKE2_SURF_SKY)\r
236     set_inconsistent(surface_skybutton);\r
237   else if(flags & QUAKE2_SURF_SKY)\r
238         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_skybutton ), TRUE);\r
239   else\r
240         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_skybutton ), FALSE);\r
241 \r
242   if(diff_flags & QUAKE2_SURF_WARP)\r
243     set_inconsistent(surface_warpbutton);\r
244   else if(flags & QUAKE2_SURF_WARP)\r
245         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_warpbutton ), TRUE);\r
246   else\r
247         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_warpbutton ), FALSE);\r
248 \r
249   if(diff_flags & QUAKE2_SURF_TRANS33)\r
250     set_inconsistent(surface_trans33button);\r
251   else if(flags & QUAKE2_SURF_TRANS33)\r
252         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_trans33button ), TRUE);\r
253   else\r
254         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_trans33button ), FALSE);\r
255 \r
256   if(diff_flags & QUAKE2_SURF_TRANS66)\r
257     set_inconsistent(surface_trans66button);\r
258   else if(flags & QUAKE2_SURF_TRANS66)\r
259         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_trans66button ), TRUE);\r
260   else\r
261         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_trans66button ), FALSE);\r
262 \r
263   if(diff_flags & QUAKE2_SURF_FLOWING)\r
264     set_inconsistent(surface_flowingbutton);\r
265   else if(flags & QUAKE2_SURF_FLOWING)\r
266         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_flowingbutton ), TRUE);\r
267   else\r
268         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_flowingbutton ), FALSE);\r
269 \r
270   if(diff_flags & QUAKE2_SURF_NODRAW)\r
271     set_inconsistent(surface_nodrawbutton);\r
272   else if(flags & QUAKE2_SURF_NODRAW)\r
273         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_nodrawbutton ), TRUE);\r
274   else\r
275         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_nodrawbutton ), FALSE);\r
276 \r
277   if(diff_flags & QUAKE2_SURF_HINT)\r
278     set_inconsistent(surface_hintbutton);\r
279   else if(flags & QUAKE2_SURF_HINT)\r
280         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_hintbutton ), TRUE);\r
281   else\r
282         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_hintbutton ), FALSE);\r
283 \r
284   if(diff_flags & QUAKE2_SURF_SKIP)\r
285     set_inconsistent(surface_skipbutton);\r
286   else if(flags & QUAKE2_SURF_SKIP)\r
287         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_skipbutton ), TRUE);\r
288   else\r
289         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( surface_skipbutton ), FALSE);\r
290 \r
291   // Set content buttons to reflect brush values\r
292   if(diff_contents & QUAKE2_CONTENTS_SOLID)\r
293     set_inconsistent(content_solidbutton);\r
294   else if(contents & QUAKE2_CONTENTS_SOLID)\r
295         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_solidbutton ), TRUE);\r
296   else\r
297         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_solidbutton ), FALSE);\r
298 \r
299   if(diff_contents & QUAKE2_CONTENTS_WINDOW)\r
300     set_inconsistent(content_windowbutton);\r
301   else if(contents & QUAKE2_CONTENTS_WINDOW)\r
302         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_windowbutton ), TRUE);\r
303   else\r
304         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_windowbutton ), FALSE);\r
305 \r
306   if(diff_contents & QUAKE2_CONTENTS_AUX)\r
307     set_inconsistent(content_auxbutton);\r
308   else if(contents & QUAKE2_CONTENTS_AUX)\r
309         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_auxbutton ), TRUE);\r
310   else\r
311         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_auxbutton ), FALSE);\r
312 \r
313   if(diff_contents & QUAKE2_CONTENTS_LAVA)\r
314     set_inconsistent(content_lavabutton);\r
315   else if(contents & QUAKE2_CONTENTS_LAVA)\r
316         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_lavabutton ), TRUE);\r
317   else\r
318         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_lavabutton ), FALSE);\r
319 \r
320   if(diff_contents & QUAKE2_CONTENTS_SLIME)\r
321     set_inconsistent(content_slimebutton);\r
322   else if(contents & QUAKE2_CONTENTS_SLIME)\r
323         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_slimebutton ), TRUE);\r
324   else\r
325         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_slimebutton ), FALSE);\r
326 \r
327   if(diff_contents & QUAKE2_CONTENTS_WATER)\r
328     set_inconsistent(content_waterbutton);\r
329   else if(contents & QUAKE2_CONTENTS_WATER)\r
330         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_waterbutton ), TRUE);\r
331   else\r
332         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_waterbutton ), FALSE);\r
333 \r
334   if(diff_contents & QUAKE2_CONTENTS_MIST)\r
335     set_inconsistent(content_mistbutton);\r
336   else if(contents & QUAKE2_CONTENTS_MIST)\r
337         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_mistbutton ), TRUE);\r
338   else\r
339         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_mistbutton ), FALSE);\r
340 \r
341   if(diff_contents & QUAKE2_CONTENTS_AREAPORTAL)\r
342     set_inconsistent(content_areaportalbutton);\r
343   else if(contents & QUAKE2_CONTENTS_AREAPORTAL)\r
344         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_areaportalbutton ), TRUE);\r
345   else\r
346         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_areaportalbutton ), FALSE);\r
347 \r
348   if(diff_contents & QUAKE2_CONTENTS_PLAYERCLIP)\r
349     set_inconsistent(content_playerclipbutton);\r
350   else if(contents & QUAKE2_CONTENTS_PLAYERCLIP)\r
351         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_playerclipbutton ), TRUE);\r
352   else\r
353         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_playerclipbutton ), FALSE);\r
354 \r
355   if(diff_contents & QUAKE2_CONTENTS_MONSTERCLIP)\r
356     set_inconsistent(content_monsterclipbutton);\r
357   else if(contents & QUAKE2_CONTENTS_MONSTERCLIP)\r
358         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_monsterclipbutton ), TRUE);\r
359   else\r
360         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_monsterclipbutton ), FALSE);\r
361 \r
362   if(diff_contents & QUAKE2_CONTENTS_CURRENT_0)\r
363     set_inconsistent(content_current0button);\r
364   else if(contents & QUAKE2_CONTENTS_CURRENT_0)\r
365         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current0button ), TRUE);\r
366   else\r
367         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current0button ), FALSE);\r
368 \r
369   if(diff_contents & QUAKE2_CONTENTS_CURRENT_90)\r
370     set_inconsistent(content_current90button);\r
371   else if(contents & QUAKE2_CONTENTS_CURRENT_90)\r
372         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current90button ), TRUE);\r
373   else\r
374         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current90button ), FALSE);\r
375 \r
376   if(diff_contents & QUAKE2_CONTENTS_CURRENT_180)\r
377     set_inconsistent(content_current180button);\r
378   else if(contents & QUAKE2_CONTENTS_CURRENT_180)\r
379         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current180button ), TRUE);\r
380   else\r
381         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current180button ), FALSE);\r
382 \r
383   if(diff_contents & QUAKE2_CONTENTS_CURRENT_270)\r
384     set_inconsistent(content_current270button);\r
385   else if(contents & QUAKE2_CONTENTS_CURRENT_270)\r
386         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current270button ), TRUE);\r
387   else\r
388         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_current270button ), FALSE);\r
389 \r
390   if(diff_contents & QUAKE2_CONTENTS_CURRENT_UP)\r
391     set_inconsistent(content_currentUPbutton);\r
392   else if(contents & QUAKE2_CONTENTS_CURRENT_UP)\r
393         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_currentUPbutton ), TRUE);\r
394   else\r
395         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_currentUPbutton ), FALSE);\r
396 \r
397   if(diff_contents & QUAKE2_CONTENTS_CURRENT_DOWN)\r
398     set_inconsistent(content_currentDOWNbutton);\r
399   else if(contents & QUAKE2_CONTENTS_CURRENT_DOWN)\r
400         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_currentDOWNbutton ), TRUE);\r
401   else\r
402         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_currentDOWNbutton ), FALSE);\r
403 \r
404   if(diff_contents & QUAKE2_CONTENTS_ORIGIN)\r
405     set_inconsistent(content_originbutton);\r
406   else if(contents & QUAKE2_CONTENTS_ORIGIN)\r
407         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_originbutton ), TRUE);\r
408   else\r
409         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_originbutton ), FALSE);\r
410 \r
411   if(diff_contents & QUAKE2_CONTENTS_DETAIL)\r
412     set_inconsistent(content_detailbutton);\r
413   else if(contents & QUAKE2_CONTENTS_DETAIL)\r
414         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_detailbutton ), TRUE);\r
415   else\r
416         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_detailbutton ), FALSE);\r
417 \r
418   if(diff_contents & QUAKE2_CONTENTS_TRANSLUCENT)\r
419     set_inconsistent(content_translucentbutton);\r
420   else if(contents & QUAKE2_CONTENTS_TRANSLUCENT)\r
421         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_translucentbutton ), TRUE);\r
422   else\r
423         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_translucentbutton ), FALSE);\r
424 \r
425   if(diff_contents & QUAKE2_CONTENTS_LADDER)\r
426     set_inconsistent(content_ladderbutton);\r
427   else if(contents & QUAKE2_CONTENTS_LADDER)\r
428         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_ladderbutton ), TRUE);\r
429   else\r
430         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON ( content_ladderbutton ), FALSE);\r
431 \r
432   // Set Value\r
433   if(diff_value)\r
434     gtk_entry_set_text( (GtkEntry *)value_entry, "");\r
435   else\r
436   {\r
437     working_value = value;\r
438     sprintf( tex_buff, "%d", value);\r
439     gtk_entry_set_text( (GtkEntry *)value_entry, tex_buff);\r
440   }\r
441 \r
442   setup_buttons = FALSE;\r
443 }\r
444 \r
445 void SetChangeInFlags_Face_Quake2 (texdef_to_face_t *texdef_face_list)\r
446 {\r
447   texdef_to_face_t *temp_texdef_face_list;\r
448   texdef_t *tmp_texdef;\r
449 \r
450   for (temp_texdef_face_list = texdef_face_list; temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
451   {\r
452     tmp_texdef = &temp_texdef_face_list->texdef;\r
453     tmp_texdef->flags = (tmp_texdef->flags & ~surface_mask) | working_surface_flags;\r
454     tmp_texdef->contents = (tmp_texdef->contents & ~content_mask) | working_content_flags;\r
455     tmp_texdef->value = working_value;\r
456     Sys_Printf("content_flag: %d     content_mask: %d\n",working_content_flags,content_mask);\r
457     Sys_Printf("content: %d\n",tmp_texdef->contents);\r
458   }\r
459 }\r
460 \r
461 inline void change_surfaceflag (GtkWidget *togglebutton, int sur_flag, gboolean change_flag_to)\r
462 {\r
463 \r
464   if (!setup_buttons) // If we're setting up the buttons, we really don't need to\r
465   {                   // set flags that are already set\r
466 \r
467     if (gtk_toggle_button_get_inconsistent(GTK_TOGGLE_BUTTON (togglebutton))) // Clear out inconsistent, if set\r
468             clear_inconsistent(GTK_WIDGET (togglebutton));\r
469 \r
470     surface_mask |= sur_flag;\r
471 \r
472     if (change_flag_to)\r
473       working_surface_flags |= sur_flag;\r
474     else\r
475       working_surface_flags &= ~sur_flag;\r
476   }\r
477 }\r
478 \r
479 inline void change_contentflag (GtkWidget *togglebutton, int content_flag, gboolean change_flag_to)\r
480 {\r
481 \r
482   if ( (!setup_buttons) )  // If we're setting up the buttons, we really don't need to\r
483   {                        // set flags that are already set\r
484 \r
485     if (gtk_toggle_button_get_inconsistent(GTK_TOGGLE_BUTTON (togglebutton)))\r
486             clear_inconsistent(togglebutton);\r
487     //if (g_ptrSelectedFaces.GetSize() == 0)  // Only changing content flags on whole brushes, not faces.\r
488     //{\r
489       content_mask |= content_flag;\r
490 \r
491     if (change_flag_to)\r
492       working_content_flags |= content_flag;\r
493     else\r
494       working_content_flags &= ~content_flag;\r
495     //}\r
496     Sys_Printf("content_flag: %d     content_mask: %d\n",content_flag,content_mask);\r
497   }\r
498 }\r
499 \r
500 // Surface Flags Callbacks\r
501 void\r
502 on_surface_lightbutton_toggled         (GtkToggleButton *togglebutton,\r
503                                         gpointer         user_data)\r
504 {\r
505        change_surfaceflag(surface_lightbutton, QUAKE2_SURF_LIGHT, (GTK_TOGGLE_BUTTON (surface_lightbutton)->active));\r
506 \r
507 }\r
508 \r
509 void\r
510 on_surface_slickbutton_toggled         (GtkToggleButton *togglebutton,\r
511                                         gpointer         user_data)\r
512 {\r
513         change_surfaceflag(surface_slickbutton, QUAKE2_SURF_SLICK, (GTK_TOGGLE_BUTTON (surface_slickbutton)->active));\r
514 \r
515 }\r
516 \r
517 void\r
518 on_surface_skybutton_toggled           (GtkToggleButton *togglebutton,\r
519                                         gpointer         user_data)\r
520 {\r
521         change_surfaceflag(surface_skybutton, QUAKE2_SURF_SKY, (GTK_TOGGLE_BUTTON (surface_skybutton)->active));\r
522 }\r
523 \r
524 void\r
525 on_surface_warpbutton_toggled          (GtkToggleButton *togglebutton,\r
526                                         gpointer         user_data)\r
527 {\r
528         change_surfaceflag(surface_warpbutton, QUAKE2_SURF_WARP, (GTK_TOGGLE_BUTTON (surface_warpbutton)->active));\r
529 }\r
530 \r
531 void\r
532 on_surface_trans33button_toggled       (GtkToggleButton *togglebutton,\r
533                                         gpointer         user_data)\r
534 {\r
535         change_surfaceflag(surface_trans33button, QUAKE2_SURF_TRANS33, (GTK_TOGGLE_BUTTON (surface_trans33button)->active));\r
536 }\r
537 \r
538 void\r
539 on_surface_trans66button_toggled       (GtkToggleButton *togglebutton,\r
540                                         gpointer         user_data)\r
541 {\r
542         change_surfaceflag(surface_trans66button, QUAKE2_SURF_TRANS66, (GTK_TOGGLE_BUTTON (surface_trans66button)->active));\r
543 }\r
544 \r
545 void\r
546 on_surface_flowingbutton_toggled       (GtkToggleButton *togglebutton,\r
547                                         gpointer         user_data)\r
548 {\r
549         change_surfaceflag(surface_flowingbutton, QUAKE2_SURF_FLOWING, (GTK_TOGGLE_BUTTON (surface_flowingbutton)->active));\r
550 }\r
551 \r
552 void\r
553 on_surface_nodrawbutton_toggled        (GtkToggleButton *togglebutton,\r
554                                         gpointer         user_data)\r
555 {\r
556         change_surfaceflag(surface_nodrawbutton, QUAKE2_SURF_NODRAW, (GTK_TOGGLE_BUTTON (surface_nodrawbutton)->active));\r
557 }\r
558 \r
559 void\r
560 on_surface_hintbutton_toggled          (GtkToggleButton *togglebutton,\r
561                                         gpointer         user_data)\r
562 {\r
563         change_surfaceflag(surface_hintbutton, QUAKE2_SURF_HINT, (GTK_TOGGLE_BUTTON (surface_hintbutton)->active));\r
564 }\r
565 \r
566 void\r
567 on_surface_skipbutton_toggled          (GtkToggleButton *togglebutton,\r
568                                         gpointer         user_data)\r
569 {\r
570         change_surfaceflag(surface_skipbutton, QUAKE2_SURF_SKIP, (GTK_TOGGLE_BUTTON (surface_skipbutton)->active));\r
571 }\r
572 \r
573 // Content Flags Callbacks\r
574 void\r
575 on_content_solidbutton_toggled         (GtkToggleButton *togglebutton,\r
576                                         gpointer         user_data)\r
577 {\r
578         change_contentflag(content_solidbutton, QUAKE2_CONTENTS_SOLID, (GTK_TOGGLE_BUTTON (content_solidbutton)->active));\r
579 }\r
580 \r
581 void\r
582 on_content_windowbutton_toggled        (GtkToggleButton *togglebutton,\r
583                                         gpointer         user_data)\r
584 {\r
585         change_contentflag(content_windowbutton, QUAKE2_CONTENTS_WINDOW, (GTK_TOGGLE_BUTTON (content_windowbutton)->active));\r
586 }\r
587 \r
588 void\r
589 on_content_auxbutton_toggled           (GtkToggleButton *togglebutton,\r
590                                         gpointer         user_data)\r
591 {\r
592         change_contentflag(content_auxbutton, QUAKE2_CONTENTS_AUX, (GTK_TOGGLE_BUTTON (content_auxbutton)->active));\r
593 }\r
594 \r
595 void\r
596 on_content_lavabutton_toggled          (GtkToggleButton *togglebutton,\r
597                                         gpointer         user_data)\r
598 {\r
599         change_contentflag(content_lavabutton, QUAKE2_CONTENTS_LAVA, (GTK_TOGGLE_BUTTON (content_lavabutton)->active));\r
600 }\r
601 \r
602 void\r
603 on_content_slimebutton_toggled         (GtkToggleButton *togglebutton,\r
604                                         gpointer         user_data)\r
605 {\r
606         change_contentflag(content_slimebutton, QUAKE2_CONTENTS_SLIME, (GTK_TOGGLE_BUTTON (content_slimebutton)->active));\r
607 }\r
608 \r
609 void\r
610 on_content_waterbutton_toggled         (GtkToggleButton *togglebutton,\r
611                                         gpointer         user_data)\r
612 {\r
613         change_contentflag(content_waterbutton, QUAKE2_CONTENTS_WATER, (GTK_TOGGLE_BUTTON (content_waterbutton)->active));\r
614 }\r
615 \r
616 void\r
617 on_content_mistbutton_toggled          (GtkToggleButton *togglebutton,\r
618                                         gpointer         user_data)\r
619 {\r
620         change_contentflag(content_mistbutton, QUAKE2_CONTENTS_MIST, (GTK_TOGGLE_BUTTON (content_mistbutton)->active));\r
621 }\r
622 \r
623 void\r
624 on_content_areaportalbutton_toggled    (GtkToggleButton *togglebutton,\r
625                                         gpointer         user_data)\r
626 {\r
627         change_contentflag(content_areaportalbutton, QUAKE2_CONTENTS_AREAPORTAL, (GTK_TOGGLE_BUTTON (content_areaportalbutton)->active));\r
628 }\r
629 \r
630 void\r
631 on_content_playerclipbutton_toggled    (GtkToggleButton *togglebutton,\r
632                                         gpointer         user_data)\r
633 {\r
634         change_contentflag(content_playerclipbutton, QUAKE2_CONTENTS_PLAYERCLIP, (GTK_TOGGLE_BUTTON (content_playerclipbutton)->active));\r
635 }\r
636 \r
637 void\r
638 on_content_monsterclipbutton_toggled   (GtkToggleButton *togglebutton,\r
639                                         gpointer         user_data)\r
640 {\r
641         change_contentflag(content_monsterclipbutton, QUAKE2_CONTENTS_MONSTERCLIP, (GTK_TOGGLE_BUTTON (content_monsterclipbutton)->active));\r
642 }\r
643 \r
644 void\r
645 on_content_current0button_toggled      (GtkToggleButton *togglebutton,\r
646                                         gpointer         user_data)\r
647 {\r
648         change_contentflag(content_current0button, QUAKE2_CONTENTS_CURRENT_0, (GTK_TOGGLE_BUTTON (content_current0button)->active));\r
649 }\r
650 \r
651 void\r
652 on_content_current90button_toggled     (GtkToggleButton *togglebutton,\r
653                                         gpointer         user_data)\r
654 {\r
655         change_contentflag(content_current90button, QUAKE2_CONTENTS_CURRENT_90, (GTK_TOGGLE_BUTTON (content_current90button)->active));\r
656 }\r
657 \r
658 void\r
659 on_content_current180button_toggled    (GtkToggleButton *togglebutton,\r
660                                         gpointer         user_data)\r
661 {\r
662         change_contentflag(content_current180button, QUAKE2_CONTENTS_CURRENT_180, (GTK_TOGGLE_BUTTON (content_current180button)->active));\r
663 }\r
664 \r
665 void\r
666 on_content_current270button_toggled    (GtkToggleButton *togglebutton,\r
667                                         gpointer         user_data)\r
668 {\r
669         change_contentflag(content_current270button, QUAKE2_CONTENTS_CURRENT_270, (GTK_TOGGLE_BUTTON (content_current270button)->active));\r
670 }\r
671 \r
672 void\r
673 on_content_currentUPbutton_toggled     (GtkToggleButton *togglebutton,\r
674                                         gpointer         user_data)\r
675 {\r
676         change_contentflag(content_currentUPbutton, QUAKE2_CONTENTS_CURRENT_UP, (GTK_TOGGLE_BUTTON (content_currentUPbutton)->active));\r
677 }\r
678 \r
679 void\r
680 on_content_currentDOWNbutton_toggled   (GtkToggleButton *togglebutton,\r
681                                         gpointer         user_data)\r
682 {\r
683         change_contentflag(content_currentDOWNbutton, QUAKE2_CONTENTS_CURRENT_DOWN, (GTK_TOGGLE_BUTTON (content_currentDOWNbutton)->active));\r
684 }\r
685 \r
686 void\r
687 on_content_originbutton_toggled        (GtkToggleButton *togglebutton,\r
688                                         gpointer         user_data)\r
689 {\r
690         change_contentflag(content_originbutton, QUAKE2_CONTENTS_ORIGIN, (GTK_TOGGLE_BUTTON (content_originbutton)->active));\r
691 }\r
692 \r
693 void\r
694 on_content_detailbutton_toggled        (GtkToggleButton *togglebutton,\r
695                                         gpointer         user_data)\r
696 {\r
697         change_contentflag(content_detailbutton, QUAKE2_CONTENTS_DETAIL, (GTK_TOGGLE_BUTTON (content_detailbutton)->active));\r
698 }\r
699 \r
700 void\r
701 on_content_translucentbutton_toggled   (GtkToggleButton *togglebutton,\r
702                                         gpointer         user_data)\r
703 {\r
704         change_contentflag(content_translucentbutton, QUAKE2_CONTENTS_TRANSLUCENT, (GTK_TOGGLE_BUTTON (content_translucentbutton)->active));\r
705 }\r
706 \r
707 void\r
708 on_content_ladderbutton_toggled        (GtkToggleButton *togglebutton,\r
709                                         gpointer         user_data)\r
710 {\r
711         change_contentflag(content_ladderbutton, QUAKE2_CONTENTS_LADDER, (GTK_TOGGLE_BUTTON (content_ladderbutton)->active));\r
712 }\r
713 \r
714 // Value Entry Callback\r
715 void\r
716 on_value_entry_changed                (GtkEditable     *editable,\r
717                                         gpointer         user_data)\r
718 {\r
719   if ( (!setup_buttons) )  // If we're setting up the buttons, don't change value\r
720     working_value = atoi( gtk_entry_get_text( (GtkEntry*)editable) );\r
721 }\r
722 \r
723 void\r
724 on_value_entry_insert_text             (GtkEditable     *editable,\r
725                                         gchar           *new_text,\r
726                                         gint             new_text_length,\r
727                                         gint            *position,\r
728                                         gpointer         user_data)\r
729 {\r
730   int i, count=0;\r
731   gchar *result;\r
732   int entry_value;\r
733   texdef_t *pt;\r
734   brush_t *b;\r
735   face_t *f;\r
736 \r
737   // Limit input to digits, throwing out anything else\r
738   // Modified from Gtk FAQ for text filtering of GtkEntry\r
739   result = g_new (gchar, new_text_length);\r
740 \r
741   for (i=0; i < new_text_length; i++) {\r
742     if (!isdigit(new_text[i]))\r
743       continue;\r
744   result[count++] = new_text[i];\r
745   }\r
746 \r
747   if (count > 0) {\r
748     gtk_signal_handler_block_by_func (GTK_OBJECT (editable),\r
749                                       GTK_SIGNAL_FUNC (on_value_entry_insert_text),\r
750                                       user_data);\r
751     gtk_editable_insert_text (editable, result, count, position);\r
752     gtk_signal_handler_unblock_by_func (GTK_OBJECT (editable),\r
753                                         GTK_SIGNAL_FUNC (on_value_entry_insert_text),\r
754                                         user_data);\r
755   }\r
756   gtk_signal_emit_stop_by_name (GTK_OBJECT (editable), "insert_text");\r
757 \r
758   g_free (result);\r
759 }\r
760 \r
761 void\r
762 on_surfacebutton_clicked               (GtkButton       *button,\r
763                                         gpointer         user_data)\r
764 {\r
765         gtk_notebook_set_page (GTK_NOTEBOOK(notebook1), 0);\r
766 }\r
767 \r
768 void\r
769 on_contentbutton_clicked               (GtkButton       *button,\r
770                                         gpointer         user_data)\r
771 {\r
772         gtk_notebook_set_page (GTK_NOTEBOOK(notebook1), 1);\r
773 }\r
774 \r
775 \r
776 #define QUAKE2_FLAG_BUTTON_BORDER 3\r
777 \r
778 GtkWidget* Create_Quake2FlagsDialog (GtkWidget* surfacedialog_widget)\r
779 {\r
780   GtkWidget *frame1;\r
781   GtkWidget *vbox1;\r
782   GtkWidget *vbox2;\r
783   GtkWidget *vbox3;\r
784   GtkWidget *vbox4;\r
785   GtkWidget *table4;\r
786   GtkWidget *hbox2;\r
787   GtkWidget *hbox3;\r
788   GtkWidget *hseparator1;\r
789   GtkWidget *value_label;\r
790   GtkWidget *label5;\r
791   GtkWidget *table3;\r
792   GtkWidget *label6;\r
793   GtkWidget *table1;\r
794 \r
795 \r
796   frame1 = gtk_frame_new ("Flags");\r
797   gtk_widget_show (frame1);\r
798   gtk_container_add (GTK_CONTAINER (surfacedialog_widget), frame1);\r
799 \r
800   vbox1 = gtk_vbox_new (FALSE, 0);\r
801   gtk_widget_show (vbox1);\r
802   gtk_container_add (GTK_CONTAINER (frame1), vbox1);\r
803 \r
804   notebook1 = gtk_notebook_new ();\r
805   gtk_widget_show (notebook1);\r
806   gtk_box_pack_start (GTK_BOX (vbox1), notebook1, TRUE, TRUE, 0);\r
807   gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook1), TRUE);\r
808   gtk_container_set_border_width (GTK_CONTAINER (notebook1), 5);\r
809 \r
810   vbox2 = gtk_vbox_new (FALSE, 0);\r
811   gtk_widget_show (vbox2);\r
812   gtk_container_add (GTK_CONTAINER (notebook1), vbox2);\r
813 \r
814   table4 = gtk_table_new (3, 4, FALSE);\r
815   gtk_widget_show (table4);\r
816   gtk_box_pack_start (GTK_BOX (vbox2), table4, TRUE, TRUE, 0);\r
817 \r
818   surface_lightbutton = gtk_toggle_button_new_with_label ("Light");\r
819   gtk_signal_connect (GTK_OBJECT (surface_lightbutton), "toggled",\r
820                       GTK_SIGNAL_FUNC (on_surface_lightbutton_toggled),\r
821                       NULL);\r
822   gtk_widget_show (surface_lightbutton);\r
823   gtk_table_attach (GTK_TABLE (table4), surface_lightbutton, 0, 1, 0, 1,\r
824                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
825                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
826   gtk_container_set_border_width (GTK_CONTAINER (surface_lightbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
827 \r
828   surface_slickbutton = gtk_toggle_button_new_with_label ("Slick");\r
829   gtk_signal_connect (GTK_OBJECT (surface_slickbutton), "toggled",\r
830                       GTK_SIGNAL_FUNC (on_surface_slickbutton_toggled),\r
831                       NULL);\r
832   gtk_widget_show (surface_slickbutton);\r
833   gtk_table_attach (GTK_TABLE (table4), surface_slickbutton, 1, 2, 0, 1,\r
834                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
835                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
836   gtk_container_set_border_width (GTK_CONTAINER (surface_slickbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
837 \r
838   surface_skybutton = gtk_toggle_button_new_with_label ("Sky");\r
839   gtk_signal_connect (GTK_OBJECT (surface_skybutton), "toggled",\r
840                       GTK_SIGNAL_FUNC (on_surface_skybutton_toggled),\r
841                       NULL);\r
842   gtk_widget_show (surface_skybutton);\r
843   gtk_table_attach (GTK_TABLE (table4), surface_skybutton, 2, 3, 0, 1,\r
844                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
845                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
846   gtk_container_set_border_width (GTK_CONTAINER (surface_skybutton), QUAKE2_FLAG_BUTTON_BORDER);\r
847 \r
848   surface_warpbutton = gtk_toggle_button_new_with_label ("Warp");\r
849   gtk_signal_connect (GTK_OBJECT (surface_warpbutton), "toggled",\r
850                       GTK_SIGNAL_FUNC (on_surface_warpbutton_toggled),\r
851                       NULL);\r
852   gtk_widget_show (surface_warpbutton);\r
853   gtk_table_attach (GTK_TABLE (table4), surface_warpbutton, 3, 4, 0, 1,\r
854                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
855                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
856   gtk_container_set_border_width (GTK_CONTAINER (surface_warpbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
857 \r
858   surface_trans33button = gtk_toggle_button_new_with_label ("Trans 33");\r
859   gtk_signal_connect (GTK_OBJECT (surface_trans33button), "toggled",\r
860                       GTK_SIGNAL_FUNC (on_surface_trans33button_toggled),\r
861                       NULL);\r
862   gtk_widget_show (surface_trans33button);\r
863   gtk_table_attach (GTK_TABLE (table4), surface_trans33button, 0, 1, 1, 2,\r
864                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
865                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
866   gtk_container_set_border_width (GTK_CONTAINER (surface_trans33button), QUAKE2_FLAG_BUTTON_BORDER);\r
867 \r
868   surface_trans66button = gtk_toggle_button_new_with_label ("Trans 66");\r
869   gtk_signal_connect (GTK_OBJECT (surface_trans66button), "toggled",\r
870                       GTK_SIGNAL_FUNC (on_surface_trans66button_toggled),\r
871                       NULL);\r
872   gtk_widget_show (surface_trans66button);\r
873   gtk_table_attach (GTK_TABLE (table4), surface_trans66button, 1, 2, 1, 2,\r
874                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
875                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
876   gtk_container_set_border_width (GTK_CONTAINER (surface_trans66button), QUAKE2_FLAG_BUTTON_BORDER);\r
877 \r
878   surface_flowingbutton = gtk_toggle_button_new_with_label ("Flowing");\r
879   gtk_signal_connect (GTK_OBJECT (surface_flowingbutton), "toggled",\r
880                       GTK_SIGNAL_FUNC (on_surface_flowingbutton_toggled),\r
881                       NULL);\r
882   gtk_widget_show (surface_flowingbutton);\r
883   gtk_table_attach (GTK_TABLE (table4), surface_flowingbutton, 2, 3, 1, 2,\r
884                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
885                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
886   gtk_container_set_border_width (GTK_CONTAINER (surface_flowingbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
887 \r
888   surface_nodrawbutton = gtk_toggle_button_new_with_label ("NoDraw");\r
889   gtk_signal_connect (GTK_OBJECT (surface_nodrawbutton), "toggled",\r
890                       GTK_SIGNAL_FUNC (on_surface_nodrawbutton_toggled),\r
891                       NULL);\r
892   gtk_widget_show (surface_nodrawbutton);\r
893   gtk_table_attach (GTK_TABLE (table4), surface_nodrawbutton, 3, 4, 1, 2,\r
894                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
895                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
896   gtk_container_set_border_width (GTK_CONTAINER (surface_nodrawbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
897 \r
898   surface_hintbutton = gtk_toggle_button_new_with_label ("Hint");\r
899   gtk_signal_connect (GTK_OBJECT (surface_hintbutton), "toggled",\r
900                       GTK_SIGNAL_FUNC (on_surface_hintbutton_toggled),\r
901                       NULL);\r
902   gtk_widget_show (surface_hintbutton);\r
903   gtk_table_attach (GTK_TABLE (table4), surface_hintbutton, 0, 1, 2, 3,\r
904                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
905                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
906   gtk_container_set_border_width (GTK_CONTAINER (surface_hintbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
907 \r
908   surface_skipbutton = gtk_toggle_button_new_with_label ("Skip");\r
909   gtk_signal_connect (GTK_OBJECT (surface_skipbutton), "toggled",\r
910                       GTK_SIGNAL_FUNC (on_surface_skipbutton_toggled),\r
911                       NULL);\r
912   gtk_widget_show (surface_skipbutton);\r
913   gtk_table_attach (GTK_TABLE (table4), surface_skipbutton, 3, 4, 2, 3,\r
914                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
915                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
916   gtk_container_set_border_width (GTK_CONTAINER (surface_skipbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
917 \r
918   hseparator1 = gtk_hseparator_new ();\r
919   gtk_widget_show (hseparator1);\r
920   gtk_box_pack_start (GTK_BOX (vbox2), hseparator1, FALSE, FALSE, 0);\r
921   gtk_widget_set_usize (hseparator1, -2, 5);\r
922 \r
923   hbox2 = gtk_hbox_new (FALSE, 0);\r
924   gtk_widget_show (hbox2);\r
925   gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);\r
926 \r
927   hbox3 = gtk_hbox_new (FALSE, 0);\r
928   gtk_widget_show (hbox3);\r
929   gtk_box_pack_start (GTK_BOX (hbox2), hbox3, TRUE, TRUE, 0);\r
930 \r
931   vbox4 = gtk_vbox_new (FALSE, 0);\r
932   gtk_widget_show (vbox4);\r
933   gtk_box_pack_start (GTK_BOX (hbox3), vbox4, TRUE, TRUE, 0);\r
934 \r
935   value_label = gtk_label_new (" Value: ");\r
936   gtk_widget_show (value_label);\r
937   gtk_box_pack_start (GTK_BOX (hbox3), value_label, FALSE, FALSE, 0);\r
938 \r
939   value_entry = gtk_entry_new ();\r
940   gtk_signal_connect (GTK_OBJECT (value_entry), "changed",\r
941                       GTK_SIGNAL_FUNC (on_value_entry_changed),\r
942                       NULL);\r
943   gtk_signal_connect (GTK_OBJECT (value_entry), "insert_text",\r
944                       GTK_SIGNAL_FUNC (on_value_entry_insert_text),\r
945                       NULL);\r
946   gtk_entry_set_max_length( (GtkEntry *)value_entry, 11);\r
947   gtk_widget_show (value_entry);\r
948   gtk_box_pack_start (GTK_BOX (hbox3), value_entry, TRUE, TRUE, 0);\r
949 \r
950   vbox3 = gtk_vbox_new (FALSE, 0);\r
951   gtk_widget_show (vbox3);\r
952   gtk_box_pack_start (GTK_BOX (hbox3), vbox3, TRUE, TRUE, 0);\r
953 \r
954   label5 = gtk_label_new ("Surface Flags");\r
955   gtk_widget_show (label5);\r
956   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label5);\r
957 \r
958   table3 = gtk_table_new (5, 4, FALSE);\r
959   gtk_widget_show (table3);\r
960   gtk_container_add (GTK_CONTAINER (notebook1), table3);\r
961 \r
962   content_solidbutton = gtk_toggle_button_new_with_label ("Solid");\r
963   gtk_signal_connect (GTK_OBJECT (content_solidbutton), "toggled",\r
964                       GTK_SIGNAL_FUNC (on_content_solidbutton_toggled),\r
965                       NULL);\r
966   gtk_widget_show (content_solidbutton);\r
967   gtk_table_attach (GTK_TABLE (table3), content_solidbutton, 0, 1, 0, 1,\r
968                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
969                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
970   gtk_container_set_border_width (GTK_CONTAINER (content_solidbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
971 \r
972   content_windowbutton = gtk_toggle_button_new_with_label ("Window");\r
973   gtk_signal_connect (GTK_OBJECT (content_windowbutton), "toggled",\r
974                       GTK_SIGNAL_FUNC (on_content_windowbutton_toggled),\r
975                       NULL);\r
976   gtk_widget_show (content_windowbutton);\r
977   gtk_table_attach (GTK_TABLE (table3), content_windowbutton, 1, 2, 0, 1,\r
978                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
979                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
980   gtk_container_set_border_width (GTK_CONTAINER (content_windowbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
981 \r
982   content_auxbutton = gtk_toggle_button_new_with_label ("Aux");\r
983   gtk_signal_connect (GTK_OBJECT (content_auxbutton), "toggled",\r
984                       GTK_SIGNAL_FUNC (on_content_auxbutton_toggled),\r
985                       NULL);\r
986   gtk_widget_show (content_auxbutton);\r
987   gtk_table_attach (GTK_TABLE (table3), content_auxbutton, 2, 3, 0, 1,\r
988                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
989                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
990   gtk_container_set_border_width (GTK_CONTAINER (content_auxbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
991 \r
992   content_lavabutton = gtk_toggle_button_new_with_label ("Lava");\r
993   gtk_signal_connect (GTK_OBJECT (content_lavabutton), "toggled",\r
994                       GTK_SIGNAL_FUNC (on_content_lavabutton_toggled),\r
995                       NULL);\r
996   gtk_widget_show (content_lavabutton);\r
997   gtk_table_attach (GTK_TABLE (table3), content_lavabutton, 3, 4, 0, 1,\r
998                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
999                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1000   gtk_container_set_border_width (GTK_CONTAINER (content_lavabutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1001 \r
1002   content_slimebutton = gtk_toggle_button_new_with_label ("Slime");\r
1003   gtk_signal_connect (GTK_OBJECT (content_slimebutton), "toggled",\r
1004                       GTK_SIGNAL_FUNC (on_content_slimebutton_toggled),\r
1005                       NULL);\r
1006   gtk_widget_show (content_slimebutton);\r
1007   gtk_table_attach (GTK_TABLE (table3), content_slimebutton, 0, 1, 1, 2,\r
1008                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1009                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1010   gtk_container_set_border_width (GTK_CONTAINER (content_slimebutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1011 \r
1012   content_waterbutton = gtk_toggle_button_new_with_label ("Water");\r
1013   gtk_signal_connect (GTK_OBJECT (content_waterbutton), "toggled",\r
1014                       GTK_SIGNAL_FUNC (on_content_waterbutton_toggled),\r
1015                       NULL);\r
1016   gtk_widget_show (content_waterbutton);\r
1017   gtk_table_attach (GTK_TABLE (table3), content_waterbutton, 1, 2, 1, 2,\r
1018                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1019                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1020   gtk_container_set_border_width (GTK_CONTAINER (content_waterbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1021 \r
1022   content_mistbutton = gtk_toggle_button_new_with_label ("Mist");\r
1023   gtk_signal_connect (GTK_OBJECT (content_mistbutton), "toggled",\r
1024                       GTK_SIGNAL_FUNC (on_content_mistbutton_toggled),\r
1025                       NULL);\r
1026   gtk_widget_show (content_mistbutton);\r
1027   gtk_table_attach (GTK_TABLE (table3), content_mistbutton, 2, 3, 1, 2,\r
1028                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1029                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1030   gtk_container_set_border_width (GTK_CONTAINER (content_mistbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1031 \r
1032   content_areaportalbutton = gtk_toggle_button_new_with_label ("AreaPortal");\r
1033   gtk_signal_connect (GTK_OBJECT (content_areaportalbutton), "toggled",\r
1034                       GTK_SIGNAL_FUNC (on_content_areaportalbutton_toggled),\r
1035                       NULL);\r
1036   gtk_widget_show (content_areaportalbutton);\r
1037   gtk_table_attach (GTK_TABLE (table3), content_areaportalbutton, 3, 4, 1, 2,\r
1038                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1039                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1040   gtk_container_set_border_width (GTK_CONTAINER (content_areaportalbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1041 \r
1042   content_playerclipbutton = gtk_toggle_button_new_with_label ("PlayerClip");\r
1043   gtk_signal_connect (GTK_OBJECT (content_playerclipbutton), "toggled",\r
1044                       GTK_SIGNAL_FUNC (on_content_playerclipbutton_toggled),\r
1045                       NULL);\r
1046   gtk_widget_show (content_playerclipbutton);\r
1047   gtk_table_attach (GTK_TABLE (table3), content_playerclipbutton, 0, 1, 2, 3,\r
1048                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1049                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1050   gtk_container_set_border_width (GTK_CONTAINER (content_playerclipbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1051 \r
1052   content_monsterclipbutton = gtk_toggle_button_new_with_label ("MonsterClip");\r
1053   gtk_signal_connect (GTK_OBJECT (content_monsterclipbutton), "toggled",\r
1054                       GTK_SIGNAL_FUNC (on_content_monsterclipbutton_toggled),\r
1055                       NULL);\r
1056   gtk_widget_show (content_monsterclipbutton);\r
1057   gtk_table_attach (GTK_TABLE (table3), content_monsterclipbutton, 1, 2, 2, 3,\r
1058                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1059                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1060   gtk_container_set_border_width (GTK_CONTAINER (content_monsterclipbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1061 \r
1062   content_current0button = gtk_toggle_button_new_with_label ("Current 0");\r
1063   gtk_signal_connect (GTK_OBJECT (content_current0button), "toggled",\r
1064                       GTK_SIGNAL_FUNC (on_content_current0button_toggled),\r
1065                       NULL);\r
1066   gtk_widget_show (content_current0button);\r
1067   gtk_table_attach (GTK_TABLE (table3), content_current0button, 2, 3, 2, 3,\r
1068                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1069                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1070   gtk_container_set_border_width (GTK_CONTAINER (content_current0button), QUAKE2_FLAG_BUTTON_BORDER);\r
1071 \r
1072   content_current90button = gtk_toggle_button_new_with_label ("Current 90");\r
1073   gtk_signal_connect (GTK_OBJECT (content_current90button), "toggled",\r
1074                       GTK_SIGNAL_FUNC (on_content_current90button_toggled),\r
1075                       NULL);\r
1076   gtk_widget_show (content_current90button);\r
1077   gtk_table_attach (GTK_TABLE (table3), content_current90button, 3, 4, 2, 3,\r
1078                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1079                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1080   gtk_container_set_border_width (GTK_CONTAINER (content_current90button), QUAKE2_FLAG_BUTTON_BORDER);\r
1081 \r
1082   content_current180button = gtk_toggle_button_new_with_label ("Current 180");\r
1083   gtk_signal_connect (GTK_OBJECT (content_current180button), "toggled",\r
1084                       GTK_SIGNAL_FUNC (on_content_current180button_toggled),\r
1085                       NULL);\r
1086   gtk_widget_show (content_current180button);\r
1087   gtk_table_attach (GTK_TABLE (table3), content_current180button, 0, 1, 3, 4,\r
1088                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1089                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1090   gtk_container_set_border_width (GTK_CONTAINER (content_current180button), QUAKE2_FLAG_BUTTON_BORDER);\r
1091 \r
1092   content_current270button = gtk_toggle_button_new_with_label ("Current 270");\r
1093   gtk_signal_connect (GTK_OBJECT (content_current270button), "toggled",\r
1094                       GTK_SIGNAL_FUNC (on_content_current270button_toggled),\r
1095                       NULL);\r
1096   gtk_widget_show (content_current270button);\r
1097   gtk_table_attach (GTK_TABLE (table3), content_current270button, 1, 2, 3, 4,\r
1098                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1099                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1100   gtk_container_set_border_width (GTK_CONTAINER (content_current270button), QUAKE2_FLAG_BUTTON_BORDER);\r
1101 \r
1102   content_currentUPbutton = gtk_toggle_button_new_with_label ("Current UP");\r
1103   gtk_signal_connect (GTK_OBJECT (content_currentUPbutton), "toggled",\r
1104                       GTK_SIGNAL_FUNC (on_content_currentUPbutton_toggled),\r
1105                       NULL);\r
1106   gtk_widget_show (content_currentUPbutton);\r
1107   gtk_table_attach (GTK_TABLE (table3), content_currentUPbutton, 2, 3, 3, 4,\r
1108                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1109                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1110   gtk_container_set_border_width (GTK_CONTAINER (content_currentUPbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1111 \r
1112   content_currentDOWNbutton = gtk_toggle_button_new_with_label ("Current DOWN");\r
1113   gtk_signal_connect (GTK_OBJECT (content_currentDOWNbutton), "toggled",\r
1114                       GTK_SIGNAL_FUNC (on_content_currentDOWNbutton_toggled),\r
1115                       NULL);\r
1116   gtk_widget_show (content_currentDOWNbutton);\r
1117   gtk_table_attach (GTK_TABLE (table3), content_currentDOWNbutton, 3, 4, 3, 4,\r
1118                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1119                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1120   gtk_container_set_border_width (GTK_CONTAINER (content_currentDOWNbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1121 \r
1122   content_originbutton = gtk_toggle_button_new_with_label ("Origin");\r
1123   gtk_signal_connect (GTK_OBJECT (content_originbutton), "toggled",\r
1124                       GTK_SIGNAL_FUNC (on_content_originbutton_toggled),\r
1125                       NULL);\r
1126   gtk_widget_show (content_originbutton);\r
1127   gtk_table_attach (GTK_TABLE (table3), content_originbutton, 0, 1, 4, 5,\r
1128                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1129                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1130   gtk_container_set_border_width (GTK_CONTAINER (content_originbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1131 \r
1132   content_detailbutton = gtk_toggle_button_new_with_label ("Detail");\r
1133   gtk_signal_connect (GTK_OBJECT (content_detailbutton), "toggled",\r
1134                       GTK_SIGNAL_FUNC (on_content_detailbutton_toggled),\r
1135                       NULL);\r
1136   gtk_widget_show (content_detailbutton);\r
1137   gtk_table_attach (GTK_TABLE (table3), content_detailbutton, 1, 2, 4, 5,\r
1138                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1139                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1140   gtk_container_set_border_width (GTK_CONTAINER (content_detailbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1141 \r
1142   content_translucentbutton = gtk_toggle_button_new_with_label ("Translucent");\r
1143   gtk_signal_connect (GTK_OBJECT (content_translucentbutton), "toggled",\r
1144                       GTK_SIGNAL_FUNC (on_content_translucentbutton_toggled),\r
1145                       NULL);\r
1146   gtk_widget_show (content_translucentbutton);\r
1147   gtk_table_attach (GTK_TABLE (table3), content_translucentbutton, 2, 3, 4, 5,\r
1148                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1149                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1150   gtk_container_set_border_width (GTK_CONTAINER (content_translucentbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1151 \r
1152   content_ladderbutton = gtk_toggle_button_new_with_label ("Ladder");\r
1153   gtk_signal_connect (GTK_OBJECT (content_ladderbutton), "toggled",\r
1154                       GTK_SIGNAL_FUNC (on_content_ladderbutton_toggled),\r
1155                       NULL);\r
1156   gtk_widget_show (content_ladderbutton);\r
1157   gtk_table_attach (GTK_TABLE (table3), content_ladderbutton, 3, 4, 4, 5,\r
1158                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
1159                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
1160   gtk_container_set_border_width (GTK_CONTAINER (content_ladderbutton), QUAKE2_FLAG_BUTTON_BORDER);\r
1161 \r
1162   label6 = gtk_label_new ("Content Flags");\r
1163   gtk_widget_show (label6);\r
1164   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label6);\r
1165 \r
1166   return frame1;\r
1167 }\r
1168 \r