]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - contrib/bobtoolz/dialogs/dialogs-gtk.cpp
transfer from internal tree r5311 branches/1.4-gpl
[xonotic/netradiant.git] / contrib / bobtoolz / dialogs / dialogs-gtk.cpp
1 /*\r
2 BobToolz plugin for GtkRadiant\r
3 Copyright (C) 2001 Gordon Biggans\r
4 \r
5 This library is free software; you can redistribute it and/or\r
6 modify it under the terms of the GNU Lesser General Public\r
7 License as published by the Free Software Foundation; either\r
8 version 2.1 of the License, or (at your option) any later version.\r
9 \r
10 This library is distributed in the hope that it will be useful,\r
11 but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
13 Lesser General Public License for more details.\r
14 \r
15 You should have received a copy of the GNU Lesser General Public\r
16 License along with this library; if not, write to the Free Software\r
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
18 */\r
19 \r
20 #include "../StdAfx.h"\r
21 #include "dialogs-gtk.h"\r
22 #include "../funchandlers.h"\r
23 #include "../lists.h"\r
24 #include "../misc.h"\r
25 \r
26 /*--------------------------------\r
27                 Callback Functions\r
28 ---------------------------------*/\r
29 \r
30 typedef struct {\r
31         GtkWidget *cbTexChange;\r
32         GtkWidget *editTexOld, *editTexNew;\r
33 \r
34   GtkWidget *cbScaleHor, *cbScaleVert;\r
35         GtkWidget *editScaleHor, *editScaleVert;\r
36 \r
37   GtkWidget *cbShiftHor, *cbShiftVert;\r
38         GtkWidget *editShiftHor, *editShiftVert;\r
39 \r
40         GtkWidget *cbRotation;\r
41         GtkWidget *editRotation;\r
42 }dlg_texReset_t;\r
43 \r
44 dlg_texReset_t dlgTexReset;\r
45 \r
46 void Update_TextureReseter();\r
47 \r
48 static void dialog_button_callback_texreset_update (GtkWidget *widget, gpointer data)\r
49 {\r
50   Update_TextureReseter();\r
51 }\r
52 \r
53 void Update_TextureReseter()\r
54 {\r
55   gboolean check;\r
56 \r
57   check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ));\r
58   gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexNew), check);\r
59   gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexOld), check);\r
60 \r
61   check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ));\r
62   gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleHor), check);\r
63 \r
64   check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ));\r
65   gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleVert), check);\r
66 \r
67   check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ));\r
68   gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftHor), check);\r
69 \r
70   check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ));\r
71   gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftVert), check);\r
72 \r
73   check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ));\r
74   gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editRotation), check);\r
75 }\r
76 \r
77 static void dialog_button_callback (GtkWidget *widget, gpointer data)\r
78 {\r
79         GtkWidget *parent;\r
80         int *loop, *ret;\r
81  \r
82         parent = gtk_widget_get_toplevel (widget);\r
83         loop = (int*)g_object_get_data (G_OBJECT (parent), "loop");\r
84         ret = (int*)g_object_get_data (G_OBJECT (parent), "ret");\r
85  \r
86         *loop = 0;\r
87         *ret = (int)data;\r
88 }\r
89  \r
90 static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data)\r
91 {\r
92         int *loop;\r
93  \r
94         gtk_widget_hide (widget);\r
95         loop = (int*)g_object_get_data (G_OBJECT (widget), "loop");\r
96         *loop = 0;\r
97 \r
98         return TRUE;\r
99 }\r
100 \r
101 static void dialog_button_callback_settex (GtkWidget *widget, gpointer data)\r
102 {\r
103         TwinWidget* tw = (TwinWidget*)data;\r
104 \r
105         GtkEntry* entry = GTK_ENTRY( tw->one );\r
106         GtkCombo* combo = GTK_COMBO( tw->two );\r
107 \r
108         const gchar* tex = gtk_entry_get_text(GTK_ENTRY( combo->entry ));\r
109         gtk_entry_set_text( entry, tex);\r
110 }\r
111 \r
112 /*--------------------------------\r
113         Data validation Routines\r
114 ---------------------------------*/\r
115 \r
116 bool ValidateTextFloat(const char* pData, char* error_title, float* value)\r
117 {\r
118         if(pData)\r
119         {\r
120                 float testNum = (float)atof(pData);\r
121 \r
122                 if((testNum == 0.0f) && strcmp(pData, "0"))\r
123                 {\r
124                         DoMessageBox("Please Enter A Floating Point Number", error_title, MB_OK);\r
125                         return FALSE;\r
126                 }\r
127                 else\r
128                 {\r
129                         *value = testNum;\r
130                         return TRUE;\r
131                 }\r
132         }\r
133 \r
134         DoMessageBox("Please Enter A Floating Point Number", error_title, MB_OK);\r
135         return FALSE;\r
136 }\r
137 \r
138 bool ValidateTextFloatRange(const char* pData, float min, float max, char* error_title, float* value)\r
139 {\r
140         char error_buffer[256];\r
141         sprintf(error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max);\r
142 \r
143         if(pData)\r
144         {\r
145                 float testNum = (float)atof(pData);\r
146 \r
147                 if((testNum < min) || (testNum > max))\r
148                 {\r
149                         DoMessageBox(error_buffer, error_title, MB_OK);\r
150                         return FALSE;\r
151                 }\r
152                 else\r
153                 {\r
154                         *value = testNum;\r
155                         return TRUE;\r
156                 }\r
157         }\r
158 \r
159         DoMessageBox(error_buffer, error_title, MB_OK);\r
160         return FALSE;\r
161 }\r
162 \r
163 bool ValidateTextIntRange(const char* pData, int min, int max, char* error_title, int* value)\r
164 {\r
165         char error_buffer[256];\r
166         sprintf(error_buffer, "Please Enter An Integer Between %i and %i", min, max);\r
167 \r
168         if(pData)\r
169         {\r
170                 int testNum = atoi(pData);\r
171 \r
172                 if((testNum < min) || (testNum > max))\r
173                 {\r
174                         DoMessageBox(error_buffer, error_title, MB_OK);\r
175                         return FALSE;\r
176                 }\r
177                 else\r
178                 {\r
179                         *value = testNum;\r
180                         return TRUE;\r
181                 }\r
182         }\r
183 \r
184         DoMessageBox(error_buffer, error_title, MB_OK);\r
185         return FALSE;\r
186 }\r
187 \r
188 bool ValidateTextInt(const char* pData, char* error_title, int* value)\r
189 {\r
190         if(pData)\r
191         {\r
192                 int testNum = atoi(pData);\r
193 \r
194                 if((testNum == 0) && strcmp(pData, "0"))\r
195                 {\r
196                         DoMessageBox("Please Enter An Integer", error_title, MB_OK);\r
197                         return FALSE;\r
198                 }\r
199                 else\r
200                 {\r
201                         *value = testNum;\r
202                         return TRUE;\r
203                 }\r
204         }\r
205 \r
206         DoMessageBox("Please Enter An Integer", error_title, MB_OK);\r
207         return FALSE;\r
208 }\r
209 \r
210 /*--------------------------------\r
211                 Modal Dialog Boxes\r
212 ---------------------------------*/\r
213 \r
214 /*\r
215 \r
216   Major clean up of variable names etc required, excluding Mars's ones,\r
217   which are nicely done :)\r
218 \r
219 */\r
220 \r
221 int DoMessageBox (const char* lpText, const char* lpCaption, guint32 uType)\r
222 {\r
223         GtkWidget *window, *w, *vbox, *hbox;\r
224         int mode = (uType & MB_TYPEMASK), ret, loop = 1;\r
225  \r
226         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\r
227         gtk_signal_connect (GTK_OBJECT (window), "delete_event",\r
228                       GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);\r
229         gtk_signal_connect (GTK_OBJECT (window), "destroy",\r
230                       GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);\r
231         gtk_window_set_title (GTK_WINDOW (window), lpCaption);\r
232         gtk_container_border_width (GTK_CONTAINER (window), 10);\r
233         g_object_set_data (G_OBJECT (window), "loop", &loop);\r
234         g_object_set_data (G_OBJECT (window), "ret", &ret);\r
235         gtk_widget_realize (window);\r
236  \r
237         vbox = gtk_vbox_new (FALSE, 10);\r
238         gtk_container_add (GTK_CONTAINER (window), vbox);\r
239         gtk_widget_show (vbox);\r
240  \r
241         w = gtk_label_new (lpText);\r
242         gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);\r
243         gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);\r
244         gtk_widget_show (w);\r
245  \r
246         w = gtk_hseparator_new ();\r
247         gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);\r
248         gtk_widget_show (w);\r
249  \r
250         hbox = gtk_hbox_new (FALSE, 10);\r
251         gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
252         gtk_widget_show (hbox);\r
253  \r
254         if (mode == MB_OK)\r
255         {\r
256                 w = gtk_button_new_with_label ("Ok");\r
257                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
258                 gtk_signal_connect (GTK_OBJECT (w), "clicked",\r
259                         GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));\r
260                 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);\r
261                 gtk_widget_grab_default (w);\r
262                 gtk_widget_show (w);\r
263                 ret = IDOK;\r
264         }\r
265         else if (mode ==  MB_OKCANCEL)\r
266         {\r
267                 w = gtk_button_new_with_label ("Ok");\r
268                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
269                 gtk_signal_connect (GTK_OBJECT (w), "clicked",\r
270                         GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));\r
271                 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);\r
272                 gtk_widget_grab_default (w);\r
273                 gtk_widget_show (w);\r
274  \r
275                 w = gtk_button_new_with_label ("Cancel");\r
276                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
277                 gtk_signal_connect (GTK_OBJECT (w), "clicked",\r
278                         GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));\r
279                 gtk_widget_show (w);\r
280                 ret = IDCANCEL;\r
281         }\r
282         else if (mode == MB_YESNOCANCEL)\r
283         {\r
284                 w = gtk_button_new_with_label ("Yes");\r
285                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
286                 gtk_signal_connect (GTK_OBJECT (w), "clicked",\r
287                         GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES));\r
288                 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);\r
289                 gtk_widget_grab_default (w);\r
290                 gtk_widget_show (w);\r
291  \r
292                 w = gtk_button_new_with_label ("No");\r
293                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
294                 gtk_signal_connect (GTK_OBJECT (w), "clicked",\r
295                         GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDNO));\r
296                 gtk_widget_show (w);\r
297  \r
298                 w = gtk_button_new_with_label ("Cancel");\r
299                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
300                 gtk_signal_connect (GTK_OBJECT (w), "clicked",\r
301                         GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));\r
302                 gtk_widget_show (w);\r
303                 ret = IDCANCEL;\r
304         }\r
305         else /* if (mode == MB_YESNO) */\r
306         {\r
307                 w = gtk_button_new_with_label ("Yes");\r
308                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
309                 gtk_signal_connect (GTK_OBJECT (w), "clicked",\r
310                         GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES));\r
311                 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);\r
312                 gtk_widget_grab_default (w);\r
313                 gtk_widget_show (w);\r
314  \r
315                 w = gtk_button_new_with_label ("No");\r
316                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
317                 gtk_signal_connect (GTK_OBJECT (w), "clicked",\r
318                         GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDNO));\r
319                 gtk_widget_show (w);\r
320                 ret = IDNO;\r
321         }\r
322  \r
323         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);\r
324         gtk_widget_show (window);\r
325         gtk_grab_add (window);\r
326  \r
327         while (loop)\r
328                 gtk_main_iteration ();\r
329  \r
330         gtk_grab_remove (window);\r
331         gtk_widget_destroy (window);\r
332  \r
333         return ret;\r
334 }\r
335 \r
336 int DoIntersectBox (IntersectRS* rs)\r
337 {\r
338         GtkWidget *window, *w, *vbox, *hbox;\r
339         GtkWidget *radio1, *radio2;\r
340         GtkWidget *check1, *check2;\r
341         int ret, loop = 1;\r
342  \r
343         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\r
344         \r
345         gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);\r
346         gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);\r
347 \r
348         gtk_window_set_title (GTK_WINDOW (window), "Intersect");\r
349         gtk_container_border_width (GTK_CONTAINER (window), 10);\r
350 \r
351         g_object_set_data (G_OBJECT (window), "loop", &loop);\r
352         g_object_set_data (G_OBJECT (window), "ret", &ret);\r
353 \r
354         gtk_widget_realize (window);\r
355  \r
356 \r
357         \r
358         vbox = gtk_vbox_new (FALSE, 10);\r
359         gtk_container_add (GTK_CONTAINER (window), vbox);\r
360         gtk_widget_show (vbox);\r
361  \r
362         // ---- vbox ----\r
363 \r
364                 radio1 = gtk_radio_button_new_with_label(NULL, "Use Whole Map");\r
365                 gtk_box_pack_start (GTK_BOX (vbox), radio1, FALSE, FALSE, 2);\r
366                 gtk_widget_show (radio1);\r
367 \r
368                 radio2 = gtk_radio_button_new_with_label(((GtkRadioButton*)radio1)->group, "Use Selected Brushes");\r
369                 gtk_box_pack_start (GTK_BOX (vbox), radio2, FALSE, FALSE, 2);\r
370                 gtk_widget_show (radio2);\r
371 \r
372                 w = gtk_hseparator_new ();\r
373                 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);\r
374                 gtk_widget_show (w);\r
375 \r
376                 check1 = gtk_check_button_new_with_label("Include Detail Brushes");\r
377                 gtk_box_pack_start (GTK_BOX (vbox), check1, FALSE, FALSE, 0);\r
378                 gtk_widget_show (check1);               \r
379 \r
380                 check2 = gtk_check_button_new_with_label("Select Duplicate Brushes Only");\r
381                 gtk_box_pack_start (GTK_BOX (vbox), check2, FALSE, FALSE, 0);\r
382                 gtk_widget_show (check2);               \r
383 \r
384                 hbox = gtk_hbox_new (FALSE, 10);\r
385                 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
386                 gtk_widget_show (hbox);\r
387         \r
388                 // ---- hbox ---- ok/cancel buttons\r
389 \r
390                 w = gtk_button_new_with_label ("Ok");\r
391                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
392                 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));\r
393 \r
394                 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);\r
395                 gtk_widget_grab_default (w);\r
396                 gtk_widget_show (w);\r
397  \r
398                 w = gtk_button_new_with_label ("Cancel");\r
399                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
400                 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));\r
401                 gtk_widget_show (w);\r
402                 ret = IDCANCEL;\r
403 \r
404                 // ---- /hbox ----\r
405  \r
406         // ---- /vbox ----\r
407 \r
408         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);\r
409         gtk_widget_show (window);\r
410         gtk_grab_add (window);\r
411  \r
412         while (loop)\r
413                 gtk_main_iteration ();\r
414 \r
415         if(gtk_toggle_button_get_active((GtkToggleButton*)radio1))\r
416                 rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP;\r
417         else if(gtk_toggle_button_get_active((GtkToggleButton*)radio2))\r
418                 rs->nBrushOptions = BRUSH_OPT_SELECTED;\r
419 \r
420   rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false;\r
421         rs->bDuplicateOnly = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false;\r
422  \r
423         gtk_grab_remove (window);\r
424         gtk_widget_destroy (window);\r
425 \r
426         return ret;\r
427 }\r
428 \r
429 int DoPolygonBox (PolygonRS* rs)\r
430 {\r
431         GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2;\r
432 \r
433         GtkWidget *check1, *check2, *check3;\r
434         GtkWidget *text1, *text2;\r
435 \r
436         int ret, loop = 1;\r
437  \r
438         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\r
439         \r
440         gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);\r
441         gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);\r
442 \r
443         gtk_window_set_title (GTK_WINDOW (window), "Polygon Builder");\r
444         gtk_container_border_width (GTK_CONTAINER (window), 10);\r
445 \r
446         g_object_set_data (G_OBJECT (window), "loop", &loop);\r
447         g_object_set_data (G_OBJECT (window), "ret", &ret);\r
448 \r
449         gtk_widget_realize (window);\r
450  \r
451 \r
452         \r
453         vbox = gtk_vbox_new (FALSE, 10);\r
454         gtk_container_add (GTK_CONTAINER (window), vbox);\r
455         gtk_widget_show (vbox);\r
456  \r
457         // ---- vbox ----\r
458 \r
459                 hbox = gtk_hbox_new (FALSE, 10);\r
460                 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
461                 gtk_widget_show (hbox);\r
462         \r
463                 // ---- hbox ----\r
464 \r
465         \r
466                         vbox2 = gtk_vbox_new (FALSE, 10);\r
467                         gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2);\r
468                         gtk_widget_show (vbox2);\r
469  \r
470                         // ---- vbox2 ----\r
471 \r
472                                 hbox2 = gtk_hbox_new (FALSE, 10);\r
473                                 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2);\r
474                                 gtk_widget_show (hbox2);\r
475 \r
476                                 // ---- hbox2 ----\r
477 \r
478                                         text1 = gtk_entry_new_with_max_length(256);\r
479                                         gtk_entry_set_text((GtkEntry*)text1, "3");\r
480                                         gtk_box_pack_start (GTK_BOX (hbox2), text1, FALSE, FALSE, 2);\r
481                                         gtk_widget_show (text1);\r
482 \r
483                                         w = gtk_label_new ("Number Of Sides");\r
484                                         gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2);\r
485                                         gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);\r
486                                         gtk_widget_show (w);\r
487 \r
488                                 // ---- /hbox2 ----\r
489 \r
490                                 hbox2 = gtk_hbox_new (FALSE, 10);\r
491                                 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2);\r
492                                 gtk_widget_show (hbox2);\r
493 \r
494                                 // ---- hbox2 ----\r
495 \r
496                                         text2 = gtk_entry_new_with_max_length(256);\r
497                                         gtk_entry_set_text((GtkEntry*)text2, "8");\r
498                                         gtk_box_pack_start (GTK_BOX (hbox2), text2, FALSE, FALSE, 2);\r
499                                         gtk_widget_show (text2);\r
500 \r
501                                         w = gtk_label_new ("Border Width");\r
502                                         gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2);\r
503                                         gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);\r
504                                         gtk_widget_show (w);\r
505                                 \r
506                                 // ---- /hbox2 ----\r
507 \r
508                         // ---- /vbox2 ----\r
509 \r
510 \r
511                         \r
512                         vbox2 = gtk_vbox_new (FALSE, 10);\r
513                         gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2);\r
514                         gtk_widget_show (vbox2);\r
515  \r
516                         // ---- vbox2 ----\r
517 \r
518                                 check1 = gtk_check_button_new_with_label("Use Border");\r
519                                 gtk_box_pack_start (GTK_BOX (vbox2), check1, FALSE, FALSE, 0);\r
520                                 gtk_widget_show (check1);\r
521  \r
522 \r
523                                 check2 = gtk_check_button_new_with_label("Inverse Polygon");\r
524                                 gtk_box_pack_start (GTK_BOX (vbox2), check2, FALSE, FALSE, 0);\r
525                                 gtk_widget_show (check2);\r
526  \r
527 \r
528                                 check3 = gtk_check_button_new_with_label("Align Top Edge");\r
529                                 gtk_box_pack_start (GTK_BOX (vbox2), check3, FALSE, FALSE, 0);\r
530                                 gtk_widget_show (check3);\r
531  \r
532                         // ---- /vbox2 ----\r
533 \r
534                 // ---- /hbox ----\r
535  \r
536                 hbox = gtk_hbox_new (FALSE, 10);\r
537                 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
538                 gtk_widget_show (hbox);\r
539         \r
540                 // ---- hbox ----\r
541 \r
542                         w = gtk_button_new_with_label ("Ok");\r
543                         gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
544                         gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));\r
545 \r
546                         GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);\r
547                         gtk_widget_grab_default (w);\r
548                         gtk_widget_show (w);\r
549  \r
550                         w = gtk_button_new_with_label ("Cancel");\r
551                         gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
552                         gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));\r
553                         gtk_widget_show (w);\r
554                         ret = IDCANCEL;\r
555 \r
556                 // ---- /hbox ----\r
557         \r
558         // ---- /vbox ----\r
559 \r
560         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);\r
561         gtk_widget_show (window);\r
562         gtk_grab_add (window);\r
563  \r
564         bool dialogError = TRUE;\r
565         while (dialogError)\r
566         {\r
567                 loop = 1;\r
568                 while (loop)\r
569                         gtk_main_iteration ();\r
570  \r
571                 dialogError = FALSE;\r
572 \r
573                 if(ret == IDOK)\r
574                 {\r
575                         rs->bUseBorder = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false;\r
576                         rs->bInverse = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false;\r
577                         rs->bAlignTop = gtk_toggle_button_get_active((GtkToggleButton*)check3) ? true : false;\r
578 \r
579                         if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text1), 3, 32, "Number Of Sides", &rs->nSides))\r
580                                 dialogError = TRUE;\r
581 \r
582                         if(rs->bUseBorder)\r
583                         {\r
584                                 if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text2), 8, 256, "Border Width", &rs->nBorderWidth))\r
585                                         dialogError = TRUE;\r
586                         }\r
587                 }\r
588         }\r
589 \r
590         gtk_grab_remove (window);\r
591         gtk_widget_destroy (window);\r
592 \r
593         return ret;\r
594 }\r
595 \r
596 // mars\r
597 // for stair builder stuck as close as i could to the MFC version\r
598 // obviously feel free to change it at will :)\r
599 int DoBuildStairsBox(BuildStairsRS* rs)\r
600 {\r
601         // i made widgets for just about everything ... i think that's what i need to do  dunno tho \r
602         GtkWidget       *window, *w, *vbox, *hbox;\r
603         GtkWidget       *textStairHeight, *textRiserTex, *textMainTex;\r
604         GtkWidget       *radioNorth, *radioSouth, *radioEast, *radioWest;       // i'm guessing we can't just abuse 'w' for these if we're getting a value\r
605         GtkWidget       *radioOldStyle, *radioBobStyle, *radioCornerStyle;\r
606         GtkWidget       *checkUseDetail;\r
607         GSList          *radioDirection, *radioStyle;\r
608         int ret, loop;\r
609 \r
610         loop = 1;\r
611 \r
612         char    *text = "Please set a value in the boxes below and press 'OK' to build the stairs";\r
613 \r
614         window = gtk_window_new( GTK_WINDOW_TOPLEVEL );\r
615         \r
616         gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);\r
617         gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);\r
618 \r
619         gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" );\r
620         \r
621         gtk_container_border_width( GTK_CONTAINER( window ), 10 );\r
622 \r
623         g_object_set_data (G_OBJECT (window), "loop", &loop);\r
624         g_object_set_data (G_OBJECT (window), "ret", &ret);\r
625 \r
626         gtk_widget_realize (window);\r
627 \r
628         // new vbox \r
629         vbox = gtk_vbox_new( FALSE, 10 );\r
630         gtk_container_add( GTK_CONTAINER( window ), vbox );\r
631         gtk_widget_show( vbox );\r
632 \r
633         hbox = gtk_hbox_new( FALSE, 10 );\r
634         gtk_container_add( GTK_CONTAINER( vbox ), hbox );\r
635         gtk_widget_show( hbox );\r
636         \r
637         // dunno if you want this text or not ...\r
638         w = gtk_label_new( text );\r
639         gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ...\r
640         gtk_widget_show( w );\r
641 \r
642         w = gtk_hseparator_new();\r
643         gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );\r
644         gtk_widget_show( w );\r
645         \r
646         // ------------------------- // indenting == good way of keeping track of lines :)\r
647 \r
648                 // new hbox\r
649                 hbox = gtk_hbox_new( FALSE, 10 );\r
650                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
651                 gtk_widget_show( hbox );\r
652         \r
653                 textStairHeight = gtk_entry_new_with_max_length( 256 ); \r
654                 gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 );\r
655                 gtk_widget_show( textStairHeight );\r
656 \r
657                 w = gtk_label_new( "Stair Height" );\r
658                 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );\r
659                 gtk_widget_show( w );\r
660 \r
661         // ------------------------- //\r
662 \r
663         hbox = gtk_hbox_new( FALSE, 10 );\r
664         gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
665         gtk_widget_show( hbox );\r
666 \r
667         w = gtk_label_new( "Direction:" );\r
668         gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );\r
669         gtk_widget_show( w );\r
670 \r
671         // -------------------------- //\r
672 \r
673                 hbox = gtk_hbox_new( FALSE, 10 );\r
674                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
675                 gtk_widget_show( hbox );\r
676                 \r
677                 // radio buttons confuse me ...\r
678                 // but this _looks_ right\r
679 \r
680                 // djbob: actually it looks very nice :), slightly better than the way i did it\r
681                 // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh\r
682 \r
683                 radioNorth = gtk_radio_button_new_with_label( NULL, "North" );\r
684                 gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 );\r
685                 gtk_widget_show( radioNorth );\r
686 \r
687                 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) );\r
688                 \r
689                 radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" );\r
690                 gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 );\r
691                 gtk_widget_show( radioSouth );\r
692 \r
693                 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) );\r
694 \r
695                 radioEast = gtk_radio_button_new_with_label( radioDirection, "East" );\r
696                 gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 );\r
697                 gtk_widget_show( radioEast );\r
698 \r
699                 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) );\r
700 \r
701                 radioWest = gtk_radio_button_new_with_label( radioDirection, "West" );\r
702                 gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 );\r
703                 gtk_widget_show( radioWest );\r
704 \r
705         // --------------------------- //\r
706 \r
707         hbox = gtk_hbox_new( FALSE, 10 );\r
708         gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
709         gtk_widget_show( hbox );\r
710 \r
711         w = gtk_label_new( "Style:" );\r
712         gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );\r
713         gtk_widget_show( w );\r
714 \r
715         // --------------------------- //\r
716 \r
717                 hbox = gtk_hbox_new( FALSE, 10 );\r
718                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
719                 gtk_widget_show( hbox );\r
720         \r
721                 radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" );\r
722                 gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 );\r
723                 gtk_widget_show( radioOldStyle );\r
724 \r
725                 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) );\r
726 \r
727                 radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" );\r
728                 gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 );\r
729                 gtk_widget_show( radioBobStyle );\r
730         \r
731                 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) );\r
732 \r
733                 radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" );\r
734                 gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 );\r
735                 gtk_widget_show( radioCornerStyle );\r
736         \r
737                 // err, the q3r has an if or something so you need bob style checked before this \r
738                 // is "ungreyed out" but you'll need to do that, as i suck :)\r
739 \r
740                 // djbob: er.... yeah um, im not at all sure how i'm gonna sort this\r
741                 // djbob: think we need some button callback functions or smuffin\r
742                 // FIXME: actually get around to doing what i suggested!!!!\r
743 \r
744                 checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" );\r
745                 gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 );\r
746                 gtk_widget_show( checkUseDetail );\r
747 \r
748         // --------------------------- // \r
749 \r
750         hbox = gtk_hbox_new( FALSE, 10 );\r
751         gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
752         gtk_widget_show( hbox );\r
753 \r
754         textMainTex = gtk_entry_new_with_max_length( 512 );\r
755         gtk_entry_set_text(GTK_ENTRY(textMainTex), rs->mainTexture);\r
756         gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 );\r
757         gtk_widget_show( textMainTex );\r
758 \r
759         w = gtk_label_new( "Main Texture" );\r
760         gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );\r
761         gtk_widget_show( w );\r
762 \r
763         // -------------------------- //\r
764 \r
765         hbox = gtk_hbox_new( FALSE, 10 );\r
766         gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
767         gtk_widget_show( hbox );\r
768 \r
769         textRiserTex = gtk_entry_new_with_max_length( 512 );\r
770         gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 );\r
771         gtk_widget_show( textRiserTex );\r
772 \r
773         w = gtk_label_new( "Riser Texture" );\r
774         gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );\r
775         gtk_widget_show( w );\r
776 \r
777         // -------------------------- //\r
778         w = gtk_hseparator_new();\r
779         gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );\r
780         gtk_widget_show( w );\r
781 \r
782         hbox = gtk_hbox_new( FALSE, 10 );\r
783         gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
784         gtk_widget_show( hbox );\r
785 \r
786         w = gtk_button_new_with_label( "OK" );\r
787         gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);\r
788         gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );\r
789         GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );\r
790         gtk_widget_grab_default( w );\r
791         gtk_widget_show( w );\r
792                 \r
793         w = gtk_button_new_with_label( "Cancel" );\r
794         gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );\r
795         gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );\r
796         gtk_widget_show( w );\r
797                 \r
798         ret = IDCANCEL;\r
799 \r
800 // +djbob: need our "little" modal loop mars :P\r
801         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);\r
802         gtk_widget_show (window);\r
803         gtk_grab_add (window);\r
804  \r
805         bool dialogError = TRUE;\r
806         while (dialogError)\r
807         {\r
808                 loop = 1;\r
809                 while (loop)\r
810                         gtk_main_iteration ();\r
811  \r
812                 dialogError = FALSE;\r
813 \r
814                 if(ret == IDOK)\r
815                 {\r
816                         rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)checkUseDetail) ? true : false;\r
817 \r
818                         strcpy(rs->riserTexture, gtk_entry_get_text((GtkEntry*)textRiserTex));\r
819                         strcpy(rs->mainTexture, gtk_entry_get_text((GtkEntry*)textMainTex));\r
820 \r
821                         if(gtk_toggle_button_get_active((GtkToggleButton*)radioNorth))\r
822                                 rs->direction = MOVE_NORTH;\r
823                         else if(gtk_toggle_button_get_active((GtkToggleButton*)radioSouth))\r
824                                 rs->direction = MOVE_SOUTH;\r
825                         else if(gtk_toggle_button_get_active((GtkToggleButton*)radioEast))\r
826                                 rs->direction = MOVE_EAST;\r
827                         else if(gtk_toggle_button_get_active((GtkToggleButton*)radioWest))\r
828                                 rs->direction = MOVE_WEST;\r
829 \r
830                         if(!ValidateTextInt(gtk_entry_get_text((GtkEntry*)textStairHeight), "Stair Height", &rs->stairHeight))\r
831                                 dialogError = TRUE;\r
832 \r
833                         if(gtk_toggle_button_get_active((GtkToggleButton*)radioOldStyle))\r
834                                 rs->style = STYLE_ORIGINAL;\r
835                         else if(gtk_toggle_button_get_active((GtkToggleButton*)radioBobStyle))\r
836                                 rs->style = STYLE_BOB;\r
837                         else if(gtk_toggle_button_get_active((GtkToggleButton*)radioCornerStyle))\r
838                                 rs->style = STYLE_CORNER;\r
839                 }\r
840         }\r
841 \r
842         gtk_grab_remove (window);\r
843         gtk_widget_destroy (window);\r
844 \r
845         return ret;\r
846 // -djbob\r
847         \r
848         // there we go, all done ... on my end at least, not bad for a night's work\r
849 }\r
850 \r
851 int DoDoorsBox(DoorRS* rs)\r
852 {\r
853         GtkWidget       *window, *hbox, *vbox, *w;\r
854         GtkWidget       *textFrontBackTex, *textTrimTex;\r
855         GtkWidget       *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV;\r
856         GtkWidget       *comboMain, *comboTrim;\r
857         GtkWidget       *buttonSetMain, *buttonSetTrim;\r
858         GtkWidget       *radioNS, *radioEW; \r
859         GSList          *radioOrientation;\r
860         TwinWidget      tw1, tw2;\r
861         int             ret, loop;\r
862 \r
863         loop = 1;\r
864         \r
865         window = gtk_window_new( GTK_WINDOW_TOPLEVEL );\r
866         \r
867         gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);\r
868         gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);\r
869 \r
870         gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" );\r
871         \r
872         gtk_container_border_width( GTK_CONTAINER( window ), 10 );\r
873 \r
874         g_object_set_data( G_OBJECT( window ), "loop", &loop );\r
875         g_object_set_data( G_OBJECT( window ), "ret", &ret );\r
876 \r
877         gtk_widget_realize (window);\r
878         \r
879         char buffer[256];\r
880         GList           *listMainTextures = NULL;\r
881         GList           *listTrimTextures = NULL;\r
882         LoadGList(GetFilename(buffer, "plugins/bt/door-tex.txt"), &listMainTextures);\r
883         LoadGList(GetFilename(buffer, "plugins/bt/door-tex-trim.txt"), &listTrimTextures);\r
884         \r
885         vbox = gtk_vbox_new( FALSE, 10 );\r
886         gtk_container_add( GTK_CONTAINER( window ), vbox );\r
887         gtk_widget_show( vbox );\r
888 \r
889         // -------------------------- //\r
890 \r
891                 hbox = gtk_hbox_new( FALSE, 10 );\r
892                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
893                 gtk_widget_show( hbox );\r
894 \r
895                 textFrontBackTex = gtk_entry_new_with_max_length( 512 );\r
896                 gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture);\r
897                 gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 );\r
898                 gtk_widget_show( textFrontBackTex );\r
899 \r
900                 w = gtk_label_new( "Door Front/Back Texture" );\r
901                 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );\r
902                 gtk_widget_show( w );\r
903 \r
904         // ------------------------ //\r
905 \r
906                 hbox = gtk_hbox_new( FALSE, 10 );\r
907                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
908                 gtk_widget_show( hbox );\r
909 \r
910                 textTrimTex = gtk_entry_new_with_max_length( 512 );\r
911                 gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 );\r
912                 gtk_widget_show( textTrimTex );\r
913 \r
914                 w = gtk_label_new( "Door Trim Texture" );\r
915                 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );\r
916                 gtk_widget_show( w );\r
917 \r
918         // ----------------------- //\r
919 \r
920                 hbox = gtk_hbox_new( FALSE, 10 );\r
921                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
922                 gtk_widget_show( hbox );\r
923 \r
924                 // sp: horizontally ????\r
925                 // djbob: yes mars, u can spell :]\r
926                 checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" );\r
927                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE);\r
928                 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 );\r
929                 gtk_widget_show( checkScaleMainH );\r
930 \r
931                 checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" );\r
932                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE);\r
933                 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 );\r
934                 gtk_widget_show( checkScaleTrimH );\r
935 \r
936         // ---------------------- //\r
937 \r
938                 hbox = gtk_hbox_new( FALSE, 10 );\r
939                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
940                 gtk_widget_show( hbox );\r
941 \r
942                 checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" );\r
943                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE);\r
944                 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 );\r
945                 gtk_widget_show( checkScaleMainV );\r
946 \r
947                 checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" );\r
948                 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 );\r
949                 gtk_widget_show( checkScaleTrimV );\r
950                         \r
951         // --------------------- // \r
952 \r
953                 hbox = gtk_hbox_new( FALSE, 10 );\r
954                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
955                 gtk_widget_show( hbox );\r
956 \r
957                 // djbob: lists added\r
958 \r
959                 comboMain = gtk_combo_new();\r
960                 gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 );\r
961                 gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures );\r
962                 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );\r
963                 gtk_widget_show( comboMain );\r
964 \r
965                 tw1.one = textFrontBackTex;\r
966                 tw1.two = comboMain;\r
967 \r
968                 buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" );\r
969                 gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 );\r
970                 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 );\r
971                 gtk_widget_show( buttonSetMain );\r
972 \r
973         // ------------------- //\r
974                 \r
975                 hbox = gtk_hbox_new( FALSE, 10 );\r
976                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
977                 gtk_widget_show( hbox );\r
978 \r
979                 comboTrim = gtk_combo_new();\r
980                 gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 );\r
981                 gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures );\r
982                 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );\r
983                 gtk_widget_show( comboTrim );\r
984 \r
985                 tw2.one = textTrimTex;\r
986                 tw2.two = comboTrim;\r
987 \r
988                 buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" );\r
989                 gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 );\r
990                 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 );\r
991                 gtk_widget_show( buttonSetTrim );\r
992 \r
993         // ------------------ //\r
994 \r
995                 hbox = gtk_hbox_new( FALSE, 10 );\r
996                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
997                 gtk_widget_show( hbox );\r
998 \r
999                 w = gtk_label_new( "Orientation" );\r
1000                 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );\r
1001                 gtk_widget_show( w );\r
1002 \r
1003                 // argh more radio buttons! \r
1004                 radioNS = gtk_radio_button_new_with_label( NULL, "North - South" );\r
1005                 gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 );\r
1006                 gtk_widget_show( radioNS );\r
1007 \r
1008                 radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) );\r
1009 \r
1010                 radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" );\r
1011                 gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 );\r
1012                 gtk_widget_show( radioEW );\r
1013 \r
1014         // ----------------- //\r
1015 \r
1016                 w = gtk_hseparator_new();\r
1017                 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );\r
1018                 gtk_widget_show( w );\r
1019 \r
1020         // ----------------- //\r
1021 \r
1022                 hbox = gtk_hbox_new( FALSE, 10 );\r
1023                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
1024                 gtk_widget_show( hbox );\r
1025 \r
1026                 w = gtk_button_new_with_label( "OK" );\r
1027                 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);\r
1028                 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );\r
1029                 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );\r
1030                 gtk_widget_grab_default( w );\r
1031                 gtk_widget_show( w );\r
1032                 \r
1033                 w = gtk_button_new_with_label( "Cancel" );\r
1034                 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );\r
1035                 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );\r
1036                 gtk_widget_show( w );\r
1037                 ret = IDCANCEL;\r
1038 \r
1039         // ----------------- //\r
1040 \r
1041 //+djbob\r
1042         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);\r
1043         gtk_widget_show (window);\r
1044         gtk_grab_add (window);\r
1045  \r
1046         while (loop)\r
1047                 gtk_main_iteration ();\r
1048 \r
1049         strcpy(rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ));\r
1050         strcpy(rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ));\r
1051 \r
1052         rs->bScaleMainH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainH)) ? true : false;\r
1053         rs->bScaleMainV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainV)) ? true : false;\r
1054         rs->bScaleTrimH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimH)) ? true : false;\r
1055         rs->bScaleTrimV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimV)) ? true : false;\r
1056 \r
1057         if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioNS)))\r
1058                 rs->nOrientation = DIRECTION_NS;\r
1059         else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioEW)))\r
1060                 rs->nOrientation = DIRECTION_EW;\r
1061  \r
1062         gtk_grab_remove (window);\r
1063         gtk_widget_destroy (window);\r
1064 \r
1065         return ret;\r
1066 //-djbob\r
1067 }\r
1068 \r
1069 int DoPathPlotterBox(PathPlotterRS* rs)\r
1070 {\r
1071         GtkWidget *window, *w, *vbox, *hbox;\r
1072 \r
1073         GtkWidget *text1, *text2, *text3;\r
1074         GtkWidget *check1, *check2;\r
1075 \r
1076         int ret, loop = 1;\r
1077  \r
1078         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\r
1079         \r
1080         gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);\r
1081         gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);\r
1082 \r
1083         gtk_window_set_title (GTK_WINDOW (window), "Texture Reset");\r
1084         gtk_container_border_width (GTK_CONTAINER (window), 10);\r
1085 \r
1086         g_object_set_data (G_OBJECT (window), "loop", &loop);\r
1087         g_object_set_data (G_OBJECT (window), "ret", &ret);\r
1088 \r
1089         gtk_widget_realize (window);\r
1090  \r
1091 \r
1092         \r
1093         vbox = gtk_vbox_new (FALSE, 10);\r
1094         gtk_container_add (GTK_CONTAINER (window), vbox);\r
1095         gtk_widget_show (vbox);\r
1096  \r
1097         // ---- vbox ----\r
1098 \r
1099                 hbox = gtk_hbox_new (FALSE, 10);\r
1100                 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
1101                 gtk_widget_show (hbox);\r
1102         \r
1103                 // ---- hbox ----\r
1104 \r
1105                         text1 = gtk_entry_new_with_max_length(256);\r
1106                         gtk_entry_set_text((GtkEntry*)text1, "25");\r
1107                         gtk_box_pack_start (GTK_BOX (hbox), text1, FALSE, FALSE, 2);\r
1108                         gtk_widget_show (text1);\r
1109 \r
1110                         w = gtk_label_new ("Number Of Points");\r
1111                         gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);\r
1112                         gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);\r
1113                         gtk_widget_show (w);\r
1114 \r
1115                 // ---- /hbox ----\r
1116 \r
1117                 hbox = gtk_hbox_new (FALSE, 10);\r
1118                 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
1119                 gtk_widget_show (hbox);\r
1120         \r
1121                 // ---- hbox ----\r
1122 \r
1123                         text2 = gtk_entry_new_with_max_length(256);\r
1124                         gtk_entry_set_text((GtkEntry*)text2, "3");\r
1125                         gtk_box_pack_start (GTK_BOX (hbox), text2, FALSE, FALSE, 2);\r
1126                         gtk_widget_show (text2);\r
1127 \r
1128                         w = gtk_label_new ("Multipler");\r
1129                         gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);\r
1130                         gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);\r
1131                         gtk_widget_show (w);\r
1132 \r
1133                 // ---- /hbox ----\r
1134 \r
1135                 w = gtk_label_new ("Path Distance = dist(start -> apex) * multiplier");\r
1136                 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);\r
1137                 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);\r
1138                 gtk_widget_show (w);\r
1139 \r
1140                 hbox = gtk_hbox_new (FALSE, 10);\r
1141                 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
1142                 gtk_widget_show (hbox);\r
1143         \r
1144                 // ---- hbox ----\r
1145 \r
1146                         text3 = gtk_entry_new_with_max_length(256);\r
1147                         gtk_entry_set_text((GtkEntry*)text3, "-800");\r
1148                         gtk_box_pack_start (GTK_BOX (hbox), text3, FALSE, FALSE, 2);\r
1149                         gtk_widget_show (text3);\r
1150 \r
1151                         w = gtk_label_new ("Gravity");\r
1152                         gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);\r
1153                         gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);\r
1154                         gtk_widget_show (w);\r
1155 \r
1156                 // ---- /hbox ----\r
1157         \r
1158                 w = gtk_hseparator_new();\r
1159                 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );\r
1160                 gtk_widget_show( w );\r
1161 \r
1162                 check1 = gtk_check_button_new_with_label( "No Dynamic Update" );\r
1163                 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );\r
1164                 gtk_widget_show( check1 );\r
1165 \r
1166                 check2 = gtk_check_button_new_with_label( "Show Bounding Lines" );\r
1167                 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );\r
1168                 gtk_widget_show( check2 );\r
1169 \r
1170         // ---- /vbox ----\r
1171 \r
1172 \r
1173         // ----------------- //\r
1174 \r
1175                 w = gtk_hseparator_new();\r
1176                 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );\r
1177                 gtk_widget_show( w );\r
1178 \r
1179         // ----------------- //\r
1180 \r
1181                 hbox = gtk_hbox_new( FALSE, 10 );\r
1182                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );\r
1183                 gtk_widget_show( hbox );\r
1184 \r
1185                 w = gtk_button_new_with_label( "Enable" );\r
1186                 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);\r
1187                 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) );\r
1188                 gtk_widget_show( w );\r
1189                 \r
1190                 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );\r
1191                 gtk_widget_grab_default( w );\r
1192 \r
1193                 w = gtk_button_new_with_label( "Disable" );\r
1194                 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);\r
1195                 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDNO ) );\r
1196                 gtk_widget_show( w );\r
1197                 \r
1198                 w = gtk_button_new_with_label( "Cancel" );\r
1199                 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );\r
1200                 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );\r
1201                 gtk_widget_show( w );\r
1202                 \r
1203                 ret = IDCANCEL;\r
1204 \r
1205         // ----------------- //\r
1206 \r
1207         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);\r
1208         gtk_widget_show (window);\r
1209         gtk_grab_add (window);\r
1210  \r
1211         bool dialogError = TRUE;\r
1212         while (dialogError)\r
1213         {\r
1214                 loop = 1;\r
1215                 while (loop)\r
1216                         gtk_main_iteration ();\r
1217  \r
1218                 dialogError = FALSE;\r
1219 \r
1220                 if(ret == IDYES)\r
1221                 {\r
1222                         if(!ValidateTextIntRange(gtk_entry_get_text(GTK_ENTRY(text1)), 1, 200, "Number Of Points", &rs->nPoints))\r
1223                                 dialogError = TRUE;\r
1224 \r
1225                         if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text2)), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier))\r
1226                                 dialogError = TRUE;\r
1227 \r
1228                         if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text3)), -10000.0f, -1.0f, "Gravity", &rs->fGravity))\r
1229                                 dialogError = TRUE;\r
1230 \r
1231                         rs->bNoUpdate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check1)) ? true : false;\r
1232                         rs->bShowExtra = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check2)) ? true : false;\r
1233                 }\r
1234         }\r
1235 \r
1236         gtk_grab_remove (window);\r
1237         gtk_widget_destroy (window);\r
1238 \r
1239         return ret;\r
1240 }\r
1241 \r
1242 int DoCTFColourChangeBox ()\r
1243 {\r
1244         GtkWidget *window, *w, *vbox, *hbox;\r
1245         int ret, loop = 1;\r
1246  \r
1247         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\r
1248         \r
1249         gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);\r
1250         gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);\r
1251 \r
1252         gtk_window_set_title (GTK_WINDOW (window), "CTF Colour Changer");\r
1253         gtk_container_border_width (GTK_CONTAINER (window), 10);\r
1254 \r
1255         g_object_set_data (G_OBJECT (window), "loop", &loop);\r
1256         g_object_set_data (G_OBJECT (window), "ret", &ret);\r
1257 \r
1258         gtk_widget_realize (window);\r
1259  \r
1260 \r
1261         \r
1262         vbox = gtk_vbox_new (FALSE, 10);\r
1263         gtk_container_add (GTK_CONTAINER (window), vbox);\r
1264         gtk_widget_show (vbox);\r
1265  \r
1266         // ---- vbox ----\r
1267 \r
1268                 hbox = gtk_hbox_new( FALSE, 10 );\r
1269                 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );\r
1270                 gtk_widget_show( hbox );\r
1271 \r
1272                 // ---- hbox ---- ok/cancel buttons\r
1273 \r
1274                 w = gtk_button_new_with_label ("Red->Blue");\r
1275                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
1276                 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));\r
1277 \r
1278                 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);\r
1279                 gtk_widget_grab_default (w);\r
1280                 gtk_widget_show (w);\r
1281  \r
1282                 w = gtk_button_new_with_label ("Blue->Red");\r
1283                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
1284                 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES));\r
1285                 gtk_widget_show (w);\r
1286 \r
1287                 w = gtk_button_new_with_label ("Cancel");\r
1288                 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
1289                 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));\r
1290                 gtk_widget_show (w);\r
1291                 ret = IDCANCEL;\r
1292 \r
1293                 // ---- /hbox ----\r
1294  \r
1295         // ---- /vbox ----\r
1296 \r
1297         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);\r
1298         gtk_widget_show (window);\r
1299         gtk_grab_add (window);\r
1300  \r
1301         while (loop)\r
1302                 gtk_main_iteration ();\r
1303 \r
1304         gtk_grab_remove (window);\r
1305         gtk_widget_destroy (window);\r
1306 \r
1307         return ret;\r
1308 }\r
1309 \r
1310 int DoResetTextureBox (ResetTextureRS* rs)\r
1311 {\r
1312         Str texSelected;\r
1313 \r
1314         GtkWidget *window, *w, *vbox, *hbox, *frame, *table;\r
1315 \r
1316         int ret, loop = 1;\r
1317  \r
1318         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\r
1319         \r
1320         gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);\r
1321         gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);\r
1322 \r
1323         gtk_window_set_title (GTK_WINDOW (window), "Texture Reset");\r
1324         gtk_container_border_width (GTK_CONTAINER (window), 10);\r
1325 \r
1326         g_object_set_data (G_OBJECT (window), "loop", &loop);\r
1327         g_object_set_data (G_OBJECT (window), "ret", &ret);\r
1328 \r
1329         gtk_widget_realize (window);\r
1330         \r
1331         vbox = gtk_vbox_new (FALSE, 10);\r
1332         gtk_container_add (GTK_CONTAINER (window), vbox);\r
1333         gtk_widget_show (vbox);\r
1334  \r
1335         // ---- vbox ----\r
1336 \r
1337         hbox = gtk_hbox_new (FALSE, 10);\r
1338         gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
1339         gtk_widget_show (hbox);\r
1340         \r
1341         // ---- hbox ----\r
1342 \r
1343         texSelected = "Currently Selected Face:   ";\r
1344         if(g_SelectedFaceTable.m_pfnGetSelectedFaceCount() == 1) {\r
1345                 texSelected += GetCurrentTexture();\r
1346         }\r
1347 \r
1348         w = gtk_label_new (texSelected);\r
1349         gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);\r
1350         gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);\r
1351         gtk_widget_show (w);\r
1352 \r
1353         // ---- /hbox ----\r
1354 \r
1355         frame = gtk_frame_new ("Reset Texture Names");\r
1356     gtk_widget_show (frame);\r
1357     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);\r
1358 \r
1359     table = gtk_table_new (2, 3, TRUE);\r
1360     gtk_widget_show (table);\r
1361     gtk_container_add (GTK_CONTAINER (frame), table);\r
1362     gtk_table_set_row_spacings (GTK_TABLE (table), 5);\r
1363     gtk_table_set_col_spacings (GTK_TABLE (table), 5);\r
1364     gtk_container_set_border_width (GTK_CONTAINER (table), 5);\r
1365 \r
1366         // ---- frame ----\r
1367 \r
1368         dlgTexReset.cbTexChange = gtk_check_button_new_with_label("Enabled");\r
1369         gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbTexChange), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);\r
1370         gtk_widget_show (dlgTexReset.cbTexChange);\r
1371         gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbTexChange, 0, 1, 0, 1,\r
1372                         (GtkAttachOptions) (GTK_FILL),\r
1373                         (GtkAttachOptions) (0), 0, 0);\r
1374 \r
1375         w = gtk_label_new ("Old Name: ");\r
1376         gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,\r
1377                                 (GtkAttachOptions) (GTK_FILL),\r
1378                         (GtkAttachOptions) (0), 0, 0);\r
1379         gtk_widget_show (w);\r
1380 \r
1381         dlgTexReset.editTexOld = gtk_entry_new_with_max_length(256);\r
1382         gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexOld), rs->textureName);\r
1383     gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexOld, 2, 3, 0, 1,\r
1384                                 (GtkAttachOptions) (GTK_FILL),\r
1385                         (GtkAttachOptions) (0), 0, 0);\r
1386         gtk_widget_show (dlgTexReset.editTexOld);\r
1387 \r
1388         w = gtk_label_new ("New Name: ");\r
1389         gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,\r
1390                         (GtkAttachOptions) (GTK_FILL),\r
1391                         (GtkAttachOptions) (0), 0, 0);\r
1392         gtk_widget_show (w);\r
1393 \r
1394         dlgTexReset.editTexNew = gtk_entry_new_with_max_length(256);\r
1395         gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexNew), rs->textureName);\r
1396         gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexNew, 2, 3, 1, 2,\r
1397                         (GtkAttachOptions) (GTK_FILL),\r
1398                         (GtkAttachOptions) (0), 0, 0);\r
1399         gtk_widget_show (dlgTexReset.editTexNew);\r
1400 \r
1401         // ---- /frame ----\r
1402 \r
1403     frame = gtk_frame_new ("Reset Scales");\r
1404     gtk_widget_show (frame);\r
1405     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);\r
1406 \r
1407     table = gtk_table_new (2, 3, TRUE);\r
1408     gtk_widget_show (table);\r
1409     gtk_container_add (GTK_CONTAINER (frame), table);\r
1410     gtk_table_set_row_spacings (GTK_TABLE (table), 5);\r
1411     gtk_table_set_col_spacings (GTK_TABLE (table), 5);\r
1412     gtk_container_set_border_width (GTK_CONTAINER (table), 5);\r
1413 \r
1414         // ---- frame ----\r
1415 \r
1416         dlgTexReset.cbScaleHor = gtk_check_button_new_with_label("Enabled");\r
1417         gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);\r
1418         gtk_widget_show (dlgTexReset.cbScaleHor);\r
1419         gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleHor, 0, 1, 0, 1,\r
1420                         (GtkAttachOptions) (GTK_FILL),\r
1421                         (GtkAttachOptions) (0), 0, 0);\r
1422 \r
1423         w = gtk_label_new ("New Horizontal Scale: ");\r
1424         gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,\r
1425                         (GtkAttachOptions) (GTK_FILL),\r
1426                         (GtkAttachOptions) (0), 0, 0);\r
1427         gtk_widget_show (w);\r
1428 \r
1429         dlgTexReset.editScaleHor = gtk_entry_new_with_max_length(256);\r
1430         gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleHor), "0.5");\r
1431         gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleHor, 2, 3, 0, 1,\r
1432                         (GtkAttachOptions) (GTK_FILL),\r
1433                         (GtkAttachOptions) (0), 0, 0);\r
1434         gtk_widget_show (dlgTexReset.editScaleHor);\r
1435 \r
1436 \r
1437         dlgTexReset.cbScaleVert = gtk_check_button_new_with_label("Enabled");\r
1438         gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);\r
1439         gtk_widget_show (dlgTexReset.cbScaleVert);\r
1440         gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleVert, 0, 1, 1, 2,\r
1441                         (GtkAttachOptions) (GTK_FILL),\r
1442                         (GtkAttachOptions) (0), 0, 0);\r
1443 \r
1444         w = gtk_label_new ("New Vertical Scale: ");\r
1445         gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,\r
1446                         (GtkAttachOptions) (GTK_FILL),\r
1447                         (GtkAttachOptions) (0), 0, 0);\r
1448         gtk_widget_show (w);\r
1449 \r
1450         dlgTexReset.editScaleVert = gtk_entry_new_with_max_length(256);\r
1451         gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleVert), "0.5");\r
1452         gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleVert, 2, 3, 1, 2,\r
1453                         (GtkAttachOptions) (GTK_FILL),\r
1454                         (GtkAttachOptions) (0), 0, 0);\r
1455         gtk_widget_show (dlgTexReset.editScaleVert);\r
1456 \r
1457         // ---- /frame ----\r
1458 \r
1459     frame = gtk_frame_new ("Reset Shift");\r
1460     gtk_widget_show (frame);\r
1461     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);\r
1462 \r
1463     table = gtk_table_new (2, 3, TRUE);\r
1464     gtk_widget_show (table);\r
1465     gtk_container_add (GTK_CONTAINER (frame), table);\r
1466     gtk_table_set_row_spacings (GTK_TABLE (table), 5);\r
1467     gtk_table_set_col_spacings (GTK_TABLE (table), 5);\r
1468     gtk_container_set_border_width (GTK_CONTAINER (table), 5);\r
1469 \r
1470                 // ---- frame ----\r
1471 \r
1472         dlgTexReset.cbShiftHor = gtk_check_button_new_with_label("Enabled");\r
1473         gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);\r
1474         gtk_widget_show (dlgTexReset.cbShiftHor);\r
1475         gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftHor, 0, 1, 0, 1,\r
1476                         (GtkAttachOptions) (GTK_FILL),\r
1477                         (GtkAttachOptions) (0), 0, 0);\r
1478 \r
1479         w = gtk_label_new ("New Horizontal Shift: ");\r
1480         gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,\r
1481                         (GtkAttachOptions) (GTK_FILL),\r
1482                         (GtkAttachOptions) (0), 0, 0);\r
1483         gtk_widget_show (w);\r
1484 \r
1485         dlgTexReset.editShiftHor = gtk_entry_new_with_max_length(256);\r
1486         gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftHor), "0");\r
1487         gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftHor, 2, 3, 0, 1,\r
1488                         (GtkAttachOptions) (GTK_FILL),\r
1489                         (GtkAttachOptions) (0), 0, 0);\r
1490         gtk_widget_show (dlgTexReset.editShiftHor);\r
1491 \r
1492 \r
1493         dlgTexReset.cbShiftVert = gtk_check_button_new_with_label("Enabled");\r
1494         gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);\r
1495         gtk_widget_show (dlgTexReset.cbShiftVert);\r
1496         gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftVert, 0, 1, 1, 2,\r
1497                         (GtkAttachOptions) (GTK_FILL),\r
1498                         (GtkAttachOptions) (0), 0, 0);\r
1499 \r
1500         w = gtk_label_new ("New Vertical Shift: ");\r
1501         gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,\r
1502                         (GtkAttachOptions) (GTK_FILL),\r
1503                         (GtkAttachOptions) (0), 0, 0);\r
1504         gtk_widget_show (w);\r
1505 \r
1506         dlgTexReset.editShiftVert = gtk_entry_new_with_max_length(256);\r
1507         gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftVert), "0");\r
1508         gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftVert, 2, 3, 1, 2,\r
1509                         (GtkAttachOptions) (GTK_FILL),\r
1510                         (GtkAttachOptions) (0), 0, 0);\r
1511         gtk_widget_show (dlgTexReset.editShiftVert);\r
1512 \r
1513         // ---- /frame ----\r
1514 \r
1515     frame = gtk_frame_new ("Reset Rotation");\r
1516     gtk_widget_show (frame);\r
1517     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);\r
1518 \r
1519     table = gtk_table_new (1, 3, TRUE);\r
1520     gtk_widget_show (table);\r
1521     gtk_container_add (GTK_CONTAINER (frame), table);\r
1522     gtk_table_set_row_spacings (GTK_TABLE (table), 5);\r
1523     gtk_table_set_col_spacings (GTK_TABLE (table), 5);\r
1524     gtk_container_set_border_width (GTK_CONTAINER (table), 5);\r
1525 \r
1526                 // ---- frame ----\r
1527 \r
1528         dlgTexReset.cbRotation = gtk_check_button_new_with_label("Enabled");\r
1529         gtk_widget_show (dlgTexReset.cbRotation);\r
1530         gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbRotation, 0, 1, 0, 1,\r
1531                         (GtkAttachOptions) (GTK_FILL),\r
1532                         (GtkAttachOptions) (0), 0, 0);\r
1533 \r
1534         w = gtk_label_new ("New Rotation Value: ");\r
1535         gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,\r
1536                         (GtkAttachOptions) (GTK_FILL),\r
1537                         (GtkAttachOptions) (0), 0, 0);\r
1538         gtk_widget_show (w);\r
1539 \r
1540         dlgTexReset.editRotation = gtk_entry_new_with_max_length(256);\r
1541         gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editRotation), "0");\r
1542         gtk_table_attach (GTK_TABLE (table), dlgTexReset.editRotation, 2, 3, 0, 1,\r
1543                         (GtkAttachOptions) (GTK_FILL),\r
1544                         (GtkAttachOptions) (0), 0, 0);\r
1545         gtk_widget_show (dlgTexReset.editRotation);\r
1546 \r
1547         // ---- /frame ----\r
1548 \r
1549         hbox = gtk_hbox_new (FALSE, 10);\r
1550         gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
1551         gtk_widget_show (hbox);\r
1552         \r
1553         // ---- hbox ----\r
1554 \r
1555         w = gtk_button_new_with_label ("Use Selected Brushes");\r
1556         gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
1557         gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));\r
1558 \r
1559         GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);\r
1560         gtk_widget_grab_default (w);\r
1561         gtk_widget_show (w);\r
1562  \r
1563         w = gtk_button_new_with_label ("Use All Brushes");\r
1564         gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
1565         gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES));\r
1566         gtk_widget_show (w);\r
1567 \r
1568         w = gtk_button_new_with_label ("Cancel");\r
1569         gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
1570         gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));\r
1571         gtk_widget_show (w);\r
1572         ret = IDCANCEL;\r
1573 \r
1574         // ---- /hbox ----\r
1575         \r
1576         // ---- /vbox ----\r
1577 \r
1578         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);\r
1579         gtk_widget_show (window);\r
1580         gtk_grab_add (window);\r
1581  \r
1582         Update_TextureReseter();\r
1583 \r
1584         bool dialogError = TRUE;\r
1585         while (dialogError)\r
1586         {\r
1587                 loop = 1;\r
1588                 while (loop)\r
1589                         gtk_main_iteration ();\r
1590  \r
1591                 dialogError = FALSE;\r
1592 \r
1593                 if(ret != IDCANCEL)\r
1594                 {\r
1595                         rs->bResetRotation =  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ));\r
1596                         if(rs->bResetRotation)\r
1597                                 if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editRotation)), "Rotation", &rs->rotation))\r
1598                                         dialogError = TRUE;\r
1599 \r
1600                         rs->bResetScale[0] =  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ));\r
1601                         if(rs->bResetScale[0])\r
1602                                 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleHor)), "Horizontal Scale", &rs->fScale[0]))\r
1603                                         dialogError = TRUE;\r
1604 \r
1605                         rs->bResetScale[1] =  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ));\r
1606                         if(rs->bResetScale[1])\r
1607                                 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleVert)), "Vertical Scale", &rs->fScale[1]))\r
1608                                         dialogError = TRUE;\r
1609 \r
1610                         rs->bResetShift[0] =  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ));\r
1611                         if(rs->bResetShift[0])\r
1612                                 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftHor)), "Horizontal Shift", &rs->fShift[0]))\r
1613                                         dialogError = TRUE;\r
1614 \r
1615                         rs->bResetShift[1] =  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ));\r
1616                         if(rs->bResetShift[1])\r
1617                                 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftVert)), "Vertical Shift", &rs->fShift[1]))\r
1618                                         dialogError = TRUE;\r
1619 \r
1620                         rs->bResetTextureName =  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ));\r
1621                         if(rs->bResetTextureName)\r
1622                         {\r
1623                                 strcpy(rs->textureName,     gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexOld )));\r
1624                                 strcpy(rs->newTextureName,  gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexNew )));\r
1625                         }\r
1626                 }\r
1627         }\r
1628 \r
1629         gtk_grab_remove (window);\r
1630         gtk_widget_destroy (window);\r
1631 \r
1632         return ret;\r
1633 }\r
1634 \r
1635 int DoTrainThingBox (TrainThingRS* rs)\r
1636 {\r
1637         Str texSelected;\r
1638 \r
1639         GtkWidget *window, *w, *vbox, *hbox, *frame, *table;\r
1640 \r
1641         GtkWidget *radiusX, *radiusY;\r
1642         GtkWidget *angleStart, *angleEnd;\r
1643         GtkWidget *heightStart, *heightEnd;\r
1644         GtkWidget *numPoints;\r
1645 \r
1646         int ret, loop = 1;\r
1647  \r
1648         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\r
1649         \r
1650         gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);\r
1651         gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);\r
1652 \r
1653         gtk_window_set_title (GTK_WINDOW (window), "Train Thing");\r
1654         gtk_container_border_width (GTK_CONTAINER (window), 10);\r
1655 \r
1656         gtk_object_set_data (GTK_OBJECT (window), "loop", &loop);\r
1657         gtk_object_set_data (GTK_OBJECT (window), "ret", &ret);\r
1658 \r
1659         gtk_widget_realize (window);\r
1660         \r
1661         vbox = gtk_vbox_new (FALSE, 10);\r
1662         gtk_container_add (GTK_CONTAINER (window), vbox);\r
1663         gtk_widget_show (vbox);\r
1664  \r
1665         // ---- vbox ----\r
1666 \r
1667         hbox = gtk_hbox_new (FALSE, 10);\r
1668         gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
1669         gtk_widget_show (hbox);\r
1670 \r
1671         // ---- /hbox ----\r
1672 \r
1673         frame = gtk_frame_new ("Radii");\r
1674     gtk_widget_show (frame);\r
1675     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);\r
1676 \r
1677     table = gtk_table_new (2, 3, TRUE);\r
1678     gtk_widget_show (table);\r
1679     gtk_container_add (GTK_CONTAINER (frame), table);\r
1680     gtk_table_set_row_spacings (GTK_TABLE (table), 5);\r
1681     gtk_table_set_col_spacings (GTK_TABLE (table), 5);\r
1682     gtk_container_set_border_width (GTK_CONTAINER (table), 5);\r
1683 \r
1684         // ---- frame ----\r
1685 \r
1686         w = gtk_label_new ("X: ");\r
1687         gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,\r
1688                                 (GtkAttachOptions) (GTK_FILL),\r
1689                         (GtkAttachOptions) (0), 0, 0);\r
1690         gtk_widget_show (w);\r
1691 \r
1692         radiusX = gtk_entry_new_with_max_length(256);\r
1693         gtk_entry_set_text(GTK_ENTRY(radiusX), "100");\r
1694     gtk_table_attach (GTK_TABLE (table), radiusX, 1, 2, 0, 1,\r
1695                                 (GtkAttachOptions) (GTK_FILL),\r
1696                         (GtkAttachOptions) (0), 0, 0);\r
1697         gtk_widget_show (radiusX);\r
1698 \r
1699 \r
1700 \r
1701         w = gtk_label_new ("Y: ");\r
1702         gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,\r
1703                         (GtkAttachOptions) (GTK_FILL),\r
1704                         (GtkAttachOptions) (0), 0, 0);\r
1705         gtk_widget_show (w);\r
1706 \r
1707         radiusY = gtk_entry_new_with_max_length(256);\r
1708         gtk_entry_set_text(GTK_ENTRY(radiusY), "100");\r
1709         gtk_table_attach (GTK_TABLE (table), radiusY, 1, 2, 1, 2,\r
1710                         (GtkAttachOptions) (GTK_FILL),\r
1711                         (GtkAttachOptions) (0), 0, 0);\r
1712         gtk_widget_show (radiusY);\r
1713 \r
1714 \r
1715 \r
1716         frame = gtk_frame_new ("Angles");\r
1717     gtk_widget_show (frame);\r
1718     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);\r
1719 \r
1720     table = gtk_table_new (2, 3, TRUE);\r
1721     gtk_widget_show (table);\r
1722     gtk_container_add (GTK_CONTAINER (frame), table);\r
1723     gtk_table_set_row_spacings (GTK_TABLE (table), 5);\r
1724     gtk_table_set_col_spacings (GTK_TABLE (table), 5);\r
1725     gtk_container_set_border_width (GTK_CONTAINER (table), 5);\r
1726 \r
1727         // ---- frame ----\r
1728 \r
1729         w = gtk_label_new ("Start: ");\r
1730         gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,\r
1731                                 (GtkAttachOptions) (GTK_FILL),\r
1732                         (GtkAttachOptions) (0), 0, 0);\r
1733         gtk_widget_show (w);\r
1734 \r
1735         angleStart = gtk_entry_new_with_max_length(256);\r
1736         gtk_entry_set_text(GTK_ENTRY(angleStart), "0");\r
1737     gtk_table_attach (GTK_TABLE (table), angleStart, 1, 2, 0, 1,\r
1738                                 (GtkAttachOptions) (GTK_FILL),\r
1739                         (GtkAttachOptions) (0), 0, 0);\r
1740         gtk_widget_show (angleStart);\r
1741 \r
1742 \r
1743 \r
1744         w = gtk_label_new ("End: ");\r
1745         gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,\r
1746                         (GtkAttachOptions) (GTK_FILL),\r
1747                         (GtkAttachOptions) (0), 0, 0);\r
1748         gtk_widget_show (w);\r
1749 \r
1750         angleEnd = gtk_entry_new_with_max_length(256);\r
1751         gtk_entry_set_text(GTK_ENTRY(angleEnd), "90");\r
1752         gtk_table_attach (GTK_TABLE (table), angleEnd, 1, 2, 1, 2,\r
1753                         (GtkAttachOptions) (GTK_FILL),\r
1754                         (GtkAttachOptions) (0), 0, 0);\r
1755         gtk_widget_show (angleEnd);\r
1756 \r
1757 \r
1758         frame = gtk_frame_new ("Height");\r
1759     gtk_widget_show (frame);\r
1760     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);\r
1761 \r
1762     table = gtk_table_new (2, 3, TRUE);\r
1763     gtk_widget_show (table);\r
1764     gtk_container_add (GTK_CONTAINER (frame), table);\r
1765     gtk_table_set_row_spacings (GTK_TABLE (table), 5);\r
1766     gtk_table_set_col_spacings (GTK_TABLE (table), 5);\r
1767     gtk_container_set_border_width (GTK_CONTAINER (table), 5);\r
1768 \r
1769         // ---- frame ----\r
1770 \r
1771         w = gtk_label_new ("Start: ");\r
1772         gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,\r
1773                                 (GtkAttachOptions) (GTK_FILL),\r
1774                         (GtkAttachOptions) (0), 0, 0);\r
1775         gtk_widget_show (w);\r
1776 \r
1777         heightStart = gtk_entry_new_with_max_length(256);\r
1778         gtk_entry_set_text(GTK_ENTRY(heightStart), "0");\r
1779     gtk_table_attach (GTK_TABLE (table), heightStart, 1, 2, 0, 1,\r
1780                                 (GtkAttachOptions) (GTK_FILL),\r
1781                         (GtkAttachOptions) (0), 0, 0);\r
1782         gtk_widget_show (heightStart);\r
1783 \r
1784 \r
1785 \r
1786         w = gtk_label_new ("End: ");\r
1787         gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,\r
1788                         (GtkAttachOptions) (GTK_FILL),\r
1789                         (GtkAttachOptions) (0), 0, 0);\r
1790         gtk_widget_show (w);\r
1791 \r
1792         heightEnd = gtk_entry_new_with_max_length(256);\r
1793         gtk_entry_set_text(GTK_ENTRY(heightEnd), "0");\r
1794         gtk_table_attach (GTK_TABLE (table), heightEnd, 1, 2, 1, 2,\r
1795                         (GtkAttachOptions) (GTK_FILL),\r
1796                         (GtkAttachOptions) (0), 0, 0);\r
1797         gtk_widget_show (heightEnd);\r
1798 \r
1799 \r
1800 \r
1801         frame = gtk_frame_new ("Points");\r
1802     gtk_widget_show (frame);\r
1803     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);\r
1804 \r
1805     table = gtk_table_new (2, 3, TRUE);\r
1806     gtk_widget_show (table);\r
1807     gtk_container_add (GTK_CONTAINER (frame), table);\r
1808     gtk_table_set_row_spacings (GTK_TABLE (table), 5);\r
1809     gtk_table_set_col_spacings (GTK_TABLE (table), 5);\r
1810     gtk_container_set_border_width (GTK_CONTAINER (table), 5);\r
1811 \r
1812         // ---- frame ----\r
1813 \r
1814         w = gtk_label_new ("Number: ");\r
1815         gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,\r
1816                                 (GtkAttachOptions) (GTK_FILL),\r
1817                         (GtkAttachOptions) (0), 0, 0);\r
1818         gtk_widget_show (w);\r
1819 \r
1820         numPoints = gtk_entry_new_with_max_length(256);\r
1821         gtk_entry_set_text(GTK_ENTRY(numPoints), "0");\r
1822     gtk_table_attach (GTK_TABLE (table), numPoints, 1, 2, 0, 1,\r
1823                                 (GtkAttachOptions) (GTK_FILL),\r
1824                         (GtkAttachOptions) (0), 0, 0);\r
1825         gtk_widget_show (numPoints);\r
1826 \r
1827 \r
1828                 hbox = gtk_hbox_new (FALSE, 10);\r
1829                 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);\r
1830                 gtk_widget_show (hbox);\r
1831         \r
1832                 // ---- hbox ----\r
1833 \r
1834                         w = gtk_button_new_with_label ("Ok");\r
1835                         gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
1836                         gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));\r
1837 \r
1838                         GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);\r
1839                         gtk_widget_grab_default (w);\r
1840                         gtk_widget_show (w);\r
1841  \r
1842                         w = gtk_button_new_with_label ("Cancel");\r
1843                         gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);\r
1844                         gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));\r
1845                         gtk_widget_show (w);\r
1846                         ret = IDCANCEL;\r
1847 \r
1848                 // ---- /hbox ----\r
1849         \r
1850 \r
1851 \r
1852         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);\r
1853         gtk_widget_show (window);\r
1854         gtk_grab_add (window);\r
1855  \r
1856         bool dialogError = TRUE;\r
1857         while (dialogError)\r
1858         {\r
1859                 loop = 1;\r
1860                 while (loop)\r
1861                         gtk_main_iteration ();\r
1862  \r
1863                 dialogError = FALSE;\r
1864 \r
1865                 if(ret != IDCANCEL)\r
1866                 {\r
1867                         if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusX)), "Radius (X)", &rs->fRadiusX))\r
1868                                 dialogError = TRUE;\r
1869 \r
1870                         if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusY)), "Radius (Y)", &rs->fRadiusY))\r
1871                                 dialogError = TRUE;\r
1872 \r
1873                         if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleStart)), "Angle (Start)", &rs->fStartAngle))\r
1874                                 dialogError = TRUE;\r
1875 \r
1876                         if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleEnd)), "Angle (End)", &rs->fEndAngle))\r
1877                                 dialogError = TRUE;\r
1878 \r
1879                         if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightStart)), "Height (Start)", &rs->fStartHeight))\r
1880                                 dialogError = TRUE;\r
1881 \r
1882                         if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightEnd)), "Height (End)", &rs->fEndHeight))\r
1883                                 dialogError = TRUE;\r
1884 \r
1885                         if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(numPoints)), "Num Points", &rs->iNumPoints))\r
1886                                 dialogError = TRUE;\r
1887                 }\r
1888         }\r
1889 \r
1890         gtk_grab_remove (window);\r
1891         gtk_widget_destroy (window);\r
1892 \r
1893         return ret;\r
1894 }\r