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 "../StdAfx.h"
21 #include "dialogs-gtk.h"
22 #include "../funchandlers.h"
25 #include <glib/gi18n.h>
27 /*--------------------------------
29 ---------------------------------*/
32 GtkWidget *cbTexChange;
33 GtkWidget *editTexOld, *editTexNew;
35 GtkWidget *cbScaleHor, *cbScaleVert;
36 GtkWidget *editScaleHor, *editScaleVert;
38 GtkWidget *cbShiftHor, *cbShiftVert;
39 GtkWidget *editShiftHor, *editShiftVert;
41 GtkWidget *cbRotation;
42 GtkWidget *editRotation;
45 dlg_texReset_t dlgTexReset;
47 void Update_TextureReseter();
49 static void dialog_button_callback_texreset_update( GtkWidget *widget, gpointer data ){
50 Update_TextureReseter();
53 void Update_TextureReseter(){
56 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
57 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editTexNew ), check );
58 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editTexOld ), check );
60 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
61 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editScaleHor ), check );
63 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
64 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editScaleVert ), check );
66 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
67 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editShiftHor ), check );
69 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
70 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editShiftVert ), check );
72 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
73 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editRotation ), check );
76 static void dialog_button_callback( GtkWidget *widget, gpointer data ){
80 parent = gtk_widget_get_toplevel( widget );
81 loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" );
82 ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" );
88 static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){
91 gtk_widget_hide( widget );
92 loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" );
98 static void dialog_button_callback_settex( GtkWidget *widget, gpointer data ){
99 TwinWidget* tw = (TwinWidget*)data;
101 GtkEntry* entry = GTK_ENTRY( tw->one );
102 GtkCombo* combo = GTK_COMBO( tw->two );
104 const gchar* tex = gtk_entry_get_text( GTK_ENTRY( combo->entry ) );
105 gtk_entry_set_text( entry, tex );
108 /*--------------------------------
109 Data validation Routines
110 ---------------------------------*/
112 bool ValidateTextFloat( const char* pData, char* error_title, float* value ){
114 float testNum = (float)atof( pData );
116 if ( ( testNum == 0.0f ) && strcmp( pData, "0" ) ) {
117 DoMessageBox( "Please Enter A Floating Point Number", error_title, MB_OK );
127 DoMessageBox( "Please Enter A Floating Point Number", error_title, MB_OK );
131 bool ValidateTextFloatRange( const char* pData, float min, float max, char* error_title, float* value ){
132 char error_buffer[256];
133 sprintf( error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max );
136 float testNum = (float)atof( pData );
138 if ( ( testNum < min ) || ( testNum > max ) ) {
139 DoMessageBox( error_buffer, error_title, MB_OK );
149 DoMessageBox( error_buffer, error_title, MB_OK );
153 bool ValidateTextIntRange( const char* pData, int min, int max, const char* error_title, int* value ){
154 char error_buffer[256];
155 sprintf( error_buffer, "Please Enter An Integer Between %i and %i", min, max );
158 int testNum = atoi( pData );
160 if ( ( testNum < min ) || ( testNum > max ) ) {
161 DoMessageBox( error_buffer, error_title, MB_OK );
171 DoMessageBox( error_buffer, error_title, MB_OK );
175 bool ValidateTextInt( const char* pData, char* error_title, int* value ){
177 int testNum = atoi( pData );
179 if ( ( testNum == 0 ) && strcmp( pData, "0" ) ) {
180 DoMessageBox( "Please Enter An Integer", error_title, MB_OK );
190 DoMessageBox( "Please Enter An Integer", error_title, MB_OK );
194 /*--------------------------------
196 ---------------------------------*/
200 Major clean up of variable names etc required, excluding Mars's ones,
201 which are nicely done :)
205 int DoMessageBox( const char* lpText, const char* lpCaption, guint32 uType ){
206 GtkWidget *window, *w, *vbox, *hbox;
207 int mode = ( uType & MB_TYPEMASK ), ret, loop = 1;
209 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
210 gtk_signal_connect( GTK_OBJECT( window ), "delete_event",
211 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
212 gtk_signal_connect( GTK_OBJECT( window ), "destroy",
213 GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
214 gtk_window_set_title( GTK_WINDOW( window ), lpCaption );
215 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
216 g_object_set_data( G_OBJECT( window ), "loop", &loop );
217 g_object_set_data( G_OBJECT( window ), "ret", &ret );
218 gtk_widget_realize( window );
220 vbox = gtk_vbox_new( FALSE, 10 );
221 gtk_container_add( GTK_CONTAINER( window ), vbox );
222 gtk_widget_show( vbox );
224 w = gtk_label_new( lpText );
225 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
226 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
227 gtk_widget_show( w );
229 w = gtk_hseparator_new();
230 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
231 gtk_widget_show( w );
233 hbox = gtk_hbox_new( FALSE, 10 );
234 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
235 gtk_widget_show( hbox );
237 if ( mode == MB_OK ) {
238 w = gtk_button_new_with_label( "Ok" );
239 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
240 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
241 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
242 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
243 gtk_widget_grab_default( w );
244 gtk_widget_show( w );
247 else if ( mode == MB_OKCANCEL ) {
248 w = gtk_button_new_with_label( "Ok" );
249 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
250 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
251 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
252 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
253 gtk_widget_grab_default( w );
254 gtk_widget_show( w );
256 w = gtk_button_new_with_label( "Cancel" );
257 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
258 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
259 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
260 gtk_widget_show( w );
263 else if ( mode == MB_YESNOCANCEL ) {
264 w = gtk_button_new_with_label( "Yes" );
265 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
266 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
267 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) );
268 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
269 gtk_widget_grab_default( w );
270 gtk_widget_show( w );
272 w = gtk_button_new_with_label( "No" );
273 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
274 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
275 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDNO ) );
276 gtk_widget_show( w );
278 w = gtk_button_new_with_label( "Cancel" );
279 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
280 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
281 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
282 gtk_widget_show( w );
285 else /* if (mode == MB_YESNO) */
287 w = gtk_button_new_with_label( "Yes" );
288 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
289 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
290 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) );
291 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
292 gtk_widget_grab_default( w );
293 gtk_widget_show( w );
295 w = gtk_button_new_with_label( "No" );
296 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
297 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
298 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDNO ) );
299 gtk_widget_show( w );
303 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
304 gtk_widget_show( window );
305 gtk_grab_add( window );
308 gtk_main_iteration();
310 gtk_grab_remove( window );
311 gtk_widget_destroy( window );
316 int DoIntersectBox( IntersectRS* rs ){
317 GtkWidget *window, *w, *vbox, *hbox;
318 GtkWidget *radio1, *radio2;
319 GtkWidget *check1, *check2;
322 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
324 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
325 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
327 gtk_window_set_title( GTK_WINDOW( window ), "Intersect" );
328 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
330 g_object_set_data( G_OBJECT( window ), "loop", &loop );
331 g_object_set_data( G_OBJECT( window ), "ret", &ret );
333 gtk_widget_realize( window );
337 vbox = gtk_vbox_new( FALSE, 10 );
338 gtk_container_add( GTK_CONTAINER( window ), vbox );
339 gtk_widget_show( vbox );
343 radio1 = gtk_radio_button_new_with_label( NULL, "Use Whole Map" );
344 gtk_box_pack_start( GTK_BOX( vbox ), radio1, FALSE, FALSE, 2 );
345 gtk_widget_show( radio1 );
347 radio2 = gtk_radio_button_new_with_label( ( (GtkRadioButton*)radio1 )->group, "Use Selected Brushes" );
348 gtk_box_pack_start( GTK_BOX( vbox ), radio2, FALSE, FALSE, 2 );
349 gtk_widget_show( radio2 );
351 w = gtk_hseparator_new();
352 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
353 gtk_widget_show( w );
355 check1 = gtk_check_button_new_with_label( "Include Detail Brushes" );
356 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
357 gtk_widget_show( check1 );
359 check2 = gtk_check_button_new_with_label( "Select Duplicate Brushes Only" );
360 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
361 gtk_widget_show( check2 );
363 hbox = gtk_hbox_new( FALSE, 10 );
364 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
365 gtk_widget_show( hbox );
367 // ---- hbox ---- ok/cancel buttons
369 w = gtk_button_new_with_label( "Ok" );
370 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
371 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
373 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
374 gtk_widget_grab_default( w );
375 gtk_widget_show( w );
377 w = gtk_button_new_with_label( "Cancel" );
378 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
379 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
380 gtk_widget_show( w );
387 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
388 gtk_widget_show( window );
389 gtk_grab_add( window );
392 gtk_main_iteration();
394 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio1 ) ) {
395 rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP;
397 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio2 ) ) {
398 rs->nBrushOptions = BRUSH_OPT_SELECTED;
401 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
402 rs->bDuplicateOnly = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
404 gtk_grab_remove( window );
405 gtk_widget_destroy( window );
410 int DoPolygonBox( PolygonRS* rs ){
411 GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2;
413 GtkWidget *check1, *check2, *check3;
414 GtkWidget *text1, *text2;
418 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
420 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
421 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
423 gtk_window_set_title( GTK_WINDOW( window ), "Polygon Builder" );
424 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
426 g_object_set_data( G_OBJECT( window ), "loop", &loop );
427 g_object_set_data( G_OBJECT( window ), "ret", &ret );
429 gtk_widget_realize( window );
433 vbox = gtk_vbox_new( FALSE, 10 );
434 gtk_container_add( GTK_CONTAINER( window ), vbox );
435 gtk_widget_show( vbox );
439 hbox = gtk_hbox_new( FALSE, 10 );
440 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
441 gtk_widget_show( hbox );
446 vbox2 = gtk_vbox_new( FALSE, 10 );
447 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
448 gtk_widget_show( vbox2 );
452 hbox2 = gtk_hbox_new( FALSE, 10 );
453 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
454 gtk_widget_show( hbox2 );
458 text1 = gtk_entry_new_with_max_length( 256 );
459 gtk_entry_set_text( (GtkEntry*)text1, "3" );
460 gtk_box_pack_start( GTK_BOX( hbox2 ), text1, FALSE, FALSE, 2 );
461 gtk_widget_show( text1 );
463 w = gtk_label_new( "Number Of Sides" );
464 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
465 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
466 gtk_widget_show( w );
470 hbox2 = gtk_hbox_new( FALSE, 10 );
471 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
472 gtk_widget_show( hbox2 );
476 text2 = gtk_entry_new_with_max_length( 256 );
477 gtk_entry_set_text( (GtkEntry*)text2, "8" );
478 gtk_box_pack_start( GTK_BOX( hbox2 ), text2, FALSE, FALSE, 2 );
479 gtk_widget_show( text2 );
481 w = gtk_label_new( "Border Width" );
482 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
483 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
484 gtk_widget_show( w );
492 vbox2 = gtk_vbox_new( FALSE, 10 );
493 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
494 gtk_widget_show( vbox2 );
498 check1 = gtk_check_button_new_with_label( "Use Border" );
499 gtk_box_pack_start( GTK_BOX( vbox2 ), check1, FALSE, FALSE, 0 );
500 gtk_widget_show( check1 );
503 check2 = gtk_check_button_new_with_label( "Inverse Polygon" );
504 gtk_box_pack_start( GTK_BOX( vbox2 ), check2, FALSE, FALSE, 0 );
505 gtk_widget_show( check2 );
508 check3 = gtk_check_button_new_with_label( "Align Top Edge" );
509 gtk_box_pack_start( GTK_BOX( vbox2 ), check3, FALSE, FALSE, 0 );
510 gtk_widget_show( check3 );
516 hbox = gtk_hbox_new( FALSE, 10 );
517 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
518 gtk_widget_show( hbox );
522 w = gtk_button_new_with_label( "Ok" );
523 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
524 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
526 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
527 gtk_widget_grab_default( w );
528 gtk_widget_show( w );
530 w = gtk_button_new_with_label( "Cancel" );
531 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
532 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
533 gtk_widget_show( w );
540 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
541 gtk_widget_show( window );
542 gtk_grab_add( window );
544 bool dialogError = TRUE;
545 while ( dialogError )
549 gtk_main_iteration();
554 rs->bUseBorder = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
555 rs->bInverse = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
556 rs->bAlignTop = gtk_toggle_button_get_active( (GtkToggleButton*)check3 ) ? true : false;
558 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text1 ), 3, 32, "Number Of Sides", &rs->nSides ) ) {
562 if ( rs->bUseBorder ) {
563 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text2 ), 8, 256, "Border Width", &rs->nBorderWidth ) ) {
570 gtk_grab_remove( window );
571 gtk_widget_destroy( window );
577 // for stair builder stuck as close as i could to the MFC version
578 // obviously feel free to change it at will :)
579 int DoBuildStairsBox( BuildStairsRS* rs ){
580 // i made widgets for just about everything ... i think that's what i need to do dunno tho
581 GtkWidget *window, *w, *vbox, *hbox;
582 GtkWidget *textStairHeight, *textRiserTex, *textMainTex;
583 GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value
584 GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle;
585 GtkWidget *checkUseDetail;
586 GSList *radioDirection, *radioStyle;
591 char *text = "Please set a value in the boxes below and press 'OK' to build the stairs";
593 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
595 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
596 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
598 gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" );
600 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
602 g_object_set_data( G_OBJECT( window ), "loop", &loop );
603 g_object_set_data( G_OBJECT( window ), "ret", &ret );
605 gtk_widget_realize( window );
608 vbox = gtk_vbox_new( FALSE, 10 );
609 gtk_container_add( GTK_CONTAINER( window ), vbox );
610 gtk_widget_show( vbox );
612 hbox = gtk_hbox_new( FALSE, 10 );
613 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
614 gtk_widget_show( hbox );
616 // dunno if you want this text or not ...
617 w = gtk_label_new( text );
618 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ...
619 gtk_widget_show( w );
621 w = gtk_hseparator_new();
622 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
623 gtk_widget_show( w );
625 // ------------------------- // indenting == good way of keeping track of lines :)
628 hbox = gtk_hbox_new( FALSE, 10 );
629 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
630 gtk_widget_show( hbox );
632 textStairHeight = gtk_entry_new_with_max_length( 256 );
633 gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 );
634 gtk_widget_show( textStairHeight );
636 w = gtk_label_new( "Stair Height" );
637 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
638 gtk_widget_show( w );
640 // ------------------------- //
642 hbox = gtk_hbox_new( FALSE, 10 );
643 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
644 gtk_widget_show( hbox );
646 w = gtk_label_new( "Direction:" );
647 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
648 gtk_widget_show( w );
650 // -------------------------- //
652 hbox = gtk_hbox_new( FALSE, 10 );
653 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
654 gtk_widget_show( hbox );
656 // radio buttons confuse me ...
657 // but this _looks_ right
659 // djbob: actually it looks very nice :), slightly better than the way i did it
660 // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh
662 radioNorth = gtk_radio_button_new_with_label( NULL, "North" );
663 gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 );
664 gtk_widget_show( radioNorth );
666 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) );
668 radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" );
669 gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 );
670 gtk_widget_show( radioSouth );
672 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) );
674 radioEast = gtk_radio_button_new_with_label( radioDirection, "East" );
675 gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 );
676 gtk_widget_show( radioEast );
678 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) );
680 radioWest = gtk_radio_button_new_with_label( radioDirection, "West" );
681 gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 );
682 gtk_widget_show( radioWest );
684 // --------------------------- //
686 hbox = gtk_hbox_new( FALSE, 10 );
687 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
688 gtk_widget_show( hbox );
690 w = gtk_label_new( "Style:" );
691 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
692 gtk_widget_show( w );
694 // --------------------------- //
696 hbox = gtk_hbox_new( FALSE, 10 );
697 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
698 gtk_widget_show( hbox );
700 radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" );
701 gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 );
702 gtk_widget_show( radioOldStyle );
704 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) );
706 radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" );
707 gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 );
708 gtk_widget_show( radioBobStyle );
710 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) );
712 radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" );
713 gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 );
714 gtk_widget_show( radioCornerStyle );
716 // err, the q3r has an if or something so you need bob style checked before this
717 // is "ungreyed out" but you'll need to do that, as i suck :)
719 // djbob: er.... yeah um, im not at all sure how i'm gonna sort this
720 // djbob: think we need some button callback functions or smuffin
721 // FIXME: actually get around to doing what i suggested!!!!
723 checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" );
724 gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 );
725 gtk_widget_show( checkUseDetail );
727 // --------------------------- //
729 hbox = gtk_hbox_new( FALSE, 10 );
730 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
731 gtk_widget_show( hbox );
733 textMainTex = gtk_entry_new_with_max_length( 512 );
734 gtk_entry_set_text( GTK_ENTRY( textMainTex ), rs->mainTexture );
735 gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 );
736 gtk_widget_show( textMainTex );
738 w = gtk_label_new( "Main Texture" );
739 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
740 gtk_widget_show( w );
742 // -------------------------- //
744 hbox = gtk_hbox_new( FALSE, 10 );
745 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
746 gtk_widget_show( hbox );
748 textRiserTex = gtk_entry_new_with_max_length( 512 );
749 gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 );
750 gtk_widget_show( textRiserTex );
752 w = gtk_label_new( "Riser Texture" );
753 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
754 gtk_widget_show( w );
756 // -------------------------- //
757 w = gtk_hseparator_new();
758 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
759 gtk_widget_show( w );
761 hbox = gtk_hbox_new( FALSE, 10 );
762 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
763 gtk_widget_show( hbox );
765 w = gtk_button_new_with_label( "OK" );
766 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
767 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
768 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
769 gtk_widget_grab_default( w );
770 gtk_widget_show( w );
772 w = gtk_button_new_with_label( "Cancel" );
773 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
774 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
775 gtk_widget_show( w );
779 // +djbob: need our "little" modal loop mars :P
780 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
781 gtk_widget_show( window );
782 gtk_grab_add( window );
784 bool dialogError = TRUE;
785 while ( dialogError )
789 gtk_main_iteration();
794 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)checkUseDetail ) ? true : false;
796 strcpy( rs->riserTexture, gtk_entry_get_text( (GtkEntry*)textRiserTex ) );
797 strcpy( rs->mainTexture, gtk_entry_get_text( (GtkEntry*)textMainTex ) );
799 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioNorth ) ) {
800 rs->direction = MOVE_NORTH;
802 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioSouth ) ) {
803 rs->direction = MOVE_SOUTH;
805 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioEast ) ) {
806 rs->direction = MOVE_EAST;
808 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioWest ) ) {
809 rs->direction = MOVE_WEST;
812 if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textStairHeight ), "Stair Height", &rs->stairHeight ) ) {
816 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioOldStyle ) ) {
817 rs->style = STYLE_ORIGINAL;
819 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioBobStyle ) ) {
820 rs->style = STYLE_BOB;
822 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioCornerStyle ) ) {
823 rs->style = STYLE_CORNER;
828 gtk_grab_remove( window );
829 gtk_widget_destroy( window );
834 // there we go, all done ... on my end at least, not bad for a night's work
837 int DoDoorsBox( DoorRS* rs ){
838 GtkWidget *window, *hbox, *vbox, *w;
839 GtkWidget *textFrontBackTex, *textTrimTex;
840 GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV;
841 GtkWidget *comboMain, *comboTrim;
842 GtkWidget *buttonSetMain, *buttonSetTrim;
843 GtkWidget *radioNS, *radioEW;
844 GSList *radioOrientation;
850 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
852 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
853 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
855 gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" );
857 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
859 g_object_set_data( G_OBJECT( window ), "loop", &loop );
860 g_object_set_data( G_OBJECT( window ), "ret", &ret );
862 gtk_widget_realize( window );
865 GList *listMainTextures = NULL;
866 GList *listTrimTextures = NULL;
867 LoadGList( GetFilename( buffer, "plugins/bt/door-tex.txt" ), &listMainTextures );
868 LoadGList( GetFilename( buffer, "plugins/bt/door-tex-trim.txt" ), &listTrimTextures );
870 vbox = gtk_vbox_new( FALSE, 10 );
871 gtk_container_add( GTK_CONTAINER( window ), vbox );
872 gtk_widget_show( vbox );
874 // -------------------------- //
876 hbox = gtk_hbox_new( FALSE, 10 );
877 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
878 gtk_widget_show( hbox );
880 textFrontBackTex = gtk_entry_new_with_max_length( 512 );
881 gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture );
882 gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 );
883 gtk_widget_show( textFrontBackTex );
885 w = gtk_label_new( "Door Front/Back Texture" );
886 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
887 gtk_widget_show( w );
889 // ------------------------ //
891 hbox = gtk_hbox_new( FALSE, 10 );
892 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
893 gtk_widget_show( hbox );
895 textTrimTex = gtk_entry_new_with_max_length( 512 );
896 gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 );
897 gtk_widget_show( textTrimTex );
899 w = gtk_label_new( "Door Trim Texture" );
900 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
901 gtk_widget_show( w );
903 // ----------------------- //
905 hbox = gtk_hbox_new( FALSE, 10 );
906 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
907 gtk_widget_show( hbox );
909 // sp: horizontally ????
910 // djbob: yes mars, u can spell :]
911 checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" );
912 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE );
913 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 );
914 gtk_widget_show( checkScaleMainH );
916 checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" );
917 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE );
918 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 );
919 gtk_widget_show( checkScaleTrimH );
921 // ---------------------- //
923 hbox = gtk_hbox_new( FALSE, 10 );
924 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
925 gtk_widget_show( hbox );
927 checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" );
928 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE );
929 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 );
930 gtk_widget_show( checkScaleMainV );
932 checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" );
933 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 );
934 gtk_widget_show( checkScaleTrimV );
936 // --------------------- //
938 hbox = gtk_hbox_new( FALSE, 10 );
939 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
940 gtk_widget_show( hbox );
942 // djbob: lists added
944 comboMain = gtk_combo_new();
945 gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 );
946 gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures );
947 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
948 gtk_widget_show( comboMain );
950 tw1.one = textFrontBackTex;
953 buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" );
954 gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 );
955 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 );
956 gtk_widget_show( buttonSetMain );
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 comboTrim = gtk_combo_new();
965 gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 );
966 gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures );
967 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
968 gtk_widget_show( comboTrim );
970 tw2.one = textTrimTex;
973 buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" );
974 gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 );
975 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 );
976 gtk_widget_show( buttonSetTrim );
978 // ------------------ //
980 hbox = gtk_hbox_new( FALSE, 10 );
981 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
982 gtk_widget_show( hbox );
984 w = gtk_label_new( "Orientation" );
985 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
986 gtk_widget_show( w );
988 // argh more radio buttons!
989 radioNS = gtk_radio_button_new_with_label( NULL, "North - South" );
990 gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 );
991 gtk_widget_show( radioNS );
993 radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) );
995 radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" );
996 gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 );
997 gtk_widget_show( radioEW );
999 // ----------------- //
1001 w = gtk_hseparator_new();
1002 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1003 gtk_widget_show( w );
1005 // ----------------- //
1007 hbox = gtk_hbox_new( FALSE, 10 );
1008 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1009 gtk_widget_show( hbox );
1011 w = gtk_button_new_with_label( "OK" );
1012 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1013 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
1014 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1015 gtk_widget_grab_default( w );
1016 gtk_widget_show( w );
1018 w = gtk_button_new_with_label( "Cancel" );
1019 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1020 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
1021 gtk_widget_show( w );
1024 // ----------------- //
1027 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1028 gtk_widget_show( window );
1029 gtk_grab_add( window );
1032 gtk_main_iteration();
1034 strcpy( rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ) );
1035 strcpy( rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ) );
1037 rs->bScaleMainH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainH ) ) ? true : false;
1038 rs->bScaleMainV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainV ) ) ? true : false;
1039 rs->bScaleTrimH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ) ) ? true : false;
1040 rs->bScaleTrimV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimV ) ) ? true : false;
1042 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioNS ) ) ) {
1043 rs->nOrientation = DIRECTION_NS;
1045 else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioEW ) ) ) {
1046 rs->nOrientation = DIRECTION_EW;
1049 gtk_grab_remove( window );
1050 gtk_widget_destroy( window );
1056 int DoPathPlotterBox( PathPlotterRS* rs ){
1057 GtkWidget *window, *w, *vbox, *hbox;
1059 GtkWidget *text1, *text2, *text3;
1060 GtkWidget *check1, *check2;
1064 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1066 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1067 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1069 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1070 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1072 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1073 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1075 gtk_widget_realize( window );
1079 vbox = gtk_vbox_new( FALSE, 10 );
1080 gtk_container_add( GTK_CONTAINER( window ), vbox );
1081 gtk_widget_show( vbox );
1085 hbox = gtk_hbox_new( FALSE, 10 );
1086 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1087 gtk_widget_show( hbox );
1091 text1 = gtk_entry_new_with_max_length( 256 );
1092 gtk_entry_set_text( (GtkEntry*)text1, "25" );
1093 gtk_box_pack_start( GTK_BOX( hbox ), text1, FALSE, FALSE, 2 );
1094 gtk_widget_show( text1 );
1096 w = gtk_label_new( "Number Of Points" );
1097 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1098 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1099 gtk_widget_show( w );
1103 hbox = gtk_hbox_new( FALSE, 10 );
1104 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1105 gtk_widget_show( hbox );
1109 text2 = gtk_entry_new_with_max_length( 256 );
1110 gtk_entry_set_text( (GtkEntry*)text2, "3" );
1111 gtk_box_pack_start( GTK_BOX( hbox ), text2, FALSE, FALSE, 2 );
1112 gtk_widget_show( text2 );
1114 w = gtk_label_new( "Multipler" );
1115 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1116 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1117 gtk_widget_show( w );
1121 w = gtk_label_new( "Path Distance = dist(start -> apex) * multiplier" );
1122 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1123 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1124 gtk_widget_show( w );
1126 hbox = gtk_hbox_new( FALSE, 10 );
1127 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1128 gtk_widget_show( hbox );
1132 text3 = gtk_entry_new_with_max_length( 256 );
1133 gtk_entry_set_text( (GtkEntry*)text3, "-800" );
1134 gtk_box_pack_start( GTK_BOX( hbox ), text3, FALSE, FALSE, 2 );
1135 gtk_widget_show( text3 );
1137 w = gtk_label_new( "Gravity" );
1138 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1139 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1140 gtk_widget_show( w );
1144 w = gtk_hseparator_new();
1145 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1146 gtk_widget_show( w );
1148 check1 = gtk_check_button_new_with_label( "No Dynamic Update" );
1149 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
1150 gtk_widget_show( check1 );
1152 check2 = gtk_check_button_new_with_label( "Show Bounding Lines" );
1153 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
1154 gtk_widget_show( check2 );
1159 // ----------------- //
1161 w = gtk_hseparator_new();
1162 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1163 gtk_widget_show( w );
1165 // ----------------- //
1167 hbox = gtk_hbox_new( FALSE, 10 );
1168 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1169 gtk_widget_show( hbox );
1171 w = gtk_button_new_with_label( "Enable" );
1172 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1173 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) );
1174 gtk_widget_show( w );
1176 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1177 gtk_widget_grab_default( w );
1179 w = gtk_button_new_with_label( "Disable" );
1180 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1181 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDNO ) );
1182 gtk_widget_show( w );
1184 w = gtk_button_new_with_label( "Cancel" );
1185 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1186 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
1187 gtk_widget_show( w );
1191 // ----------------- //
1193 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1194 gtk_widget_show( window );
1195 gtk_grab_add( window );
1197 bool dialogError = TRUE;
1198 while ( dialogError )
1202 gtk_main_iteration();
1204 dialogError = FALSE;
1206 if ( ret == IDYES ) {
1207 if ( !ValidateTextIntRange( gtk_entry_get_text( GTK_ENTRY( text1 ) ), 1, 200, "Number Of Points", &rs->nPoints ) ) {
1211 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text2 ) ), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier ) ) {
1215 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text3 ) ), -10000.0f, -1.0f, "Gravity", &rs->fGravity ) ) {
1219 rs->bNoUpdate = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check1 ) ) ? true : false;
1220 rs->bShowExtra = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2 ) ) ? true : false;
1224 gtk_grab_remove( window );
1225 gtk_widget_destroy( window );
1230 int DoCTFColourChangeBox(){
1231 GtkWidget *window, *w, *vbox, *hbox;
1234 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1236 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1237 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1239 gtk_window_set_title( GTK_WINDOW( window ), "CTF Colour Changer" );
1240 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1242 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1243 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1245 gtk_widget_realize( window );
1249 vbox = gtk_vbox_new( FALSE, 10 );
1250 gtk_container_add( GTK_CONTAINER( window ), vbox );
1251 gtk_widget_show( vbox );
1255 hbox = gtk_hbox_new( FALSE, 10 );
1256 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
1257 gtk_widget_show( hbox );
1259 // ---- hbox ---- ok/cancel buttons
1261 w = gtk_button_new_with_label( "Red->Blue" );
1262 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1263 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
1265 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1266 gtk_widget_grab_default( w );
1267 gtk_widget_show( w );
1269 w = gtk_button_new_with_label( "Blue->Red" );
1270 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1271 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) );
1272 gtk_widget_show( w );
1274 w = gtk_button_new_with_label( "Cancel" );
1275 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1276 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
1277 gtk_widget_show( w );
1284 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1285 gtk_widget_show( window );
1286 gtk_grab_add( window );
1289 gtk_main_iteration();
1291 gtk_grab_remove( window );
1292 gtk_widget_destroy( window );
1297 int DoResetTextureBox( ResetTextureRS* rs ){
1300 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1304 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1306 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1307 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1309 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1310 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1312 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1313 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1315 gtk_widget_realize( window );
1317 vbox = gtk_vbox_new( FALSE, 10 );
1318 gtk_container_add( GTK_CONTAINER( window ), vbox );
1319 gtk_widget_show( vbox );
1323 hbox = gtk_hbox_new( FALSE, 10 );
1324 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1325 gtk_widget_show( hbox );
1329 texSelected = "Currently Selected Face: ";
1330 if ( g_SelectedFaceTable.m_pfnGetSelectedFaceCount() == 1 ) {
1331 texSelected += GetCurrentTexture();
1334 w = gtk_label_new( texSelected );
1335 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1336 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1337 gtk_widget_show( w );
1341 frame = gtk_frame_new( _( "Reset Texture Names" ) );
1342 gtk_widget_show( frame );
1343 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1345 table = gtk_table_new( 2, 3, TRUE );
1346 gtk_widget_show( table );
1347 gtk_container_add( GTK_CONTAINER( frame ), table );
1348 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1349 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1350 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1354 dlgTexReset.cbTexChange = gtk_check_button_new_with_label( "Enabled" );
1355 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbTexChange ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1356 gtk_widget_show( dlgTexReset.cbTexChange );
1357 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbTexChange, 0, 1, 0, 1,
1358 (GtkAttachOptions) ( GTK_FILL ),
1359 (GtkAttachOptions) ( 0 ), 0, 0 );
1361 w = gtk_label_new( "Old Name: " );
1362 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1363 (GtkAttachOptions) ( GTK_FILL ),
1364 (GtkAttachOptions) ( 0 ), 0, 0 );
1365 gtk_widget_show( w );
1367 dlgTexReset.editTexOld = gtk_entry_new_with_max_length( 256 );
1368 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexOld ), rs->textureName );
1369 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexOld, 2, 3, 0, 1,
1370 (GtkAttachOptions) ( GTK_FILL ),
1371 (GtkAttachOptions) ( 0 ), 0, 0 );
1372 gtk_widget_show( dlgTexReset.editTexOld );
1374 w = gtk_label_new( "New Name: " );
1375 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1376 (GtkAttachOptions) ( GTK_FILL ),
1377 (GtkAttachOptions) ( 0 ), 0, 0 );
1378 gtk_widget_show( w );
1380 dlgTexReset.editTexNew = gtk_entry_new_with_max_length( 256 );
1381 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexNew ), rs->textureName );
1382 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexNew, 2, 3, 1, 2,
1383 (GtkAttachOptions) ( GTK_FILL ),
1384 (GtkAttachOptions) ( 0 ), 0, 0 );
1385 gtk_widget_show( dlgTexReset.editTexNew );
1389 frame = gtk_frame_new( _( "Reset Scales" ) );
1390 gtk_widget_show( frame );
1391 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1393 table = gtk_table_new( 2, 3, TRUE );
1394 gtk_widget_show( table );
1395 gtk_container_add( GTK_CONTAINER( frame ), table );
1396 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1397 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1398 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1402 dlgTexReset.cbScaleHor = gtk_check_button_new_with_label( "Enabled" );
1403 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleHor ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1404 gtk_widget_show( dlgTexReset.cbScaleHor );
1405 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleHor, 0, 1, 0, 1,
1406 (GtkAttachOptions) ( GTK_FILL ),
1407 (GtkAttachOptions) ( 0 ), 0, 0 );
1409 w = gtk_label_new( "New Horizontal Scale: " );
1410 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1411 (GtkAttachOptions) ( GTK_FILL ),
1412 (GtkAttachOptions) ( 0 ), 0, 0 );
1413 gtk_widget_show( w );
1415 dlgTexReset.editScaleHor = gtk_entry_new_with_max_length( 256 );
1416 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleHor ), "0.5" );
1417 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleHor, 2, 3, 0, 1,
1418 (GtkAttachOptions) ( GTK_FILL ),
1419 (GtkAttachOptions) ( 0 ), 0, 0 );
1420 gtk_widget_show( dlgTexReset.editScaleHor );
1423 dlgTexReset.cbScaleVert = gtk_check_button_new_with_label( "Enabled" );
1424 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleVert ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1425 gtk_widget_show( dlgTexReset.cbScaleVert );
1426 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleVert, 0, 1, 1, 2,
1427 (GtkAttachOptions) ( GTK_FILL ),
1428 (GtkAttachOptions) ( 0 ), 0, 0 );
1430 w = gtk_label_new( "New Vertical Scale: " );
1431 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1432 (GtkAttachOptions) ( GTK_FILL ),
1433 (GtkAttachOptions) ( 0 ), 0, 0 );
1434 gtk_widget_show( w );
1436 dlgTexReset.editScaleVert = gtk_entry_new_with_max_length( 256 );
1437 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleVert ), "0.5" );
1438 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleVert, 2, 3, 1, 2,
1439 (GtkAttachOptions) ( GTK_FILL ),
1440 (GtkAttachOptions) ( 0 ), 0, 0 );
1441 gtk_widget_show( dlgTexReset.editScaleVert );
1445 frame = gtk_frame_new( _( "Reset Shift" ) );
1446 gtk_widget_show( frame );
1447 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1449 table = gtk_table_new( 2, 3, TRUE );
1450 gtk_widget_show( table );
1451 gtk_container_add( GTK_CONTAINER( frame ), table );
1452 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1453 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1454 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1458 dlgTexReset.cbShiftHor = gtk_check_button_new_with_label( "Enabled" );
1459 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftHor ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1460 gtk_widget_show( dlgTexReset.cbShiftHor );
1461 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftHor, 0, 1, 0, 1,
1462 (GtkAttachOptions) ( GTK_FILL ),
1463 (GtkAttachOptions) ( 0 ), 0, 0 );
1465 w = gtk_label_new( "New Horizontal Shift: " );
1466 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1467 (GtkAttachOptions) ( GTK_FILL ),
1468 (GtkAttachOptions) ( 0 ), 0, 0 );
1469 gtk_widget_show( w );
1471 dlgTexReset.editShiftHor = gtk_entry_new_with_max_length( 256 );
1472 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftHor ), "0" );
1473 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftHor, 2, 3, 0, 1,
1474 (GtkAttachOptions) ( GTK_FILL ),
1475 (GtkAttachOptions) ( 0 ), 0, 0 );
1476 gtk_widget_show( dlgTexReset.editShiftHor );
1479 dlgTexReset.cbShiftVert = gtk_check_button_new_with_label( "Enabled" );
1480 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftVert ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1481 gtk_widget_show( dlgTexReset.cbShiftVert );
1482 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftVert, 0, 1, 1, 2,
1483 (GtkAttachOptions) ( GTK_FILL ),
1484 (GtkAttachOptions) ( 0 ), 0, 0 );
1486 w = gtk_label_new( "New Vertical Shift: " );
1487 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1488 (GtkAttachOptions) ( GTK_FILL ),
1489 (GtkAttachOptions) ( 0 ), 0, 0 );
1490 gtk_widget_show( w );
1492 dlgTexReset.editShiftVert = gtk_entry_new_with_max_length( 256 );
1493 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftVert ), "0" );
1494 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftVert, 2, 3, 1, 2,
1495 (GtkAttachOptions) ( GTK_FILL ),
1496 (GtkAttachOptions) ( 0 ), 0, 0 );
1497 gtk_widget_show( dlgTexReset.editShiftVert );
1501 frame = gtk_frame_new( _( "Reset Rotation" ) );
1502 gtk_widget_show( frame );
1503 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1505 table = gtk_table_new( 1, 3, TRUE );
1506 gtk_widget_show( table );
1507 gtk_container_add( GTK_CONTAINER( frame ), table );
1508 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1509 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1510 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1514 dlgTexReset.cbRotation = gtk_check_button_new_with_label( "Enabled" );
1515 gtk_widget_show( dlgTexReset.cbRotation );
1516 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbRotation, 0, 1, 0, 1,
1517 (GtkAttachOptions) ( GTK_FILL ),
1518 (GtkAttachOptions) ( 0 ), 0, 0 );
1520 w = gtk_label_new( "New Rotation Value: " );
1521 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1522 (GtkAttachOptions) ( GTK_FILL ),
1523 (GtkAttachOptions) ( 0 ), 0, 0 );
1524 gtk_widget_show( w );
1526 dlgTexReset.editRotation = gtk_entry_new_with_max_length( 256 );
1527 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editRotation ), "0" );
1528 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editRotation, 2, 3, 0, 1,
1529 (GtkAttachOptions) ( GTK_FILL ),
1530 (GtkAttachOptions) ( 0 ), 0, 0 );
1531 gtk_widget_show( dlgTexReset.editRotation );
1535 hbox = gtk_hbox_new( FALSE, 10 );
1536 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1537 gtk_widget_show( hbox );
1541 w = gtk_button_new_with_label( "Use Selected Brushes" );
1542 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1543 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
1545 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1546 gtk_widget_grab_default( w );
1547 gtk_widget_show( w );
1549 w = gtk_button_new_with_label( "Use All Brushes" );
1550 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1551 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) );
1552 gtk_widget_show( w );
1554 w = gtk_button_new_with_label( "Cancel" );
1555 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1556 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
1557 gtk_widget_show( w );
1564 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1565 gtk_widget_show( window );
1566 gtk_grab_add( window );
1568 Update_TextureReseter();
1570 bool dialogError = TRUE;
1571 while ( dialogError )
1575 gtk_main_iteration();
1577 dialogError = FALSE;
1579 if ( ret != IDCANCEL ) {
1580 rs->bResetRotation = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
1581 if ( rs->bResetRotation ) {
1582 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editRotation ) ), "Rotation", &rs->rotation ) ) {
1587 rs->bResetScale[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
1588 if ( rs->bResetScale[0] ) {
1589 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleHor ) ), "Horizontal Scale", &rs->fScale[0] ) ) {
1594 rs->bResetScale[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
1595 if ( rs->bResetScale[1] ) {
1596 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleVert ) ), "Vertical Scale", &rs->fScale[1] ) ) {
1601 rs->bResetShift[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
1602 if ( rs->bResetShift[0] ) {
1603 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftHor ) ), "Horizontal Shift", &rs->fShift[0] ) ) {
1608 rs->bResetShift[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
1609 if ( rs->bResetShift[1] ) {
1610 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftVert ) ), "Vertical Shift", &rs->fShift[1] ) ) {
1615 rs->bResetTextureName = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
1616 if ( rs->bResetTextureName ) {
1617 strcpy( rs->textureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexOld ) ) );
1618 strcpy( rs->newTextureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexNew ) ) );
1623 gtk_grab_remove( window );
1624 gtk_widget_destroy( window );
1629 int DoTrainThingBox( TrainThingRS* rs ){
1632 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1634 GtkWidget *radiusX, *radiusY;
1635 GtkWidget *angleStart, *angleEnd;
1636 GtkWidget *heightStart, *heightEnd;
1637 GtkWidget *numPoints;
1641 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1643 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1644 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1646 gtk_window_set_title( GTK_WINDOW( window ), "Train Thing" );
1647 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1649 gtk_object_set_data( GTK_OBJECT( window ), "loop", &loop );
1650 gtk_object_set_data( GTK_OBJECT( window ), "ret", &ret );
1652 gtk_widget_realize( window );
1654 vbox = gtk_vbox_new( FALSE, 10 );
1655 gtk_container_add( GTK_CONTAINER( window ), vbox );
1656 gtk_widget_show( vbox );
1660 hbox = gtk_hbox_new( FALSE, 10 );
1661 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1662 gtk_widget_show( hbox );
1666 frame = gtk_frame_new( _( "Radii" ) );
1667 gtk_widget_show( frame );
1668 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1670 table = gtk_table_new( 2, 3, TRUE );
1671 gtk_widget_show( table );
1672 gtk_container_add( GTK_CONTAINER( frame ), table );
1673 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1674 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1675 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1679 w = gtk_label_new( "X: " );
1680 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1681 (GtkAttachOptions) ( GTK_FILL ),
1682 (GtkAttachOptions) ( 0 ), 0, 0 );
1683 gtk_widget_show( w );
1685 radiusX = gtk_entry_new_with_max_length( 256 );
1686 gtk_entry_set_text( GTK_ENTRY( radiusX ), "100" );
1687 gtk_table_attach( GTK_TABLE( table ), radiusX, 1, 2, 0, 1,
1688 (GtkAttachOptions) ( GTK_FILL ),
1689 (GtkAttachOptions) ( 0 ), 0, 0 );
1690 gtk_widget_show( radiusX );
1694 w = gtk_label_new( "Y: " );
1695 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1696 (GtkAttachOptions) ( GTK_FILL ),
1697 (GtkAttachOptions) ( 0 ), 0, 0 );
1698 gtk_widget_show( w );
1700 radiusY = gtk_entry_new_with_max_length( 256 );
1701 gtk_entry_set_text( GTK_ENTRY( radiusY ), "100" );
1702 gtk_table_attach( GTK_TABLE( table ), radiusY, 1, 2, 1, 2,
1703 (GtkAttachOptions) ( GTK_FILL ),
1704 (GtkAttachOptions) ( 0 ), 0, 0 );
1705 gtk_widget_show( radiusY );
1709 frame = gtk_frame_new( _( "Angles" ) );
1710 gtk_widget_show( frame );
1711 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1713 table = gtk_table_new( 2, 3, TRUE );
1714 gtk_widget_show( table );
1715 gtk_container_add( GTK_CONTAINER( frame ), table );
1716 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1717 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1718 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1722 w = gtk_label_new( "Start: " );
1723 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1724 (GtkAttachOptions) ( GTK_FILL ),
1725 (GtkAttachOptions) ( 0 ), 0, 0 );
1726 gtk_widget_show( w );
1728 angleStart = gtk_entry_new_with_max_length( 256 );
1729 gtk_entry_set_text( GTK_ENTRY( angleStart ), "0" );
1730 gtk_table_attach( GTK_TABLE( table ), angleStart, 1, 2, 0, 1,
1731 (GtkAttachOptions) ( GTK_FILL ),
1732 (GtkAttachOptions) ( 0 ), 0, 0 );
1733 gtk_widget_show( angleStart );
1737 w = gtk_label_new( "End: " );
1738 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1739 (GtkAttachOptions) ( GTK_FILL ),
1740 (GtkAttachOptions) ( 0 ), 0, 0 );
1741 gtk_widget_show( w );
1743 angleEnd = gtk_entry_new_with_max_length( 256 );
1744 gtk_entry_set_text( GTK_ENTRY( angleEnd ), "90" );
1745 gtk_table_attach( GTK_TABLE( table ), angleEnd, 1, 2, 1, 2,
1746 (GtkAttachOptions) ( GTK_FILL ),
1747 (GtkAttachOptions) ( 0 ), 0, 0 );
1748 gtk_widget_show( angleEnd );
1751 frame = gtk_frame_new( _( "Height" ) );
1752 gtk_widget_show( frame );
1753 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1755 table = gtk_table_new( 2, 3, TRUE );
1756 gtk_widget_show( table );
1757 gtk_container_add( GTK_CONTAINER( frame ), table );
1758 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1759 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1760 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1764 w = gtk_label_new( "Start: " );
1765 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1766 (GtkAttachOptions) ( GTK_FILL ),
1767 (GtkAttachOptions) ( 0 ), 0, 0 );
1768 gtk_widget_show( w );
1770 heightStart = gtk_entry_new_with_max_length( 256 );
1771 gtk_entry_set_text( GTK_ENTRY( heightStart ), "0" );
1772 gtk_table_attach( GTK_TABLE( table ), heightStart, 1, 2, 0, 1,
1773 (GtkAttachOptions) ( GTK_FILL ),
1774 (GtkAttachOptions) ( 0 ), 0, 0 );
1775 gtk_widget_show( heightStart );
1779 w = gtk_label_new( "End: " );
1780 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1781 (GtkAttachOptions) ( GTK_FILL ),
1782 (GtkAttachOptions) ( 0 ), 0, 0 );
1783 gtk_widget_show( w );
1785 heightEnd = gtk_entry_new_with_max_length( 256 );
1786 gtk_entry_set_text( GTK_ENTRY( heightEnd ), "0" );
1787 gtk_table_attach( GTK_TABLE( table ), heightEnd, 1, 2, 1, 2,
1788 (GtkAttachOptions) ( GTK_FILL ),
1789 (GtkAttachOptions) ( 0 ), 0, 0 );
1790 gtk_widget_show( heightEnd );
1794 frame = gtk_frame_new( _( "Points" ) );
1795 gtk_widget_show( frame );
1796 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1798 table = gtk_table_new( 2, 3, TRUE );
1799 gtk_widget_show( table );
1800 gtk_container_add( GTK_CONTAINER( frame ), table );
1801 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1802 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1803 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1807 w = gtk_label_new( "Number: " );
1808 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1809 (GtkAttachOptions) ( GTK_FILL ),
1810 (GtkAttachOptions) ( 0 ), 0, 0 );
1811 gtk_widget_show( w );
1813 numPoints = gtk_entry_new_with_max_length( 256 );
1814 gtk_entry_set_text( GTK_ENTRY( numPoints ), "0" );
1815 gtk_table_attach( GTK_TABLE( table ), numPoints, 1, 2, 0, 1,
1816 (GtkAttachOptions) ( GTK_FILL ),
1817 (GtkAttachOptions) ( 0 ), 0, 0 );
1818 gtk_widget_show( numPoints );
1821 hbox = gtk_hbox_new( FALSE, 10 );
1822 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1823 gtk_widget_show( hbox );
1827 w = gtk_button_new_with_label( "Ok" );
1828 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1829 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
1831 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1832 gtk_widget_grab_default( w );
1833 gtk_widget_show( w );
1835 w = gtk_button_new_with_label( "Cancel" );
1836 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1837 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
1838 gtk_widget_show( w );
1845 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1846 gtk_widget_show( window );
1847 gtk_grab_add( window );
1849 bool dialogError = TRUE;
1850 while ( dialogError )
1854 gtk_main_iteration();
1856 dialogError = FALSE;
1858 if ( ret != IDCANCEL ) {
1859 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusX ) ), "Radius (X)", &rs->fRadiusX ) ) {
1863 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusY ) ), "Radius (Y)", &rs->fRadiusY ) ) {
1867 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleStart ) ), "Angle (Start)", &rs->fStartAngle ) ) {
1871 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleEnd ) ), "Angle (End)", &rs->fEndAngle ) ) {
1875 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightStart ) ), "Height (Start)", &rs->fStartHeight ) ) {
1879 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightEnd ) ), "Height (End)", &rs->fEndHeight ) ) {
1883 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( numPoints ) ), "Num Points", &rs->iNumPoints ) ) {
1889 gtk_grab_remove( window );
1890 gtk_widget_destroy( window );