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"
31 /*--------------------------------
33 ---------------------------------*/
36 GtkWidget *cbTexChange;
37 GtkWidget *editTexOld, *editTexNew;
39 GtkWidget *cbScaleHor, *cbScaleVert;
40 GtkWidget *editScaleHor, *editScaleVert;
42 GtkWidget *cbShiftHor, *cbShiftVert;
43 GtkWidget *editShiftHor, *editShiftVert;
45 GtkWidget *cbRotation;
46 GtkWidget *editRotation;
49 dlg_texReset_t dlgTexReset;
51 void Update_TextureReseter();
53 static void dialog_button_callback_texreset_update (GtkWidget *widget, gpointer data)
55 Update_TextureReseter();
58 void Update_TextureReseter()
62 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ));
63 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexNew), check);
64 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexOld), check);
66 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ));
67 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleHor), check);
69 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ));
70 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleVert), check);
72 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ));
73 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftHor), check);
75 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ));
76 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftVert), check);
78 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ));
79 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editRotation), check);
82 static void dialog_button_callback (GtkWidget *widget, gpointer data)
86 EMessageBoxReturn *ret;
88 parent = gtk_widget_get_toplevel (widget);
89 loop = (int*)g_object_get_data (G_OBJECT (parent), "loop");
90 ret = (EMessageBoxReturn*)g_object_get_data (G_OBJECT (parent), "ret");
93 *ret = (EMessageBoxReturn)GPOINTER_TO_INT(data);
96 static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data)
100 gtk_widget_hide (widget);
101 loop = (int*)g_object_get_data (G_OBJECT (widget), "loop");
107 static void dialog_button_callback_settex (GtkWidget *widget, gpointer data)
109 TwinWidget* tw = (TwinWidget*)data;
111 GtkEntry* entry = GTK_ENTRY( tw->one );
112 GtkCombo* combo = GTK_COMBO( tw->two );
114 const gchar* tex = gtk_entry_get_text(GTK_ENTRY( combo->entry ));
115 gtk_entry_set_text( entry, tex);
118 /*--------------------------------
119 Data validation Routines
120 ---------------------------------*/
122 bool ValidateTextFloat(const char* pData, char* error_title, float* value)
126 float testNum = (float)atof(pData);
128 if((testNum == 0.0f) && strcmp(pData, "0"))
130 DoMessageBox("Please Enter A Floating Point Number", error_title, eMB_OK);
140 DoMessageBox("Please Enter A Floating Point Number", error_title, eMB_OK);
144 bool ValidateTextFloatRange(const char* pData, float min, float max, char* error_title, float* value)
146 char error_buffer[256];
147 sprintf(error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max);
151 float testNum = (float)atof(pData);
153 if((testNum < min) || (testNum > max))
155 DoMessageBox(error_buffer, error_title, eMB_OK);
165 DoMessageBox(error_buffer, error_title, eMB_OK);
169 bool ValidateTextIntRange(const char* pData, int min, int max, char* error_title, int* value)
171 char error_buffer[256];
172 sprintf(error_buffer, "Please Enter An Integer Between %i and %i", min, max);
176 int testNum = atoi(pData);
178 if((testNum < min) || (testNum > max))
180 DoMessageBox(error_buffer, error_title, eMB_OK);
190 DoMessageBox(error_buffer, error_title, eMB_OK);
194 bool ValidateTextInt(const char* pData, char* error_title, int* value)
198 int testNum = atoi(pData);
200 if((testNum == 0) && strcmp(pData, "0"))
202 DoMessageBox("Please Enter An Integer", error_title, eMB_OK);
212 DoMessageBox("Please Enter An Integer", error_title, eMB_OK);
216 /*--------------------------------
218 ---------------------------------*/
222 Major clean up of variable names etc required, excluding Mars's ones,
223 which are nicely done :)
227 EMessageBoxReturn DoMessageBox (const char* lpText, const char* lpCaption, EMessageBoxType type)
229 GtkWidget *window, *w, *vbox, *hbox;
230 EMessageBoxReturn ret;
233 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
234 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
235 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
236 gtk_signal_connect (GTK_OBJECT (window), "destroy",
237 GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
238 gtk_window_set_title (GTK_WINDOW (window), lpCaption);
239 gtk_container_border_width (GTK_CONTAINER (window), 10);
240 g_object_set_data (G_OBJECT (window), "loop", &loop);
241 g_object_set_data (G_OBJECT (window), "ret", &ret);
242 gtk_widget_realize (window);
244 vbox = gtk_vbox_new (FALSE, 10);
245 gtk_container_add (GTK_CONTAINER (window), vbox);
246 gtk_widget_show (vbox);
248 w = gtk_label_new (lpText);
249 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
250 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
253 w = gtk_hseparator_new ();
254 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
257 hbox = gtk_hbox_new (FALSE, 10);
258 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
259 gtk_widget_show (hbox);
263 w = gtk_button_new_with_label ("Ok");
264 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
265 gtk_signal_connect (GTK_OBJECT (w), "clicked",
266 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
267 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
268 gtk_widget_grab_default (w);
272 else if (type == eMB_OKCANCEL)
274 w = gtk_button_new_with_label ("Ok");
275 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
276 gtk_signal_connect (GTK_OBJECT (w), "clicked",
277 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
278 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
279 gtk_widget_grab_default (w);
282 w = gtk_button_new_with_label ("Cancel");
283 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
284 gtk_signal_connect (GTK_OBJECT (w), "clicked",
285 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
289 else if (type == eMB_YESNOCANCEL)
291 w = gtk_button_new_with_label ("Yes");
292 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
293 gtk_signal_connect (GTK_OBJECT (w), "clicked",
294 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES));
295 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
296 gtk_widget_grab_default (w);
299 w = gtk_button_new_with_label ("No");
300 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
301 gtk_signal_connect (GTK_OBJECT (w), "clicked",
302 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDNO));
305 w = gtk_button_new_with_label ("Cancel");
306 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
307 gtk_signal_connect (GTK_OBJECT (w), "clicked",
308 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
312 else /* if (mode == MB_YESNO) */
314 w = gtk_button_new_with_label ("Yes");
315 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
316 gtk_signal_connect (GTK_OBJECT (w), "clicked",
317 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES));
318 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
319 gtk_widget_grab_default (w);
322 w = gtk_button_new_with_label ("No");
323 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
324 gtk_signal_connect (GTK_OBJECT (w), "clicked",
325 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDNO));
330 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
331 gtk_widget_show (window);
332 gtk_grab_add (window);
335 gtk_main_iteration ();
337 gtk_grab_remove (window);
338 gtk_widget_destroy (window);
343 EMessageBoxReturn DoIntersectBox (IntersectRS* rs)
345 GtkWidget *window, *w, *vbox, *hbox;
346 GtkWidget *radio1, *radio2;
347 GtkWidget *check1, *check2;
348 EMessageBoxReturn ret;
351 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
353 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
354 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
356 gtk_window_set_title (GTK_WINDOW (window), "Intersect");
357 gtk_container_border_width (GTK_CONTAINER (window), 10);
359 g_object_set_data (G_OBJECT (window), "loop", &loop);
360 g_object_set_data (G_OBJECT (window), "ret", &ret);
362 gtk_widget_realize (window);
366 vbox = gtk_vbox_new (FALSE, 10);
367 gtk_container_add (GTK_CONTAINER (window), vbox);
368 gtk_widget_show (vbox);
372 radio1 = gtk_radio_button_new_with_label(NULL, "Use Whole Map");
373 gtk_box_pack_start (GTK_BOX (vbox), radio1, FALSE, FALSE, 2);
374 gtk_widget_show (radio1);
376 radio2 = gtk_radio_button_new_with_label(((GtkRadioButton*)radio1)->group, "Use Selected Brushes");
377 gtk_box_pack_start (GTK_BOX (vbox), radio2, FALSE, FALSE, 2);
378 gtk_widget_show (radio2);
380 w = gtk_hseparator_new ();
381 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
384 check1 = gtk_check_button_new_with_label("Include Detail Brushes");
385 gtk_box_pack_start (GTK_BOX (vbox), check1, FALSE, FALSE, 0);
386 gtk_widget_show (check1);
388 check2 = gtk_check_button_new_with_label("Select Duplicate Brushes Only");
389 gtk_box_pack_start (GTK_BOX (vbox), check2, FALSE, FALSE, 0);
390 gtk_widget_show (check2);
392 hbox = gtk_hbox_new (FALSE, 10);
393 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
394 gtk_widget_show (hbox);
396 // ---- hbox ---- ok/cancel buttons
398 w = gtk_button_new_with_label ("Ok");
399 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
400 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
402 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
403 gtk_widget_grab_default (w);
406 w = gtk_button_new_with_label ("Cancel");
407 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
408 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
416 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
417 gtk_widget_show (window);
418 gtk_grab_add (window);
421 gtk_main_iteration ();
423 if(gtk_toggle_button_get_active((GtkToggleButton*)radio1))
424 rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP;
425 else if(gtk_toggle_button_get_active((GtkToggleButton*)radio2))
426 rs->nBrushOptions = BRUSH_OPT_SELECTED;
428 rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false;
429 rs->bDuplicateOnly = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false;
431 gtk_grab_remove (window);
432 gtk_widget_destroy (window);
437 EMessageBoxReturn DoPolygonBox (PolygonRS* rs)
439 GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2;
441 GtkWidget *check1, *check2, *check3;
442 GtkWidget *text1, *text2;
444 EMessageBoxReturn ret;
447 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
449 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
450 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
452 gtk_window_set_title (GTK_WINDOW (window), "Polygon Builder");
453 gtk_container_border_width (GTK_CONTAINER (window), 10);
455 g_object_set_data (G_OBJECT (window), "loop", &loop);
456 g_object_set_data (G_OBJECT (window), "ret", &ret);
458 gtk_widget_realize (window);
462 vbox = gtk_vbox_new (FALSE, 10);
463 gtk_container_add (GTK_CONTAINER (window), vbox);
464 gtk_widget_show (vbox);
468 hbox = gtk_hbox_new (FALSE, 10);
469 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
470 gtk_widget_show (hbox);
475 vbox2 = gtk_vbox_new (FALSE, 10);
476 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2);
477 gtk_widget_show (vbox2);
481 hbox2 = gtk_hbox_new (FALSE, 10);
482 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2);
483 gtk_widget_show (hbox2);
487 text1 = gtk_entry_new_with_max_length(256);
488 gtk_entry_set_text((GtkEntry*)text1, "3");
489 gtk_box_pack_start (GTK_BOX (hbox2), text1, FALSE, FALSE, 2);
490 gtk_widget_show (text1);
492 w = gtk_label_new ("Number Of Sides");
493 gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2);
494 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
499 hbox2 = gtk_hbox_new (FALSE, 10);
500 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2);
501 gtk_widget_show (hbox2);
505 text2 = gtk_entry_new_with_max_length(256);
506 gtk_entry_set_text((GtkEntry*)text2, "8");
507 gtk_box_pack_start (GTK_BOX (hbox2), text2, FALSE, FALSE, 2);
508 gtk_widget_show (text2);
510 w = gtk_label_new ("Border Width");
511 gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2);
512 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
521 vbox2 = gtk_vbox_new (FALSE, 10);
522 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2);
523 gtk_widget_show (vbox2);
527 check1 = gtk_check_button_new_with_label("Use Border");
528 gtk_box_pack_start (GTK_BOX (vbox2), check1, FALSE, FALSE, 0);
529 gtk_widget_show (check1);
532 check2 = gtk_check_button_new_with_label("Inverse Polygon");
533 gtk_box_pack_start (GTK_BOX (vbox2), check2, FALSE, FALSE, 0);
534 gtk_widget_show (check2);
537 check3 = gtk_check_button_new_with_label("Align Top Edge");
538 gtk_box_pack_start (GTK_BOX (vbox2), check3, FALSE, FALSE, 0);
539 gtk_widget_show (check3);
545 hbox = gtk_hbox_new (FALSE, 10);
546 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
547 gtk_widget_show (hbox);
551 w = gtk_button_new_with_label ("Ok");
552 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
553 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
555 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
556 gtk_widget_grab_default (w);
559 w = gtk_button_new_with_label ("Cancel");
560 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
561 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
569 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
570 gtk_widget_show (window);
571 gtk_grab_add (window);
573 bool dialogError = TRUE;
578 gtk_main_iteration ();
584 rs->bUseBorder = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false;
585 rs->bInverse = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false;
586 rs->bAlignTop = gtk_toggle_button_get_active((GtkToggleButton*)check3) ? true : false;
588 if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text1), 3, 32, "Number Of Sides", &rs->nSides))
593 if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text2), 8, 256, "Border Width", &rs->nBorderWidth))
599 gtk_grab_remove (window);
600 gtk_widget_destroy (window);
606 // for stair builder stuck as close as i could to the MFC version
607 // obviously feel free to change it at will :)
608 EMessageBoxReturn DoBuildStairsBox(BuildStairsRS* rs)
610 // i made widgets for just about everything ... i think that's what i need to do dunno tho
611 GtkWidget *window, *w, *vbox, *hbox;
612 GtkWidget *textStairHeight, *textRiserTex, *textMainTex;
613 GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value
614 GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle;
615 GtkWidget *checkUseDetail;
616 GSList *radioDirection, *radioStyle;
617 EMessageBoxReturn ret;
620 char *text = "Please set a value in the boxes below and press 'OK' to build the stairs";
622 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
624 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
625 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
627 gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" );
629 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
631 g_object_set_data (G_OBJECT (window), "loop", &loop);
632 g_object_set_data (G_OBJECT (window), "ret", &ret);
634 gtk_widget_realize (window);
637 vbox = gtk_vbox_new( FALSE, 10 );
638 gtk_container_add( GTK_CONTAINER( window ), vbox );
639 gtk_widget_show( vbox );
641 hbox = gtk_hbox_new( FALSE, 10 );
642 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
643 gtk_widget_show( hbox );
645 // dunno if you want this text or not ...
646 w = gtk_label_new( text );
647 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ...
648 gtk_widget_show( w );
650 w = gtk_hseparator_new();
651 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
652 gtk_widget_show( w );
654 // ------------------------- // indenting == good way of keeping track of lines :)
657 hbox = gtk_hbox_new( FALSE, 10 );
658 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
659 gtk_widget_show( hbox );
661 textStairHeight = gtk_entry_new_with_max_length( 256 );
662 gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 );
663 gtk_widget_show( textStairHeight );
665 w = gtk_label_new( "Stair Height" );
666 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
667 gtk_widget_show( w );
669 // ------------------------- //
671 hbox = gtk_hbox_new( FALSE, 10 );
672 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
673 gtk_widget_show( hbox );
675 w = gtk_label_new( "Direction:" );
676 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
677 gtk_widget_show( w );
679 // -------------------------- //
681 hbox = gtk_hbox_new( FALSE, 10 );
682 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
683 gtk_widget_show( hbox );
685 // radio buttons confuse me ...
686 // but this _looks_ right
688 // djbob: actually it looks very nice :), slightly better than the way i did it
689 // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh
691 radioNorth = gtk_radio_button_new_with_label( NULL, "North" );
692 gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 );
693 gtk_widget_show( radioNorth );
695 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) );
697 radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" );
698 gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 );
699 gtk_widget_show( radioSouth );
701 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) );
703 radioEast = gtk_radio_button_new_with_label( radioDirection, "East" );
704 gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 );
705 gtk_widget_show( radioEast );
707 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) );
709 radioWest = gtk_radio_button_new_with_label( radioDirection, "West" );
710 gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 );
711 gtk_widget_show( radioWest );
713 // --------------------------- //
715 hbox = gtk_hbox_new( FALSE, 10 );
716 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
717 gtk_widget_show( hbox );
719 w = gtk_label_new( "Style:" );
720 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
721 gtk_widget_show( w );
723 // --------------------------- //
725 hbox = gtk_hbox_new( FALSE, 10 );
726 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
727 gtk_widget_show( hbox );
729 radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" );
730 gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 );
731 gtk_widget_show( radioOldStyle );
733 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) );
735 radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" );
736 gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 );
737 gtk_widget_show( radioBobStyle );
739 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) );
741 radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" );
742 gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 );
743 gtk_widget_show( radioCornerStyle );
745 // err, the q3r has an if or something so you need bob style checked before this
746 // is "ungreyed out" but you'll need to do that, as i suck :)
748 // djbob: er.... yeah um, im not at all sure how i'm gonna sort this
749 // djbob: think we need some button callback functions or smuffin
750 // FIXME: actually get around to doing what i suggested!!!!
752 checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" );
753 gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 );
754 gtk_widget_show( checkUseDetail );
756 // --------------------------- //
758 hbox = gtk_hbox_new( FALSE, 10 );
759 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
760 gtk_widget_show( hbox );
762 textMainTex = gtk_entry_new_with_max_length( 512 );
763 gtk_entry_set_text(GTK_ENTRY(textMainTex), rs->mainTexture);
764 gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 );
765 gtk_widget_show( textMainTex );
767 w = gtk_label_new( "Main Texture" );
768 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
769 gtk_widget_show( w );
771 // -------------------------- //
773 hbox = gtk_hbox_new( FALSE, 10 );
774 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
775 gtk_widget_show( hbox );
777 textRiserTex = gtk_entry_new_with_max_length( 512 );
778 gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 );
779 gtk_widget_show( textRiserTex );
781 w = gtk_label_new( "Riser Texture" );
782 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
783 gtk_widget_show( w );
785 // -------------------------- //
786 w = gtk_hseparator_new();
787 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
788 gtk_widget_show( w );
790 hbox = gtk_hbox_new( FALSE, 10 );
791 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
792 gtk_widget_show( hbox );
794 w = gtk_button_new_with_label( "OK" );
795 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
796 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
797 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
798 gtk_widget_grab_default( w );
799 gtk_widget_show( w );
801 w = gtk_button_new_with_label( "Cancel" );
802 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
803 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
804 gtk_widget_show( w );
808 // +djbob: need our "little" modal loop mars :P
809 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
810 gtk_widget_show (window);
811 gtk_grab_add (window);
813 bool dialogError = TRUE;
818 gtk_main_iteration ();
824 rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)checkUseDetail) ? true : false;
826 strcpy(rs->riserTexture, gtk_entry_get_text((GtkEntry*)textRiserTex));
827 strcpy(rs->mainTexture, gtk_entry_get_text((GtkEntry*)textMainTex));
829 if(gtk_toggle_button_get_active((GtkToggleButton*)radioNorth))
830 rs->direction = MOVE_NORTH;
831 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioSouth))
832 rs->direction = MOVE_SOUTH;
833 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioEast))
834 rs->direction = MOVE_EAST;
835 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioWest))
836 rs->direction = MOVE_WEST;
838 if(!ValidateTextInt(gtk_entry_get_text((GtkEntry*)textStairHeight), "Stair Height", &rs->stairHeight))
841 if(gtk_toggle_button_get_active((GtkToggleButton*)radioOldStyle))
842 rs->style = STYLE_ORIGINAL;
843 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioBobStyle))
844 rs->style = STYLE_BOB;
845 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioCornerStyle))
846 rs->style = STYLE_CORNER;
850 gtk_grab_remove (window);
851 gtk_widget_destroy (window);
856 // there we go, all done ... on my end at least, not bad for a night's work
859 EMessageBoxReturn DoDoorsBox(DoorRS* rs)
861 GtkWidget *window, *hbox, *vbox, *w;
862 GtkWidget *textFrontBackTex, *textTrimTex;
863 GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV;
864 GtkWidget *comboMain, *comboTrim;
865 GtkWidget *buttonSetMain, *buttonSetTrim;
866 GtkWidget *radioNS, *radioEW;
867 GSList *radioOrientation;
869 EMessageBoxReturn ret;
872 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
874 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
875 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
877 gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" );
879 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
881 g_object_set_data( G_OBJECT( window ), "loop", &loop );
882 g_object_set_data( G_OBJECT( window ), "ret", &ret );
884 gtk_widget_realize (window);
887 GList *listMainTextures = NULL;
888 GList *listTrimTextures = NULL;
889 LoadGList(GetFilename(buffer, "plugins/bt/door-tex.txt"), &listMainTextures);
890 LoadGList(GetFilename(buffer, "plugins/bt/door-tex-trim.txt"), &listTrimTextures);
892 vbox = gtk_vbox_new( FALSE, 10 );
893 gtk_container_add( GTK_CONTAINER( window ), vbox );
894 gtk_widget_show( vbox );
896 // -------------------------- //
898 hbox = gtk_hbox_new( FALSE, 10 );
899 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
900 gtk_widget_show( hbox );
902 textFrontBackTex = gtk_entry_new_with_max_length( 512 );
903 gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture);
904 gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 );
905 gtk_widget_show( textFrontBackTex );
907 w = gtk_label_new( "Door Front/Back Texture" );
908 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
909 gtk_widget_show( w );
911 // ------------------------ //
913 hbox = gtk_hbox_new( FALSE, 10 );
914 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
915 gtk_widget_show( hbox );
917 textTrimTex = gtk_entry_new_with_max_length( 512 );
918 gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 );
919 gtk_widget_show( textTrimTex );
921 w = gtk_label_new( "Door Trim Texture" );
922 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
923 gtk_widget_show( w );
925 // ----------------------- //
927 hbox = gtk_hbox_new( FALSE, 10 );
928 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
929 gtk_widget_show( hbox );
931 // sp: horizontally ????
932 // djbob: yes mars, u can spell :]
933 checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" );
934 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE);
935 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 );
936 gtk_widget_show( checkScaleMainH );
938 checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" );
939 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE);
940 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 );
941 gtk_widget_show( checkScaleTrimH );
943 // ---------------------- //
945 hbox = gtk_hbox_new( FALSE, 10 );
946 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
947 gtk_widget_show( hbox );
949 checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" );
950 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE);
951 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 );
952 gtk_widget_show( checkScaleMainV );
954 checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" );
955 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 );
956 gtk_widget_show( checkScaleTrimV );
958 // --------------------- //
960 hbox = gtk_hbox_new( FALSE, 10 );
961 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
962 gtk_widget_show( hbox );
964 // djbob: lists added
966 comboMain = gtk_combo_new();
967 gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 );
968 gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures );
969 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
970 gtk_widget_show( comboMain );
972 tw1.one = textFrontBackTex;
975 buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" );
976 gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 );
977 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 );
978 gtk_widget_show( buttonSetMain );
980 // ------------------- //
982 hbox = gtk_hbox_new( FALSE, 10 );
983 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
984 gtk_widget_show( hbox );
986 comboTrim = gtk_combo_new();
987 gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 );
988 gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures );
989 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
990 gtk_widget_show( comboTrim );
992 tw2.one = textTrimTex;
995 buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" );
996 gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 );
997 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 );
998 gtk_widget_show( buttonSetTrim );
1000 // ------------------ //
1002 hbox = gtk_hbox_new( FALSE, 10 );
1003 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1004 gtk_widget_show( hbox );
1006 w = gtk_label_new( "Orientation" );
1007 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1008 gtk_widget_show( w );
1010 // argh more radio buttons!
1011 radioNS = gtk_radio_button_new_with_label( NULL, "North - South" );
1012 gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 );
1013 gtk_widget_show( radioNS );
1015 radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) );
1017 radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" );
1018 gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 );
1019 gtk_widget_show( radioEW );
1021 // ----------------- //
1023 w = gtk_hseparator_new();
1024 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1025 gtk_widget_show( w );
1027 // ----------------- //
1029 hbox = gtk_hbox_new( FALSE, 10 );
1030 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1031 gtk_widget_show( hbox );
1033 w = gtk_button_new_with_label( "OK" );
1034 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
1035 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1036 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1037 gtk_widget_grab_default( w );
1038 gtk_widget_show( w );
1040 w = gtk_button_new_with_label( "Cancel" );
1041 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1042 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1043 gtk_widget_show( w );
1046 // ----------------- //
1049 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1050 gtk_widget_show (window);
1051 gtk_grab_add (window);
1054 gtk_main_iteration ();
1056 strcpy(rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ));
1057 strcpy(rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ));
1059 rs->bScaleMainH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainH)) ? true : false;
1060 rs->bScaleMainV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainV)) ? true : false;
1061 rs->bScaleTrimH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimH)) ? true : false;
1062 rs->bScaleTrimV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimV)) ? true : false;
1064 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioNS)))
1065 rs->nOrientation = DIRECTION_NS;
1066 else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioEW)))
1067 rs->nOrientation = DIRECTION_EW;
1069 gtk_grab_remove (window);
1070 gtk_widget_destroy (window);
1076 EMessageBoxReturn DoPathPlotterBox(PathPlotterRS* rs)
1078 GtkWidget *window, *w, *vbox, *hbox;
1080 GtkWidget *text1, *text2, *text3;
1081 GtkWidget *check1, *check2;
1083 EMessageBoxReturn ret;
1086 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1088 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
1089 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
1091 gtk_window_set_title (GTK_WINDOW (window), "Texture Reset");
1092 gtk_container_border_width (GTK_CONTAINER (window), 10);
1094 g_object_set_data (G_OBJECT (window), "loop", &loop);
1095 g_object_set_data (G_OBJECT (window), "ret", &ret);
1097 gtk_widget_realize (window);
1101 vbox = gtk_vbox_new (FALSE, 10);
1102 gtk_container_add (GTK_CONTAINER (window), vbox);
1103 gtk_widget_show (vbox);
1107 hbox = gtk_hbox_new (FALSE, 10);
1108 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1109 gtk_widget_show (hbox);
1113 text1 = gtk_entry_new_with_max_length(256);
1114 gtk_entry_set_text((GtkEntry*)text1, "25");
1115 gtk_box_pack_start (GTK_BOX (hbox), text1, FALSE, FALSE, 2);
1116 gtk_widget_show (text1);
1118 w = gtk_label_new ("Number Of Points");
1119 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
1120 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1121 gtk_widget_show (w);
1125 hbox = gtk_hbox_new (FALSE, 10);
1126 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1127 gtk_widget_show (hbox);
1131 text2 = gtk_entry_new_with_max_length(256);
1132 gtk_entry_set_text((GtkEntry*)text2, "3");
1133 gtk_box_pack_start (GTK_BOX (hbox), text2, FALSE, FALSE, 2);
1134 gtk_widget_show (text2);
1136 w = gtk_label_new ("Multipler");
1137 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
1138 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1139 gtk_widget_show (w);
1143 w = gtk_label_new ("Path Distance = dist(start -> apex) * multiplier");
1144 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
1145 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1146 gtk_widget_show (w);
1148 hbox = gtk_hbox_new (FALSE, 10);
1149 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1150 gtk_widget_show (hbox);
1154 text3 = gtk_entry_new_with_max_length(256);
1155 gtk_entry_set_text((GtkEntry*)text3, "-800");
1156 gtk_box_pack_start (GTK_BOX (hbox), text3, FALSE, FALSE, 2);
1157 gtk_widget_show (text3);
1159 w = gtk_label_new ("Gravity");
1160 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
1161 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1162 gtk_widget_show (w);
1166 w = gtk_hseparator_new();
1167 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1168 gtk_widget_show( w );
1170 check1 = gtk_check_button_new_with_label( "No Dynamic Update" );
1171 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
1172 gtk_widget_show( check1 );
1174 check2 = gtk_check_button_new_with_label( "Show Bounding Lines" );
1175 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
1176 gtk_widget_show( check2 );
1181 // ----------------- //
1183 w = gtk_hseparator_new();
1184 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1185 gtk_widget_show( w );
1187 // ----------------- //
1189 hbox = gtk_hbox_new( FALSE, 10 );
1190 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1191 gtk_widget_show( hbox );
1193 w = gtk_button_new_with_label( "Enable" );
1194 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
1195 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1196 gtk_widget_show( w );
1198 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1199 gtk_widget_grab_default( w );
1201 w = gtk_button_new_with_label( "Disable" );
1202 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
1203 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
1204 gtk_widget_show( w );
1206 w = gtk_button_new_with_label( "Cancel" );
1207 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1208 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1209 gtk_widget_show( w );
1213 // ----------------- //
1215 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1216 gtk_widget_show (window);
1217 gtk_grab_add (window);
1219 bool dialogError = TRUE;
1224 gtk_main_iteration ();
1226 dialogError = FALSE;
1230 if(!ValidateTextIntRange(gtk_entry_get_text(GTK_ENTRY(text1)), 1, 200, "Number Of Points", &rs->nPoints))
1233 if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text2)), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier))
1236 if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text3)), -10000.0f, -1.0f, "Gravity", &rs->fGravity))
1239 rs->bNoUpdate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check1)) ? true : false;
1240 rs->bShowExtra = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check2)) ? true : false;
1244 gtk_grab_remove (window);
1245 gtk_widget_destroy (window);
1250 EMessageBoxReturn DoCTFColourChangeBox ()
1252 GtkWidget *window, *w, *vbox, *hbox;
1253 EMessageBoxReturn ret;
1256 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1258 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
1259 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
1261 gtk_window_set_title (GTK_WINDOW (window), "CTF Colour Changer");
1262 gtk_container_border_width (GTK_CONTAINER (window), 10);
1264 g_object_set_data (G_OBJECT (window), "loop", &loop);
1265 g_object_set_data (G_OBJECT (window), "ret", &ret);
1267 gtk_widget_realize (window);
1271 vbox = gtk_vbox_new (FALSE, 10);
1272 gtk_container_add (GTK_CONTAINER (window), vbox);
1273 gtk_widget_show (vbox);
1277 hbox = gtk_hbox_new( FALSE, 10 );
1278 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
1279 gtk_widget_show( hbox );
1281 // ---- hbox ---- ok/cancel buttons
1283 w = gtk_button_new_with_label ("Red->Blue");
1284 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1285 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
1287 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
1288 gtk_widget_grab_default (w);
1289 gtk_widget_show (w);
1291 w = gtk_button_new_with_label ("Blue->Red");
1292 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1293 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES));
1294 gtk_widget_show (w);
1296 w = gtk_button_new_with_label ("Cancel");
1297 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1298 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
1299 gtk_widget_show (w);
1306 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1307 gtk_widget_show (window);
1308 gtk_grab_add (window);
1311 gtk_main_iteration ();
1313 gtk_grab_remove (window);
1314 gtk_widget_destroy (window);
1319 EMessageBoxReturn DoResetTextureBox (ResetTextureRS* rs)
1323 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1325 EMessageBoxReturn ret;
1328 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1330 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
1331 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
1333 gtk_window_set_title (GTK_WINDOW (window), "Texture Reset");
1334 gtk_container_border_width (GTK_CONTAINER (window), 10);
1336 g_object_set_data (G_OBJECT (window), "loop", &loop);
1337 g_object_set_data (G_OBJECT (window), "ret", &ret);
1339 gtk_widget_realize (window);
1341 vbox = gtk_vbox_new (FALSE, 10);
1342 gtk_container_add (GTK_CONTAINER (window), vbox);
1343 gtk_widget_show (vbox);
1347 hbox = gtk_hbox_new (FALSE, 10);
1348 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1349 gtk_widget_show (hbox);
1353 texSelected = "Currently Selected Texture: ";
1354 texSelected += GetCurrentTexture();
1356 w = gtk_label_new (texSelected);
1357 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
1358 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
1359 gtk_widget_show (w);
1363 frame = gtk_frame_new ("Reset Texture Names");
1364 gtk_widget_show (frame);
1365 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1367 table = gtk_table_new (2, 3, TRUE);
1368 gtk_widget_show (table);
1369 gtk_container_add (GTK_CONTAINER (frame), table);
1370 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1371 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1372 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1376 dlgTexReset.cbTexChange = gtk_check_button_new_with_label("Enabled");
1377 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbTexChange), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1378 gtk_widget_show (dlgTexReset.cbTexChange);
1379 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbTexChange, 0, 1, 0, 1,
1380 (GtkAttachOptions) (GTK_FILL),
1381 (GtkAttachOptions) (0), 0, 0);
1383 w = gtk_label_new ("Old Name: ");
1384 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
1385 (GtkAttachOptions) (GTK_FILL),
1386 (GtkAttachOptions) (0), 0, 0);
1387 gtk_widget_show (w);
1389 dlgTexReset.editTexOld = gtk_entry_new_with_max_length(256);
1390 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexOld), rs->textureName);
1391 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexOld, 2, 3, 0, 1,
1392 (GtkAttachOptions) (GTK_FILL),
1393 (GtkAttachOptions) (0), 0, 0);
1394 gtk_widget_show (dlgTexReset.editTexOld);
1396 w = gtk_label_new ("New Name: ");
1397 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,
1398 (GtkAttachOptions) (GTK_FILL),
1399 (GtkAttachOptions) (0), 0, 0);
1400 gtk_widget_show (w);
1402 dlgTexReset.editTexNew = gtk_entry_new_with_max_length(256);
1403 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexNew), rs->textureName);
1404 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexNew, 2, 3, 1, 2,
1405 (GtkAttachOptions) (GTK_FILL),
1406 (GtkAttachOptions) (0), 0, 0);
1407 gtk_widget_show (dlgTexReset.editTexNew);
1411 frame = gtk_frame_new ("Reset Scales");
1412 gtk_widget_show (frame);
1413 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1415 table = gtk_table_new (2, 3, TRUE);
1416 gtk_widget_show (table);
1417 gtk_container_add (GTK_CONTAINER (frame), table);
1418 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1419 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1420 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1424 dlgTexReset.cbScaleHor = gtk_check_button_new_with_label("Enabled");
1425 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1426 gtk_widget_show (dlgTexReset.cbScaleHor);
1427 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleHor, 0, 1, 0, 1,
1428 (GtkAttachOptions) (GTK_FILL),
1429 (GtkAttachOptions) (0), 0, 0);
1431 w = gtk_label_new ("New Horizontal Scale: ");
1432 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
1433 (GtkAttachOptions) (GTK_FILL),
1434 (GtkAttachOptions) (0), 0, 0);
1435 gtk_widget_show (w);
1437 dlgTexReset.editScaleHor = gtk_entry_new_with_max_length(256);
1438 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleHor), "0.5");
1439 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleHor, 2, 3, 0, 1,
1440 (GtkAttachOptions) (GTK_FILL),
1441 (GtkAttachOptions) (0), 0, 0);
1442 gtk_widget_show (dlgTexReset.editScaleHor);
1445 dlgTexReset.cbScaleVert = gtk_check_button_new_with_label("Enabled");
1446 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1447 gtk_widget_show (dlgTexReset.cbScaleVert);
1448 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleVert, 0, 1, 1, 2,
1449 (GtkAttachOptions) (GTK_FILL),
1450 (GtkAttachOptions) (0), 0, 0);
1452 w = gtk_label_new ("New Vertical Scale: ");
1453 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,
1454 (GtkAttachOptions) (GTK_FILL),
1455 (GtkAttachOptions) (0), 0, 0);
1456 gtk_widget_show (w);
1458 dlgTexReset.editScaleVert = gtk_entry_new_with_max_length(256);
1459 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleVert), "0.5");
1460 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleVert, 2, 3, 1, 2,
1461 (GtkAttachOptions) (GTK_FILL),
1462 (GtkAttachOptions) (0), 0, 0);
1463 gtk_widget_show (dlgTexReset.editScaleVert);
1467 frame = gtk_frame_new ("Reset Shift");
1468 gtk_widget_show (frame);
1469 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1471 table = gtk_table_new (2, 3, TRUE);
1472 gtk_widget_show (table);
1473 gtk_container_add (GTK_CONTAINER (frame), table);
1474 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1475 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1476 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1480 dlgTexReset.cbShiftHor = gtk_check_button_new_with_label("Enabled");
1481 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1482 gtk_widget_show (dlgTexReset.cbShiftHor);
1483 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftHor, 0, 1, 0, 1,
1484 (GtkAttachOptions) (GTK_FILL),
1485 (GtkAttachOptions) (0), 0, 0);
1487 w = gtk_label_new ("New Horizontal Shift: ");
1488 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
1489 (GtkAttachOptions) (GTK_FILL),
1490 (GtkAttachOptions) (0), 0, 0);
1491 gtk_widget_show (w);
1493 dlgTexReset.editShiftHor = gtk_entry_new_with_max_length(256);
1494 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftHor), "0");
1495 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftHor, 2, 3, 0, 1,
1496 (GtkAttachOptions) (GTK_FILL),
1497 (GtkAttachOptions) (0), 0, 0);
1498 gtk_widget_show (dlgTexReset.editShiftHor);
1501 dlgTexReset.cbShiftVert = gtk_check_button_new_with_label("Enabled");
1502 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
1503 gtk_widget_show (dlgTexReset.cbShiftVert);
1504 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftVert, 0, 1, 1, 2,
1505 (GtkAttachOptions) (GTK_FILL),
1506 (GtkAttachOptions) (0), 0, 0);
1508 w = gtk_label_new ("New Vertical Shift: ");
1509 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,
1510 (GtkAttachOptions) (GTK_FILL),
1511 (GtkAttachOptions) (0), 0, 0);
1512 gtk_widget_show (w);
1514 dlgTexReset.editShiftVert = gtk_entry_new_with_max_length(256);
1515 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftVert), "0");
1516 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftVert, 2, 3, 1, 2,
1517 (GtkAttachOptions) (GTK_FILL),
1518 (GtkAttachOptions) (0), 0, 0);
1519 gtk_widget_show (dlgTexReset.editShiftVert);
1523 frame = gtk_frame_new ("Reset Rotation");
1524 gtk_widget_show (frame);
1525 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1527 table = gtk_table_new (1, 3, TRUE);
1528 gtk_widget_show (table);
1529 gtk_container_add (GTK_CONTAINER (frame), table);
1530 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1531 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1532 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1536 dlgTexReset.cbRotation = gtk_check_button_new_with_label("Enabled");
1537 gtk_widget_show (dlgTexReset.cbRotation);
1538 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbRotation, 0, 1, 0, 1,
1539 (GtkAttachOptions) (GTK_FILL),
1540 (GtkAttachOptions) (0), 0, 0);
1542 w = gtk_label_new ("New Rotation Value: ");
1543 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
1544 (GtkAttachOptions) (GTK_FILL),
1545 (GtkAttachOptions) (0), 0, 0);
1546 gtk_widget_show (w);
1548 dlgTexReset.editRotation = gtk_entry_new_with_max_length(256);
1549 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editRotation), "0");
1550 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editRotation, 2, 3, 0, 1,
1551 (GtkAttachOptions) (GTK_FILL),
1552 (GtkAttachOptions) (0), 0, 0);
1553 gtk_widget_show (dlgTexReset.editRotation);
1557 hbox = gtk_hbox_new (FALSE, 10);
1558 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1559 gtk_widget_show (hbox);
1563 w = gtk_button_new_with_label ("Use Selected Brushes");
1564 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1565 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
1567 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
1568 gtk_widget_grab_default (w);
1569 gtk_widget_show (w);
1571 w = gtk_button_new_with_label ("Use All Brushes");
1572 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1573 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES));
1574 gtk_widget_show (w);
1576 w = gtk_button_new_with_label ("Cancel");
1577 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1578 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
1579 gtk_widget_show (w);
1586 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1587 gtk_widget_show (window);
1588 gtk_grab_add (window);
1590 Update_TextureReseter();
1592 bool dialogError = TRUE;
1597 gtk_main_iteration ();
1599 dialogError = FALSE;
1601 if(ret != eIDCANCEL)
1603 rs->bResetRotation = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ));
1604 if(rs->bResetRotation)
1605 if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editRotation)), "Rotation", &rs->rotation))
1608 rs->bResetScale[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ));
1609 if(rs->bResetScale[0])
1610 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleHor)), "Horizontal Scale", &rs->fScale[0]))
1613 rs->bResetScale[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ));
1614 if(rs->bResetScale[1])
1615 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleVert)), "Vertical Scale", &rs->fScale[1]))
1618 rs->bResetShift[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ));
1619 if(rs->bResetShift[0])
1620 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftHor)), "Horizontal Shift", &rs->fShift[0]))
1623 rs->bResetShift[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ));
1624 if(rs->bResetShift[1])
1625 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftVert)), "Vertical Shift", &rs->fShift[1]))
1628 rs->bResetTextureName = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ));
1629 if(rs->bResetTextureName)
1631 strcpy(rs->textureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexOld )));
1632 strcpy(rs->newTextureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexNew )));
1637 gtk_grab_remove (window);
1638 gtk_widget_destroy (window);
1643 EMessageBoxReturn DoTrainThingBox (TrainThingRS* rs)
1647 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1649 GtkWidget *radiusX, *radiusY;
1650 GtkWidget *angleStart, *angleEnd;
1651 GtkWidget *heightStart, *heightEnd;
1652 GtkWidget *numPoints;
1654 EMessageBoxReturn ret;
1657 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1659 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
1660 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
1662 gtk_window_set_title (GTK_WINDOW (window), "Train Thing");
1663 gtk_container_border_width (GTK_CONTAINER (window), 10);
1665 gtk_object_set_data (GTK_OBJECT (window), "loop", &loop);
1666 gtk_object_set_data (GTK_OBJECT (window), "ret", &ret);
1668 gtk_widget_realize (window);
1670 vbox = gtk_vbox_new (FALSE, 10);
1671 gtk_container_add (GTK_CONTAINER (window), vbox);
1672 gtk_widget_show (vbox);
1676 hbox = gtk_hbox_new (FALSE, 10);
1677 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1678 gtk_widget_show (hbox);
1682 frame = gtk_frame_new ("Radii");
1683 gtk_widget_show (frame);
1684 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1686 table = gtk_table_new (2, 3, TRUE);
1687 gtk_widget_show (table);
1688 gtk_container_add (GTK_CONTAINER (frame), table);
1689 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1690 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1691 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1695 w = gtk_label_new ("X: ");
1696 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
1697 (GtkAttachOptions) (GTK_FILL),
1698 (GtkAttachOptions) (0), 0, 0);
1699 gtk_widget_show (w);
1701 radiusX = gtk_entry_new_with_max_length(256);
1702 gtk_entry_set_text(GTK_ENTRY(radiusX), "100");
1703 gtk_table_attach (GTK_TABLE (table), radiusX, 1, 2, 0, 1,
1704 (GtkAttachOptions) (GTK_FILL),
1705 (GtkAttachOptions) (0), 0, 0);
1706 gtk_widget_show (radiusX);
1710 w = gtk_label_new ("Y: ");
1711 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,
1712 (GtkAttachOptions) (GTK_FILL),
1713 (GtkAttachOptions) (0), 0, 0);
1714 gtk_widget_show (w);
1716 radiusY = gtk_entry_new_with_max_length(256);
1717 gtk_entry_set_text(GTK_ENTRY(radiusY), "100");
1718 gtk_table_attach (GTK_TABLE (table), radiusY, 1, 2, 1, 2,
1719 (GtkAttachOptions) (GTK_FILL),
1720 (GtkAttachOptions) (0), 0, 0);
1721 gtk_widget_show (radiusY);
1725 frame = gtk_frame_new ("Angles");
1726 gtk_widget_show (frame);
1727 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1729 table = gtk_table_new (2, 3, TRUE);
1730 gtk_widget_show (table);
1731 gtk_container_add (GTK_CONTAINER (frame), table);
1732 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1733 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1734 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1738 w = gtk_label_new ("Start: ");
1739 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
1740 (GtkAttachOptions) (GTK_FILL),
1741 (GtkAttachOptions) (0), 0, 0);
1742 gtk_widget_show (w);
1744 angleStart = gtk_entry_new_with_max_length(256);
1745 gtk_entry_set_text(GTK_ENTRY(angleStart), "0");
1746 gtk_table_attach (GTK_TABLE (table), angleStart, 1, 2, 0, 1,
1747 (GtkAttachOptions) (GTK_FILL),
1748 (GtkAttachOptions) (0), 0, 0);
1749 gtk_widget_show (angleStart);
1753 w = gtk_label_new ("End: ");
1754 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,
1755 (GtkAttachOptions) (GTK_FILL),
1756 (GtkAttachOptions) (0), 0, 0);
1757 gtk_widget_show (w);
1759 angleEnd = gtk_entry_new_with_max_length(256);
1760 gtk_entry_set_text(GTK_ENTRY(angleEnd), "90");
1761 gtk_table_attach (GTK_TABLE (table), angleEnd, 1, 2, 1, 2,
1762 (GtkAttachOptions) (GTK_FILL),
1763 (GtkAttachOptions) (0), 0, 0);
1764 gtk_widget_show (angleEnd);
1767 frame = gtk_frame_new ("Height");
1768 gtk_widget_show (frame);
1769 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1771 table = gtk_table_new (2, 3, TRUE);
1772 gtk_widget_show (table);
1773 gtk_container_add (GTK_CONTAINER (frame), table);
1774 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1775 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1776 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1780 w = gtk_label_new ("Start: ");
1781 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
1782 (GtkAttachOptions) (GTK_FILL),
1783 (GtkAttachOptions) (0), 0, 0);
1784 gtk_widget_show (w);
1786 heightStart = gtk_entry_new_with_max_length(256);
1787 gtk_entry_set_text(GTK_ENTRY(heightStart), "0");
1788 gtk_table_attach (GTK_TABLE (table), heightStart, 1, 2, 0, 1,
1789 (GtkAttachOptions) (GTK_FILL),
1790 (GtkAttachOptions) (0), 0, 0);
1791 gtk_widget_show (heightStart);
1795 w = gtk_label_new ("End: ");
1796 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,
1797 (GtkAttachOptions) (GTK_FILL),
1798 (GtkAttachOptions) (0), 0, 0);
1799 gtk_widget_show (w);
1801 heightEnd = gtk_entry_new_with_max_length(256);
1802 gtk_entry_set_text(GTK_ENTRY(heightEnd), "0");
1803 gtk_table_attach (GTK_TABLE (table), heightEnd, 1, 2, 1, 2,
1804 (GtkAttachOptions) (GTK_FILL),
1805 (GtkAttachOptions) (0), 0, 0);
1806 gtk_widget_show (heightEnd);
1810 frame = gtk_frame_new ("Points");
1811 gtk_widget_show (frame);
1812 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
1814 table = gtk_table_new (2, 3, TRUE);
1815 gtk_widget_show (table);
1816 gtk_container_add (GTK_CONTAINER (frame), table);
1817 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
1818 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
1819 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1823 w = gtk_label_new ("Number: ");
1824 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
1825 (GtkAttachOptions) (GTK_FILL),
1826 (GtkAttachOptions) (0), 0, 0);
1827 gtk_widget_show (w);
1829 numPoints = gtk_entry_new_with_max_length(256);
1830 gtk_entry_set_text(GTK_ENTRY(numPoints), "0");
1831 gtk_table_attach (GTK_TABLE (table), numPoints, 1, 2, 0, 1,
1832 (GtkAttachOptions) (GTK_FILL),
1833 (GtkAttachOptions) (0), 0, 0);
1834 gtk_widget_show (numPoints);
1837 hbox = gtk_hbox_new (FALSE, 10);
1838 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1839 gtk_widget_show (hbox);
1843 w = gtk_button_new_with_label ("Ok");
1844 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1845 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK));
1847 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
1848 gtk_widget_grab_default (w);
1849 gtk_widget_show (w);
1851 w = gtk_button_new_with_label ("Cancel");
1852 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
1853 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL));
1854 gtk_widget_show (w);
1861 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
1862 gtk_widget_show (window);
1863 gtk_grab_add (window);
1865 bool dialogError = TRUE;
1870 gtk_main_iteration ();
1872 dialogError = FALSE;
1874 if(ret != eIDCANCEL)
1876 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusX)), "Radius (X)", &rs->fRadiusX))
1879 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusY)), "Radius (Y)", &rs->fRadiusY))
1882 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleStart)), "Angle (Start)", &rs->fStartAngle))
1885 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleEnd)), "Angle (End)", &rs->fEndAngle))
1888 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightStart)), "Height (Start)", &rs->fStartHeight))
1891 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightEnd)), "Height (End)", &rs->fEndHeight))
1894 if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(numPoints)), "Num Points", &rs->iNumPoints))
1899 gtk_grab_remove (window);
1900 gtk_widget_destroy (window);