2 BobToolz plugin for GtkRadiant
3 Copyright (C) 2001 Gordon Biggans
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 #include "dialogs-gtk.h"
21 #include "../funchandlers.h"
26 #include "gtkutil/pointer.h"
32 /*--------------------------------
34 ---------------------------------*/
37 GtkWidget *cbTexChange;
38 GtkWidget *editTexOld, *editTexNew;
40 GtkWidget *cbScaleHor, *cbScaleVert;
41 GtkWidget *editScaleHor, *editScaleVert;
43 GtkWidget *cbShiftHor, *cbShiftVert;
44 GtkWidget *editShiftHor, *editShiftVert;
46 GtkWidget *cbRotation;
47 GtkWidget *editRotation;
50 dlg_texReset_t dlgTexReset;
52 void Update_TextureReseter();
54 static void dialog_button_callback_texreset_update (GtkWidget *widget, gpointer data)
56 Update_TextureReseter();
59 void Update_TextureReseter()
63 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ));
64 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexNew), check);
65 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexOld), check);
67 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ));
68 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleHor), check);
70 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ));
71 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleVert), check);
73 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ));
74 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftHor), check);
76 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ));
77 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftVert), check);
79 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ));
80 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editRotation), check);
83 static void dialog_button_callback (GtkWidget *widget, gpointer data)
87 EMessageBoxReturn *ret;
89 parent = gtk_widget_get_toplevel (widget);
90 loop = (int*)g_object_get_data (G_OBJECT (parent), "loop");
91 ret = (EMessageBoxReturn*)g_object_get_data (G_OBJECT (parent), "ret");
94 *ret = (EMessageBoxReturn)gpointer_to_int(data);
97 static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data)
101 gtk_widget_hide (widget);
102 loop = (int*)g_object_get_data (G_OBJECT (widget), "loop");
108 static void dialog_button_callback_settex (GtkWidget *widget, gpointer data)
110 TwinWidget* tw = (TwinWidget*)data;
112 GtkEntry* entry = GTK_ENTRY( tw->one );
113 GtkCombo* combo = GTK_COMBO( tw->two );
115 const gchar* tex = gtk_entry_get_text(GTK_ENTRY( combo->entry ));
116 gtk_entry_set_text( entry, tex);
119 /*--------------------------------
120 Data validation Routines
121 ---------------------------------*/
123 bool ValidateTextFloat(const char* pData, char* error_title, float* value)
127 float testNum = (float)atof(pData);
129 if((testNum == 0.0f) && strcmp(pData, "0"))
131 DoMessageBox("Please Enter A Floating Point Number", error_title, eMB_OK);
141 DoMessageBox("Please Enter A Floating Point Number", error_title, eMB_OK);
145 bool ValidateTextFloatRange(const char* pData, float min, float max, char* error_title, float* value)
147 char error_buffer[256];
148 sprintf(error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max);
152 float testNum = (float)atof(pData);
154 if((testNum < min) || (testNum > max))
156 DoMessageBox(error_buffer, error_title, eMB_OK);
166 DoMessageBox(error_buffer, error_title, eMB_OK);
170 bool ValidateTextIntRange(const char* pData, int min, int max, char* error_title, int* value)
172 char error_buffer[256];
173 sprintf(error_buffer, "Please Enter An Integer Between %i and %i", min, max);
177 int testNum = atoi(pData);
179 if((testNum < min) || (testNum > max))
181 DoMessageBox(error_buffer, error_title, eMB_OK);
191 DoMessageBox(error_buffer, error_title, eMB_OK);
195 bool ValidateTextInt(const char* pData, char* error_title, int* value)
199 int testNum = atoi(pData);
201 if((testNum == 0) && strcmp(pData, "0"))
203 DoMessageBox("Please Enter An Integer", error_title, eMB_OK);
213 DoMessageBox("Please Enter An Integer", error_title, eMB_OK);
217 /*--------------------------------
219 ---------------------------------*/
223 Major clean up of variable names etc required, excluding Mars's ones,
224 which are nicely done :)
228 EMessageBoxReturn DoMessageBox (const char* lpText, const char* lpCaption, EMessageBoxType type)
230 GtkWidget *window, *w, *vbox, *hbox;
231 EMessageBoxReturn ret;
234 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
235 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
236 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
237 gtk_signal_connect (GTK_OBJECT (window), "destroy",
238 GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
239 gtk_window_set_title (GTK_WINDOW (window), lpCaption);
240 gtk_container_border_width (GTK_CONTAINER (window), 10);
241 g_object_set_data (G_OBJECT (window), "loop", &loop);
242 g_object_set_data (G_OBJECT (window), "ret", &ret);
243 gtk_widget_realize (window);
245 vbox = gtk_vbox_new (FALSE, 10);
246 gtk_container_add (GTK_CONTAINER (window), vbox);
247 gtk_widget_show (vbox);
249 w = gtk_label_new (lpText);
250 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
251 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
254 w = gtk_hseparator_new ();
255 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
258 hbox = gtk_hbox_new (FALSE, 10);
259 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
260 gtk_widget_show (hbox);
264 w = gtk_button_new_with_label ("Ok");
265 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
266 gtk_signal_connect (GTK_OBJECT (w), "clicked",
267 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
268 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
269 gtk_widget_grab_default (w);
273 else if (type == eMB_OKCANCEL)
275 w = gtk_button_new_with_label ("Ok");
276 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
277 gtk_signal_connect (GTK_OBJECT (w), "clicked",
278 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
279 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
280 gtk_widget_grab_default (w);
283 w = gtk_button_new_with_label ("Cancel");
284 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
285 gtk_signal_connect (GTK_OBJECT (w), "clicked",
286 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
290 else if (type == eMB_YESNOCANCEL)
292 w = gtk_button_new_with_label ("Yes");
293 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
294 gtk_signal_connect (GTK_OBJECT (w), "clicked",
295 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES));
296 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
297 gtk_widget_grab_default (w);
300 w = gtk_button_new_with_label ("No");
301 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
302 gtk_signal_connect (GTK_OBJECT (w), "clicked",
303 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDNO));
306 w = gtk_button_new_with_label ("Cancel");
307 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
308 gtk_signal_connect (GTK_OBJECT (w), "clicked",
309 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
313 else /* if (mode == MB_YESNO) */
315 w = gtk_button_new_with_label ("Yes");
316 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
317 gtk_signal_connect (GTK_OBJECT (w), "clicked",
318 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES));
319 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
320 gtk_widget_grab_default (w);
323 w = gtk_button_new_with_label ("No");
324 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
325 gtk_signal_connect (GTK_OBJECT (w), "clicked",
326 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDNO));
331 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
332 gtk_widget_show (window);
333 gtk_grab_add (window);
336 gtk_main_iteration ();
338 gtk_grab_remove (window);
339 gtk_widget_destroy (window);
344 EMessageBoxReturn DoIntersectBox (IntersectRS* rs)
346 GtkWidget *window, *w, *vbox, *hbox;
347 GtkWidget *radio1, *radio2;
348 GtkWidget *check1, *check2;
349 EMessageBoxReturn ret;
352 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
354 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
355 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
357 gtk_window_set_title (GTK_WINDOW (window), "Intersect");
358 gtk_container_border_width (GTK_CONTAINER (window), 10);
360 g_object_set_data (G_OBJECT (window), "loop", &loop);
361 g_object_set_data (G_OBJECT (window), "ret", &ret);
363 gtk_widget_realize (window);
367 vbox = gtk_vbox_new (FALSE, 10);
368 gtk_container_add (GTK_CONTAINER (window), vbox);
369 gtk_widget_show (vbox);
373 radio1 = gtk_radio_button_new_with_label(NULL, "Use Whole Map");
374 gtk_box_pack_start (GTK_BOX (vbox), radio1, FALSE, FALSE, 2);
375 gtk_widget_show (radio1);
377 radio2 = gtk_radio_button_new_with_label(((GtkRadioButton*)radio1)->group, "Use Selected Brushes");
378 gtk_box_pack_start (GTK_BOX (vbox), radio2, FALSE, FALSE, 2);
379 gtk_widget_show (radio2);
381 w = gtk_hseparator_new ();
382 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
385 check1 = gtk_check_button_new_with_label("Include Detail Brushes");
386 gtk_box_pack_start (GTK_BOX (vbox), check1, FALSE, FALSE, 0);
387 gtk_widget_show (check1);
389 check2 = gtk_check_button_new_with_label("Select Duplicate Brushes Only");
390 gtk_box_pack_start (GTK_BOX (vbox), check2, FALSE, FALSE, 0);
391 gtk_widget_show (check2);
393 hbox = gtk_hbox_new (FALSE, 10);
394 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
395 gtk_widget_show (hbox);
397 // ---- hbox ---- ok/cancel buttons
399 w = gtk_button_new_with_label ("Ok");
400 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
401 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
403 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
404 gtk_widget_grab_default (w);
407 w = gtk_button_new_with_label ("Cancel");
408 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
409 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
417 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
418 gtk_widget_show (window);
419 gtk_grab_add (window);
422 gtk_main_iteration ();
424 if(gtk_toggle_button_get_active((GtkToggleButton*)radio1))
425 rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP;
426 else if(gtk_toggle_button_get_active((GtkToggleButton*)radio2))
427 rs->nBrushOptions = BRUSH_OPT_SELECTED;
429 rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false;
430 rs->bDuplicateOnly = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false;
432 gtk_grab_remove (window);
433 gtk_widget_destroy (window);
438 EMessageBoxReturn DoPolygonBox (PolygonRS* rs)
440 GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2;
442 GtkWidget *check1, *check2, *check3;
443 GtkWidget *text1, *text2;
445 EMessageBoxReturn ret;
448 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
450 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
451 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
453 gtk_window_set_title (GTK_WINDOW (window), "Polygon Builder");
454 gtk_container_border_width (GTK_CONTAINER (window), 10);
456 g_object_set_data (G_OBJECT (window), "loop", &loop);
457 g_object_set_data (G_OBJECT (window), "ret", &ret);
459 gtk_widget_realize (window);
463 vbox = gtk_vbox_new (FALSE, 10);
464 gtk_container_add (GTK_CONTAINER (window), vbox);
465 gtk_widget_show (vbox);
469 hbox = gtk_hbox_new (FALSE, 10);
470 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
471 gtk_widget_show (hbox);
476 vbox2 = gtk_vbox_new (FALSE, 10);
477 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2);
478 gtk_widget_show (vbox2);
482 hbox2 = gtk_hbox_new (FALSE, 10);
483 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2);
484 gtk_widget_show (hbox2);
488 text1 = gtk_entry_new_with_max_length(256);
489 gtk_entry_set_text((GtkEntry*)text1, "3");
490 gtk_box_pack_start (GTK_BOX (hbox2), text1, FALSE, FALSE, 2);
491 gtk_widget_show (text1);
493 w = gtk_label_new ("Number Of Sides");
494 gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2);
495 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
500 hbox2 = gtk_hbox_new (FALSE, 10);
501 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2);
502 gtk_widget_show (hbox2);
506 text2 = gtk_entry_new_with_max_length(256);
507 gtk_entry_set_text((GtkEntry*)text2, "8");
508 gtk_box_pack_start (GTK_BOX (hbox2), text2, FALSE, FALSE, 2);
509 gtk_widget_show (text2);
511 w = gtk_label_new ("Border Width");
512 gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2);
513 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
522 vbox2 = gtk_vbox_new (FALSE, 10);
523 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2);
524 gtk_widget_show (vbox2);
528 check1 = gtk_check_button_new_with_label("Use Border");
529 gtk_box_pack_start (GTK_BOX (vbox2), check1, FALSE, FALSE, 0);
530 gtk_widget_show (check1);
533 check2 = gtk_check_button_new_with_label("Inverse Polygon");
534 gtk_box_pack_start (GTK_BOX (vbox2), check2, FALSE, FALSE, 0);
535 gtk_widget_show (check2);
538 check3 = gtk_check_button_new_with_label("Align Top Edge");
539 gtk_box_pack_start (GTK_BOX (vbox2), check3, FALSE, FALSE, 0);
540 gtk_widget_show (check3);
546 hbox = gtk_hbox_new (FALSE, 10);
547 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
548 gtk_widget_show (hbox);
552 w = gtk_button_new_with_label ("Ok");
553 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
554 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
556 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
557 gtk_widget_grab_default (w);
560 w = gtk_button_new_with_label ("Cancel");
561 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
562 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
570 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
571 gtk_widget_show (window);
572 gtk_grab_add (window);
574 bool dialogError = TRUE;
579 gtk_main_iteration ();
585 rs->bUseBorder = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false;
586 rs->bInverse = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false;
587 rs->bAlignTop = gtk_toggle_button_get_active((GtkToggleButton*)check3) ? true : false;
589 if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text1), 3, 32, "Number Of Sides", &rs->nSides))
594 if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text2), 8, 256, "Border Width", &rs->nBorderWidth))
600 gtk_grab_remove (window);
601 gtk_widget_destroy (window);
607 // for stair builder stuck as close as i could to the MFC version
608 // obviously feel free to change it at will :)
609 EMessageBoxReturn DoBuildStairsBox(BuildStairsRS* rs)
611 // i made widgets for just about everything ... i think that's what i need to do dunno tho
612 GtkWidget *window, *w, *vbox, *hbox;
613 GtkWidget *textStairHeight, *textRiserTex, *textMainTex;
614 GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value
615 GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle;
616 GtkWidget *checkUseDetail;
617 GSList *radioDirection, *radioStyle;
618 EMessageBoxReturn ret;
621 char *text = "Please set a value in the boxes below and press 'OK' to build the stairs";
623 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
625 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
626 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
628 gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" );
630 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
632 g_object_set_data (G_OBJECT (window), "loop", &loop);
633 g_object_set_data (G_OBJECT (window), "ret", &ret);
635 gtk_widget_realize (window);
638 vbox = gtk_vbox_new( FALSE, 10 );
639 gtk_container_add( GTK_CONTAINER( window ), vbox );
640 gtk_widget_show( vbox );
642 hbox = gtk_hbox_new( FALSE, 10 );
643 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
644 gtk_widget_show( hbox );
646 // dunno if you want this text or not ...
647 w = gtk_label_new( text );
648 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ...
649 gtk_widget_show( w );
651 w = gtk_hseparator_new();
652 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
653 gtk_widget_show( w );
655 // ------------------------- // indenting == good way of keeping track of lines :)
658 hbox = gtk_hbox_new( FALSE, 10 );
659 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
660 gtk_widget_show( hbox );
662 textStairHeight = gtk_entry_new_with_max_length( 256 );
663 gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 );
664 gtk_widget_show( textStairHeight );
666 w = gtk_label_new( "Stair Height" );
667 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
668 gtk_widget_show( w );
670 // ------------------------- //
672 hbox = gtk_hbox_new( FALSE, 10 );
673 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
674 gtk_widget_show( hbox );
676 w = gtk_label_new( "Direction:" );
677 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
678 gtk_widget_show( w );
680 // -------------------------- //
682 hbox = gtk_hbox_new( FALSE, 10 );
683 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
684 gtk_widget_show( hbox );
686 // radio buttons confuse me ...
687 // but this _looks_ right
689 // djbob: actually it looks very nice :), slightly better than the way i did it
690 // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh
692 radioNorth = gtk_radio_button_new_with_label( NULL, "North" );
693 gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 );
694 gtk_widget_show( radioNorth );
696 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) );
698 radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" );
699 gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 );
700 gtk_widget_show( radioSouth );
702 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) );
704 radioEast = gtk_radio_button_new_with_label( radioDirection, "East" );
705 gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 );
706 gtk_widget_show( radioEast );
708 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) );
710 radioWest = gtk_radio_button_new_with_label( radioDirection, "West" );
711 gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 );
712 gtk_widget_show( radioWest );
714 // --------------------------- //
716 hbox = gtk_hbox_new( FALSE, 10 );
717 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
718 gtk_widget_show( hbox );
720 w = gtk_label_new( "Style:" );
721 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
722 gtk_widget_show( w );
724 // --------------------------- //
726 hbox = gtk_hbox_new( FALSE, 10 );
727 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
728 gtk_widget_show( hbox );
730 radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" );
731 gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 );
732 gtk_widget_show( radioOldStyle );
734 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) );
736 radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" );
737 gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 );
738 gtk_widget_show( radioBobStyle );
740 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) );
742 radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" );
743 gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 );
744 gtk_widget_show( radioCornerStyle );
746 // err, the q3r has an if or something so you need bob style checked before this
747 // is "ungreyed out" but you'll need to do that, as i suck :)
749 // djbob: er.... yeah um, im not at all sure how i'm gonna sort this
750 // djbob: think we need some button callback functions or smuffin
751 // FIXME: actually get around to doing what i suggested!!!!
753 checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" );
754 gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 );
755 gtk_widget_show( checkUseDetail );
757 // --------------------------- //
759 hbox = gtk_hbox_new( FALSE, 10 );
760 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
761 gtk_widget_show( hbox );
763 textMainTex = gtk_entry_new_with_max_length( 512 );
764 gtk_entry_set_text(GTK_ENTRY(textMainTex), rs->mainTexture);
765 gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 );
766 gtk_widget_show( textMainTex );
768 w = gtk_label_new( "Main Texture" );
769 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
770 gtk_widget_show( w );
772 // -------------------------- //
774 hbox = gtk_hbox_new( FALSE, 10 );
775 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
776 gtk_widget_show( hbox );
778 textRiserTex = gtk_entry_new_with_max_length( 512 );
779 gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 );
780 gtk_widget_show( textRiserTex );
782 w = gtk_label_new( "Riser Texture" );
783 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
784 gtk_widget_show( w );
786 // -------------------------- //
787 w = gtk_hseparator_new();
788 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
789 gtk_widget_show( w );
791 hbox = gtk_hbox_new( FALSE, 10 );
792 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
793 gtk_widget_show( hbox );
795 w = gtk_button_new_with_label( "OK" );
796 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
797 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
798 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
799 gtk_widget_grab_default( w );
800 gtk_widget_show( w );
802 w = gtk_button_new_with_label( "Cancel" );
803 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
804 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
805 gtk_widget_show( w );
809 // +djbob: need our "little" modal loop mars :P
810 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
811 gtk_widget_show (window);
812 gtk_grab_add (window);
814 bool dialogError = TRUE;
819 gtk_main_iteration ();
825 rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)checkUseDetail) ? true : false;
827 strcpy(rs->riserTexture, gtk_entry_get_text((GtkEntry*)textRiserTex));
828 strcpy(rs->mainTexture, gtk_entry_get_text((GtkEntry*)textMainTex));
830 if(gtk_toggle_button_get_active((GtkToggleButton*)radioNorth))
831 rs->direction = MOVE_NORTH;
832 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioSouth))
833 rs->direction = MOVE_SOUTH;
834 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioEast))
835 rs->direction = MOVE_EAST;
836 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioWest))
837 rs->direction = MOVE_WEST;
839 if(!ValidateTextInt(gtk_entry_get_text((GtkEntry*)textStairHeight), "Stair Height", &rs->stairHeight))
842 if(gtk_toggle_button_get_active((GtkToggleButton*)radioOldStyle))
843 rs->style = STYLE_ORIGINAL;
844 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioBobStyle))
845 rs->style = STYLE_BOB;
846 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioCornerStyle))
847 rs->style = STYLE_CORNER;
851 gtk_grab_remove (window);
852 gtk_widget_destroy (window);
857 // there we go, all done ... on my end at least, not bad for a night's work
860 EMessageBoxReturn DoDoorsBox(DoorRS* rs)
862 GtkWidget *window, *hbox, *vbox, *w;
863 GtkWidget *textFrontBackTex, *textTrimTex;
864 GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV;
865 GtkWidget *comboMain, *comboTrim;
866 GtkWidget *buttonSetMain, *buttonSetTrim;
867 GtkWidget *radioNS, *radioEW;
868 GSList *radioOrientation;
870 EMessageBoxReturn ret;
873 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
875 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
876 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
878 gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" );
880 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
882 g_object_set_data( G_OBJECT( window ), "loop", &loop );
883 g_object_set_data( G_OBJECT( window ), "ret", &ret );
885 gtk_widget_realize (window);
888 GList *listMainTextures = NULL;
889 GList *listTrimTextures = NULL;
890 LoadGList(GetFilename(buffer, "plugins/bt/door-tex.txt"), &listMainTextures);
891 LoadGList(GetFilename(buffer, "plugins/bt/door-tex-trim.txt"), &listTrimTextures);
893 vbox = gtk_vbox_new( FALSE, 10 );
894 gtk_container_add( GTK_CONTAINER( window ), vbox );
895 gtk_widget_show( vbox );
897 // -------------------------- //
899 hbox = gtk_hbox_new( FALSE, 10 );
900 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
901 gtk_widget_show( hbox );
903 textFrontBackTex = gtk_entry_new_with_max_length( 512 );
904 gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture);
905 gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 );
906 gtk_widget_show( textFrontBackTex );
908 w = gtk_label_new( "Door Front/Back Texture" );
909 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
910 gtk_widget_show( w );
912 // ------------------------ //
914 hbox = gtk_hbox_new( FALSE, 10 );
915 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
916 gtk_widget_show( hbox );
918 textTrimTex = gtk_entry_new_with_max_length( 512 );
919 gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 );
920 gtk_widget_show( textTrimTex );
922 w = gtk_label_new( "Door Trim Texture" );
923 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
924 gtk_widget_show( w );
926 // ----------------------- //
928 hbox = gtk_hbox_new( FALSE, 10 );
929 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
930 gtk_widget_show( hbox );
932 // sp: horizontally ????
933 // djbob: yes mars, u can spell :]
934 checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" );
935 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE);
936 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 );
937 gtk_widget_show( checkScaleMainH );
939 checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" );
940 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE);
941 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 );
942 gtk_widget_show( checkScaleTrimH );
944 // ---------------------- //
946 hbox = gtk_hbox_new( FALSE, 10 );
947 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
948 gtk_widget_show( hbox );
950 checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" );
951 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE);
952 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 );
953 gtk_widget_show( checkScaleMainV );
955 checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" );
956 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 );
957 gtk_widget_show( checkScaleTrimV );
959 // --------------------- //
961 hbox = gtk_hbox_new( FALSE, 10 );
962 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
963 gtk_widget_show( hbox );
965 // djbob: lists added
967 comboMain = gtk_combo_new();
968 gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 );
969 gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures );
970 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
971 gtk_widget_show( comboMain );
973 tw1.one = textFrontBackTex;
976 buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" );
977 gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 );
978 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 );
979 gtk_widget_show( buttonSetMain );
981 // ------------------- //
983 hbox = gtk_hbox_new( FALSE, 10 );
984 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
985 gtk_widget_show( hbox );
987 comboTrim = gtk_combo_new();
988 gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 );
989 gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures );
990 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
991 gtk_widget_show( comboTrim );
993 tw2.one = textTrimTex;
996 buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" );
997 gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 );
998 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 );
999 gtk_widget_show( buttonSetTrim );
1001 // ------------------ //
1003 hbox = gtk_hbox_new( FALSE, 10 );
1004 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1005 gtk_widget_show( hbox );
1007 w = gtk_label_new( "Orientation" );
1008 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1009 gtk_widget_show( w );
1011 // argh more radio buttons!
1012 radioNS = gtk_radio_button_new_with_label( NULL, "North - South" );
1013 gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 );
1014 gtk_widget_show( radioNS );
1016 radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) );
1018 radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" );
1019 gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 );
1020 gtk_widget_show( radioEW );
1022 // ----------------- //
1024 w = gtk_hseparator_new();
1025 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1026 gtk_widget_show( w );
1028 // ----------------- //
1030 hbox = gtk_hbox_new( FALSE, 10 );
1031 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1032 gtk_widget_show( hbox );
1034 w = gtk_button_new_with_label( "OK" );
1035 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
1036 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1037 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1038 gtk_widget_grab_default( w );
1039 gtk_widget_show( w );
1041 w = gtk_button_new_with_label( "Cancel" );
1042 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1043 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1044 gtk_widget_show( w );
1047 // ----------------- //
1050 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1051 gtk_widget_show (window);
1052 gtk_grab_add (window);
1055 gtk_main_iteration ();
1057 strcpy(rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ));
1058 strcpy(rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ));
1060 rs->bScaleMainH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainH)) ? true : false;
1061 rs->bScaleMainV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainV)) ? true : false;
1062 rs->bScaleTrimH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimH)) ? true : false;
1063 rs->bScaleTrimV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimV)) ? true : false;
1065 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioNS)))
1066 rs->nOrientation = DIRECTION_NS;
1067 else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioEW)))
1068 rs->nOrientation = DIRECTION_EW;
1070 gtk_grab_remove (window);
1071 gtk_widget_destroy (window);
1077 EMessageBoxReturn DoPathPlotterBox(PathPlotterRS* rs)
1079 GtkWidget *window, *w, *vbox, *hbox;
1081 GtkWidget *text1, *text2, *text3;
1082 GtkWidget *check1, *check2;
1084 EMessageBoxReturn ret;
1087 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1089 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
1090 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
1092 gtk_window_set_title (GTK_WINDOW (window), "Texture Reset");
1093 gtk_container_border_width (GTK_CONTAINER (window), 10);
1095 g_object_set_data (G_OBJECT (window), "loop", &loop);
1096 g_object_set_data (G_OBJECT (window), "ret", &ret);
1098 gtk_widget_realize (window);
1102 vbox = gtk_vbox_new (FALSE, 10);
1103 gtk_container_add (GTK_CONTAINER (window), vbox);
1104 gtk_widget_show (vbox);
1108 hbox = gtk_hbox_new (FALSE, 10);
1109 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1110 gtk_widget_show (hbox);
1114 text1 = gtk_entry_new_with_max_length(256);
1115 gtk_entry_set_text((GtkEntry*)text1, "25");
1116 gtk_box_pack_start (GTK_BOX (hbox), text1, FALSE, FALSE, 2);
1117 gtk_widget_show (text1);
1119 w = gtk_label_new ("Number Of Points");
1120 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
1121 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1122 gtk_widget_show (w);
1126 hbox = gtk_hbox_new (FALSE, 10);
1127 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1128 gtk_widget_show (hbox);
1132 text2 = gtk_entry_new_with_max_length(256);
1133 gtk_entry_set_text((GtkEntry*)text2, "3");
1134 gtk_box_pack_start (GTK_BOX (hbox), text2, FALSE, FALSE, 2);
1135 gtk_widget_show (text2);
1137 w = gtk_label_new ("Multipler");
1138 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
1139 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1140 gtk_widget_show (w);
1144 w = gtk_label_new ("Path Distance = dist(start -> apex) * multiplier");
1145 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
1146 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1147 gtk_widget_show (w);
1149 hbox = gtk_hbox_new (FALSE, 10);
1150 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1151 gtk_widget_show (hbox);
1155 text3 = gtk_entry_new_with_max_length(256);
1156 gtk_entry_set_text((GtkEntry*)text3, "-800");
1157 gtk_box_pack_start (GTK_BOX (hbox), text3, FALSE, FALSE, 2);
1158 gtk_widget_show (text3);
1160 w = gtk_label_new ("Gravity");
1161 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
1162 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1163 gtk_widget_show (w);
1167 w = gtk_hseparator_new();
1168 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1169 gtk_widget_show( w );
1171 check1 = gtk_check_button_new_with_label( "No Dynamic Update" );
1172 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
1173 gtk_widget_show( check1 );
1175 check2 = gtk_check_button_new_with_label( "Show Bounding Lines" );
1176 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
1177 gtk_widget_show( check2 );
1182 // ----------------- //
1184 w = gtk_hseparator_new();
1185 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1186 gtk_widget_show( w );
1188 // ----------------- //
1190 hbox = gtk_hbox_new( FALSE, 10 );
1191 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1192 gtk_widget_show( hbox );
1194 w = gtk_button_new_with_label( "Enable" );
1195 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
1196 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1197 gtk_widget_show( w );
1199 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1200 gtk_widget_grab_default( w );
1202 w = gtk_button_new_with_label( "Disable" );
1203 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
1204 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
1205 gtk_widget_show( w );
1207 w = gtk_button_new_with_label( "Cancel" );
1208 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1209 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1210 gtk_widget_show( w );
1214 // ----------------- //
1216 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1217 gtk_widget_show (window);
1218 gtk_grab_add (window);
1220 bool dialogError = TRUE;
1225 gtk_main_iteration ();
1227 dialogError = FALSE;
1231 if(!ValidateTextIntRange(gtk_entry_get_text(GTK_ENTRY(text1)), 1, 200, "Number Of Points", &rs->nPoints))
1234 if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text2)), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier))
1237 if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text3)), -10000.0f, -1.0f, "Gravity", &rs->fGravity))
1240 rs->bNoUpdate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check1)) ? true : false;
1241 rs->bShowExtra = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check2)) ? true : false;
1245 gtk_grab_remove (window);
1246 gtk_widget_destroy (window);
1251 EMessageBoxReturn DoCTFColourChangeBox ()
1253 GtkWidget *window, *w, *vbox, *hbox;
1254 EMessageBoxReturn ret;
1257 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1259 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
1260 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
1262 gtk_window_set_title (GTK_WINDOW (window), "CTF Colour Changer");
1263 gtk_container_border_width (GTK_CONTAINER (window), 10);
1265 g_object_set_data (G_OBJECT (window), "loop", &loop);
1266 g_object_set_data (G_OBJECT (window), "ret", &ret);
1268 gtk_widget_realize (window);
1272 vbox = gtk_vbox_new (FALSE, 10);
1273 gtk_container_add (GTK_CONTAINER (window), vbox);
1274 gtk_widget_show (vbox);
1278 hbox = gtk_hbox_new( FALSE, 10 );
1279 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
1280 gtk_widget_show( hbox );
1282 // ---- hbox ---- ok/cancel buttons
1284 w = gtk_button_new_with_label ("Red->Blue");
1285 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1286 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
1288 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
1289 gtk_widget_grab_default (w);
1290 gtk_widget_show (w);
1292 w = gtk_button_new_with_label ("Blue->Red");
1293 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1294 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES));
1295 gtk_widget_show (w);
1297 w = gtk_button_new_with_label ("Cancel");
1298 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1299 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
1300 gtk_widget_show (w);
1307 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1308 gtk_widget_show (window);
1309 gtk_grab_add (window);
1312 gtk_main_iteration ();
1314 gtk_grab_remove (window);
1315 gtk_widget_destroy (window);
1320 EMessageBoxReturn DoResetTextureBox (ResetTextureRS* rs)
1324 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1326 EMessageBoxReturn ret;
1329 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1331 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
1332 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
1334 gtk_window_set_title (GTK_WINDOW (window), "Texture Reset");
1335 gtk_container_border_width (GTK_CONTAINER (window), 10);
1337 g_object_set_data (G_OBJECT (window), "loop", &loop);
1338 g_object_set_data (G_OBJECT (window), "ret", &ret);
1340 gtk_widget_realize (window);
1342 vbox = gtk_vbox_new (FALSE, 10);
1343 gtk_container_add (GTK_CONTAINER (window), vbox);
1344 gtk_widget_show (vbox);
1348 hbox = gtk_hbox_new (FALSE, 10);
1349 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1350 gtk_widget_show (hbox);
1354 texSelected = "Currently Selected Texture: ";
1355 texSelected += GetCurrentTexture();
1357 w = gtk_label_new (texSelected);
1358 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
1359 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1360 gtk_widget_show (w);
1364 frame = gtk_frame_new ("Reset Texture Names");
1365 gtk_widget_show (frame);
1366 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1368 table = gtk_table_new (2, 3, TRUE);
1369 gtk_widget_show (table);
1370 gtk_container_add (GTK_CONTAINER (frame), table);
1371 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1372 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1373 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1377 dlgTexReset.cbTexChange = gtk_check_button_new_with_label("Enabled");
1378 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbTexChange), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1379 gtk_widget_show (dlgTexReset.cbTexChange);
1380 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbTexChange, 0, 1, 0, 1,
1381 (GtkAttachOptions) (GTK_FILL),
1382 (GtkAttachOptions) (0), 0, 0);
1384 w = gtk_label_new ("Old Name: ");
1385 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
1386 (GtkAttachOptions) (GTK_FILL),
1387 (GtkAttachOptions) (0), 0, 0);
1388 gtk_widget_show (w);
1390 dlgTexReset.editTexOld = gtk_entry_new_with_max_length(256);
1391 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexOld), rs->textureName);
1392 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexOld, 2, 3, 0, 1,
1393 (GtkAttachOptions) (GTK_FILL),
1394 (GtkAttachOptions) (0), 0, 0);
1395 gtk_widget_show (dlgTexReset.editTexOld);
1397 w = gtk_label_new ("New Name: ");
1398 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,
1399 (GtkAttachOptions) (GTK_FILL),
1400 (GtkAttachOptions) (0), 0, 0);
1401 gtk_widget_show (w);
1403 dlgTexReset.editTexNew = gtk_entry_new_with_max_length(256);
1404 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexNew), rs->textureName);
1405 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexNew, 2, 3, 1, 2,
1406 (GtkAttachOptions) (GTK_FILL),
1407 (GtkAttachOptions) (0), 0, 0);
1408 gtk_widget_show (dlgTexReset.editTexNew);
1412 frame = gtk_frame_new ("Reset Scales");
1413 gtk_widget_show (frame);
1414 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1416 table = gtk_table_new (2, 3, TRUE);
1417 gtk_widget_show (table);
1418 gtk_container_add (GTK_CONTAINER (frame), table);
1419 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1420 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1421 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1425 dlgTexReset.cbScaleHor = gtk_check_button_new_with_label("Enabled");
1426 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1427 gtk_widget_show (dlgTexReset.cbScaleHor);
1428 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleHor, 0, 1, 0, 1,
1429 (GtkAttachOptions) (GTK_FILL),
1430 (GtkAttachOptions) (0), 0, 0);
1432 w = gtk_label_new ("New Horizontal Scale: ");
1433 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
1434 (GtkAttachOptions) (GTK_FILL),
1435 (GtkAttachOptions) (0), 0, 0);
1436 gtk_widget_show (w);
1438 dlgTexReset.editScaleHor = gtk_entry_new_with_max_length(256);
1439 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleHor), "0.5");
1440 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleHor, 2, 3, 0, 1,
1441 (GtkAttachOptions) (GTK_FILL),
1442 (GtkAttachOptions) (0), 0, 0);
1443 gtk_widget_show (dlgTexReset.editScaleHor);
1446 dlgTexReset.cbScaleVert = gtk_check_button_new_with_label("Enabled");
1447 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1448 gtk_widget_show (dlgTexReset.cbScaleVert);
1449 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleVert, 0, 1, 1, 2,
1450 (GtkAttachOptions) (GTK_FILL),
1451 (GtkAttachOptions) (0), 0, 0);
1453 w = gtk_label_new ("New Vertical Scale: ");
1454 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,
1455 (GtkAttachOptions) (GTK_FILL),
1456 (GtkAttachOptions) (0), 0, 0);
1457 gtk_widget_show (w);
1459 dlgTexReset.editScaleVert = gtk_entry_new_with_max_length(256);
1460 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleVert), "0.5");
1461 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleVert, 2, 3, 1, 2,
1462 (GtkAttachOptions) (GTK_FILL),
1463 (GtkAttachOptions) (0), 0, 0);
1464 gtk_widget_show (dlgTexReset.editScaleVert);
1468 frame = gtk_frame_new ("Reset Shift");
1469 gtk_widget_show (frame);
1470 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1472 table = gtk_table_new (2, 3, TRUE);
1473 gtk_widget_show (table);
1474 gtk_container_add (GTK_CONTAINER (frame), table);
1475 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1476 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1477 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1481 dlgTexReset.cbShiftHor = gtk_check_button_new_with_label("Enabled");
1482 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1483 gtk_widget_show (dlgTexReset.cbShiftHor);
1484 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftHor, 0, 1, 0, 1,
1485 (GtkAttachOptions) (GTK_FILL),
1486 (GtkAttachOptions) (0), 0, 0);
1488 w = gtk_label_new ("New Horizontal Shift: ");
1489 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
1490 (GtkAttachOptions) (GTK_FILL),
1491 (GtkAttachOptions) (0), 0, 0);
1492 gtk_widget_show (w);
1494 dlgTexReset.editShiftHor = gtk_entry_new_with_max_length(256);
1495 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftHor), "0");
1496 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftHor, 2, 3, 0, 1,
1497 (GtkAttachOptions) (GTK_FILL),
1498 (GtkAttachOptions) (0), 0, 0);
1499 gtk_widget_show (dlgTexReset.editShiftHor);
1502 dlgTexReset.cbShiftVert = gtk_check_button_new_with_label("Enabled");
1503 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1504 gtk_widget_show (dlgTexReset.cbShiftVert);
1505 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftVert, 0, 1, 1, 2,
1506 (GtkAttachOptions) (GTK_FILL),
1507 (GtkAttachOptions) (0), 0, 0);
1509 w = gtk_label_new ("New Vertical Shift: ");
1510 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,
1511 (GtkAttachOptions) (GTK_FILL),
1512 (GtkAttachOptions) (0), 0, 0);
1513 gtk_widget_show (w);
1515 dlgTexReset.editShiftVert = gtk_entry_new_with_max_length(256);
1516 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftVert), "0");
1517 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftVert, 2, 3, 1, 2,
1518 (GtkAttachOptions) (GTK_FILL),
1519 (GtkAttachOptions) (0), 0, 0);
1520 gtk_widget_show (dlgTexReset.editShiftVert);
1524 frame = gtk_frame_new ("Reset Rotation");
1525 gtk_widget_show (frame);
1526 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1528 table = gtk_table_new (1, 3, TRUE);
1529 gtk_widget_show (table);
1530 gtk_container_add (GTK_CONTAINER (frame), table);
1531 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1532 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1533 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1537 dlgTexReset.cbRotation = gtk_check_button_new_with_label("Enabled");
1538 gtk_widget_show (dlgTexReset.cbRotation);
1539 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbRotation, 0, 1, 0, 1,
1540 (GtkAttachOptions) (GTK_FILL),
1541 (GtkAttachOptions) (0), 0, 0);
1543 w = gtk_label_new ("New Rotation Value: ");
1544 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
1545 (GtkAttachOptions) (GTK_FILL),
1546 (GtkAttachOptions) (0), 0, 0);
1547 gtk_widget_show (w);
1549 dlgTexReset.editRotation = gtk_entry_new_with_max_length(256);
1550 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editRotation), "0");
1551 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editRotation, 2, 3, 0, 1,
1552 (GtkAttachOptions) (GTK_FILL),
1553 (GtkAttachOptions) (0), 0, 0);
1554 gtk_widget_show (dlgTexReset.editRotation);
1558 hbox = gtk_hbox_new (FALSE, 10);
1559 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1560 gtk_widget_show (hbox);
1564 w = gtk_button_new_with_label ("Use Selected Brushes");
1565 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1566 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
1568 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
1569 gtk_widget_grab_default (w);
1570 gtk_widget_show (w);
1572 w = gtk_button_new_with_label ("Use All Brushes");
1573 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1574 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES));
1575 gtk_widget_show (w);
1577 w = gtk_button_new_with_label ("Cancel");
1578 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1579 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
1580 gtk_widget_show (w);
1587 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1588 gtk_widget_show (window);
1589 gtk_grab_add (window);
1591 Update_TextureReseter();
1593 bool dialogError = TRUE;
1598 gtk_main_iteration ();
1600 dialogError = FALSE;
1602 if(ret != eIDCANCEL)
1604 rs->bResetRotation = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ));
1605 if(rs->bResetRotation)
1606 if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editRotation)), "Rotation", &rs->rotation))
1609 rs->bResetScale[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ));
1610 if(rs->bResetScale[0])
1611 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleHor)), "Horizontal Scale", &rs->fScale[0]))
1614 rs->bResetScale[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ));
1615 if(rs->bResetScale[1])
1616 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleVert)), "Vertical Scale", &rs->fScale[1]))
1619 rs->bResetShift[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ));
1620 if(rs->bResetShift[0])
1621 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftHor)), "Horizontal Shift", &rs->fShift[0]))
1624 rs->bResetShift[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ));
1625 if(rs->bResetShift[1])
1626 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftVert)), "Vertical Shift", &rs->fShift[1]))
1629 rs->bResetTextureName = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ));
1630 if(rs->bResetTextureName)
1632 strcpy(rs->textureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexOld )));
1633 strcpy(rs->newTextureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexNew )));
1638 gtk_grab_remove (window);
1639 gtk_widget_destroy (window);
1644 EMessageBoxReturn DoTrainThingBox (TrainThingRS* rs)
1648 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1650 GtkWidget *radiusX, *radiusY;
1651 GtkWidget *angleStart, *angleEnd;
1652 GtkWidget *heightStart, *heightEnd;
1653 GtkWidget *numPoints;
1655 EMessageBoxReturn ret;
1658 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1660 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
1661 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
1663 gtk_window_set_title (GTK_WINDOW (window), "Train Thing");
1664 gtk_container_border_width (GTK_CONTAINER (window), 10);
1666 gtk_object_set_data (GTK_OBJECT (window), "loop", &loop);
1667 gtk_object_set_data (GTK_OBJECT (window), "ret", &ret);
1669 gtk_widget_realize (window);
1671 vbox = gtk_vbox_new (FALSE, 10);
1672 gtk_container_add (GTK_CONTAINER (window), vbox);
1673 gtk_widget_show (vbox);
1677 hbox = gtk_hbox_new (FALSE, 10);
1678 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1679 gtk_widget_show (hbox);
1683 frame = gtk_frame_new ("Radii");
1684 gtk_widget_show (frame);
1685 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1687 table = gtk_table_new (2, 3, TRUE);
1688 gtk_widget_show (table);
1689 gtk_container_add (GTK_CONTAINER (frame), table);
1690 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1691 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1692 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1696 w = gtk_label_new ("X: ");
1697 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
1698 (GtkAttachOptions) (GTK_FILL),
1699 (GtkAttachOptions) (0), 0, 0);
1700 gtk_widget_show (w);
1702 radiusX = gtk_entry_new_with_max_length(256);
1703 gtk_entry_set_text(GTK_ENTRY(radiusX), "100");
1704 gtk_table_attach (GTK_TABLE (table), radiusX, 1, 2, 0, 1,
1705 (GtkAttachOptions) (GTK_FILL),
1706 (GtkAttachOptions) (0), 0, 0);
1707 gtk_widget_show (radiusX);
1711 w = gtk_label_new ("Y: ");
1712 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,
1713 (GtkAttachOptions) (GTK_FILL),
1714 (GtkAttachOptions) (0), 0, 0);
1715 gtk_widget_show (w);
1717 radiusY = gtk_entry_new_with_max_length(256);
1718 gtk_entry_set_text(GTK_ENTRY(radiusY), "100");
1719 gtk_table_attach (GTK_TABLE (table), radiusY, 1, 2, 1, 2,
1720 (GtkAttachOptions) (GTK_FILL),
1721 (GtkAttachOptions) (0), 0, 0);
1722 gtk_widget_show (radiusY);
1726 frame = gtk_frame_new ("Angles");
1727 gtk_widget_show (frame);
1728 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1730 table = gtk_table_new (2, 3, TRUE);
1731 gtk_widget_show (table);
1732 gtk_container_add (GTK_CONTAINER (frame), table);
1733 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1734 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1735 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1739 w = gtk_label_new ("Start: ");
1740 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
1741 (GtkAttachOptions) (GTK_FILL),
1742 (GtkAttachOptions) (0), 0, 0);
1743 gtk_widget_show (w);
1745 angleStart = gtk_entry_new_with_max_length(256);
1746 gtk_entry_set_text(GTK_ENTRY(angleStart), "0");
1747 gtk_table_attach (GTK_TABLE (table), angleStart, 1, 2, 0, 1,
1748 (GtkAttachOptions) (GTK_FILL),
1749 (GtkAttachOptions) (0), 0, 0);
1750 gtk_widget_show (angleStart);
1754 w = gtk_label_new ("End: ");
1755 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,
1756 (GtkAttachOptions) (GTK_FILL),
1757 (GtkAttachOptions) (0), 0, 0);
1758 gtk_widget_show (w);
1760 angleEnd = gtk_entry_new_with_max_length(256);
1761 gtk_entry_set_text(GTK_ENTRY(angleEnd), "90");
1762 gtk_table_attach (GTK_TABLE (table), angleEnd, 1, 2, 1, 2,
1763 (GtkAttachOptions) (GTK_FILL),
1764 (GtkAttachOptions) (0), 0, 0);
1765 gtk_widget_show (angleEnd);
1768 frame = gtk_frame_new ("Height");
1769 gtk_widget_show (frame);
1770 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1772 table = gtk_table_new (2, 3, TRUE);
1773 gtk_widget_show (table);
1774 gtk_container_add (GTK_CONTAINER (frame), table);
1775 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1776 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1777 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1781 w = gtk_label_new ("Start: ");
1782 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
1783 (GtkAttachOptions) (GTK_FILL),
1784 (GtkAttachOptions) (0), 0, 0);
1785 gtk_widget_show (w);
1787 heightStart = gtk_entry_new_with_max_length(256);
1788 gtk_entry_set_text(GTK_ENTRY(heightStart), "0");
1789 gtk_table_attach (GTK_TABLE (table), heightStart, 1, 2, 0, 1,
1790 (GtkAttachOptions) (GTK_FILL),
1791 (GtkAttachOptions) (0), 0, 0);
1792 gtk_widget_show (heightStart);
1796 w = gtk_label_new ("End: ");
1797 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,
1798 (GtkAttachOptions) (GTK_FILL),
1799 (GtkAttachOptions) (0), 0, 0);
1800 gtk_widget_show (w);
1802 heightEnd = gtk_entry_new_with_max_length(256);
1803 gtk_entry_set_text(GTK_ENTRY(heightEnd), "0");
1804 gtk_table_attach (GTK_TABLE (table), heightEnd, 1, 2, 1, 2,
1805 (GtkAttachOptions) (GTK_FILL),
1806 (GtkAttachOptions) (0), 0, 0);
1807 gtk_widget_show (heightEnd);
1811 frame = gtk_frame_new ("Points");
1812 gtk_widget_show (frame);
1813 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1815 table = gtk_table_new (2, 3, TRUE);
1816 gtk_widget_show (table);
1817 gtk_container_add (GTK_CONTAINER (frame), table);
1818 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1819 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1820 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1824 w = gtk_label_new ("Number: ");
1825 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
1826 (GtkAttachOptions) (GTK_FILL),
1827 (GtkAttachOptions) (0), 0, 0);
1828 gtk_widget_show (w);
1830 numPoints = gtk_entry_new_with_max_length(256);
1831 gtk_entry_set_text(GTK_ENTRY(numPoints), "0");
1832 gtk_table_attach (GTK_TABLE (table), numPoints, 1, 2, 0, 1,
1833 (GtkAttachOptions) (GTK_FILL),
1834 (GtkAttachOptions) (0), 0, 0);
1835 gtk_widget_show (numPoints);
1838 hbox = gtk_hbox_new (FALSE, 10);
1839 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1840 gtk_widget_show (hbox);
1844 w = gtk_button_new_with_label ("Ok");
1845 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1846 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
1848 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
1849 gtk_widget_grab_default (w);
1850 gtk_widget_show (w);
1852 w = gtk_button_new_with_label ("Cancel");
1853 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1854 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
1855 gtk_widget_show (w);
1862 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1863 gtk_widget_show (window);
1864 gtk_grab_add (window);
1866 bool dialogError = TRUE;
1871 gtk_main_iteration ();
1873 dialogError = FALSE;
1875 if(ret != eIDCANCEL)
1877 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusX)), "Radius (X)", &rs->fRadiusX))
1880 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusY)), "Radius (Y)", &rs->fRadiusY))
1883 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleStart)), "Angle (Start)", &rs->fStartAngle))
1886 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleEnd)), "Angle (End)", &rs->fEndAngle))
1889 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightStart)), "Height (Start)", &rs->fStartHeight))
1892 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightEnd)), "Height (End)", &rs->fEndHeight))
1895 if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(numPoints)), "Num Points", &rs->iNumPoints))
1900 gtk_grab_remove (window);
1901 gtk_widget_destroy (window);