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"
31 #include "../bobToolz-GTK.h"
34 /*--------------------------------
36 ---------------------------------*/
39 GtkWidget *cbTexChange;
40 GtkWidget *editTexOld, *editTexNew;
42 GtkWidget *cbScaleHor, *cbScaleVert;
43 GtkWidget *editScaleHor, *editScaleVert;
45 GtkWidget *cbShiftHor, *cbShiftVert;
46 GtkWidget *editShiftHor, *editShiftVert;
48 GtkWidget *cbRotation;
49 GtkWidget *editRotation;
52 dlg_texReset_t dlgTexReset;
54 void Update_TextureReseter();
56 static void dialog_button_callback_texreset_update( GtkWidget *widget, gpointer data ){
57 Update_TextureReseter();
60 void Update_TextureReseter(){
63 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
64 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editTexNew ), check );
65 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editTexOld ), check );
67 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
68 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editScaleHor ), check );
70 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
71 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editScaleVert ), check );
73 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
74 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editShiftHor ), check );
76 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
77 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editShiftVert ), check );
79 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
80 gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editRotation ), check );
83 static void dialog_button_callback( GtkWidget *widget, gpointer data ){
86 EMessageBoxReturn *ret;
88 parent = gtk_widget_get_toplevel( widget );
89 loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" );
90 ret = (EMessageBoxReturn*)g_object_get_data( G_OBJECT( parent ), "ret" );
93 *ret = (EMessageBoxReturn)gpointer_to_int( data );
96 static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){
99 gtk_widget_hide( widget );
100 loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" );
106 static void dialog_button_callback_settex( GtkWidget *widget, gpointer data ){
107 TwinWidget* tw = (TwinWidget*)data;
109 GtkEntry* entry = GTK_ENTRY( tw->one );
110 GtkCombo* combo = GTK_COMBO( tw->two );
112 const gchar* tex = gtk_entry_get_text( GTK_ENTRY( combo->entry ) );
113 gtk_entry_set_text( entry, tex );
116 /*--------------------------------
117 Data validation Routines
118 ---------------------------------*/
120 bool ValidateTextFloat( const char* pData, char* error_title, float* value ){
122 float testNum = (float)atof( pData );
124 if ( ( testNum == 0.0f ) && strcmp( pData, "0" ) ) {
125 DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK );
135 DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK );
139 bool ValidateTextFloatRange( const char* pData, float min, float max, char* error_title, float* value ){
140 char error_buffer[256];
141 sprintf( error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max );
144 float testNum = (float)atof( pData );
146 if ( ( testNum < min ) || ( testNum > max ) ) {
147 DoMessageBox( error_buffer, error_title, eMB_OK );
157 DoMessageBox( error_buffer, error_title, eMB_OK );
161 bool ValidateTextIntRange( const char* pData, int min, int max, char* error_title, int* value ){
162 char error_buffer[256];
163 sprintf( error_buffer, "Please Enter An Integer Between %i and %i", min, max );
166 int testNum = atoi( pData );
168 if ( ( testNum < min ) || ( testNum > max ) ) {
169 DoMessageBox( error_buffer, error_title, eMB_OK );
179 DoMessageBox( error_buffer, error_title, eMB_OK );
183 bool ValidateTextInt( const char* pData, char* error_title, int* value ){
185 int testNum = atoi( pData );
187 if ( ( testNum == 0 ) && strcmp( pData, "0" ) ) {
188 DoMessageBox( "Please Enter An Integer", error_title, eMB_OK );
198 DoMessageBox( "Please Enter An Integer", error_title, eMB_OK );
202 /*--------------------------------
204 ---------------------------------*/
208 Major clean up of variable names etc required, excluding Mars's ones,
209 which are nicely done :)
213 EMessageBoxReturn DoMessageBox( const char* lpText, const char* lpCaption, EMessageBoxType type ){
214 GtkWidget *window, *w, *vbox, *hbox;
215 EMessageBoxReturn ret;
218 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
219 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pRadiantWnd ) );
220 gtk_window_set_modal( GTK_WINDOW( window ), TRUE );
221 gtk_signal_connect( GTK_OBJECT( window ), "delete_event",
222 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
223 gtk_signal_connect( GTK_OBJECT( window ), "destroy",
224 GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
225 gtk_window_set_title( GTK_WINDOW( window ), lpCaption );
226 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
227 g_object_set_data( G_OBJECT( window ), "loop", &loop );
228 g_object_set_data( G_OBJECT( window ), "ret", &ret );
229 gtk_widget_realize( window );
231 vbox = gtk_vbox_new( FALSE, 10 );
232 gtk_container_add( GTK_CONTAINER( window ), vbox );
233 gtk_widget_show( vbox );
235 w = gtk_label_new( lpText );
236 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
237 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
238 gtk_widget_show( w );
240 w = gtk_hseparator_new();
241 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
242 gtk_widget_show( w );
244 hbox = gtk_hbox_new( FALSE, 10 );
245 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
246 gtk_widget_show( hbox );
248 if ( type == eMB_OK ) {
249 w = gtk_button_new_with_label( "Ok" );
250 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
251 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
252 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
253 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
254 gtk_widget_grab_default( w );
255 gtk_widget_show( w );
258 else if ( type == eMB_OKCANCEL ) {
259 w = gtk_button_new_with_label( "Ok" );
260 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
261 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
262 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
263 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
264 gtk_widget_grab_default( w );
265 gtk_widget_show( w );
267 w = gtk_button_new_with_label( "Cancel" );
268 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
269 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
270 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
271 gtk_widget_show( w );
274 else if ( type == eMB_YESNOCANCEL ) {
275 w = gtk_button_new_with_label( "Yes" );
276 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
277 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
278 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
279 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
280 gtk_widget_grab_default( w );
281 gtk_widget_show( w );
283 w = gtk_button_new_with_label( "No" );
284 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
285 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
286 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
287 gtk_widget_show( w );
289 w = gtk_button_new_with_label( "Cancel" );
290 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
291 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
292 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
293 gtk_widget_show( w );
296 else /* if (mode == MB_YESNO) */
298 w = gtk_button_new_with_label( "Yes" );
299 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
300 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
301 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
302 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
303 gtk_widget_grab_default( w );
304 gtk_widget_show( w );
306 w = gtk_button_new_with_label( "No" );
307 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
308 gtk_signal_connect( GTK_OBJECT( w ), "clicked",
309 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
310 gtk_widget_show( w );
314 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER_ON_PARENT );
315 gtk_widget_show( window );
316 gtk_grab_add( window );
319 gtk_main_iteration();
321 gtk_grab_remove( window );
322 gtk_widget_destroy( window );
327 EMessageBoxReturn DoIntersectBox( IntersectRS* rs ){
328 GtkWidget *window, *w, *vbox, *hbox;
329 GtkWidget *radio1, *radio2;
330 GtkWidget *check1, *check2;
331 EMessageBoxReturn ret;
334 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
336 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
337 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
339 gtk_window_set_title( GTK_WINDOW( window ), "Intersect" );
340 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
342 g_object_set_data( G_OBJECT( window ), "loop", &loop );
343 g_object_set_data( G_OBJECT( window ), "ret", &ret );
345 gtk_widget_realize( window );
349 vbox = gtk_vbox_new( FALSE, 10 );
350 gtk_container_add( GTK_CONTAINER( window ), vbox );
351 gtk_widget_show( vbox );
356 radio1 = gtk_radio_button_new_with_label( NULL, "Use Whole Map" );
357 gtk_box_pack_start( GTK_BOX( vbox ), radio1, FALSE, FALSE, 2 );
358 gtk_widget_show( radio1 );
360 radio2 = gtk_radio_button_new_with_label( ( (GtkRadioButton*)radio1 )->group, "Use Selected Brushes" );
361 gtk_box_pack_start( GTK_BOX( vbox ), radio2, FALSE, FALSE, 2 );
362 gtk_widget_show( radio2 );
364 w = gtk_hseparator_new();
365 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
366 gtk_widget_show( w );
368 check1 = gtk_check_button_new_with_label( "Include Detail Brushes" );
369 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
370 gtk_widget_show( check1 );
372 check2 = gtk_check_button_new_with_label( "Select Duplicate Brushes Only" );
373 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
374 gtk_widget_show( check2 );
376 hbox = gtk_hbox_new( FALSE, 10 );
377 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
378 gtk_widget_show( hbox );
380 // ---- hbox ---- ok/cancel buttons
382 w = gtk_button_new_with_label( "Ok" );
383 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
384 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
386 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
387 gtk_widget_grab_default( w );
388 gtk_widget_show( w );
390 w = gtk_button_new_with_label( "Cancel" );
391 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
392 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
393 gtk_widget_show( w );
400 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
401 gtk_widget_show( window );
402 gtk_grab_add( window );
405 gtk_main_iteration();
407 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio1 ) ) {
408 rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP;
410 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio2 ) ) {
411 rs->nBrushOptions = BRUSH_OPT_SELECTED;
414 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
415 rs->bDuplicateOnly = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
417 gtk_grab_remove( window );
418 gtk_widget_destroy( window );
423 EMessageBoxReturn DoPolygonBox( PolygonRS* rs ){
424 GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2;
426 GtkWidget *check1, *check2, *check3;
427 GtkWidget *text1, *text2;
429 EMessageBoxReturn ret;
432 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
433 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pRadiantWnd ) );
435 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
436 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
438 gtk_window_set_title( GTK_WINDOW( window ), "Polygon Builder" );
439 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
441 g_object_set_data( G_OBJECT( window ), "loop", &loop );
442 g_object_set_data( G_OBJECT( window ), "ret", &ret );
444 gtk_widget_realize( window );
448 vbox = gtk_vbox_new( FALSE, 10 );
449 gtk_container_add( GTK_CONTAINER( window ), vbox );
450 gtk_widget_show( vbox );
454 hbox = gtk_hbox_new( FALSE, 10 );
455 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
456 gtk_widget_show( hbox );
461 vbox2 = gtk_vbox_new( FALSE, 10 );
462 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
463 gtk_widget_show( vbox2 );
467 hbox2 = gtk_hbox_new( FALSE, 10 );
468 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
469 gtk_widget_show( hbox2 );
473 text1 = gtk_entry_new_with_max_length( 256 );
474 gtk_entry_set_text( (GtkEntry*)text1, "3" );
475 gtk_box_pack_start( GTK_BOX( hbox2 ), text1, FALSE, FALSE, 2 );
476 gtk_widget_show( text1 );
478 w = gtk_label_new( "Number Of Sides" );
479 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
480 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
481 gtk_widget_show( w );
485 hbox2 = gtk_hbox_new( FALSE, 10 );
486 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
487 gtk_widget_show( hbox2 );
491 text2 = gtk_entry_new_with_max_length( 256 );
492 gtk_entry_set_text( (GtkEntry*)text2, "8" );
493 gtk_box_pack_start( GTK_BOX( hbox2 ), text2, FALSE, FALSE, 2 );
494 gtk_widget_show( text2 );
496 w = gtk_label_new( "Border Width" );
497 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
498 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
499 gtk_widget_show( w );
507 vbox2 = gtk_vbox_new( FALSE, 10 );
508 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
509 gtk_widget_show( vbox2 );
513 check1 = gtk_check_button_new_with_label( "Use Border" );
514 gtk_box_pack_start( GTK_BOX( vbox2 ), check1, FALSE, FALSE, 0 );
515 gtk_widget_show( check1 );
518 check2 = gtk_check_button_new_with_label( "Inverse Polygon" );
519 gtk_box_pack_start( GTK_BOX( vbox2 ), check2, FALSE, FALSE, 0 );
520 gtk_widget_show( check2 );
523 check3 = gtk_check_button_new_with_label( "Align Top Edge" );
524 gtk_box_pack_start( GTK_BOX( vbox2 ), check3, FALSE, FALSE, 0 );
525 gtk_widget_show( check3 );
531 hbox = gtk_hbox_new( FALSE, 10 );
532 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
533 gtk_widget_show( hbox );
537 w = gtk_button_new_with_label( "Ok" );
538 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
539 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
541 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
542 gtk_widget_grab_default( w );
543 gtk_widget_show( w );
545 w = gtk_button_new_with_label( "Cancel" );
546 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
547 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
548 gtk_widget_show( w );
555 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER_ON_PARENT );
556 gtk_window_set_modal( GTK_WINDOW( window ), TRUE );
557 gtk_widget_show( window );
558 gtk_grab_add( window );
560 bool dialogError = TRUE;
561 while ( dialogError )
565 gtk_main_iteration();
569 if ( ret == eIDOK ) {
570 rs->bUseBorder = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
571 rs->bInverse = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
572 rs->bAlignTop = gtk_toggle_button_get_active( (GtkToggleButton*)check3 ) ? true : false;
574 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text1 ), 3, 32, "Number Of Sides", &rs->nSides ) ) {
578 if ( rs->bUseBorder ) {
579 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text2 ), 8, 256, "Border Width", &rs->nBorderWidth ) ) {
586 gtk_grab_remove( window );
587 gtk_widget_destroy( window );
593 // for stair builder stuck as close as i could to the MFC version
594 // obviously feel free to change it at will :)
595 EMessageBoxReturn DoBuildStairsBox( BuildStairsRS* rs ){
596 // i made widgets for just about everything ... i think that's what i need to do dunno tho
597 GtkWidget *window, *w, *vbox, *hbox;
598 GtkWidget *textStairHeight, *textRiserTex, *textMainTex;
599 GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value
600 GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle;
601 GtkWidget *checkUseDetail;
602 GSList *radioDirection, *radioStyle;
603 EMessageBoxReturn ret;
606 char *text = "Please set a value in the boxes below and press 'OK' to build the stairs";
608 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
610 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
611 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
613 gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" );
615 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
617 g_object_set_data( G_OBJECT( window ), "loop", &loop );
618 g_object_set_data( G_OBJECT( window ), "ret", &ret );
620 gtk_widget_realize( window );
623 vbox = gtk_vbox_new( FALSE, 10 );
624 gtk_container_add( GTK_CONTAINER( window ), vbox );
625 gtk_widget_show( vbox );
627 hbox = gtk_hbox_new( FALSE, 10 );
628 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
629 gtk_widget_show( hbox );
631 // dunno if you want this text or not ...
632 w = gtk_label_new( text );
633 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ...
634 gtk_widget_show( w );
636 w = gtk_hseparator_new();
637 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
638 gtk_widget_show( w );
640 // ------------------------- // indenting == good way of keeping track of lines :)
643 hbox = gtk_hbox_new( FALSE, 10 );
644 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
645 gtk_widget_show( hbox );
647 textStairHeight = gtk_entry_new_with_max_length( 256 );
648 gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 );
649 gtk_widget_show( textStairHeight );
651 w = gtk_label_new( "Stair Height" );
652 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
653 gtk_widget_show( w );
655 // ------------------------- //
657 hbox = gtk_hbox_new( FALSE, 10 );
658 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
659 gtk_widget_show( hbox );
661 w = gtk_label_new( "Direction:" );
662 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
663 gtk_widget_show( w );
665 // -------------------------- //
667 hbox = gtk_hbox_new( FALSE, 10 );
668 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
669 gtk_widget_show( hbox );
671 // radio buttons confuse me ...
672 // but this _looks_ right
674 // djbob: actually it looks very nice :), slightly better than the way i did it
675 // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh
677 radioNorth = gtk_radio_button_new_with_label( NULL, "North" );
678 gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 );
679 gtk_widget_show( radioNorth );
681 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) );
683 radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" );
684 gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 );
685 gtk_widget_show( radioSouth );
687 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) );
689 radioEast = gtk_radio_button_new_with_label( radioDirection, "East" );
690 gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 );
691 gtk_widget_show( radioEast );
693 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) );
695 radioWest = gtk_radio_button_new_with_label( radioDirection, "West" );
696 gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 );
697 gtk_widget_show( radioWest );
699 // --------------------------- //
701 hbox = gtk_hbox_new( FALSE, 10 );
702 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
703 gtk_widget_show( hbox );
705 w = gtk_label_new( "Style:" );
706 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
707 gtk_widget_show( w );
709 // --------------------------- //
711 hbox = gtk_hbox_new( FALSE, 10 );
712 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
713 gtk_widget_show( hbox );
715 radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" );
716 gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 );
717 gtk_widget_show( radioOldStyle );
719 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) );
721 radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" );
722 gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 );
723 gtk_widget_show( radioBobStyle );
725 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) );
727 radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" );
728 gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 );
729 gtk_widget_show( radioCornerStyle );
731 // err, the q3r has an if or something so you need bob style checked before this
732 // is "ungreyed out" but you'll need to do that, as i suck :)
734 // djbob: er.... yeah um, im not at all sure how i'm gonna sort this
735 // djbob: think we need some button callback functions or smuffin
736 // FIXME: actually get around to doing what i suggested!!!!
738 checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" );
739 gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 );
740 gtk_widget_show( checkUseDetail );
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 textMainTex = gtk_entry_new_with_max_length( 512 );
749 gtk_entry_set_text( GTK_ENTRY( textMainTex ), rs->mainTexture );
750 gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 );
751 gtk_widget_show( textMainTex );
753 w = gtk_label_new( "Main Texture" );
754 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
755 gtk_widget_show( w );
757 // -------------------------- //
759 hbox = gtk_hbox_new( FALSE, 10 );
760 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
761 gtk_widget_show( hbox );
763 textRiserTex = gtk_entry_new_with_max_length( 512 );
764 gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 );
765 gtk_widget_show( textRiserTex );
767 w = gtk_label_new( "Riser Texture" );
768 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
769 gtk_widget_show( w );
771 // -------------------------- //
772 w = gtk_hseparator_new();
773 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
774 gtk_widget_show( w );
776 hbox = gtk_hbox_new( FALSE, 10 );
777 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
778 gtk_widget_show( hbox );
780 w = gtk_button_new_with_label( "OK" );
781 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
782 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
783 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
784 gtk_widget_grab_default( w );
785 gtk_widget_show( w );
787 w = gtk_button_new_with_label( "Cancel" );
788 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
789 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
790 gtk_widget_show( w );
794 // +djbob: need our "little" modal loop mars :P
795 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
796 gtk_widget_show( window );
797 gtk_grab_add( window );
799 bool dialogError = TRUE;
800 while ( dialogError )
804 gtk_main_iteration();
808 if ( ret == eIDOK ) {
809 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)checkUseDetail ) ? true : false;
811 strcpy( rs->riserTexture, gtk_entry_get_text( (GtkEntry*)textRiserTex ) );
812 strcpy( rs->mainTexture, gtk_entry_get_text( (GtkEntry*)textMainTex ) );
814 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioNorth ) ) {
815 rs->direction = MOVE_NORTH;
817 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioSouth ) ) {
818 rs->direction = MOVE_SOUTH;
820 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioEast ) ) {
821 rs->direction = MOVE_EAST;
823 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioWest ) ) {
824 rs->direction = MOVE_WEST;
827 if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textStairHeight ), "Stair Height", &rs->stairHeight ) ) {
831 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioOldStyle ) ) {
832 rs->style = STYLE_ORIGINAL;
834 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioBobStyle ) ) {
835 rs->style = STYLE_BOB;
837 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioCornerStyle ) ) {
838 rs->style = STYLE_CORNER;
843 gtk_grab_remove( window );
844 gtk_widget_destroy( window );
849 // there we go, all done ... on my end at least, not bad for a night's work
852 EMessageBoxReturn DoDoorsBox( DoorRS* rs ){
853 GtkWidget *window, *hbox, *vbox, *w;
854 GtkWidget *textFrontBackTex, *textTrimTex;
855 GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV;
856 GtkWidget *comboMain, *comboTrim;
857 GtkWidget *buttonSetMain, *buttonSetTrim;
858 GtkWidget *radioNS, *radioEW;
859 GSList *radioOrientation;
861 EMessageBoxReturn ret;
864 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
866 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
867 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
869 gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" );
871 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
873 g_object_set_data( G_OBJECT( window ), "loop", &loop );
874 g_object_set_data( G_OBJECT( window ), "ret", &ret );
876 gtk_widget_realize( window );
879 GList *listMainTextures = NULL;
880 GList *listTrimTextures = NULL;
881 LoadGList( GetFilename( buffer, "plugins/bt/door-tex.txt" ), &listMainTextures );
882 LoadGList( GetFilename( buffer, "plugins/bt/door-tex-trim.txt" ), &listTrimTextures );
884 vbox = gtk_vbox_new( FALSE, 10 );
885 gtk_container_add( GTK_CONTAINER( window ), vbox );
886 gtk_widget_show( vbox );
888 // -------------------------- //
890 hbox = gtk_hbox_new( FALSE, 10 );
891 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
892 gtk_widget_show( hbox );
894 textFrontBackTex = gtk_entry_new_with_max_length( 512 );
895 gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture );
896 gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 );
897 gtk_widget_show( textFrontBackTex );
899 w = gtk_label_new( "Door Front/Back 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 textTrimTex = gtk_entry_new_with_max_length( 512 );
910 gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 );
911 gtk_widget_show( textTrimTex );
913 w = gtk_label_new( "Door Trim Texture" );
914 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
915 gtk_widget_show( w );
917 // ----------------------- //
919 hbox = gtk_hbox_new( FALSE, 10 );
920 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
921 gtk_widget_show( hbox );
923 // sp: horizontally ????
924 // djbob: yes mars, u can spell :]
925 checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" );
926 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE );
927 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 );
928 gtk_widget_show( checkScaleMainH );
930 checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" );
931 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE );
932 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 );
933 gtk_widget_show( checkScaleTrimH );
935 // ---------------------- //
937 hbox = gtk_hbox_new( FALSE, 10 );
938 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
939 gtk_widget_show( hbox );
941 checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" );
942 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE );
943 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 );
944 gtk_widget_show( checkScaleMainV );
946 checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" );
947 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 );
948 gtk_widget_show( checkScaleTrimV );
950 // --------------------- //
952 hbox = gtk_hbox_new( FALSE, 10 );
953 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
954 gtk_widget_show( hbox );
956 // djbob: lists added
958 comboMain = gtk_combo_new();
959 gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 );
960 gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures );
961 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
962 gtk_widget_show( comboMain );
964 tw1.one = textFrontBackTex;
967 buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" );
968 gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 );
969 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 );
970 gtk_widget_show( buttonSetMain );
972 // ------------------- //
974 hbox = gtk_hbox_new( FALSE, 10 );
975 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
976 gtk_widget_show( hbox );
978 comboTrim = gtk_combo_new();
979 gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 );
980 gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures );
981 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
982 gtk_widget_show( comboTrim );
984 tw2.one = textTrimTex;
987 buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" );
988 gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 );
989 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 );
990 gtk_widget_show( buttonSetTrim );
992 // ------------------ //
994 hbox = gtk_hbox_new( FALSE, 10 );
995 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
996 gtk_widget_show( hbox );
998 w = gtk_label_new( "Orientation" );
999 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1000 gtk_widget_show( w );
1002 // argh more radio buttons!
1003 radioNS = gtk_radio_button_new_with_label( NULL, "North - South" );
1004 gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 );
1005 gtk_widget_show( radioNS );
1007 radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) );
1009 radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" );
1010 gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 );
1011 gtk_widget_show( radioEW );
1013 // ----------------- //
1015 w = gtk_hseparator_new();
1016 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1017 gtk_widget_show( w );
1019 // ----------------- //
1021 hbox = gtk_hbox_new( FALSE, 10 );
1022 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1023 gtk_widget_show( hbox );
1025 w = gtk_button_new_with_label( "OK" );
1026 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1027 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1028 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1029 gtk_widget_grab_default( w );
1030 gtk_widget_show( w );
1032 w = gtk_button_new_with_label( "Cancel" );
1033 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1034 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1035 gtk_widget_show( w );
1038 // ----------------- //
1041 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1042 gtk_widget_show( window );
1043 gtk_grab_add( window );
1046 gtk_main_iteration();
1048 strcpy( rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ) );
1049 strcpy( rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ) );
1051 rs->bScaleMainH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainH ) ) ? true : false;
1052 rs->bScaleMainV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainV ) ) ? true : false;
1053 rs->bScaleTrimH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ) ) ? true : false;
1054 rs->bScaleTrimV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimV ) ) ? true : false;
1056 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioNS ) ) ) {
1057 rs->nOrientation = DIRECTION_NS;
1059 else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioEW ) ) ) {
1060 rs->nOrientation = DIRECTION_EW;
1063 gtk_grab_remove( window );
1064 gtk_widget_destroy( window );
1070 EMessageBoxReturn DoPathPlotterBox( PathPlotterRS* rs ){
1071 GtkWidget *window, *w, *vbox, *hbox;
1073 GtkWidget *text1, *text2, *text3;
1074 GtkWidget *check1, *check2;
1076 EMessageBoxReturn ret;
1079 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1081 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1082 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1084 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1085 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1087 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1088 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1090 gtk_widget_realize( window );
1094 vbox = gtk_vbox_new( FALSE, 10 );
1095 gtk_container_add( GTK_CONTAINER( window ), vbox );
1096 gtk_widget_show( vbox );
1100 hbox = gtk_hbox_new( FALSE, 10 );
1101 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1102 gtk_widget_show( hbox );
1106 text1 = gtk_entry_new_with_max_length( 256 );
1107 gtk_entry_set_text( (GtkEntry*)text1, "25" );
1108 gtk_box_pack_start( GTK_BOX( hbox ), text1, FALSE, FALSE, 2 );
1109 gtk_widget_show( text1 );
1111 w = gtk_label_new( "Number Of Points" );
1112 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1113 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1114 gtk_widget_show( w );
1118 hbox = gtk_hbox_new( FALSE, 10 );
1119 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1120 gtk_widget_show( hbox );
1124 text2 = gtk_entry_new_with_max_length( 256 );
1125 gtk_entry_set_text( (GtkEntry*)text2, "3" );
1126 gtk_box_pack_start( GTK_BOX( hbox ), text2, FALSE, FALSE, 2 );
1127 gtk_widget_show( text2 );
1129 w = gtk_label_new( "Multipler" );
1130 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1131 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1132 gtk_widget_show( w );
1136 w = gtk_label_new( "Path Distance = dist(start -> apex) * multiplier" );
1137 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1138 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1139 gtk_widget_show( w );
1141 hbox = gtk_hbox_new( FALSE, 10 );
1142 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1143 gtk_widget_show( hbox );
1147 text3 = gtk_entry_new_with_max_length( 256 );
1148 gtk_entry_set_text( (GtkEntry*)text3, "-800" );
1149 gtk_box_pack_start( GTK_BOX( hbox ), text3, FALSE, FALSE, 2 );
1150 gtk_widget_show( text3 );
1152 w = gtk_label_new( "Gravity" );
1153 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1154 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1155 gtk_widget_show( w );
1159 w = gtk_hseparator_new();
1160 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1161 gtk_widget_show( w );
1163 check1 = gtk_check_button_new_with_label( "No Dynamic Update" );
1164 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
1165 gtk_widget_show( check1 );
1167 check2 = gtk_check_button_new_with_label( "Show Bounding Lines" );
1168 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
1169 gtk_widget_show( check2 );
1174 // ----------------- //
1176 w = gtk_hseparator_new();
1177 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1178 gtk_widget_show( w );
1180 // ----------------- //
1182 hbox = gtk_hbox_new( FALSE, 10 );
1183 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1184 gtk_widget_show( hbox );
1186 w = gtk_button_new_with_label( "Enable" );
1187 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1188 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1189 gtk_widget_show( w );
1191 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1192 gtk_widget_grab_default( w );
1194 w = gtk_button_new_with_label( "Disable" );
1195 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1196 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
1197 gtk_widget_show( w );
1199 w = gtk_button_new_with_label( "Cancel" );
1200 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1201 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1202 gtk_widget_show( w );
1206 // ----------------- //
1208 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1209 gtk_widget_show( window );
1210 gtk_grab_add( window );
1212 bool dialogError = TRUE;
1213 while ( dialogError )
1217 gtk_main_iteration();
1219 dialogError = FALSE;
1221 if ( ret == eIDYES ) {
1222 if ( !ValidateTextIntRange( gtk_entry_get_text( GTK_ENTRY( text1 ) ), 1, 200, "Number Of Points", &rs->nPoints ) ) {
1226 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text2 ) ), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier ) ) {
1230 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text3 ) ), -10000.0f, -1.0f, "Gravity", &rs->fGravity ) ) {
1234 rs->bNoUpdate = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check1 ) ) ? true : false;
1235 rs->bShowExtra = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2 ) ) ? true : false;
1239 gtk_grab_remove( window );
1240 gtk_widget_destroy( window );
1245 EMessageBoxReturn DoCTFColourChangeBox(){
1246 GtkWidget *window, *w, *vbox, *hbox;
1247 EMessageBoxReturn ret;
1250 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1252 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1253 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1255 gtk_window_set_title( GTK_WINDOW( window ), "CTF Colour Changer" );
1256 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1258 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1259 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1261 gtk_widget_realize( window );
1265 vbox = gtk_vbox_new( FALSE, 10 );
1266 gtk_container_add( GTK_CONTAINER( window ), vbox );
1267 gtk_widget_show( vbox );
1271 hbox = gtk_hbox_new( FALSE, 10 );
1272 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
1273 gtk_widget_show( hbox );
1275 // ---- hbox ---- ok/cancel buttons
1277 w = gtk_button_new_with_label( "Red->Blue" );
1278 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1279 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1281 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1282 gtk_widget_grab_default( w );
1283 gtk_widget_show( w );
1285 w = gtk_button_new_with_label( "Blue->Red" );
1286 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1287 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1288 gtk_widget_show( w );
1290 w = gtk_button_new_with_label( "Cancel" );
1291 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1292 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1293 gtk_widget_show( w );
1300 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1301 gtk_widget_show( window );
1302 gtk_grab_add( window );
1305 gtk_main_iteration();
1307 gtk_grab_remove( window );
1308 gtk_widget_destroy( window );
1313 EMessageBoxReturn DoResetTextureBox( ResetTextureRS* rs ){
1316 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1318 EMessageBoxReturn ret;
1321 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1322 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pRadiantWnd ) );
1323 gtk_window_set_modal( GTK_WINDOW( window ), TRUE );
1325 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1326 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1328 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1329 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1331 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1332 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1334 gtk_widget_realize( window );
1336 vbox = gtk_vbox_new( FALSE, 10 );
1337 gtk_container_add( GTK_CONTAINER( window ), vbox );
1338 gtk_widget_show( vbox );
1342 hbox = gtk_hbox_new( FALSE, 10 );
1343 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1344 gtk_widget_show( hbox );
1348 texSelected = "Currently Selected Texture: ";
1349 texSelected += GetCurrentTexture();
1351 w = gtk_label_new( texSelected );
1352 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1353 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1354 gtk_widget_show( w );
1358 frame = gtk_frame_new( "Reset Texture Names" );
1359 gtk_widget_show( frame );
1360 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1362 table = gtk_table_new( 2, 3, TRUE );
1363 gtk_widget_show( table );
1364 gtk_container_add( GTK_CONTAINER( frame ), table );
1365 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1366 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1367 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1371 dlgTexReset.cbTexChange = gtk_check_button_new_with_label( "Enabled" );
1372 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbTexChange ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1373 gtk_widget_show( dlgTexReset.cbTexChange );
1374 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbTexChange, 0, 1, 0, 1,
1375 (GtkAttachOptions) ( GTK_FILL ),
1376 (GtkAttachOptions) ( 0 ), 0, 0 );
1378 w = gtk_label_new( "Old Name: " );
1379 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1380 (GtkAttachOptions) ( GTK_FILL ),
1381 (GtkAttachOptions) ( 0 ), 0, 0 );
1382 gtk_widget_show( w );
1384 dlgTexReset.editTexOld = gtk_entry_new_with_max_length( 256 );
1385 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexOld ), rs->textureName );
1386 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexOld, 2, 3, 0, 1,
1387 (GtkAttachOptions) ( GTK_FILL ),
1388 (GtkAttachOptions) ( 0 ), 0, 0 );
1389 gtk_widget_show( dlgTexReset.editTexOld );
1391 w = gtk_label_new( "New Name: " );
1392 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1393 (GtkAttachOptions) ( GTK_FILL ),
1394 (GtkAttachOptions) ( 0 ), 0, 0 );
1395 gtk_widget_show( w );
1397 dlgTexReset.editTexNew = gtk_entry_new_with_max_length( 256 );
1398 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexNew ), rs->textureName );
1399 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexNew, 2, 3, 1, 2,
1400 (GtkAttachOptions) ( GTK_FILL ),
1401 (GtkAttachOptions) ( 0 ), 0, 0 );
1402 gtk_widget_show( dlgTexReset.editTexNew );
1406 frame = gtk_frame_new( "Reset Scales" );
1407 gtk_widget_show( frame );
1408 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1410 table = gtk_table_new( 2, 3, TRUE );
1411 gtk_widget_show( table );
1412 gtk_container_add( GTK_CONTAINER( frame ), table );
1413 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1414 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1415 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1419 dlgTexReset.cbScaleHor = gtk_check_button_new_with_label( "Enabled" );
1420 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleHor ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1421 gtk_widget_show( dlgTexReset.cbScaleHor );
1422 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleHor, 0, 1, 0, 1,
1423 (GtkAttachOptions) ( GTK_FILL ),
1424 (GtkAttachOptions) ( 0 ), 0, 0 );
1426 w = gtk_label_new( "New Horizontal Scale: " );
1427 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1428 (GtkAttachOptions) ( GTK_FILL ),
1429 (GtkAttachOptions) ( 0 ), 0, 0 );
1430 gtk_widget_show( w );
1432 dlgTexReset.editScaleHor = gtk_entry_new_with_max_length( 256 );
1433 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleHor ), "0.5" );
1434 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleHor, 2, 3, 0, 1,
1435 (GtkAttachOptions) ( GTK_FILL ),
1436 (GtkAttachOptions) ( 0 ), 0, 0 );
1437 gtk_widget_show( dlgTexReset.editScaleHor );
1440 dlgTexReset.cbScaleVert = gtk_check_button_new_with_label( "Enabled" );
1441 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleVert ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1442 gtk_widget_show( dlgTexReset.cbScaleVert );
1443 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleVert, 0, 1, 1, 2,
1444 (GtkAttachOptions) ( GTK_FILL ),
1445 (GtkAttachOptions) ( 0 ), 0, 0 );
1447 w = gtk_label_new( "New Vertical Scale: " );
1448 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1449 (GtkAttachOptions) ( GTK_FILL ),
1450 (GtkAttachOptions) ( 0 ), 0, 0 );
1451 gtk_widget_show( w );
1453 dlgTexReset.editScaleVert = gtk_entry_new_with_max_length( 256 );
1454 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleVert ), "0.5" );
1455 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleVert, 2, 3, 1, 2,
1456 (GtkAttachOptions) ( GTK_FILL ),
1457 (GtkAttachOptions) ( 0 ), 0, 0 );
1458 gtk_widget_show( dlgTexReset.editScaleVert );
1462 frame = gtk_frame_new( "Reset Shift" );
1463 gtk_widget_show( frame );
1464 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1466 table = gtk_table_new( 2, 3, TRUE );
1467 gtk_widget_show( table );
1468 gtk_container_add( GTK_CONTAINER( frame ), table );
1469 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1470 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1471 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1475 dlgTexReset.cbShiftHor = gtk_check_button_new_with_label( "Enabled" );
1476 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftHor ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1477 gtk_widget_show( dlgTexReset.cbShiftHor );
1478 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftHor, 0, 1, 0, 1,
1479 (GtkAttachOptions) ( GTK_FILL ),
1480 (GtkAttachOptions) ( 0 ), 0, 0 );
1482 w = gtk_label_new( "New Horizontal Shift: " );
1483 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1484 (GtkAttachOptions) ( GTK_FILL ),
1485 (GtkAttachOptions) ( 0 ), 0, 0 );
1486 gtk_widget_show( w );
1488 dlgTexReset.editShiftHor = gtk_entry_new_with_max_length( 256 );
1489 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftHor ), "0" );
1490 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftHor, 2, 3, 0, 1,
1491 (GtkAttachOptions) ( GTK_FILL ),
1492 (GtkAttachOptions) ( 0 ), 0, 0 );
1493 gtk_widget_show( dlgTexReset.editShiftHor );
1496 dlgTexReset.cbShiftVert = gtk_check_button_new_with_label( "Enabled" );
1497 gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftVert ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL );
1498 gtk_widget_show( dlgTexReset.cbShiftVert );
1499 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftVert, 0, 1, 1, 2,
1500 (GtkAttachOptions) ( GTK_FILL ),
1501 (GtkAttachOptions) ( 0 ), 0, 0 );
1503 w = gtk_label_new( "New Vertical Shift: " );
1504 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1505 (GtkAttachOptions) ( GTK_FILL ),
1506 (GtkAttachOptions) ( 0 ), 0, 0 );
1507 gtk_widget_show( w );
1509 dlgTexReset.editShiftVert = gtk_entry_new_with_max_length( 256 );
1510 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftVert ), "0" );
1511 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftVert, 2, 3, 1, 2,
1512 (GtkAttachOptions) ( GTK_FILL ),
1513 (GtkAttachOptions) ( 0 ), 0, 0 );
1514 gtk_widget_show( dlgTexReset.editShiftVert );
1518 frame = gtk_frame_new( "Reset Rotation" );
1519 gtk_widget_show( frame );
1520 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1522 table = gtk_table_new( 1, 3, TRUE );
1523 gtk_widget_show( table );
1524 gtk_container_add( GTK_CONTAINER( frame ), table );
1525 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1526 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1527 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1531 dlgTexReset.cbRotation = gtk_check_button_new_with_label( "Enabled" );
1532 gtk_widget_show( dlgTexReset.cbRotation );
1533 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbRotation, 0, 1, 0, 1,
1534 (GtkAttachOptions) ( GTK_FILL ),
1535 (GtkAttachOptions) ( 0 ), 0, 0 );
1537 w = gtk_label_new( "New Rotation Value: " );
1538 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1539 (GtkAttachOptions) ( GTK_FILL ),
1540 (GtkAttachOptions) ( 0 ), 0, 0 );
1541 gtk_widget_show( w );
1543 dlgTexReset.editRotation = gtk_entry_new_with_max_length( 256 );
1544 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editRotation ), "0" );
1545 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editRotation, 2, 3, 0, 1,
1546 (GtkAttachOptions) ( GTK_FILL ),
1547 (GtkAttachOptions) ( 0 ), 0, 0 );
1548 gtk_widget_show( dlgTexReset.editRotation );
1552 hbox = gtk_hbox_new( FALSE, 10 );
1553 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1554 gtk_widget_show( hbox );
1558 w = gtk_button_new_with_label( "Use Selected 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( eIDOK ) );
1562 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1563 gtk_widget_grab_default( w );
1564 gtk_widget_show( w );
1566 w = gtk_button_new_with_label( "Use All Brushes" );
1567 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1568 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1569 gtk_widget_show( w );
1571 w = gtk_button_new_with_label( "Cancel" );
1572 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1573 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1574 gtk_widget_show( w );
1581 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER_ON_PARENT );
1582 gtk_widget_show( window );
1583 gtk_grab_add( window );
1585 Update_TextureReseter();
1587 bool dialogError = TRUE;
1588 while ( dialogError )
1592 gtk_main_iteration();
1594 dialogError = FALSE;
1596 if ( ret != eIDCANCEL ) {
1597 rs->bResetRotation = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
1598 if ( rs->bResetRotation ) {
1599 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editRotation ) ), "Rotation", &rs->rotation ) ) {
1604 rs->bResetScale[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
1605 if ( rs->bResetScale[0] ) {
1606 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleHor ) ), "Horizontal Scale", &rs->fScale[0] ) ) {
1611 rs->bResetScale[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
1612 if ( rs->bResetScale[1] ) {
1613 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleVert ) ), "Vertical Scale", &rs->fScale[1] ) ) {
1618 rs->bResetShift[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
1619 if ( rs->bResetShift[0] ) {
1620 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftHor ) ), "Horizontal Shift", &rs->fShift[0] ) ) {
1625 rs->bResetShift[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
1626 if ( rs->bResetShift[1] ) {
1627 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftVert ) ), "Vertical Shift", &rs->fShift[1] ) ) {
1632 rs->bResetTextureName = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
1633 if ( rs->bResetTextureName ) {
1634 strcpy( rs->textureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexOld ) ) );
1635 strcpy( rs->newTextureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexNew ) ) );
1640 gtk_grab_remove( window );
1641 gtk_widget_destroy( window );
1646 EMessageBoxReturn DoTrainThingBox( TrainThingRS* rs ){
1649 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1651 GtkWidget *radiusX, *radiusY;
1652 GtkWidget *angleStart, *angleEnd;
1653 GtkWidget *heightStart, *heightEnd;
1654 GtkWidget *numPoints;
1656 EMessageBoxReturn ret;
1659 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1661 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1662 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1664 gtk_window_set_title( GTK_WINDOW( window ), "Train Thing" );
1665 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1667 gtk_object_set_data( GTK_OBJECT( window ), "loop", &loop );
1668 gtk_object_set_data( GTK_OBJECT( window ), "ret", &ret );
1670 gtk_widget_realize( window );
1672 vbox = gtk_vbox_new( FALSE, 10 );
1673 gtk_container_add( GTK_CONTAINER( window ), vbox );
1674 gtk_widget_show( vbox );
1678 hbox = gtk_hbox_new( FALSE, 10 );
1679 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1680 gtk_widget_show( hbox );
1684 frame = gtk_frame_new( "Radii" );
1685 gtk_widget_show( frame );
1686 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1688 table = gtk_table_new( 2, 3, TRUE );
1689 gtk_widget_show( table );
1690 gtk_container_add( GTK_CONTAINER( frame ), table );
1691 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1692 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1693 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1697 w = gtk_label_new( "X: " );
1698 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1699 (GtkAttachOptions) ( GTK_FILL ),
1700 (GtkAttachOptions) ( 0 ), 0, 0 );
1701 gtk_widget_show( w );
1703 radiusX = gtk_entry_new_with_max_length( 256 );
1704 gtk_entry_set_text( GTK_ENTRY( radiusX ), "100" );
1705 gtk_table_attach( GTK_TABLE( table ), radiusX, 1, 2, 0, 1,
1706 (GtkAttachOptions) ( GTK_FILL ),
1707 (GtkAttachOptions) ( 0 ), 0, 0 );
1708 gtk_widget_show( radiusX );
1712 w = gtk_label_new( "Y: " );
1713 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1714 (GtkAttachOptions) ( GTK_FILL ),
1715 (GtkAttachOptions) ( 0 ), 0, 0 );
1716 gtk_widget_show( w );
1718 radiusY = gtk_entry_new_with_max_length( 256 );
1719 gtk_entry_set_text( GTK_ENTRY( radiusY ), "100" );
1720 gtk_table_attach( GTK_TABLE( table ), radiusY, 1, 2, 1, 2,
1721 (GtkAttachOptions) ( GTK_FILL ),
1722 (GtkAttachOptions) ( 0 ), 0, 0 );
1723 gtk_widget_show( radiusY );
1727 frame = gtk_frame_new( "Angles" );
1728 gtk_widget_show( frame );
1729 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1731 table = gtk_table_new( 2, 3, TRUE );
1732 gtk_widget_show( table );
1733 gtk_container_add( GTK_CONTAINER( frame ), table );
1734 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1735 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1736 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1740 w = gtk_label_new( "Start: " );
1741 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1742 (GtkAttachOptions) ( GTK_FILL ),
1743 (GtkAttachOptions) ( 0 ), 0, 0 );
1744 gtk_widget_show( w );
1746 angleStart = gtk_entry_new_with_max_length( 256 );
1747 gtk_entry_set_text( GTK_ENTRY( angleStart ), "0" );
1748 gtk_table_attach( GTK_TABLE( table ), angleStart, 1, 2, 0, 1,
1749 (GtkAttachOptions) ( GTK_FILL ),
1750 (GtkAttachOptions) ( 0 ), 0, 0 );
1751 gtk_widget_show( angleStart );
1755 w = gtk_label_new( "End: " );
1756 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1757 (GtkAttachOptions) ( GTK_FILL ),
1758 (GtkAttachOptions) ( 0 ), 0, 0 );
1759 gtk_widget_show( w );
1761 angleEnd = gtk_entry_new_with_max_length( 256 );
1762 gtk_entry_set_text( GTK_ENTRY( angleEnd ), "90" );
1763 gtk_table_attach( GTK_TABLE( table ), angleEnd, 1, 2, 1, 2,
1764 (GtkAttachOptions) ( GTK_FILL ),
1765 (GtkAttachOptions) ( 0 ), 0, 0 );
1766 gtk_widget_show( angleEnd );
1769 frame = gtk_frame_new( "Height" );
1770 gtk_widget_show( frame );
1771 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1773 table = gtk_table_new( 2, 3, TRUE );
1774 gtk_widget_show( table );
1775 gtk_container_add( GTK_CONTAINER( frame ), table );
1776 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1777 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1778 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1782 w = gtk_label_new( "Start: " );
1783 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1784 (GtkAttachOptions) ( GTK_FILL ),
1785 (GtkAttachOptions) ( 0 ), 0, 0 );
1786 gtk_widget_show( w );
1788 heightStart = gtk_entry_new_with_max_length( 256 );
1789 gtk_entry_set_text( GTK_ENTRY( heightStart ), "0" );
1790 gtk_table_attach( GTK_TABLE( table ), heightStart, 1, 2, 0, 1,
1791 (GtkAttachOptions) ( GTK_FILL ),
1792 (GtkAttachOptions) ( 0 ), 0, 0 );
1793 gtk_widget_show( heightStart );
1797 w = gtk_label_new( "End: " );
1798 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1799 (GtkAttachOptions) ( GTK_FILL ),
1800 (GtkAttachOptions) ( 0 ), 0, 0 );
1801 gtk_widget_show( w );
1803 heightEnd = gtk_entry_new_with_max_length( 256 );
1804 gtk_entry_set_text( GTK_ENTRY( heightEnd ), "0" );
1805 gtk_table_attach( GTK_TABLE( table ), heightEnd, 1, 2, 1, 2,
1806 (GtkAttachOptions) ( GTK_FILL ),
1807 (GtkAttachOptions) ( 0 ), 0, 0 );
1808 gtk_widget_show( heightEnd );
1812 frame = gtk_frame_new( "Points" );
1813 gtk_widget_show( frame );
1814 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1816 table = gtk_table_new( 2, 3, TRUE );
1817 gtk_widget_show( table );
1818 gtk_container_add( GTK_CONTAINER( frame ), table );
1819 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1820 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1821 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1825 w = gtk_label_new( "Number: " );
1826 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1827 (GtkAttachOptions) ( GTK_FILL ),
1828 (GtkAttachOptions) ( 0 ), 0, 0 );
1829 gtk_widget_show( w );
1831 numPoints = gtk_entry_new_with_max_length( 256 );
1832 gtk_entry_set_text( GTK_ENTRY( numPoints ), "0" );
1833 gtk_table_attach( GTK_TABLE( table ), numPoints, 1, 2, 0, 1,
1834 (GtkAttachOptions) ( GTK_FILL ),
1835 (GtkAttachOptions) ( 0 ), 0, 0 );
1836 gtk_widget_show( numPoints );
1839 hbox = gtk_hbox_new( FALSE, 10 );
1840 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1841 gtk_widget_show( hbox );
1845 w = gtk_button_new_with_label( "Ok" );
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( eIDOK ) );
1849 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1850 gtk_widget_grab_default( w );
1851 gtk_widget_show( w );
1853 w = gtk_button_new_with_label( "Cancel" );
1854 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1855 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1856 gtk_widget_show( w );
1863 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1864 gtk_widget_show( window );
1865 gtk_grab_add( window );
1867 bool dialogError = TRUE;
1868 while ( dialogError )
1872 gtk_main_iteration();
1874 dialogError = FALSE;
1876 if ( ret != eIDCANCEL ) {
1877 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusX ) ), "Radius (X)", &rs->fRadiusX ) ) {
1881 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusY ) ), "Radius (Y)", &rs->fRadiusY ) ) {
1885 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleStart ) ), "Angle (Start)", &rs->fStartAngle ) ) {
1889 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleEnd ) ), "Angle (End)", &rs->fEndAngle ) ) {
1893 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightStart ) ), "Height (Start)", &rs->fStartHeight ) ) {
1897 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightEnd ) ), "Height (End)", &rs->fEndHeight ) ) {
1901 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( numPoints ) ), "Num Points", &rs->iNumPoints ) ) {
1907 gtk_grab_remove( window );
1908 gtk_widget_destroy( window );
1913 // add a simple input for the MakeChain thing..
1914 EMessageBoxReturn DoMakeChainBox( MakeChainRS* rs ){
1915 GtkWidget *window, *w, *vbox, *hbox;
1916 GtkWidget *textlinkNum, *textlinkName;
1917 EMessageBoxReturn ret;
1920 char *text = "Please set a value in the boxes below and press 'OK' to make a chain";
1922 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
1924 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
1925 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1927 gtk_window_set_title( GTK_WINDOW( window ), "Make Chain" );
1929 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
1931 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1932 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1934 gtk_widget_realize( window );
1937 vbox = gtk_vbox_new( FALSE, 10 );
1938 gtk_container_add( GTK_CONTAINER( window ), vbox );
1939 gtk_widget_show( vbox );
1941 hbox = gtk_hbox_new( FALSE, 10 );
1942 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
1943 gtk_widget_show( hbox );
1945 // dunno if you want this text or not ...
1946 w = gtk_label_new( text );
1947 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1948 gtk_widget_show( w );
1950 w = gtk_hseparator_new();
1951 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1952 gtk_widget_show( w );
1954 // ------------------------- //
1957 hbox = gtk_hbox_new( FALSE, 10 );
1958 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1959 gtk_widget_show( hbox );
1961 textlinkNum = gtk_entry_new_with_max_length( 256 );
1962 gtk_box_pack_start( GTK_BOX( hbox ), textlinkNum, FALSE, FALSE, 1 );
1963 gtk_widget_show( textlinkNum );
1965 w = gtk_label_new( "Number of elements in chain" );
1966 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
1967 gtk_widget_show( w );
1969 // -------------------------- //
1971 hbox = gtk_hbox_new( FALSE, 10 );
1972 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1973 gtk_widget_show( hbox );
1975 textlinkName = gtk_entry_new_with_max_length( 256 );
1976 gtk_box_pack_start( GTK_BOX( hbox ), textlinkName, FALSE, FALSE, 0 );
1977 gtk_widget_show( textlinkName );
1979 w = gtk_label_new( "Basename for chain's targetnames." );
1980 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
1981 gtk_widget_show( w );
1984 w = gtk_button_new_with_label( "OK" );
1985 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1986 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1987 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1988 gtk_widget_grab_default( w );
1989 gtk_widget_show( w );
1991 w = gtk_button_new_with_label( "Cancel" );
1992 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1993 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1994 gtk_widget_show( w );
1998 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1999 gtk_widget_show( window );
2000 gtk_grab_add( window );
2002 bool dialogError = TRUE;
2003 while ( dialogError )
2007 gtk_main_iteration();
2009 dialogError = FALSE;
2011 if ( ret == eIDOK ) {
2012 strcpy( rs->linkName, gtk_entry_get_text( (GtkEntry*)textlinkName ) );
2013 if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textlinkNum ), "Elements", &rs->linkNum ) ) {
2019 gtk_grab_remove( window );
2020 gtk_widget_destroy( window );