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 ){
55 Update_TextureReseter();
58 void Update_TextureReseter(){
61 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
62 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editTexNew ), check );
63 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editTexOld ), check );
65 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
66 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editScaleHor ), check );
68 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
69 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editScaleVert ), check );
71 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
72 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editShiftHor ), check );
74 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
75 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editShiftVert ), check );
77 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
78 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editRotation ), check );
81 static void dialog_button_callback( GtkWidget *widget, gpointer data ){
84 EMessageBoxReturn *ret;
86 parent = gtk_widget_get_toplevel( widget );
87 loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" );
88 ret = (EMessageBoxReturn*)g_object_get_data( G_OBJECT( parent ), "ret" );
91 *ret = (EMessageBoxReturn)gpointer_to_int( data );
94 static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){
97 gtk_widget_hide( widget );
98 loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" );
104 static void dialog_button_callback_settex( GtkWidget *widget, gpointer data ){
105 TwinWidget* tw = (TwinWidget*)data;
107 GtkEntry* entry = GTK_ENTRY( tw->one );
108 GtkCombo* combo = GTK_COMBO( tw->two );
110 const gchar* tex = gtk_entry_get_text( GTK_ENTRY( combo->entry ) );
111 gtk_entry_set_text( entry, tex );
114 /*--------------------------------
115 Data validation Routines
116 ---------------------------------*/
118 bool ValidateTextFloat( const char* pData, char* error_title, float* value ){
120 float testNum = (float)atof( pData );
122 if ( ( testNum == 0.0f ) && strcmp( pData, "0" ) ) {
123 DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK );
133 DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK );
137 bool ValidateTextFloatRange( const char* pData, float min, float max, char* error_title, float* value ){
138 char error_buffer[256];
139 sprintf( error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max );
142 float testNum = (float)atof( pData );
144 if ( ( testNum < min ) || ( testNum > max ) ) {
145 DoMessageBox( error_buffer, error_title, eMB_OK );
155 DoMessageBox( error_buffer, error_title, eMB_OK );
159 bool ValidateTextIntRange( const char* pData, int min, int max, char* error_title, int* value ){
160 char error_buffer[256];
161 sprintf( error_buffer, "Please Enter An Integer Between %i and %i", min, max );
164 int testNum = atoi( pData );
166 if ( ( testNum < min ) || ( testNum > max ) ) {
167 DoMessageBox( error_buffer, error_title, eMB_OK );
177 DoMessageBox( error_buffer, error_title, eMB_OK );
181 bool ValidateTextInt( const char* pData, char* error_title, int* value ){
183 int testNum = atoi( pData );
185 if ( ( testNum == 0 ) && strcmp( pData, "0" ) ) {
186 DoMessageBox( "Please Enter An Integer", error_title, eMB_OK );
196 DoMessageBox( "Please Enter An Integer", error_title, eMB_OK );
200 /*--------------------------------
202 ---------------------------------*/
206 Major clean up of variable names etc required, excluding Mars's ones,
207 which are nicely done :)
211 EMessageBoxReturn DoMessageBox( const char* lpText, const char* lpCaption, EMessageBoxType type ){
212 GtkWidget *window, *w, *vbox, *hbox;
213 EMessageBoxReturn ret;
216 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
217 gtk_signal_connect( GTK_OBJECT( window ), "delete_event",
218 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
219 gtk_signal_connect( GTK_OBJECT( window ), "destroy",
220 GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
221 gtk_window_set_title( GTK_WINDOW( window ), lpCaption );
222 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
223 g_object_set_data( G_OBJECT( window ), "loop", &loop );
224 g_object_set_data( G_OBJECT( window ), "ret", &ret );
225 gtk_widget_realize( window );
227 vbox = gtk_vbox_new( FALSE, 10 );
228 gtk_container_add( GTK_CONTAINER( window ), vbox );
229 gtk_widget_show( vbox );
231 w = gtk_label_new( lpText );
232 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
233 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
234 gtk_widget_show( w );
236 w = gtk_hseparator_new();
237 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
238 gtk_widget_show( w );
240 hbox = gtk_hbox_new( FALSE, 10 );
241 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
242 gtk_widget_show( hbox );
244 if ( type == eMB_OK ) {
245 w = gtk_button_new_with_label( "Ok" );
246 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
247 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
248 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
249 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
250 gtk_widget_grab_default( w );
251 gtk_widget_show( w );
254 else if ( type == eMB_OKCANCEL ) {
255 w = gtk_button_new_with_label( "Ok" );
256 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
257 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
258 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
259 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
260 gtk_widget_grab_default( w );
261 gtk_widget_show( w );
263 w = gtk_button_new_with_label( "Cancel" );
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( eIDCANCEL ) );
267 gtk_widget_show( w );
270 else if ( type == eMB_YESNOCANCEL ) {
271 w = gtk_button_new_with_label( "Yes" );
272 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
273 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
274 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
275 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
276 gtk_widget_grab_default( w );
277 gtk_widget_show( w );
279 w = gtk_button_new_with_label( "No" );
280 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
281 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
282 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
283 gtk_widget_show( w );
285 w = gtk_button_new_with_label( "Cancel" );
286 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
287 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
288 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
289 gtk_widget_show( w );
292 else /* if (mode == MB_YESNO) */
294 w = gtk_button_new_with_label( "Yes" );
295 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
296 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
297 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
298 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
299 gtk_widget_grab_default( w );
300 gtk_widget_show( w );
302 w = gtk_button_new_with_label( "No" );
303 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
304 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
305 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
306 gtk_widget_show( w );
310 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
311 gtk_widget_show( window );
312 gtk_grab_add( window );
315 gtk_main_iteration();
317 gtk_grab_remove( window );
318 gtk_widget_destroy( window );
323 EMessageBoxReturn DoIntersectBox( IntersectRS* rs ){
324 GtkWidget *window, *w, *vbox, *hbox;
325 GtkWidget *radio1, *radio2;
326 GtkWidget *check1, *check2;
327 EMessageBoxReturn ret;
330 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
332 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
333 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
335 gtk_window_set_title( GTK_WINDOW( window ), "Intersect" );
336 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
338 g_object_set_data( G_OBJECT( window ), "loop", &loop );
339 g_object_set_data( G_OBJECT( window ), "ret", &ret );
341 gtk_widget_realize( window );
345 vbox = gtk_vbox_new( FALSE, 10 );
346 gtk_container_add( GTK_CONTAINER( window ), vbox );
347 gtk_widget_show( vbox );
352 radio1 = gtk_radio_button_new_with_label( NULL, "Use Whole Map" );
353 gtk_box_pack_start( GTK_BOX( vbox ), radio1, FALSE, FALSE, 2 );
354 gtk_widget_show( radio1 );
356 radio2 = gtk_radio_button_new_with_label( ( (GtkRadioButton*)radio1 )->group, "Use Selected Brushes" );
357 gtk_box_pack_start( GTK_BOX( vbox ), radio2, FALSE, FALSE, 2 );
358 gtk_widget_show( radio2 );
360 w = gtk_hseparator_new();
361 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
362 gtk_widget_show( w );
364 check1 = gtk_check_button_new_with_label( "Include Detail Brushes" );
365 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
366 gtk_widget_show( check1 );
368 check2 = gtk_check_button_new_with_label( "Select Duplicate Brushes Only" );
369 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
370 gtk_widget_show( check2 );
372 hbox = gtk_hbox_new( FALSE, 10 );
373 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
374 gtk_widget_show( hbox );
376 // ---- hbox ---- ok/cancel buttons
378 w = gtk_button_new_with_label( "Ok" );
379 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
380 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
382 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
383 gtk_widget_grab_default( w );
384 gtk_widget_show( w );
386 w = gtk_button_new_with_label( "Cancel" );
387 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
388 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
389 gtk_widget_show( w );
396 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
397 gtk_widget_show( window );
398 gtk_grab_add( window );
401 gtk_main_iteration();
403 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio1 ) ) {
404 rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP;
406 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio2 ) ) {
407 rs->nBrushOptions = BRUSH_OPT_SELECTED;
410 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
411 rs->bDuplicateOnly = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
413 gtk_grab_remove( window );
414 gtk_widget_destroy( window );
419 EMessageBoxReturn DoPolygonBox( PolygonRS* rs ){
420 GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2;
422 GtkWidget *check1, *check2, *check3;
423 GtkWidget *text1, *text2;
425 EMessageBoxReturn ret;
428 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
430 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
431 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
433 gtk_window_set_title( GTK_WINDOW( window ), "Polygon Builder" );
434 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
436 g_object_set_data( G_OBJECT( window ), "loop", &loop );
437 g_object_set_data( G_OBJECT( window ), "ret", &ret );
439 gtk_widget_realize( window );
443 vbox = gtk_vbox_new( FALSE, 10 );
444 gtk_container_add( GTK_CONTAINER( window ), vbox );
445 gtk_widget_show( vbox );
449 hbox = gtk_hbox_new( FALSE, 10 );
450 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
451 gtk_widget_show( hbox );
456 vbox2 = gtk_vbox_new( FALSE, 10 );
457 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
458 gtk_widget_show( vbox2 );
462 hbox2 = gtk_hbox_new( FALSE, 10 );
463 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
464 gtk_widget_show( hbox2 );
468 text1 = gtk_entry_new_with_max_length( 256 );
469 gtk_entry_set_text( (GtkEntry*)text1, "3" );
470 gtk_box_pack_start( GTK_BOX( hbox2 ), text1, FALSE, FALSE, 2 );
471 gtk_widget_show( text1 );
473 w = gtk_label_new( "Number Of Sides" );
474 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
475 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
476 gtk_widget_show( w );
480 hbox2 = gtk_hbox_new( FALSE, 10 );
481 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
482 gtk_widget_show( hbox2 );
486 text2 = gtk_entry_new_with_max_length( 256 );
487 gtk_entry_set_text( (GtkEntry*)text2, "8" );
488 gtk_box_pack_start( GTK_BOX( hbox2 ), text2, FALSE, FALSE, 2 );
489 gtk_widget_show( text2 );
491 w = gtk_label_new( "Border Width" );
492 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
493 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
494 gtk_widget_show( w );
502 vbox2 = gtk_vbox_new( FALSE, 10 );
503 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
504 gtk_widget_show( vbox2 );
508 check1 = gtk_check_button_new_with_label( "Use Border" );
509 gtk_box_pack_start( GTK_BOX( vbox2 ), check1, FALSE, FALSE, 0 );
510 gtk_widget_show( check1 );
513 check2 = gtk_check_button_new_with_label( "Inverse Polygon" );
514 gtk_box_pack_start( GTK_BOX( vbox2 ), check2, FALSE, FALSE, 0 );
515 gtk_widget_show( check2 );
518 check3 = gtk_check_button_new_with_label( "Align Top Edge" );
519 gtk_box_pack_start( GTK_BOX( vbox2 ), check3, FALSE, FALSE, 0 );
520 gtk_widget_show( check3 );
526 hbox = gtk_hbox_new( FALSE, 10 );
527 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
528 gtk_widget_show( hbox );
532 w = gtk_button_new_with_label( "Ok" );
533 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
534 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
536 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
537 gtk_widget_grab_default( w );
538 gtk_widget_show( w );
540 w = gtk_button_new_with_label( "Cancel" );
541 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
542 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
543 gtk_widget_show( w );
550 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
551 gtk_widget_show( window );
552 gtk_grab_add( window );
554 bool dialogError = TRUE;
555 while ( dialogError )
559 gtk_main_iteration();
563 if ( ret == eIDOK ) {
564 rs->bUseBorder = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
565 rs->bInverse = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
566 rs->bAlignTop = gtk_toggle_button_get_active( (GtkToggleButton*)check3 ) ? true : false;
568 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text1 ), 3, 32, "Number Of Sides", &rs->nSides ) ) {
572 if ( rs->bUseBorder ) {
573 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text2 ), 8, 256, "Border Width", &rs->nBorderWidth ) ) {
580 gtk_grab_remove( window );
581 gtk_widget_destroy( window );
587 // for stair builder stuck as close as i could to the MFC version
588 // obviously feel free to change it at will :)
589 EMessageBoxReturn DoBuildStairsBox( BuildStairsRS* rs ){
590 // i made widgets for just about everything ... i think that's what i need to do dunno tho
591 GtkWidget *window, *w, *vbox, *hbox;
592 GtkWidget *textStairHeight, *textRiserTex, *textMainTex;
593 GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value
594 GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle;
595 GtkWidget *checkUseDetail;
596 GSList *radioDirection, *radioStyle;
597 EMessageBoxReturn ret;
600 char *text = "Please set a value in the boxes below and press 'OK' to build the stairs";
602 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
604 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
605 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
607 gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" );
609 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
611 g_object_set_data( G_OBJECT( window ), "loop", &loop );
612 g_object_set_data( G_OBJECT( window ), "ret", &ret );
614 gtk_widget_realize( window );
617 vbox = gtk_vbox_new( FALSE, 10 );
618 gtk_container_add( GTK_CONTAINER( window ), vbox );
619 gtk_widget_show( vbox );
621 hbox = gtk_hbox_new( FALSE, 10 );
622 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
623 gtk_widget_show( hbox );
625 // dunno if you want this text or not ...
626 w = gtk_label_new( text );
627 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ...
628 gtk_widget_show( w );
630 w = gtk_hseparator_new();
631 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
632 gtk_widget_show( w );
634 // ------------------------- // indenting == good way of keeping track of lines :)
637 hbox = gtk_hbox_new( FALSE, 10 );
638 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
639 gtk_widget_show( hbox );
641 textStairHeight = gtk_entry_new_with_max_length( 256 );
642 gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 );
643 gtk_widget_show( textStairHeight );
645 w = gtk_label_new( "Stair Height" );
646 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
647 gtk_widget_show( w );
649 // ------------------------- //
651 hbox = gtk_hbox_new( FALSE, 10 );
652 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
653 gtk_widget_show( hbox );
655 w = gtk_label_new( "Direction:" );
656 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
657 gtk_widget_show( w );
659 // -------------------------- //
661 hbox = gtk_hbox_new( FALSE, 10 );
662 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
663 gtk_widget_show( hbox );
665 // radio buttons confuse me ...
666 // but this _looks_ right
668 // djbob: actually it looks very nice :), slightly better than the way i did it
669 // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh
671 radioNorth = gtk_radio_button_new_with_label( NULL, "North" );
672 gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 );
673 gtk_widget_show( radioNorth );
675 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) );
677 radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" );
678 gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 );
679 gtk_widget_show( radioSouth );
681 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) );
683 radioEast = gtk_radio_button_new_with_label( radioDirection, "East" );
684 gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 );
685 gtk_widget_show( radioEast );
687 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) );
689 radioWest = gtk_radio_button_new_with_label( radioDirection, "West" );
690 gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 );
691 gtk_widget_show( radioWest );
693 // --------------------------- //
695 hbox = gtk_hbox_new( FALSE, 10 );
696 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
697 gtk_widget_show( hbox );
699 w = gtk_label_new( "Style:" );
700 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
701 gtk_widget_show( w );
703 // --------------------------- //
705 hbox = gtk_hbox_new( FALSE, 10 );
706 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
707 gtk_widget_show( hbox );
709 radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" );
710 gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 );
711 gtk_widget_show( radioOldStyle );
713 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) );
715 radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" );
716 gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 );
717 gtk_widget_show( radioBobStyle );
719 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) );
721 radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" );
722 gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 );
723 gtk_widget_show( radioCornerStyle );
725 // err, the q3r has an if or something so you need bob style checked before this
726 // is "ungreyed out" but you'll need to do that, as i suck :)
728 // djbob: er.... yeah um, im not at all sure how i'm gonna sort this
729 // djbob: think we need some button callback functions or smuffin
730 // FIXME: actually get around to doing what i suggested!!!!
732 checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" );
733 gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 );
734 gtk_widget_show( checkUseDetail );
736 // --------------------------- //
738 hbox = gtk_hbox_new( FALSE, 10 );
739 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
740 gtk_widget_show( hbox );
742 textMainTex = gtk_entry_new_with_max_length( 512 );
743 gtk_entry_set_text( GTK_ENTRY( textMainTex ), rs->mainTexture );
744 gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 );
745 gtk_widget_show( textMainTex );
747 w = gtk_label_new( "Main Texture" );
748 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
749 gtk_widget_show( w );
751 // -------------------------- //
753 hbox = gtk_hbox_new( FALSE, 10 );
754 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
755 gtk_widget_show( hbox );
757 textRiserTex = gtk_entry_new_with_max_length( 512 );
758 gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 );
759 gtk_widget_show( textRiserTex );
761 w = gtk_label_new( "Riser Texture" );
762 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
763 gtk_widget_show( w );
765 // -------------------------- //
766 w = gtk_hseparator_new();
767 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
768 gtk_widget_show( w );
770 hbox = gtk_hbox_new( FALSE, 10 );
771 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
772 gtk_widget_show( hbox );
774 w = gtk_button_new_with_label( "OK" );
775 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
776 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
777 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
778 gtk_widget_grab_default( w );
779 gtk_widget_show( w );
781 w = gtk_button_new_with_label( "Cancel" );
782 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
783 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
784 gtk_widget_show( w );
788 // +djbob: need our "little" modal loop mars :P
789 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
790 gtk_widget_show( window );
791 gtk_grab_add( window );
793 bool dialogError = TRUE;
794 while ( dialogError )
798 gtk_main_iteration();
802 if ( ret == eIDOK ) {
803 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)checkUseDetail ) ? true : false;
805 strcpy( rs->riserTexture, gtk_entry_get_text( (GtkEntry*)textRiserTex ) );
806 strcpy( rs->mainTexture, gtk_entry_get_text( (GtkEntry*)textMainTex ) );
808 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioNorth ) ) {
809 rs->direction = MOVE_NORTH;
811 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioSouth ) ) {
812 rs->direction = MOVE_SOUTH;
814 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioEast ) ) {
815 rs->direction = MOVE_EAST;
817 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioWest ) ) {
818 rs->direction = MOVE_WEST;
821 if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textStairHeight ), "Stair Height", &rs->stairHeight ) ) {
825 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioOldStyle ) ) {
826 rs->style = STYLE_ORIGINAL;
828 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioBobStyle ) ) {
829 rs->style = STYLE_BOB;
831 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioCornerStyle ) ) {
832 rs->style = STYLE_CORNER;
837 gtk_grab_remove( window );
838 gtk_widget_destroy( window );
843 // there we go, all done ... on my end at least, not bad for a night's work
846 EMessageBoxReturn DoDoorsBox( DoorRS* rs ){
847 GtkWidget *window, *hbox, *vbox, *w;
848 GtkWidget *textFrontBackTex, *textTrimTex;
849 GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV;
850 GtkWidget *comboMain, *comboTrim;
851 GtkWidget *buttonSetMain, *buttonSetTrim;
852 GtkWidget *radioNS, *radioEW;
853 GSList *radioOrientation;
855 EMessageBoxReturn ret;
858 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
860 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
861 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
863 gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" );
865 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
867 g_object_set_data( G_OBJECT( window ), "loop", &loop );
868 g_object_set_data( G_OBJECT( window ), "ret", &ret );
870 gtk_widget_realize( window );
873 GList *listMainTextures = NULL;
874 GList *listTrimTextures = NULL;
875 LoadGList( GetFilename( buffer, "plugins/bt/door-tex.txt" ), &listMainTextures );
876 LoadGList( GetFilename( buffer, "plugins/bt/door-tex-trim.txt" ), &listTrimTextures );
878 vbox = gtk_vbox_new( FALSE, 10 );
879 gtk_container_add( GTK_CONTAINER( window ), vbox );
880 gtk_widget_show( vbox );
882 // -------------------------- //
884 hbox = gtk_hbox_new( FALSE, 10 );
885 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
886 gtk_widget_show( hbox );
888 textFrontBackTex = gtk_entry_new_with_max_length( 512 );
889 gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture );
890 gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 );
891 gtk_widget_show( textFrontBackTex );
893 w = gtk_label_new( "Door Front/Back Texture" );
894 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
895 gtk_widget_show( w );
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 textTrimTex = gtk_entry_new_with_max_length( 512 );
904 gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 );
905 gtk_widget_show( textTrimTex );
907 w = gtk_label_new( "Door Trim 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 // sp: horizontally ????
918 // djbob: yes mars, u can spell :]
919 checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" );
920 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE );
921 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 );
922 gtk_widget_show( checkScaleMainH );
924 checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" );
925 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE );
926 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 );
927 gtk_widget_show( checkScaleTrimH );
929 // ---------------------- //
931 hbox = gtk_hbox_new( FALSE, 10 );
932 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
933 gtk_widget_show( hbox );
935 checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" );
936 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE );
937 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 );
938 gtk_widget_show( checkScaleMainV );
940 checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" );
941 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 );
942 gtk_widget_show( checkScaleTrimV );
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 // djbob: lists added
952 comboMain = gtk_combo_new();
953 gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 );
954 gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures );
955 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
956 gtk_widget_show( comboMain );
958 tw1.one = textFrontBackTex;
961 buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" );
962 gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 );
963 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 );
964 gtk_widget_show( buttonSetMain );
966 // ------------------- //
968 hbox = gtk_hbox_new( FALSE, 10 );
969 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
970 gtk_widget_show( hbox );
972 comboTrim = gtk_combo_new();
973 gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 );
974 gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures );
975 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
976 gtk_widget_show( comboTrim );
978 tw2.one = textTrimTex;
981 buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" );
982 gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 );
983 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 );
984 gtk_widget_show( buttonSetTrim );
986 // ------------------ //
988 hbox = gtk_hbox_new( FALSE, 10 );
989 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
990 gtk_widget_show( hbox );
992 w = gtk_label_new( "Orientation" );
993 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
994 gtk_widget_show( w );
996 // argh more radio buttons!
997 radioNS = gtk_radio_button_new_with_label( NULL, "North - South" );
998 gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 );
999 gtk_widget_show( radioNS );
1001 radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) );
1003 radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" );
1004 gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 );
1005 gtk_widget_show( radioEW );
1007 // ----------------- //
1009 w = gtk_hseparator_new();
1010 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1011 gtk_widget_show( w );
1013 // ----------------- //
1015 hbox = gtk_hbox_new( FALSE, 10 );
1016 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1017 gtk_widget_show( hbox );
1019 w = gtk_button_new_with_label( "OK" );
1020 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1021 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1022 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1023 gtk_widget_grab_default( w );
1024 gtk_widget_show( w );
1026 w = gtk_button_new_with_label( "Cancel" );
1027 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1028 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1029 gtk_widget_show( w );
1032 // ----------------- //
1035 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1036 gtk_widget_show( window );
1037 gtk_grab_add( window );
1040 gtk_main_iteration();
1042 strcpy( rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ) );
1043 strcpy( rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ) );
1045 rs->bScaleMainH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainH ) ) ? true : false;
1046 rs->bScaleMainV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainV ) ) ? true : false;
1047 rs->bScaleTrimH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ) ) ? true : false;
1048 rs->bScaleTrimV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimV ) ) ? true : false;
1050 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioNS ) ) ) {
1051 rs->nOrientation = DIRECTION_NS;
1053 else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioEW ) ) ) {
1054 rs->nOrientation = DIRECTION_EW;
1057 gtk_grab_remove( window );
1058 gtk_widget_destroy( window );
1064 EMessageBoxReturn DoPathPlotterBox( PathPlotterRS* rs ){
1065 GtkWidget *window, *w, *vbox, *hbox;
1067 GtkWidget *text1, *text2, *text3;
1068 GtkWidget *check1, *check2;
1070 EMessageBoxReturn ret;
1073 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1075 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1076 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1078 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1079 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1081 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1082 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1084 gtk_widget_realize( window );
1088 vbox = gtk_vbox_new( FALSE, 10 );
1089 gtk_container_add( GTK_CONTAINER( window ), vbox );
1090 gtk_widget_show( vbox );
1094 hbox = gtk_hbox_new( FALSE, 10 );
1095 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1096 gtk_widget_show( hbox );
1100 text1 = gtk_entry_new_with_max_length( 256 );
1101 gtk_entry_set_text( (GtkEntry*)text1, "25" );
1102 gtk_box_pack_start( GTK_BOX( hbox ), text1, FALSE, FALSE, 2 );
1103 gtk_widget_show( text1 );
1105 w = gtk_label_new( "Number Of Points" );
1106 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1107 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1108 gtk_widget_show( w );
1112 hbox = gtk_hbox_new( FALSE, 10 );
1113 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1114 gtk_widget_show( hbox );
1118 text2 = gtk_entry_new_with_max_length( 256 );
1119 gtk_entry_set_text( (GtkEntry*)text2, "3" );
1120 gtk_box_pack_start( GTK_BOX( hbox ), text2, FALSE, FALSE, 2 );
1121 gtk_widget_show( text2 );
1123 w = gtk_label_new( "Multipler" );
1124 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1125 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1126 gtk_widget_show( w );
1130 w = gtk_label_new( "Path Distance = dist(start -> apex) * multiplier" );
1131 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1132 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1133 gtk_widget_show( w );
1135 hbox = gtk_hbox_new( FALSE, 10 );
1136 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1137 gtk_widget_show( hbox );
1141 text3 = gtk_entry_new_with_max_length( 256 );
1142 gtk_entry_set_text( (GtkEntry*)text3, "-800" );
1143 gtk_box_pack_start( GTK_BOX( hbox ), text3, FALSE, FALSE, 2 );
1144 gtk_widget_show( text3 );
1146 w = gtk_label_new( "Gravity" );
1147 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1148 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1149 gtk_widget_show( w );
1153 w = gtk_hseparator_new();
1154 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1155 gtk_widget_show( w );
1157 check1 = gtk_check_button_new_with_label( "No Dynamic Update" );
1158 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
1159 gtk_widget_show( check1 );
1161 check2 = gtk_check_button_new_with_label( "Show Bounding Lines" );
1162 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
1163 gtk_widget_show( check2 );
1168 // ----------------- //
1170 w = gtk_hseparator_new();
1171 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1172 gtk_widget_show( w );
1174 // ----------------- //
1176 hbox = gtk_hbox_new( FALSE, 10 );
1177 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1178 gtk_widget_show( hbox );
1180 w = gtk_button_new_with_label( "Enable" );
1181 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1182 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1183 gtk_widget_show( w );
1185 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1186 gtk_widget_grab_default( w );
1188 w = gtk_button_new_with_label( "Disable" );
1189 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1190 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
1191 gtk_widget_show( w );
1193 w = gtk_button_new_with_label( "Cancel" );
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( eIDCANCEL ) );
1196 gtk_widget_show( w );
1200 // ----------------- //
1202 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1203 gtk_widget_show( window );
1204 gtk_grab_add( window );
1206 bool dialogError = TRUE;
1207 while ( dialogError )
1211 gtk_main_iteration();
1213 dialogError = FALSE;
1215 if ( ret == eIDYES ) {
1216 if ( !ValidateTextIntRange( gtk_entry_get_text( GTK_ENTRY( text1 ) ), 1, 200, "Number Of Points", &rs->nPoints ) ) {
1220 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text2 ) ), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier ) ) {
1224 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text3 ) ), -10000.0f, -1.0f, "Gravity", &rs->fGravity ) ) {
1228 rs->bNoUpdate = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check1 ) ) ? true : false;
1229 rs->bShowExtra = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2 ) ) ? true : false;
1233 gtk_grab_remove( window );
1234 gtk_widget_destroy( window );
1239 EMessageBoxReturn DoCTFColourChangeBox(){
1240 GtkWidget *window, *w, *vbox, *hbox;
1241 EMessageBoxReturn ret;
1244 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1246 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1247 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1249 gtk_window_set_title( GTK_WINDOW( window ), "CTF Colour Changer" );
1250 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1252 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1253 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1255 gtk_widget_realize( window );
1259 vbox = gtk_vbox_new( FALSE, 10 );
1260 gtk_container_add( GTK_CONTAINER( window ), vbox );
1261 gtk_widget_show( vbox );
1265 hbox = gtk_hbox_new( FALSE, 10 );
1266 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
1267 gtk_widget_show( hbox );
1269 // ---- hbox ---- ok/cancel buttons
1271 w = gtk_button_new_with_label( "Red->Blue" );
1272 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1273 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1275 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1276 gtk_widget_grab_default( w );
1277 gtk_widget_show( w );
1279 w = gtk_button_new_with_label( "Blue->Red" );
1280 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1281 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1282 gtk_widget_show( w );
1284 w = gtk_button_new_with_label( "Cancel" );
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( eIDCANCEL ) );
1287 gtk_widget_show( w );
1294 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1295 gtk_widget_show( window );
1296 gtk_grab_add( window );
1299 gtk_main_iteration();
1301 gtk_grab_remove( window );
1302 gtk_widget_destroy( window );
1307 EMessageBoxReturn DoResetTextureBox( ResetTextureRS* rs ){
1310 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1312 EMessageBoxReturn ret;
1315 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1317 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1318 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1320 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1321 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1323 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1324 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1326 gtk_widget_realize( window );
1328 vbox = gtk_vbox_new( FALSE, 10 );
1329 gtk_container_add( GTK_CONTAINER( window ), vbox );
1330 gtk_widget_show( vbox );
1334 hbox = gtk_hbox_new( FALSE, 10 );
1335 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1336 gtk_widget_show( hbox );
1340 texSelected = "Currently Selected Texture: ";
1341 texSelected += GetCurrentTexture();
1343 w = gtk_label_new( texSelected );
1344 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1345 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1346 gtk_widget_show( w );
1350 frame = gtk_frame_new( "Reset Texture Names" );
1351 gtk_widget_show( frame );
1352 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1354 table = gtk_table_new( 2, 3, TRUE );
1355 gtk_widget_show( table );
1356 gtk_container_add( GTK_CONTAINER( frame ), table );
1357 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1358 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1359 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1363 dlgTexReset.cbTexChange = gtk_check_button_new_with_label( "Enabled" );
1364 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbTexChange ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1365 gtk_widget_show( dlgTexReset.cbTexChange );
1366 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbTexChange, 0, 1, 0, 1,
1367 (GtkAttachOptions) ( GTK_FILL ),
1368 (GtkAttachOptions) ( 0 ), 0, 0 );
1370 w = gtk_label_new( "Old Name: " );
1371 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1372 (GtkAttachOptions) ( GTK_FILL ),
1373 (GtkAttachOptions) ( 0 ), 0, 0 );
1374 gtk_widget_show( w );
1376 dlgTexReset.editTexOld = gtk_entry_new_with_max_length( 256 );
1377 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexOld ), rs->textureName );
1378 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexOld, 2, 3, 0, 1,
1379 (GtkAttachOptions) ( GTK_FILL ),
1380 (GtkAttachOptions) ( 0 ), 0, 0 );
1381 gtk_widget_show( dlgTexReset.editTexOld );
1383 w = gtk_label_new( "New Name: " );
1384 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1385 (GtkAttachOptions) ( GTK_FILL ),
1386 (GtkAttachOptions) ( 0 ), 0, 0 );
1387 gtk_widget_show( w );
1389 dlgTexReset.editTexNew = gtk_entry_new_with_max_length( 256 );
1390 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexNew ), rs->textureName );
1391 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexNew, 2, 3, 1, 2,
1392 (GtkAttachOptions) ( GTK_FILL ),
1393 (GtkAttachOptions) ( 0 ), 0, 0 );
1394 gtk_widget_show( dlgTexReset.editTexNew );
1398 frame = gtk_frame_new( "Reset Scales" );
1399 gtk_widget_show( frame );
1400 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1402 table = gtk_table_new( 2, 3, TRUE );
1403 gtk_widget_show( table );
1404 gtk_container_add( GTK_CONTAINER( frame ), table );
1405 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1406 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1407 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1411 dlgTexReset.cbScaleHor = gtk_check_button_new_with_label( "Enabled" );
1412 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleHor ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1413 gtk_widget_show( dlgTexReset.cbScaleHor );
1414 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleHor, 0, 1, 0, 1,
1415 (GtkAttachOptions) ( GTK_FILL ),
1416 (GtkAttachOptions) ( 0 ), 0, 0 );
1418 w = gtk_label_new( "New Horizontal Scale: " );
1419 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1420 (GtkAttachOptions) ( GTK_FILL ),
1421 (GtkAttachOptions) ( 0 ), 0, 0 );
1422 gtk_widget_show( w );
1424 dlgTexReset.editScaleHor = gtk_entry_new_with_max_length( 256 );
1425 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleHor ), "0.5" );
1426 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleHor, 2, 3, 0, 1,
1427 (GtkAttachOptions) ( GTK_FILL ),
1428 (GtkAttachOptions) ( 0 ), 0, 0 );
1429 gtk_widget_show( dlgTexReset.editScaleHor );
1432 dlgTexReset.cbScaleVert = gtk_check_button_new_with_label( "Enabled" );
1433 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleVert ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1434 gtk_widget_show( dlgTexReset.cbScaleVert );
1435 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleVert, 0, 1, 1, 2,
1436 (GtkAttachOptions) ( GTK_FILL ),
1437 (GtkAttachOptions) ( 0 ), 0, 0 );
1439 w = gtk_label_new( "New Vertical Scale: " );
1440 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1441 (GtkAttachOptions) ( GTK_FILL ),
1442 (GtkAttachOptions) ( 0 ), 0, 0 );
1443 gtk_widget_show( w );
1445 dlgTexReset.editScaleVert = gtk_entry_new_with_max_length( 256 );
1446 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleVert ), "0.5" );
1447 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleVert, 2, 3, 1, 2,
1448 (GtkAttachOptions) ( GTK_FILL ),
1449 (GtkAttachOptions) ( 0 ), 0, 0 );
1450 gtk_widget_show( dlgTexReset.editScaleVert );
1454 frame = gtk_frame_new( "Reset Shift" );
1455 gtk_widget_show( frame );
1456 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1458 table = gtk_table_new( 2, 3, TRUE );
1459 gtk_widget_show( table );
1460 gtk_container_add( GTK_CONTAINER( frame ), table );
1461 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1462 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1463 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1467 dlgTexReset.cbShiftHor = gtk_check_button_new_with_label( "Enabled" );
1468 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftHor ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1469 gtk_widget_show( dlgTexReset.cbShiftHor );
1470 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftHor, 0, 1, 0, 1,
1471 (GtkAttachOptions) ( GTK_FILL ),
1472 (GtkAttachOptions) ( 0 ), 0, 0 );
1474 w = gtk_label_new( "New Horizontal Shift: " );
1475 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1476 (GtkAttachOptions) ( GTK_FILL ),
1477 (GtkAttachOptions) ( 0 ), 0, 0 );
1478 gtk_widget_show( w );
1480 dlgTexReset.editShiftHor = gtk_entry_new_with_max_length( 256 );
1481 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftHor ), "0" );
1482 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftHor, 2, 3, 0, 1,
1483 (GtkAttachOptions) ( GTK_FILL ),
1484 (GtkAttachOptions) ( 0 ), 0, 0 );
1485 gtk_widget_show( dlgTexReset.editShiftHor );
1488 dlgTexReset.cbShiftVert = gtk_check_button_new_with_label( "Enabled" );
1489 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftVert ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1490 gtk_widget_show( dlgTexReset.cbShiftVert );
1491 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftVert, 0, 1, 1, 2,
1492 (GtkAttachOptions) ( GTK_FILL ),
1493 (GtkAttachOptions) ( 0 ), 0, 0 );
1495 w = gtk_label_new( "New Vertical Shift: " );
1496 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1497 (GtkAttachOptions) ( GTK_FILL ),
1498 (GtkAttachOptions) ( 0 ), 0, 0 );
1499 gtk_widget_show( w );
1501 dlgTexReset.editShiftVert = gtk_entry_new_with_max_length( 256 );
1502 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftVert ), "0" );
1503 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftVert, 2, 3, 1, 2,
1504 (GtkAttachOptions) ( GTK_FILL ),
1505 (GtkAttachOptions) ( 0 ), 0, 0 );
1506 gtk_widget_show( dlgTexReset.editShiftVert );
1510 frame = gtk_frame_new( "Reset Rotation" );
1511 gtk_widget_show( frame );
1512 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1514 table = gtk_table_new( 1, 3, TRUE );
1515 gtk_widget_show( table );
1516 gtk_container_add( GTK_CONTAINER( frame ), table );
1517 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1518 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1519 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1523 dlgTexReset.cbRotation = gtk_check_button_new_with_label( "Enabled" );
1524 gtk_widget_show( dlgTexReset.cbRotation );
1525 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbRotation, 0, 1, 0, 1,
1526 (GtkAttachOptions) ( GTK_FILL ),
1527 (GtkAttachOptions) ( 0 ), 0, 0 );
1529 w = gtk_label_new( "New Rotation Value: " );
1530 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1531 (GtkAttachOptions) ( GTK_FILL ),
1532 (GtkAttachOptions) ( 0 ), 0, 0 );
1533 gtk_widget_show( w );
1535 dlgTexReset.editRotation = gtk_entry_new_with_max_length( 256 );
1536 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editRotation ), "0" );
1537 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editRotation, 2, 3, 0, 1,
1538 (GtkAttachOptions) ( GTK_FILL ),
1539 (GtkAttachOptions) ( 0 ), 0, 0 );
1540 gtk_widget_show( dlgTexReset.editRotation );
1544 hbox = gtk_hbox_new( FALSE, 10 );
1545 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1546 gtk_widget_show( hbox );
1550 w = gtk_button_new_with_label( "Use Selected Brushes" );
1551 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1552 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1554 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1555 gtk_widget_grab_default( w );
1556 gtk_widget_show( w );
1558 w = gtk_button_new_with_label( "Use All Brushes" );
1559 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1560 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1561 gtk_widget_show( w );
1563 w = gtk_button_new_with_label( "Cancel" );
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( eIDCANCEL ) );
1566 gtk_widget_show( w );
1573 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1574 gtk_widget_show( window );
1575 gtk_grab_add( window );
1577 Update_TextureReseter();
1579 bool dialogError = TRUE;
1580 while ( dialogError )
1584 gtk_main_iteration();
1586 dialogError = FALSE;
1588 if ( ret != eIDCANCEL ) {
1589 rs->bResetRotation = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
1590 if ( rs->bResetRotation ) {
1591 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editRotation ) ), "Rotation", &rs->rotation ) ) {
1596 rs->bResetScale[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
1597 if ( rs->bResetScale[0] ) {
1598 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleHor ) ), "Horizontal Scale", &rs->fScale[0] ) ) {
1603 rs->bResetScale[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
1604 if ( rs->bResetScale[1] ) {
1605 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleVert ) ), "Vertical Scale", &rs->fScale[1] ) ) {
1610 rs->bResetShift[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
1611 if ( rs->bResetShift[0] ) {
1612 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftHor ) ), "Horizontal Shift", &rs->fShift[0] ) ) {
1617 rs->bResetShift[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
1618 if ( rs->bResetShift[1] ) {
1619 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftVert ) ), "Vertical Shift", &rs->fShift[1] ) ) {
1624 rs->bResetTextureName = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
1625 if ( rs->bResetTextureName ) {
1626 strcpy( rs->textureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexOld ) ) );
1627 strcpy( rs->newTextureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexNew ) ) );
1632 gtk_grab_remove( window );
1633 gtk_widget_destroy( window );
1638 EMessageBoxReturn DoTrainThingBox( TrainThingRS* rs ){
1641 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1643 GtkWidget *radiusX, *radiusY;
1644 GtkWidget *angleStart, *angleEnd;
1645 GtkWidget *heightStart, *heightEnd;
1646 GtkWidget *numPoints;
1648 EMessageBoxReturn ret;
1651 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1653 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1654 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1656 gtk_window_set_title( GTK_WINDOW( window ), "Train Thing" );
1657 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1659 gtk_object_set_data( GTK_OBJECT( window ), "loop", &loop );
1660 gtk_object_set_data( GTK_OBJECT( window ), "ret", &ret );
1662 gtk_widget_realize( window );
1664 vbox = gtk_vbox_new( FALSE, 10 );
1665 gtk_container_add( GTK_CONTAINER( window ), vbox );
1666 gtk_widget_show( vbox );
1670 hbox = gtk_hbox_new( FALSE, 10 );
1671 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1672 gtk_widget_show( hbox );
1676 frame = gtk_frame_new( "Radii" );
1677 gtk_widget_show( frame );
1678 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1680 table = gtk_table_new( 2, 3, TRUE );
1681 gtk_widget_show( table );
1682 gtk_container_add( GTK_CONTAINER( frame ), table );
1683 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1684 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1685 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1689 w = gtk_label_new( "X: " );
1690 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1691 (GtkAttachOptions) ( GTK_FILL ),
1692 (GtkAttachOptions) ( 0 ), 0, 0 );
1693 gtk_widget_show( w );
1695 radiusX = gtk_entry_new_with_max_length( 256 );
1696 gtk_entry_set_text( GTK_ENTRY( radiusX ), "100" );
1697 gtk_table_attach( GTK_TABLE( table ), radiusX, 1, 2, 0, 1,
1698 (GtkAttachOptions) ( GTK_FILL ),
1699 (GtkAttachOptions) ( 0 ), 0, 0 );
1700 gtk_widget_show( radiusX );
1704 w = gtk_label_new( "Y: " );
1705 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1706 (GtkAttachOptions) ( GTK_FILL ),
1707 (GtkAttachOptions) ( 0 ), 0, 0 );
1708 gtk_widget_show( w );
1710 radiusY = gtk_entry_new_with_max_length( 256 );
1711 gtk_entry_set_text( GTK_ENTRY( radiusY ), "100" );
1712 gtk_table_attach( GTK_TABLE( table ), radiusY, 1, 2, 1, 2,
1713 (GtkAttachOptions) ( GTK_FILL ),
1714 (GtkAttachOptions) ( 0 ), 0, 0 );
1715 gtk_widget_show( radiusY );
1719 frame = gtk_frame_new( "Angles" );
1720 gtk_widget_show( frame );
1721 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1723 table = gtk_table_new( 2, 3, TRUE );
1724 gtk_widget_show( table );
1725 gtk_container_add( GTK_CONTAINER( frame ), table );
1726 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1727 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1728 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1732 w = gtk_label_new( "Start: " );
1733 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1734 (GtkAttachOptions) ( GTK_FILL ),
1735 (GtkAttachOptions) ( 0 ), 0, 0 );
1736 gtk_widget_show( w );
1738 angleStart = gtk_entry_new_with_max_length( 256 );
1739 gtk_entry_set_text( GTK_ENTRY( angleStart ), "0" );
1740 gtk_table_attach( GTK_TABLE( table ), angleStart, 1, 2, 0, 1,
1741 (GtkAttachOptions) ( GTK_FILL ),
1742 (GtkAttachOptions) ( 0 ), 0, 0 );
1743 gtk_widget_show( angleStart );
1747 w = gtk_label_new( "End: " );
1748 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1749 (GtkAttachOptions) ( GTK_FILL ),
1750 (GtkAttachOptions) ( 0 ), 0, 0 );
1751 gtk_widget_show( w );
1753 angleEnd = gtk_entry_new_with_max_length( 256 );
1754 gtk_entry_set_text( GTK_ENTRY( angleEnd ), "90" );
1755 gtk_table_attach( GTK_TABLE( table ), angleEnd, 1, 2, 1, 2,
1756 (GtkAttachOptions) ( GTK_FILL ),
1757 (GtkAttachOptions) ( 0 ), 0, 0 );
1758 gtk_widget_show( angleEnd );
1761 frame = gtk_frame_new( "Height" );
1762 gtk_widget_show( frame );
1763 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1765 table = gtk_table_new( 2, 3, TRUE );
1766 gtk_widget_show( table );
1767 gtk_container_add( GTK_CONTAINER( frame ), table );
1768 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1769 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1770 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1774 w = gtk_label_new( "Start: " );
1775 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1776 (GtkAttachOptions) ( GTK_FILL ),
1777 (GtkAttachOptions) ( 0 ), 0, 0 );
1778 gtk_widget_show( w );
1780 heightStart = gtk_entry_new_with_max_length( 256 );
1781 gtk_entry_set_text( GTK_ENTRY( heightStart ), "0" );
1782 gtk_table_attach( GTK_TABLE( table ), heightStart, 1, 2, 0, 1,
1783 (GtkAttachOptions) ( GTK_FILL ),
1784 (GtkAttachOptions) ( 0 ), 0, 0 );
1785 gtk_widget_show( heightStart );
1789 w = gtk_label_new( "End: " );
1790 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1791 (GtkAttachOptions) ( GTK_FILL ),
1792 (GtkAttachOptions) ( 0 ), 0, 0 );
1793 gtk_widget_show( w );
1795 heightEnd = gtk_entry_new_with_max_length( 256 );
1796 gtk_entry_set_text( GTK_ENTRY( heightEnd ), "0" );
1797 gtk_table_attach( GTK_TABLE( table ), heightEnd, 1, 2, 1, 2,
1798 (GtkAttachOptions) ( GTK_FILL ),
1799 (GtkAttachOptions) ( 0 ), 0, 0 );
1800 gtk_widget_show( heightEnd );
1804 frame = gtk_frame_new( "Points" );
1805 gtk_widget_show( frame );
1806 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1808 table = gtk_table_new( 2, 3, TRUE );
1809 gtk_widget_show( table );
1810 gtk_container_add( GTK_CONTAINER( frame ), table );
1811 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1812 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1813 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1817 w = gtk_label_new( "Number: " );
1818 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1819 (GtkAttachOptions) ( GTK_FILL ),
1820 (GtkAttachOptions) ( 0 ), 0, 0 );
1821 gtk_widget_show( w );
1823 numPoints = gtk_entry_new_with_max_length( 256 );
1824 gtk_entry_set_text( GTK_ENTRY( numPoints ), "0" );
1825 gtk_table_attach( GTK_TABLE( table ), numPoints, 1, 2, 0, 1,
1826 (GtkAttachOptions) ( GTK_FILL ),
1827 (GtkAttachOptions) ( 0 ), 0, 0 );
1828 gtk_widget_show( numPoints );
1831 hbox = gtk_hbox_new( FALSE, 10 );
1832 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1833 gtk_widget_show( hbox );
1837 w = gtk_button_new_with_label( "Ok" );
1838 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1839 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1841 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1842 gtk_widget_grab_default( w );
1843 gtk_widget_show( w );
1845 w = gtk_button_new_with_label( "Cancel" );
1846 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1847 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1848 gtk_widget_show( w );
1855 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1856 gtk_widget_show( window );
1857 gtk_grab_add( window );
1859 bool dialogError = TRUE;
1860 while ( dialogError )
1864 gtk_main_iteration();
1866 dialogError = FALSE;
1868 if ( ret != eIDCANCEL ) {
1869 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusX ) ), "Radius (X)", &rs->fRadiusX ) ) {
1873 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusY ) ), "Radius (Y)", &rs->fRadiusY ) ) {
1877 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleStart ) ), "Angle (Start)", &rs->fStartAngle ) ) {
1881 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleEnd ) ), "Angle (End)", &rs->fEndAngle ) ) {
1885 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightStart ) ), "Height (Start)", &rs->fStartHeight ) ) {
1889 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightEnd ) ), "Height (End)", &rs->fEndHeight ) ) {
1893 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( numPoints ) ), "Num Points", &rs->iNumPoints ) ) {
1899 gtk_grab_remove( window );
1900 gtk_widget_destroy( window );
1905 // add a simple input for the MakeChain thing..
1906 EMessageBoxReturn DoMakeChainBox( MakeChainRS* rs ){
1907 GtkWidget *window, *w, *vbox, *hbox;
1908 GtkWidget *textlinkNum, *textlinkName;
1909 EMessageBoxReturn ret;
1912 char *text = "Please set a value in the boxes below and press 'OK' to make a chain";
1914 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1916 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1917 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1919 gtk_window_set_title( GTK_WINDOW( window ), "Make Chain" );
1921 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1923 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1924 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1926 gtk_widget_realize( window );
1929 vbox = gtk_vbox_new( FALSE, 10 );
1930 gtk_container_add( GTK_CONTAINER( window ), vbox );
1931 gtk_widget_show( vbox );
1933 hbox = gtk_hbox_new( FALSE, 10 );
1934 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
1935 gtk_widget_show( hbox );
1937 // dunno if you want this text or not ...
1938 w = gtk_label_new( text );
1939 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1940 gtk_widget_show( w );
1942 w = gtk_hseparator_new();
1943 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1944 gtk_widget_show( w );
1946 // ------------------------- //
1949 hbox = gtk_hbox_new( FALSE, 10 );
1950 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1951 gtk_widget_show( hbox );
1953 textlinkNum = gtk_entry_new_with_max_length( 256 );
1954 gtk_box_pack_start( GTK_BOX( hbox ), textlinkNum, FALSE, FALSE, 1 );
1955 gtk_widget_show( textlinkNum );
1957 w = gtk_label_new( "Number of elements in chain" );
1958 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
1959 gtk_widget_show( w );
1961 // -------------------------- //
1963 hbox = gtk_hbox_new( FALSE, 10 );
1964 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1965 gtk_widget_show( hbox );
1967 textlinkName = gtk_entry_new_with_max_length( 256 );
1968 gtk_box_pack_start( GTK_BOX( hbox ), textlinkName, FALSE, FALSE, 0 );
1969 gtk_widget_show( textlinkName );
1971 w = gtk_label_new( "Basename for chain's targetnames." );
1972 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
1973 gtk_widget_show( w );
1976 w = gtk_button_new_with_label( "OK" );
1977 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1978 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1979 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1980 gtk_widget_grab_default( w );
1981 gtk_widget_show( w );
1983 w = gtk_button_new_with_label( "Cancel" );
1984 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1985 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1986 gtk_widget_show( w );
1990 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1991 gtk_widget_show( window );
1992 gtk_grab_add( window );
1994 bool dialogError = TRUE;
1995 while ( dialogError )
1999 gtk_main_iteration();
2001 dialogError = FALSE;
2003 if ( ret == eIDOK ) {
2004 strcpy( rs->linkName, gtk_entry_get_text( (GtkEntry*)textlinkName ) );
2005 if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textlinkNum ), "Elements", &rs->linkNum ) ) {
2011 gtk_grab_remove( window );
2012 gtk_widget_destroy( window );