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"
24 #include "gtkutil/pointer.h"
30 /*--------------------------------
32 ---------------------------------*/
35 GtkWidget *cbTexChange;
36 GtkWidget *editTexOld, *editTexNew;
38 GtkWidget *cbScaleHor, *cbScaleVert;
39 GtkWidget *editScaleHor, *editScaleVert;
41 GtkWidget *cbShiftHor, *cbShiftVert;
42 GtkWidget *editShiftHor, *editShiftVert;
44 GtkWidget *cbRotation;
45 GtkWidget *editRotation;
48 dlg_texReset_t dlgTexReset;
50 void Update_TextureReseter();
52 static void dialog_button_callback_texreset_update( GtkWidget *widget, gpointer data ){
53 Update_TextureReseter();
56 void Update_TextureReseter(){
59 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
60 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editTexNew ), check );
61 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editTexOld ), check );
63 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
64 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editScaleHor ), check );
66 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
67 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editScaleVert ), check );
69 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
70 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editShiftHor ), check );
72 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
73 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editShiftVert ), check );
75 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
76 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editRotation ), check );
79 static void dialog_button_callback( GtkWidget *widget, gpointer data ){
82 EMessageBoxReturn *ret;
84 parent = gtk_widget_get_toplevel( widget );
85 loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" );
86 ret = (EMessageBoxReturn*)g_object_get_data( G_OBJECT( parent ), "ret" );
89 *ret = (EMessageBoxReturn)gpointer_to_int( data );
92 static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){
95 gtk_widget_hide( widget );
96 loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" );
102 static void dialog_button_callback_settex( GtkWidget *widget, gpointer data ){
103 TwinWidget* tw = (TwinWidget*)data;
105 GtkEntry* entry = GTK_ENTRY( tw->one );
106 auto* combo = tw->two;
107 const gchar *tex = gtk_entry_get_text(GTK_ENTRY (gtk_bin_get_child(GTK_BIN(combo))));
108 gtk_entry_set_text( entry, tex );
111 /*--------------------------------
112 Data validation Routines
113 ---------------------------------*/
115 bool ValidateTextFloat( const char* pData, const char* error_title, float* value ){
117 float testNum = (float)atof( pData );
119 if ( ( testNum == 0.0f ) && strcmp( pData, "0" ) ) {
120 DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK );
130 DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK );
134 bool ValidateTextFloatRange( const char* pData, float min, float max, const char* error_title, float* value ){
135 char error_buffer[256];
136 sprintf( error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max );
139 float testNum = (float)atof( pData );
141 if ( ( testNum < min ) || ( testNum > max ) ) {
142 DoMessageBox( error_buffer, error_title, eMB_OK );
152 DoMessageBox( error_buffer, error_title, eMB_OK );
156 bool ValidateTextIntRange( const char* pData, int min, int max, const char* error_title, int* value ){
157 char error_buffer[256];
158 sprintf( error_buffer, "Please Enter An Integer Between %i and %i", min, max );
161 int testNum = atoi( pData );
163 if ( ( testNum < min ) || ( testNum > max ) ) {
164 DoMessageBox( error_buffer, error_title, eMB_OK );
174 DoMessageBox( error_buffer, error_title, eMB_OK );
178 bool ValidateTextInt( const char* pData, const char* error_title, int* value ){
180 int testNum = atoi( pData );
182 if ( ( testNum == 0 ) && strcmp( pData, "0" ) ) {
183 DoMessageBox( "Please Enter An Integer", error_title, eMB_OK );
193 DoMessageBox( "Please Enter An Integer", error_title, eMB_OK );
197 /*--------------------------------
199 ---------------------------------*/
203 Major clean up of variable names etc required, excluding Mars's ones,
204 which are nicely done :)
208 EMessageBoxReturn DoMessageBox( const char* lpText, const char* lpCaption, EMessageBoxType type ){
209 ui::Widget window, w, vbox, hbox;
210 EMessageBoxReturn ret;
213 window = ui::Window( ui::window_type::TOP );
214 g_signal_connect( GTK_OBJECT( window ), "delete_event",
215 G_CALLBACK( dialog_delete_callback ), NULL );
216 g_signal_connect( GTK_OBJECT( window ), "destroy",
217 G_CALLBACK( gtk_widget_destroy ), NULL );
218 gtk_window_set_title( GTK_WINDOW( window ), lpCaption );
219 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
220 g_object_set_data( G_OBJECT( window ), "loop", &loop );
221 g_object_set_data( G_OBJECT( window ), "ret", &ret );
222 gtk_widget_realize( window );
224 vbox = ui::VBox( FALSE, 10 );
225 gtk_container_add( GTK_CONTAINER( window ), vbox );
226 gtk_widget_show( vbox );
228 w = ui::Label( lpText );
229 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
230 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
231 gtk_widget_show( w );
233 w = ui::Widget(gtk_hseparator_new());
234 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
235 gtk_widget_show( w );
237 hbox = ui::HBox( FALSE, 10 );
238 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
239 gtk_widget_show( hbox );
241 if ( type == eMB_OK ) {
242 w = ui::Button( "Ok" );
243 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
244 g_signal_connect( GTK_OBJECT( w ), "clicked",
245 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
246 gtk_widget_set_can_default(w, true);
247 gtk_widget_grab_default( w );
248 gtk_widget_show( w );
251 else if ( type == eMB_OKCANCEL ) {
252 w = ui::Button( "Ok" );
253 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
254 g_signal_connect( GTK_OBJECT( w ), "clicked",
255 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
256 gtk_widget_set_can_default( w, true );
257 gtk_widget_grab_default( w );
258 gtk_widget_show( w );
260 w = ui::Button( "Cancel" );
261 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
262 g_signal_connect( GTK_OBJECT( w ), "clicked",
263 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
264 gtk_widget_show( w );
267 else if ( type == eMB_YESNOCANCEL ) {
268 w = ui::Button( "Yes" );
269 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
270 g_signal_connect( GTK_OBJECT( w ), "clicked",
271 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
272 gtk_widget_set_can_default( w, true );
273 gtk_widget_grab_default( w );
274 gtk_widget_show( w );
276 w = ui::Button( "No" );
277 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
278 g_signal_connect( GTK_OBJECT( w ), "clicked",
279 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
280 gtk_widget_show( w );
282 w = ui::Button( "Cancel" );
283 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
284 g_signal_connect( GTK_OBJECT( w ), "clicked",
285 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
286 gtk_widget_show( w );
289 else /* if (mode == MB_YESNO) */
291 w = ui::Button( "Yes" );
292 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
293 g_signal_connect( GTK_OBJECT( w ), "clicked",
294 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
295 gtk_widget_set_can_default( w, true );
296 gtk_widget_grab_default( w );
297 gtk_widget_show( w );
299 w = ui::Button( "No" );
300 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
301 g_signal_connect( GTK_OBJECT( w ), "clicked",
302 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
303 gtk_widget_show( w );
307 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
308 gtk_widget_show( window );
309 gtk_grab_add( window );
312 gtk_main_iteration();
314 gtk_grab_remove( window );
315 gtk_widget_destroy( window );
320 EMessageBoxReturn DoIntersectBox( IntersectRS* rs ){
321 GtkWidget *window, *w, *vbox, *hbox;
322 GtkWidget *check1, *check2;
323 EMessageBoxReturn ret;
326 window = ui::Window( ui::window_type::TOP );
328 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
329 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
331 gtk_window_set_title( GTK_WINDOW( window ), "Intersect" );
332 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
334 g_object_set_data( G_OBJECT( window ), "loop", &loop );
335 g_object_set_data( G_OBJECT( window ), "ret", &ret );
337 gtk_widget_realize( window );
341 vbox = ui::VBox( FALSE, 10 );
342 gtk_container_add( GTK_CONTAINER( window ), vbox );
343 gtk_widget_show( vbox );
348 auto radio1 = gtk_radio_button_new_with_label( NULL, "Use Whole Map" );
349 gtk_box_pack_start( GTK_BOX( vbox ), radio1, FALSE, FALSE, 2 );
350 gtk_widget_show( radio1 );
352 auto radio2 = gtk_radio_button_new_with_label( gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio1)), "Use Selected Brushes" );
353 gtk_box_pack_start( GTK_BOX( vbox ), radio2, FALSE, FALSE, 2 );
354 gtk_widget_show( radio2 );
356 w = gtk_hseparator_new();
357 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
358 gtk_widget_show( w );
360 check1 = ui::CheckButton( "Include Detail Brushes" );
361 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
362 gtk_widget_show( check1 );
364 check2 = ui::CheckButton( "Select Duplicate Brushes Only" );
365 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
366 gtk_widget_show( check2 );
368 hbox = ui::HBox( FALSE, 10 );
369 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
370 gtk_widget_show( hbox );
372 // ---- hbox ---- ok/cancel buttons
374 w = ui::Button( "Ok" );
375 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
376 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
378 gtk_widget_set_can_default( w, true );
379 gtk_widget_grab_default( w );
380 gtk_widget_show( w );
382 w = ui::Button( "Cancel" );
383 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
384 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
385 gtk_widget_show( w );
392 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
393 gtk_widget_show( window );
394 gtk_grab_add( window );
397 gtk_main_iteration();
399 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio1 ) ) {
400 rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP;
402 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio2 ) ) {
403 rs->nBrushOptions = BRUSH_OPT_SELECTED;
406 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
407 rs->bDuplicateOnly = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
409 gtk_grab_remove( window );
410 gtk_widget_destroy( window );
415 EMessageBoxReturn DoPolygonBox( PolygonRS* rs ){
416 GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2;
418 GtkWidget *check1, *check2, *check3;
419 GtkWidget *text1, *text2;
421 EMessageBoxReturn ret;
424 window = ui::Window( ui::window_type::TOP );
426 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
427 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
429 gtk_window_set_title( GTK_WINDOW( window ), "Polygon Builder" );
430 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
432 g_object_set_data( G_OBJECT( window ), "loop", &loop );
433 g_object_set_data( G_OBJECT( window ), "ret", &ret );
435 gtk_widget_realize( window );
439 vbox = ui::VBox( FALSE, 10 );
440 gtk_container_add( GTK_CONTAINER( window ), vbox );
441 gtk_widget_show( vbox );
445 hbox = ui::HBox( FALSE, 10 );
446 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
447 gtk_widget_show( hbox );
452 vbox2 = ui::VBox( FALSE, 10 );
453 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
454 gtk_widget_show( vbox2 );
458 hbox2 = ui::HBox( FALSE, 10 );
459 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
460 gtk_widget_show( hbox2 );
464 text1 = ui::Entry( 256 );
465 gtk_entry_set_text( (GtkEntry*)text1, "3" );
466 gtk_box_pack_start( GTK_BOX( hbox2 ), text1, FALSE, FALSE, 2 );
467 gtk_widget_show( text1 );
469 w = ui::Label( "Number Of Sides" );
470 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
471 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
472 gtk_widget_show( w );
476 hbox2 = ui::HBox( FALSE, 10 );
477 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
478 gtk_widget_show( hbox2 );
482 text2 = ui::Entry( 256 );
483 gtk_entry_set_text( (GtkEntry*)text2, "8" );
484 gtk_box_pack_start( GTK_BOX( hbox2 ), text2, FALSE, FALSE, 2 );
485 gtk_widget_show( text2 );
487 w = ui::Label( "Border Width" );
488 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
489 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
490 gtk_widget_show( w );
498 vbox2 = ui::VBox( FALSE, 10 );
499 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
500 gtk_widget_show( vbox2 );
504 check1 = ui::CheckButton( "Use Border" );
505 gtk_box_pack_start( GTK_BOX( vbox2 ), check1, FALSE, FALSE, 0 );
506 gtk_widget_show( check1 );
509 check2 = ui::CheckButton( "Inverse Polygon" );
510 gtk_box_pack_start( GTK_BOX( vbox2 ), check2, FALSE, FALSE, 0 );
511 gtk_widget_show( check2 );
514 check3 = ui::CheckButton( "Align Top Edge" );
515 gtk_box_pack_start( GTK_BOX( vbox2 ), check3, FALSE, FALSE, 0 );
516 gtk_widget_show( check3 );
522 hbox = ui::HBox( FALSE, 10 );
523 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
524 gtk_widget_show( hbox );
528 w = ui::Button( "Ok" );
529 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
530 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
532 gtk_widget_set_can_default( w, true );
533 gtk_widget_grab_default( w );
534 gtk_widget_show( w );
536 w = ui::Button( "Cancel" );
537 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
538 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
539 gtk_widget_show( w );
546 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
547 gtk_widget_show( window );
548 gtk_grab_add( window );
550 bool dialogError = TRUE;
551 while ( dialogError )
555 gtk_main_iteration();
559 if ( ret == eIDOK ) {
560 rs->bUseBorder = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
561 rs->bInverse = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
562 rs->bAlignTop = gtk_toggle_button_get_active( (GtkToggleButton*)check3 ) ? true : false;
564 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text1 ), 3, 32, "Number Of Sides", &rs->nSides ) ) {
568 if ( rs->bUseBorder ) {
569 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text2 ), 8, 256, "Border Width", &rs->nBorderWidth ) ) {
576 gtk_grab_remove( window );
577 gtk_widget_destroy( window );
583 // for stair builder stuck as close as i could to the MFC version
584 // obviously feel free to change it at will :)
585 EMessageBoxReturn DoBuildStairsBox( BuildStairsRS* rs ){
586 // i made widgets for just about everything ... i think that's what i need to do dunno tho
587 GtkWidget *window, *w, *vbox, *hbox;
588 GtkWidget *textStairHeight, *textRiserTex, *textMainTex;
589 GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value
590 GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle;
591 GtkWidget *checkUseDetail;
592 GSList *radioDirection, *radioStyle;
593 EMessageBoxReturn ret;
596 const gchar *text = "Please set a value in the boxes below and press 'OK' to build the stairs";
598 window = ui::Window( ui::window_type::TOP );
600 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
601 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
603 gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" );
605 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
607 g_object_set_data( G_OBJECT( window ), "loop", &loop );
608 g_object_set_data( G_OBJECT( window ), "ret", &ret );
610 gtk_widget_realize( window );
613 vbox = ui::VBox( FALSE, 10 );
614 gtk_container_add( GTK_CONTAINER( window ), vbox );
615 gtk_widget_show( vbox );
617 hbox = ui::HBox( FALSE, 10 );
618 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
619 gtk_widget_show( hbox );
621 // dunno if you want this text or not ...
622 w = ui::Label( text );
623 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ...
624 gtk_widget_show( w );
626 w = gtk_hseparator_new();
627 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
628 gtk_widget_show( w );
630 // ------------------------- // indenting == good way of keeping track of lines :)
633 hbox = ui::HBox( FALSE, 10 );
634 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
635 gtk_widget_show( hbox );
637 textStairHeight = ui::Entry( 256 );
638 gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 );
639 gtk_widget_show( textStairHeight );
641 w = ui::Label( "Stair Height" );
642 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
643 gtk_widget_show( w );
645 // ------------------------- //
647 hbox = ui::HBox( FALSE, 10 );
648 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
649 gtk_widget_show( hbox );
651 w = ui::Label( "Direction:" );
652 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
653 gtk_widget_show( w );
655 // -------------------------- //
657 hbox = ui::HBox( FALSE, 10 );
658 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
659 gtk_widget_show( hbox );
661 // radio buttons confuse me ...
662 // but this _looks_ right
664 // djbob: actually it looks very nice :), slightly better than the way i did it
665 // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh
667 radioNorth = gtk_radio_button_new_with_label( NULL, "North" );
668 gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 );
669 gtk_widget_show( radioNorth );
671 radioDirection = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioNorth ) );
673 radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" );
674 gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 );
675 gtk_widget_show( radioSouth );
677 radioDirection = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioSouth ) );
679 radioEast = gtk_radio_button_new_with_label( radioDirection, "East" );
680 gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 );
681 gtk_widget_show( radioEast );
683 radioDirection = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioEast ) );
685 radioWest = gtk_radio_button_new_with_label( radioDirection, "West" );
686 gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 );
687 gtk_widget_show( radioWest );
689 // --------------------------- //
691 hbox = ui::HBox( FALSE, 10 );
692 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
693 gtk_widget_show( hbox );
695 w = ui::Label( "Style:" );
696 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
697 gtk_widget_show( w );
699 // --------------------------- //
701 hbox = ui::HBox( FALSE, 10 );
702 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
703 gtk_widget_show( hbox );
705 radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" );
706 gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 );
707 gtk_widget_show( radioOldStyle );
709 radioStyle = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioOldStyle ) );
711 radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" );
712 gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 );
713 gtk_widget_show( radioBobStyle );
715 radioStyle = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioBobStyle ) );
717 radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" );
718 gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 );
719 gtk_widget_show( radioCornerStyle );
721 // err, the q3r has an if or something so you need bob style checked before this
722 // is "ungreyed out" but you'll need to do that, as i suck :)
724 // djbob: er.... yeah um, im not at all sure how i'm gonna sort this
725 // djbob: think we need some button callback functions or smuffin
726 // FIXME: actually get around to doing what i suggested!!!!
728 checkUseDetail = ui::CheckButton( "Use Detail Brushes" );
729 gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 );
730 gtk_widget_show( checkUseDetail );
732 // --------------------------- //
734 hbox = ui::HBox( FALSE, 10 );
735 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
736 gtk_widget_show( hbox );
738 textMainTex = ui::Entry( 512 );
739 gtk_entry_set_text( GTK_ENTRY( textMainTex ), rs->mainTexture );
740 gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 );
741 gtk_widget_show( textMainTex );
743 w = ui::Label( "Main Texture" );
744 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
745 gtk_widget_show( w );
747 // -------------------------- //
749 hbox = ui::HBox( FALSE, 10 );
750 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
751 gtk_widget_show( hbox );
753 textRiserTex = ui::Entry( 512 );
754 gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 );
755 gtk_widget_show( textRiserTex );
757 w = ui::Label( "Riser Texture" );
758 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
759 gtk_widget_show( w );
761 // -------------------------- //
762 w = gtk_hseparator_new();
763 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
764 gtk_widget_show( w );
766 hbox = ui::HBox( FALSE, 10 );
767 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
768 gtk_widget_show( hbox );
770 w = ui::Button( "OK" );
771 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
772 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
773 gtk_widget_set_can_default( w, true );
774 gtk_widget_grab_default( w );
775 gtk_widget_show( w );
777 w = ui::Button( "Cancel" );
778 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
779 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
780 gtk_widget_show( w );
784 // +djbob: need our "little" modal loop mars :P
785 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
786 gtk_widget_show( window );
787 gtk_grab_add( window );
789 bool dialogError = TRUE;
790 while ( dialogError )
794 gtk_main_iteration();
798 if ( ret == eIDOK ) {
799 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)checkUseDetail ) ? true : false;
801 strcpy( rs->riserTexture, gtk_entry_get_text( (GtkEntry*)textRiserTex ) );
802 strcpy( rs->mainTexture, gtk_entry_get_text( (GtkEntry*)textMainTex ) );
804 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioNorth ) ) {
805 rs->direction = MOVE_NORTH;
807 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioSouth ) ) {
808 rs->direction = MOVE_SOUTH;
810 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioEast ) ) {
811 rs->direction = MOVE_EAST;
813 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioWest ) ) {
814 rs->direction = MOVE_WEST;
817 if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textStairHeight ), "Stair Height", &rs->stairHeight ) ) {
821 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioOldStyle ) ) {
822 rs->style = STYLE_ORIGINAL;
824 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioBobStyle ) ) {
825 rs->style = STYLE_BOB;
827 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioCornerStyle ) ) {
828 rs->style = STYLE_CORNER;
833 gtk_grab_remove( window );
834 gtk_widget_destroy( window );
839 // there we go, all done ... on my end at least, not bad for a night's work
842 EMessageBoxReturn DoDoorsBox( DoorRS* rs ){
843 GtkWidget *window, *hbox, *vbox, *w;
844 GtkWidget *textFrontBackTex, *textTrimTex;
845 GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV;
846 GtkWidget *comboMain, *comboTrim;
847 GtkWidget *buttonSetMain, *buttonSetTrim;
848 GtkWidget *radioNS, *radioEW;
849 GSList *radioOrientation;
851 EMessageBoxReturn ret;
854 window = ui::Window( ui::window_type::TOP );
856 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
857 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
859 gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" );
861 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
863 g_object_set_data( G_OBJECT( window ), "loop", &loop );
864 g_object_set_data( G_OBJECT( window ), "ret", &ret );
866 gtk_widget_realize( window );
869 GtkListStore *listMainTextures = gtk_list_store_new( 1, G_TYPE_STRING );
870 GtkListStore *listTrimTextures = gtk_list_store_new( 1, G_TYPE_STRING );
871 LoadGList( GetFilename( buffer, "plugins/bt/door-tex.txt" ), listMainTextures );
872 LoadGList( GetFilename( buffer, "plugins/bt/door-tex-trim.txt" ), listTrimTextures );
874 vbox = ui::VBox( FALSE, 10 );
875 gtk_container_add( GTK_CONTAINER( window ), vbox );
876 gtk_widget_show( vbox );
878 // -------------------------- //
880 hbox = ui::HBox( FALSE, 10 );
881 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
882 gtk_widget_show( hbox );
884 textFrontBackTex = ui::Entry( 512 );
885 gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture );
886 gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 );
887 gtk_widget_show( textFrontBackTex );
889 w = ui::Label( "Door Front/Back Texture" );
890 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
891 gtk_widget_show( w );
893 // ------------------------ //
895 hbox = ui::HBox( FALSE, 10 );
896 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
897 gtk_widget_show( hbox );
899 textTrimTex = ui::Entry( 512 );
900 gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 );
901 gtk_widget_show( textTrimTex );
903 w = ui::Label( "Door Trim Texture" );
904 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
905 gtk_widget_show( w );
907 // ----------------------- //
909 hbox = ui::HBox( FALSE, 10 );
910 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
911 gtk_widget_show( hbox );
913 // sp: horizontally ????
914 // djbob: yes mars, u can spell :]
915 checkScaleMainH = ui::CheckButton( "Scale Main Texture Horizontally" );
916 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE );
917 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 );
918 gtk_widget_show( checkScaleMainH );
920 checkScaleTrimH = ui::CheckButton( "Scale Trim Texture Horizontally" );
921 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE );
922 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 );
923 gtk_widget_show( checkScaleTrimH );
925 // ---------------------- //
927 hbox = ui::HBox( FALSE, 10 );
928 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
929 gtk_widget_show( hbox );
931 checkScaleMainV = ui::CheckButton( "Scale Main Texture Vertically" );
932 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE );
933 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 );
934 gtk_widget_show( checkScaleMainV );
936 checkScaleTrimV = ui::CheckButton( "Scale Trim Texture Vertically" );
937 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 );
938 gtk_widget_show( checkScaleTrimV );
940 // --------------------- //
942 hbox = ui::HBox( FALSE, 10 );
943 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
944 gtk_widget_show( hbox );
946 // djbob: lists added
948 comboMain = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(listMainTextures));
949 gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(comboMain), 0);
950 gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 );
951 gtk_widget_show( comboMain );
953 tw1.one = textFrontBackTex;
954 tw1.two = GTK_COMBO_BOX(comboMain);
956 buttonSetMain = ui::Button( "Set As Main Texture" );
957 g_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", G_CALLBACK( dialog_button_callback_settex ), &tw1 );
958 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 );
959 gtk_widget_show( buttonSetMain );
961 // ------------------- //
963 hbox = ui::HBox( FALSE, 10 );
964 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
965 gtk_widget_show( hbox );
967 comboTrim = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(listTrimTextures));
968 gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(comboMain), 0);
969 gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 );
970 gtk_widget_show( comboTrim );
972 tw2.one = textTrimTex;
973 tw2.two = GTK_COMBO_BOX(comboTrim);
975 buttonSetTrim = ui::Button( "Set As Trim Texture" );
976 g_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", G_CALLBACK( dialog_button_callback_settex ), &tw2 );
977 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 );
978 gtk_widget_show( buttonSetTrim );
980 // ------------------ //
982 hbox = ui::HBox( FALSE, 10 );
983 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
984 gtk_widget_show( hbox );
986 w = ui::Label( "Orientation" );
987 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
988 gtk_widget_show( w );
990 // argh more radio buttons!
991 radioNS = gtk_radio_button_new_with_label( NULL, "North - South" );
992 gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 );
993 gtk_widget_show( radioNS );
995 radioOrientation = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioNS ) );
997 radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" );
998 gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 );
999 gtk_widget_show( radioEW );
1001 // ----------------- //
1003 w = gtk_hseparator_new();
1004 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1005 gtk_widget_show( w );
1007 // ----------------- //
1009 hbox = ui::HBox( FALSE, 10 );
1010 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1011 gtk_widget_show( hbox );
1013 w = ui::Button( "OK" );
1014 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1015 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1016 gtk_widget_set_can_default( w, true );
1017 gtk_widget_grab_default( w );
1018 gtk_widget_show( w );
1020 w = ui::Button( "Cancel" );
1021 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1022 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1023 gtk_widget_show( w );
1026 // ----------------- //
1029 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1030 gtk_widget_show( window );
1031 gtk_grab_add( window );
1034 gtk_main_iteration();
1036 strcpy( rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ) );
1037 strcpy( rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ) );
1039 rs->bScaleMainH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainH ) ) ? true : false;
1040 rs->bScaleMainV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainV ) ) ? true : false;
1041 rs->bScaleTrimH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ) ) ? true : false;
1042 rs->bScaleTrimV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimV ) ) ? true : false;
1044 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioNS ) ) ) {
1045 rs->nOrientation = DIRECTION_NS;
1047 else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioEW ) ) ) {
1048 rs->nOrientation = DIRECTION_EW;
1051 gtk_grab_remove( window );
1052 gtk_widget_destroy( window );
1058 EMessageBoxReturn DoPathPlotterBox( PathPlotterRS* rs ){
1059 GtkWidget *window, *w, *vbox, *hbox;
1061 GtkWidget *text1, *text2, *text3;
1062 GtkWidget *check1, *check2;
1064 EMessageBoxReturn ret;
1067 window = ui::Window( ui::window_type::TOP );
1069 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1070 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1072 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1073 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1075 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1076 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1078 gtk_widget_realize( window );
1082 vbox = ui::VBox( FALSE, 10 );
1083 gtk_container_add( GTK_CONTAINER( window ), vbox );
1084 gtk_widget_show( vbox );
1088 hbox = ui::HBox( FALSE, 10 );
1089 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1090 gtk_widget_show( hbox );
1094 text1 = ui::Entry( 256 );
1095 gtk_entry_set_text( (GtkEntry*)text1, "25" );
1096 gtk_box_pack_start( GTK_BOX( hbox ), text1, FALSE, FALSE, 2 );
1097 gtk_widget_show( text1 );
1099 w = ui::Label( "Number Of Points" );
1100 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1101 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1102 gtk_widget_show( w );
1106 hbox = ui::HBox( FALSE, 10 );
1107 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1108 gtk_widget_show( hbox );
1112 text2 = ui::Entry( 256 );
1113 gtk_entry_set_text( (GtkEntry*)text2, "3" );
1114 gtk_box_pack_start( GTK_BOX( hbox ), text2, FALSE, FALSE, 2 );
1115 gtk_widget_show( text2 );
1117 w = ui::Label( "Multipler" );
1118 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1119 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1120 gtk_widget_show( w );
1124 w = ui::Label( "Path Distance = dist(start -> apex) * multiplier" );
1125 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1126 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1127 gtk_widget_show( w );
1129 hbox = ui::HBox( FALSE, 10 );
1130 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1131 gtk_widget_show( hbox );
1135 text3 = ui::Entry( 256 );
1136 gtk_entry_set_text( (GtkEntry*)text3, "-800" );
1137 gtk_box_pack_start( GTK_BOX( hbox ), text3, FALSE, FALSE, 2 );
1138 gtk_widget_show( text3 );
1140 w = ui::Label( "Gravity" );
1141 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1142 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1143 gtk_widget_show( w );
1147 w = gtk_hseparator_new();
1148 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1149 gtk_widget_show( w );
1151 check1 = ui::CheckButton( "No Dynamic Update" );
1152 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
1153 gtk_widget_show( check1 );
1155 check2 = ui::CheckButton( "Show Bounding Lines" );
1156 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
1157 gtk_widget_show( check2 );
1162 // ----------------- //
1164 w = gtk_hseparator_new();
1165 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1166 gtk_widget_show( w );
1168 // ----------------- //
1170 hbox = ui::HBox( FALSE, 10 );
1171 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1172 gtk_widget_show( hbox );
1174 w = ui::Button( "Enable" );
1175 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1176 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1177 gtk_widget_show( w );
1179 gtk_widget_set_can_default( w, true );
1180 gtk_widget_grab_default( w );
1182 w = ui::Button( "Disable" );
1183 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1184 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
1185 gtk_widget_show( w );
1187 w = ui::Button( "Cancel" );
1188 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1189 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1190 gtk_widget_show( w );
1194 // ----------------- //
1196 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1197 gtk_widget_show( window );
1198 gtk_grab_add( window );
1200 bool dialogError = TRUE;
1201 while ( dialogError )
1205 gtk_main_iteration();
1207 dialogError = FALSE;
1209 if ( ret == eIDYES ) {
1210 if ( !ValidateTextIntRange( gtk_entry_get_text( GTK_ENTRY( text1 ) ), 1, 200, "Number Of Points", &rs->nPoints ) ) {
1214 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text2 ) ), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier ) ) {
1218 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text3 ) ), -10000.0f, -1.0f, "Gravity", &rs->fGravity ) ) {
1222 rs->bNoUpdate = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check1 ) ) ? true : false;
1223 rs->bShowExtra = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2 ) ) ? true : false;
1227 gtk_grab_remove( window );
1228 gtk_widget_destroy( window );
1233 EMessageBoxReturn DoCTFColourChangeBox(){
1234 GtkWidget *window, *w, *vbox, *hbox;
1235 EMessageBoxReturn ret;
1238 window = ui::Window( ui::window_type::TOP );
1240 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1241 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1243 gtk_window_set_title( GTK_WINDOW( window ), "CTF Colour Changer" );
1244 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1246 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1247 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1249 gtk_widget_realize( window );
1253 vbox = ui::VBox( FALSE, 10 );
1254 gtk_container_add( GTK_CONTAINER( window ), vbox );
1255 gtk_widget_show( vbox );
1259 hbox = ui::HBox( FALSE, 10 );
1260 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
1261 gtk_widget_show( hbox );
1263 // ---- hbox ---- ok/cancel buttons
1265 w = ui::Button( "Red->Blue" );
1266 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1267 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1269 gtk_widget_set_can_default( w, true );
1270 gtk_widget_grab_default( w );
1271 gtk_widget_show( w );
1273 w = ui::Button( "Blue->Red" );
1274 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1275 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1276 gtk_widget_show( w );
1278 w = ui::Button( "Cancel" );
1279 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1280 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1281 gtk_widget_show( w );
1288 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1289 gtk_widget_show( window );
1290 gtk_grab_add( window );
1293 gtk_main_iteration();
1295 gtk_grab_remove( window );
1296 gtk_widget_destroy( window );
1301 EMessageBoxReturn DoResetTextureBox( ResetTextureRS* rs ){
1304 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1306 EMessageBoxReturn ret;
1309 window = ui::Window( ui::window_type::TOP );
1311 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1312 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1314 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1315 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1317 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1318 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1320 gtk_widget_realize( window );
1322 vbox = ui::VBox( FALSE, 10 );
1323 gtk_container_add( GTK_CONTAINER( window ), vbox );
1324 gtk_widget_show( vbox );
1328 hbox = ui::HBox( FALSE, 10 );
1329 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1330 gtk_widget_show( hbox );
1334 texSelected = "Currently Selected Texture: ";
1335 texSelected += GetCurrentTexture();
1337 w = ui::Label( texSelected );
1338 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1339 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1340 gtk_widget_show( w );
1344 frame = ui::Frame( "Reset Texture Names" );
1345 gtk_widget_show( frame );
1346 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1348 table = ui::Table( 2, 3, TRUE );
1349 gtk_widget_show( table );
1350 gtk_container_add( GTK_CONTAINER( frame ), table );
1351 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1352 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1353 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1357 dlgTexReset.cbTexChange = ui::CheckButton( "Enabled" );
1358 g_signal_connect( GTK_OBJECT( dlgTexReset.cbTexChange ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1359 gtk_widget_show( dlgTexReset.cbTexChange );
1360 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbTexChange, 0, 1, 0, 1,
1361 (GtkAttachOptions) ( GTK_FILL ),
1362 (GtkAttachOptions) ( 0 ), 0, 0 );
1364 w = ui::Label( "Old Name: " );
1365 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1366 (GtkAttachOptions) ( GTK_FILL ),
1367 (GtkAttachOptions) ( 0 ), 0, 0 );
1368 gtk_widget_show( w );
1370 dlgTexReset.editTexOld = ui::Entry( 256 );
1371 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexOld ), rs->textureName );
1372 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexOld, 2, 3, 0, 1,
1373 (GtkAttachOptions) ( GTK_FILL ),
1374 (GtkAttachOptions) ( 0 ), 0, 0 );
1375 gtk_widget_show( dlgTexReset.editTexOld );
1377 w = ui::Label( "New Name: " );
1378 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1379 (GtkAttachOptions) ( GTK_FILL ),
1380 (GtkAttachOptions) ( 0 ), 0, 0 );
1381 gtk_widget_show( w );
1383 dlgTexReset.editTexNew = ui::Entry( 256 );
1384 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexNew ), rs->textureName );
1385 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexNew, 2, 3, 1, 2,
1386 (GtkAttachOptions) ( GTK_FILL ),
1387 (GtkAttachOptions) ( 0 ), 0, 0 );
1388 gtk_widget_show( dlgTexReset.editTexNew );
1392 frame = ui::Frame( "Reset Scales" );
1393 gtk_widget_show( frame );
1394 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1396 table = ui::Table( 2, 3, TRUE );
1397 gtk_widget_show( table );
1398 gtk_container_add( GTK_CONTAINER( frame ), table );
1399 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1400 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1401 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1405 dlgTexReset.cbScaleHor = ui::CheckButton( "Enabled" );
1406 g_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleHor ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1407 gtk_widget_show( dlgTexReset.cbScaleHor );
1408 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleHor, 0, 1, 0, 1,
1409 (GtkAttachOptions) ( GTK_FILL ),
1410 (GtkAttachOptions) ( 0 ), 0, 0 );
1412 w = ui::Label( "New Horizontal Scale: " );
1413 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1414 (GtkAttachOptions) ( GTK_FILL ),
1415 (GtkAttachOptions) ( 0 ), 0, 0 );
1416 gtk_widget_show( w );
1418 dlgTexReset.editScaleHor = ui::Entry( 256 );
1419 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleHor ), "0.5" );
1420 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleHor, 2, 3, 0, 1,
1421 (GtkAttachOptions) ( GTK_FILL ),
1422 (GtkAttachOptions) ( 0 ), 0, 0 );
1423 gtk_widget_show( dlgTexReset.editScaleHor );
1426 dlgTexReset.cbScaleVert = ui::CheckButton( "Enabled" );
1427 g_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleVert ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1428 gtk_widget_show( dlgTexReset.cbScaleVert );
1429 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleVert, 0, 1, 1, 2,
1430 (GtkAttachOptions) ( GTK_FILL ),
1431 (GtkAttachOptions) ( 0 ), 0, 0 );
1433 w = ui::Label( "New Vertical Scale: " );
1434 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1435 (GtkAttachOptions) ( GTK_FILL ),
1436 (GtkAttachOptions) ( 0 ), 0, 0 );
1437 gtk_widget_show( w );
1439 dlgTexReset.editScaleVert = ui::Entry( 256 );
1440 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleVert ), "0.5" );
1441 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleVert, 2, 3, 1, 2,
1442 (GtkAttachOptions) ( GTK_FILL ),
1443 (GtkAttachOptions) ( 0 ), 0, 0 );
1444 gtk_widget_show( dlgTexReset.editScaleVert );
1448 frame = ui::Frame( "Reset Shift" );
1449 gtk_widget_show( frame );
1450 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1452 table = ui::Table( 2, 3, TRUE );
1453 gtk_widget_show( table );
1454 gtk_container_add( GTK_CONTAINER( frame ), table );
1455 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1456 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1457 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1461 dlgTexReset.cbShiftHor = ui::CheckButton( "Enabled" );
1462 g_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftHor ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1463 gtk_widget_show( dlgTexReset.cbShiftHor );
1464 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftHor, 0, 1, 0, 1,
1465 (GtkAttachOptions) ( GTK_FILL ),
1466 (GtkAttachOptions) ( 0 ), 0, 0 );
1468 w = ui::Label( "New Horizontal Shift: " );
1469 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1470 (GtkAttachOptions) ( GTK_FILL ),
1471 (GtkAttachOptions) ( 0 ), 0, 0 );
1472 gtk_widget_show( w );
1474 dlgTexReset.editShiftHor = ui::Entry( 256 );
1475 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftHor ), "0" );
1476 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftHor, 2, 3, 0, 1,
1477 (GtkAttachOptions) ( GTK_FILL ),
1478 (GtkAttachOptions) ( 0 ), 0, 0 );
1479 gtk_widget_show( dlgTexReset.editShiftHor );
1482 dlgTexReset.cbShiftVert = ui::CheckButton( "Enabled" );
1483 g_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftVert ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1484 gtk_widget_show( dlgTexReset.cbShiftVert );
1485 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftVert, 0, 1, 1, 2,
1486 (GtkAttachOptions) ( GTK_FILL ),
1487 (GtkAttachOptions) ( 0 ), 0, 0 );
1489 w = ui::Label( "New Vertical Shift: " );
1490 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1491 (GtkAttachOptions) ( GTK_FILL ),
1492 (GtkAttachOptions) ( 0 ), 0, 0 );
1493 gtk_widget_show( w );
1495 dlgTexReset.editShiftVert = ui::Entry( 256 );
1496 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftVert ), "0" );
1497 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftVert, 2, 3, 1, 2,
1498 (GtkAttachOptions) ( GTK_FILL ),
1499 (GtkAttachOptions) ( 0 ), 0, 0 );
1500 gtk_widget_show( dlgTexReset.editShiftVert );
1504 frame = ui::Frame( "Reset Rotation" );
1505 gtk_widget_show( frame );
1506 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1508 table = ui::Table( 1, 3, TRUE );
1509 gtk_widget_show( table );
1510 gtk_container_add( GTK_CONTAINER( frame ), table );
1511 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1512 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1513 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1517 dlgTexReset.cbRotation = ui::CheckButton( "Enabled" );
1518 gtk_widget_show( dlgTexReset.cbRotation );
1519 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbRotation, 0, 1, 0, 1,
1520 (GtkAttachOptions) ( GTK_FILL ),
1521 (GtkAttachOptions) ( 0 ), 0, 0 );
1523 w = ui::Label( "New Rotation Value: " );
1524 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1525 (GtkAttachOptions) ( GTK_FILL ),
1526 (GtkAttachOptions) ( 0 ), 0, 0 );
1527 gtk_widget_show( w );
1529 dlgTexReset.editRotation = ui::Entry( 256 );
1530 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editRotation ), "0" );
1531 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editRotation, 2, 3, 0, 1,
1532 (GtkAttachOptions) ( GTK_FILL ),
1533 (GtkAttachOptions) ( 0 ), 0, 0 );
1534 gtk_widget_show( dlgTexReset.editRotation );
1538 hbox = ui::HBox( FALSE, 10 );
1539 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1540 gtk_widget_show( hbox );
1544 w = ui::Button( "Use Selected Brushes" );
1545 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1546 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1548 gtk_widget_set_can_default( w, true );
1549 gtk_widget_grab_default( w );
1550 gtk_widget_show( w );
1552 w = ui::Button( "Use All Brushes" );
1553 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1554 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1555 gtk_widget_show( w );
1557 w = ui::Button( "Cancel" );
1558 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1559 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1560 gtk_widget_show( w );
1567 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1568 gtk_widget_show( window );
1569 gtk_grab_add( window );
1571 Update_TextureReseter();
1573 bool dialogError = TRUE;
1574 while ( dialogError )
1578 gtk_main_iteration();
1580 dialogError = FALSE;
1582 if ( ret != eIDCANCEL ) {
1583 rs->bResetRotation = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
1584 if ( rs->bResetRotation ) {
1585 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editRotation ) ), "Rotation", &rs->rotation ) ) {
1590 rs->bResetScale[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
1591 if ( rs->bResetScale[0] ) {
1592 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleHor ) ), "Horizontal Scale", &rs->fScale[0] ) ) {
1597 rs->bResetScale[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
1598 if ( rs->bResetScale[1] ) {
1599 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleVert ) ), "Vertical Scale", &rs->fScale[1] ) ) {
1604 rs->bResetShift[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
1605 if ( rs->bResetShift[0] ) {
1606 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftHor ) ), "Horizontal Shift", &rs->fShift[0] ) ) {
1611 rs->bResetShift[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
1612 if ( rs->bResetShift[1] ) {
1613 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftVert ) ), "Vertical Shift", &rs->fShift[1] ) ) {
1618 rs->bResetTextureName = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
1619 if ( rs->bResetTextureName ) {
1620 strcpy( rs->textureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexOld ) ) );
1621 strcpy( rs->newTextureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexNew ) ) );
1626 gtk_grab_remove( window );
1627 gtk_widget_destroy( window );
1632 EMessageBoxReturn DoTrainThingBox( TrainThingRS* rs ){
1635 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1637 GtkWidget *radiusX, *radiusY;
1638 GtkWidget *angleStart, *angleEnd;
1639 GtkWidget *heightStart, *heightEnd;
1640 GtkWidget *numPoints;
1642 EMessageBoxReturn ret;
1645 window = ui::Window( ui::window_type::TOP );
1647 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1648 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1650 gtk_window_set_title( GTK_WINDOW( window ), "Train Thing" );
1651 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1653 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1654 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1656 gtk_widget_realize( window );
1658 vbox = ui::VBox( FALSE, 10 );
1659 gtk_container_add( GTK_CONTAINER( window ), vbox );
1660 gtk_widget_show( vbox );
1664 hbox = ui::HBox( FALSE, 10 );
1665 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1666 gtk_widget_show( hbox );
1670 frame = ui::Frame( "Radii" );
1671 gtk_widget_show( frame );
1672 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1674 table = ui::Table( 2, 3, TRUE );
1675 gtk_widget_show( table );
1676 gtk_container_add( GTK_CONTAINER( frame ), table );
1677 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1678 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1679 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1683 w = ui::Label( "X: " );
1684 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1685 (GtkAttachOptions) ( GTK_FILL ),
1686 (GtkAttachOptions) ( 0 ), 0, 0 );
1687 gtk_widget_show( w );
1689 radiusX = ui::Entry( 256 );
1690 gtk_entry_set_text( GTK_ENTRY( radiusX ), "100" );
1691 gtk_table_attach( GTK_TABLE( table ), radiusX, 1, 2, 0, 1,
1692 (GtkAttachOptions) ( GTK_FILL ),
1693 (GtkAttachOptions) ( 0 ), 0, 0 );
1694 gtk_widget_show( radiusX );
1698 w = ui::Label( "Y: " );
1699 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1700 (GtkAttachOptions) ( GTK_FILL ),
1701 (GtkAttachOptions) ( 0 ), 0, 0 );
1702 gtk_widget_show( w );
1704 radiusY = ui::Entry( 256 );
1705 gtk_entry_set_text( GTK_ENTRY( radiusY ), "100" );
1706 gtk_table_attach( GTK_TABLE( table ), radiusY, 1, 2, 1, 2,
1707 (GtkAttachOptions) ( GTK_FILL ),
1708 (GtkAttachOptions) ( 0 ), 0, 0 );
1709 gtk_widget_show( radiusY );
1713 frame = ui::Frame( "Angles" );
1714 gtk_widget_show( frame );
1715 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1717 table = ui::Table( 2, 3, TRUE );
1718 gtk_widget_show( table );
1719 gtk_container_add( GTK_CONTAINER( frame ), table );
1720 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1721 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1722 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1726 w = ui::Label( "Start: " );
1727 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1728 (GtkAttachOptions) ( GTK_FILL ),
1729 (GtkAttachOptions) ( 0 ), 0, 0 );
1730 gtk_widget_show( w );
1732 angleStart = ui::Entry( 256 );
1733 gtk_entry_set_text( GTK_ENTRY( angleStart ), "0" );
1734 gtk_table_attach( GTK_TABLE( table ), angleStart, 1, 2, 0, 1,
1735 (GtkAttachOptions) ( GTK_FILL ),
1736 (GtkAttachOptions) ( 0 ), 0, 0 );
1737 gtk_widget_show( angleStart );
1741 w = ui::Label( "End: " );
1742 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1743 (GtkAttachOptions) ( GTK_FILL ),
1744 (GtkAttachOptions) ( 0 ), 0, 0 );
1745 gtk_widget_show( w );
1747 angleEnd = ui::Entry( 256 );
1748 gtk_entry_set_text( GTK_ENTRY( angleEnd ), "90" );
1749 gtk_table_attach( GTK_TABLE( table ), angleEnd, 1, 2, 1, 2,
1750 (GtkAttachOptions) ( GTK_FILL ),
1751 (GtkAttachOptions) ( 0 ), 0, 0 );
1752 gtk_widget_show( angleEnd );
1755 frame = ui::Frame( "Height" );
1756 gtk_widget_show( frame );
1757 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1759 table = ui::Table( 2, 3, TRUE );
1760 gtk_widget_show( table );
1761 gtk_container_add( GTK_CONTAINER( frame ), table );
1762 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1763 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1764 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1768 w = ui::Label( "Start: " );
1769 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1770 (GtkAttachOptions) ( GTK_FILL ),
1771 (GtkAttachOptions) ( 0 ), 0, 0 );
1772 gtk_widget_show( w );
1774 heightStart = ui::Entry( 256 );
1775 gtk_entry_set_text( GTK_ENTRY( heightStart ), "0" );
1776 gtk_table_attach( GTK_TABLE( table ), heightStart, 1, 2, 0, 1,
1777 (GtkAttachOptions) ( GTK_FILL ),
1778 (GtkAttachOptions) ( 0 ), 0, 0 );
1779 gtk_widget_show( heightStart );
1783 w = ui::Label( "End: " );
1784 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1785 (GtkAttachOptions) ( GTK_FILL ),
1786 (GtkAttachOptions) ( 0 ), 0, 0 );
1787 gtk_widget_show( w );
1789 heightEnd = ui::Entry( 256 );
1790 gtk_entry_set_text( GTK_ENTRY( heightEnd ), "0" );
1791 gtk_table_attach( GTK_TABLE( table ), heightEnd, 1, 2, 1, 2,
1792 (GtkAttachOptions) ( GTK_FILL ),
1793 (GtkAttachOptions) ( 0 ), 0, 0 );
1794 gtk_widget_show( heightEnd );
1798 frame = ui::Frame( "Points" );
1799 gtk_widget_show( frame );
1800 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1802 table = ui::Table( 2, 3, TRUE );
1803 gtk_widget_show( table );
1804 gtk_container_add( GTK_CONTAINER( frame ), table );
1805 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1806 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1807 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1811 w = ui::Label( "Number: " );
1812 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1813 (GtkAttachOptions) ( GTK_FILL ),
1814 (GtkAttachOptions) ( 0 ), 0, 0 );
1815 gtk_widget_show( w );
1817 numPoints = ui::Entry( 256 );
1818 gtk_entry_set_text( GTK_ENTRY( numPoints ), "0" );
1819 gtk_table_attach( GTK_TABLE( table ), numPoints, 1, 2, 0, 1,
1820 (GtkAttachOptions) ( GTK_FILL ),
1821 (GtkAttachOptions) ( 0 ), 0, 0 );
1822 gtk_widget_show( numPoints );
1825 hbox = ui::HBox( FALSE, 10 );
1826 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1827 gtk_widget_show( hbox );
1831 w = ui::Button( "Ok" );
1832 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1833 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1835 gtk_widget_set_can_default( w, true );
1836 gtk_widget_grab_default( w );
1837 gtk_widget_show( w );
1839 w = ui::Button( "Cancel" );
1840 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1841 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1842 gtk_widget_show( w );
1849 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1850 gtk_widget_show( window );
1851 gtk_grab_add( window );
1853 bool dialogError = TRUE;
1854 while ( dialogError )
1858 gtk_main_iteration();
1860 dialogError = FALSE;
1862 if ( ret != eIDCANCEL ) {
1863 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusX ) ), "Radius (X)", &rs->fRadiusX ) ) {
1867 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusY ) ), "Radius (Y)", &rs->fRadiusY ) ) {
1871 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleStart ) ), "Angle (Start)", &rs->fStartAngle ) ) {
1875 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleEnd ) ), "Angle (End)", &rs->fEndAngle ) ) {
1879 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightStart ) ), "Height (Start)", &rs->fStartHeight ) ) {
1883 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightEnd ) ), "Height (End)", &rs->fEndHeight ) ) {
1887 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( numPoints ) ), "Num Points", &rs->iNumPoints ) ) {
1893 gtk_grab_remove( window );
1894 gtk_widget_destroy( window );
1899 // add a simple input for the MakeChain thing..
1900 EMessageBoxReturn DoMakeChainBox( MakeChainRS* rs ){
1901 GtkWidget *window, *w, *vbox, *hbox;
1902 GtkWidget *textlinkNum, *textlinkName;
1903 EMessageBoxReturn ret;
1906 const gchar *text = "Please set a value in the boxes below and press 'OK' to make a chain";
1908 window = ui::Window( ui::window_type::TOP );
1910 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1911 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1913 gtk_window_set_title( GTK_WINDOW( window ), "Make Chain" );
1915 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1917 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1918 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1920 gtk_widget_realize( window );
1923 vbox = ui::VBox( FALSE, 10 );
1924 gtk_container_add( GTK_CONTAINER( window ), vbox );
1925 gtk_widget_show( vbox );
1927 hbox = ui::HBox( FALSE, 10 );
1928 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
1929 gtk_widget_show( hbox );
1931 // dunno if you want this text or not ...
1932 w = ui::Label( text );
1933 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1934 gtk_widget_show( w );
1936 w = gtk_hseparator_new();
1937 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1938 gtk_widget_show( w );
1940 // ------------------------- //
1943 hbox = ui::HBox( FALSE, 10 );
1944 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1945 gtk_widget_show( hbox );
1947 textlinkNum = ui::Entry( 256 );
1948 gtk_box_pack_start( GTK_BOX( hbox ), textlinkNum, FALSE, FALSE, 1 );
1949 gtk_widget_show( textlinkNum );
1951 w = ui::Label( "Number of elements in chain" );
1952 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
1953 gtk_widget_show( w );
1955 // -------------------------- //
1957 hbox = ui::HBox( FALSE, 10 );
1958 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1959 gtk_widget_show( hbox );
1961 textlinkName = ui::Entry( 256 );
1962 gtk_box_pack_start( GTK_BOX( hbox ), textlinkName, FALSE, FALSE, 0 );
1963 gtk_widget_show( textlinkName );
1965 w = ui::Label( "Basename for chain's targetnames." );
1966 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
1967 gtk_widget_show( w );
1970 w = ui::Button( "OK" );
1971 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1972 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1973 gtk_widget_set_can_default( w, true );
1974 gtk_widget_grab_default( w );
1975 gtk_widget_show( w );
1977 w = ui::Button( "Cancel" );
1978 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1979 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1980 gtk_widget_show( w );
1984 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1985 gtk_widget_show( window );
1986 gtk_grab_add( window );
1988 bool dialogError = TRUE;
1989 while ( dialogError )
1993 gtk_main_iteration();
1995 dialogError = FALSE;
1997 if ( ret == eIDOK ) {
1998 strcpy( rs->linkName, gtk_entry_get_text( (GtkEntry*)textlinkName ) );
1999 if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textlinkNum ), "Elements", &rs->linkNum ) ) {
2005 gtk_grab_remove( window );
2006 gtk_widget_destroy( window );