2 BobToolz plugin for GtkRadiant
3 Copyright (C) 2001 Gordon Biggans
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 #include "dialogs-gtk.h"
21 #include "../funchandlers.h"
26 #include "gtkutil/pointer.h"
32 /*--------------------------------
34 ---------------------------------*/
37 GtkWidget *cbTexChange;
38 GtkWidget *editTexOld, *editTexNew;
40 GtkWidget *cbScaleHor, *cbScaleVert;
41 GtkWidget *editScaleHor, *editScaleVert;
43 GtkWidget *cbShiftHor, *cbShiftVert;
44 GtkWidget *editShiftHor, *editShiftVert;
46 GtkWidget *cbRotation;
47 GtkWidget *editRotation;
50 dlg_texReset_t dlgTexReset;
52 void Update_TextureReseter();
54 static void dialog_button_callback_texreset_update( GtkWidget *widget, gpointer data ){
55 Update_TextureReseter();
58 void Update_TextureReseter(){
61 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
62 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editTexNew ), check );
63 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editTexOld ), check );
65 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
66 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editScaleHor ), check );
68 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
69 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editScaleVert ), check );
71 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
72 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editShiftHor ), check );
74 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
75 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editShiftVert ), check );
77 check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
78 gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editRotation ), check );
81 static void dialog_button_callback( GtkWidget *widget, gpointer data ){
84 EMessageBoxReturn *ret;
86 parent = gtk_widget_get_toplevel( widget );
87 loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" );
88 ret = (EMessageBoxReturn*)g_object_get_data( G_OBJECT( parent ), "ret" );
91 *ret = (EMessageBoxReturn)gpointer_to_int( data );
94 static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){
97 gtk_widget_hide( widget );
98 loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" );
104 static void dialog_button_callback_settex( GtkWidget *widget, gpointer data ){
105 TwinWidget* tw = (TwinWidget*)data;
107 GtkEntry* entry = GTK_ENTRY( tw->one );
108 auto* combo = GTK_BIN(tw->two);
110 const gchar *tex = gtk_entry_get_text(GTK_ENTRY (gtk_bin_get_child(combo)));
111 gtk_entry_set_text( entry, tex );
114 /*--------------------------------
115 Data validation Routines
116 ---------------------------------*/
118 bool ValidateTextFloat( const char* pData, char* error_title, float* value ){
120 float testNum = (float)atof( pData );
122 if ( ( testNum == 0.0f ) && strcmp( pData, "0" ) ) {
123 DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK );
133 DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK );
137 bool ValidateTextFloatRange( const char* pData, float min, float max, char* error_title, float* value ){
138 char error_buffer[256];
139 sprintf( error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max );
142 float testNum = (float)atof( pData );
144 if ( ( testNum < min ) || ( testNum > max ) ) {
145 DoMessageBox( error_buffer, error_title, eMB_OK );
155 DoMessageBox( error_buffer, error_title, eMB_OK );
159 bool ValidateTextIntRange( const char* pData, int min, int max, char* error_title, int* value ){
160 char error_buffer[256];
161 sprintf( error_buffer, "Please Enter An Integer Between %i and %i", min, max );
164 int testNum = atoi( pData );
166 if ( ( testNum < min ) || ( testNum > max ) ) {
167 DoMessageBox( error_buffer, error_title, eMB_OK );
177 DoMessageBox( error_buffer, error_title, eMB_OK );
181 bool ValidateTextInt( const char* pData, char* error_title, int* value ){
183 int testNum = atoi( pData );
185 if ( ( testNum == 0 ) && strcmp( pData, "0" ) ) {
186 DoMessageBox( "Please Enter An Integer", error_title, eMB_OK );
196 DoMessageBox( "Please Enter An Integer", error_title, eMB_OK );
200 /*--------------------------------
202 ---------------------------------*/
206 Major clean up of variable names etc required, excluding Mars's ones,
207 which are nicely done :)
211 EMessageBoxReturn DoMessageBox( const char* lpText, const char* lpCaption, EMessageBoxType type ){
212 ui::Widget window, w, vbox, hbox;
213 EMessageBoxReturn ret;
216 window = ui::Window( ui::window_type::TOP );
217 g_signal_connect( GTK_OBJECT( window ), "delete_event",
218 G_CALLBACK( dialog_delete_callback ), NULL );
219 g_signal_connect( GTK_OBJECT( window ), "destroy",
220 G_CALLBACK( gtk_widget_destroy ), NULL );
221 gtk_window_set_title( GTK_WINDOW( window ), lpCaption );
222 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
223 g_object_set_data( G_OBJECT( window ), "loop", &loop );
224 g_object_set_data( G_OBJECT( window ), "ret", &ret );
225 gtk_widget_realize( window );
227 vbox = ui::VBox( FALSE, 10 );
228 gtk_container_add( GTK_CONTAINER( window ), vbox );
229 gtk_widget_show( vbox );
231 w = ui::Label( lpText );
232 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
233 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
234 gtk_widget_show( w );
236 w = ui::Widget(gtk_hseparator_new());
237 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
238 gtk_widget_show( w );
240 hbox = ui::HBox( FALSE, 10 );
241 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
242 gtk_widget_show( hbox );
244 if ( type == eMB_OK ) {
245 w = ui::Button( "Ok" );
246 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
247 g_signal_connect( GTK_OBJECT( w ), "clicked",
248 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
249 gtk_widget_set_can_default(w, true);
250 gtk_widget_grab_default( w );
251 gtk_widget_show( w );
254 else if ( type == eMB_OKCANCEL ) {
255 w = ui::Button( "Ok" );
256 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
257 g_signal_connect( GTK_OBJECT( w ), "clicked",
258 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
259 gtk_widget_set_can_default( w, true );
260 gtk_widget_grab_default( w );
261 gtk_widget_show( w );
263 w = ui::Button( "Cancel" );
264 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
265 g_signal_connect( GTK_OBJECT( w ), "clicked",
266 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
267 gtk_widget_show( w );
270 else if ( type == eMB_YESNOCANCEL ) {
271 w = ui::Button( "Yes" );
272 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
273 g_signal_connect( GTK_OBJECT( w ), "clicked",
274 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
275 gtk_widget_set_can_default( w, true );
276 gtk_widget_grab_default( w );
277 gtk_widget_show( w );
279 w = ui::Button( "No" );
280 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
281 g_signal_connect( GTK_OBJECT( w ), "clicked",
282 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
283 gtk_widget_show( w );
285 w = ui::Button( "Cancel" );
286 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
287 g_signal_connect( GTK_OBJECT( w ), "clicked",
288 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
289 gtk_widget_show( w );
292 else /* if (mode == MB_YESNO) */
294 w = ui::Button( "Yes" );
295 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
296 g_signal_connect( GTK_OBJECT( w ), "clicked",
297 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
298 gtk_widget_set_can_default( w, true );
299 gtk_widget_grab_default( w );
300 gtk_widget_show( w );
302 w = ui::Button( "No" );
303 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
304 g_signal_connect( GTK_OBJECT( w ), "clicked",
305 G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
306 gtk_widget_show( w );
310 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
311 gtk_widget_show( window );
312 gtk_grab_add( window );
315 gtk_main_iteration();
317 gtk_grab_remove( window );
318 gtk_widget_destroy( window );
323 EMessageBoxReturn DoIntersectBox( IntersectRS* rs ){
324 GtkWidget *window, *w, *vbox, *hbox;
325 GtkWidget *check1, *check2;
326 EMessageBoxReturn ret;
329 window = ui::Window( ui::window_type::TOP );
331 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
332 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
334 gtk_window_set_title( GTK_WINDOW( window ), "Intersect" );
335 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
337 g_object_set_data( G_OBJECT( window ), "loop", &loop );
338 g_object_set_data( G_OBJECT( window ), "ret", &ret );
340 gtk_widget_realize( window );
344 vbox = ui::VBox( FALSE, 10 );
345 gtk_container_add( GTK_CONTAINER( window ), vbox );
346 gtk_widget_show( vbox );
351 auto radio1 = gtk_radio_button_new_with_label( NULL, "Use Whole Map" );
352 gtk_box_pack_start( GTK_BOX( vbox ), radio1, FALSE, FALSE, 2 );
353 gtk_widget_show( radio1 );
355 auto radio2 = gtk_radio_button_new_with_label( gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio1)), "Use Selected Brushes" );
356 gtk_box_pack_start( GTK_BOX( vbox ), radio2, FALSE, FALSE, 2 );
357 gtk_widget_show( radio2 );
359 w = gtk_hseparator_new();
360 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
361 gtk_widget_show( w );
363 check1 = ui::CheckButton( "Include Detail Brushes" );
364 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
365 gtk_widget_show( check1 );
367 check2 = ui::CheckButton( "Select Duplicate Brushes Only" );
368 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
369 gtk_widget_show( check2 );
371 hbox = ui::HBox( FALSE, 10 );
372 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
373 gtk_widget_show( hbox );
375 // ---- hbox ---- ok/cancel buttons
377 w = ui::Button( "Ok" );
378 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
379 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
381 gtk_widget_set_can_default( w, true );
382 gtk_widget_grab_default( w );
383 gtk_widget_show( w );
385 w = ui::Button( "Cancel" );
386 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
387 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
388 gtk_widget_show( w );
395 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
396 gtk_widget_show( window );
397 gtk_grab_add( window );
400 gtk_main_iteration();
402 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio1 ) ) {
403 rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP;
405 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio2 ) ) {
406 rs->nBrushOptions = BRUSH_OPT_SELECTED;
409 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
410 rs->bDuplicateOnly = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
412 gtk_grab_remove( window );
413 gtk_widget_destroy( window );
418 EMessageBoxReturn DoPolygonBox( PolygonRS* rs ){
419 GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2;
421 GtkWidget *check1, *check2, *check3;
422 GtkWidget *text1, *text2;
424 EMessageBoxReturn ret;
427 window = ui::Window( ui::window_type::TOP );
429 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
430 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
432 gtk_window_set_title( GTK_WINDOW( window ), "Polygon Builder" );
433 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
435 g_object_set_data( G_OBJECT( window ), "loop", &loop );
436 g_object_set_data( G_OBJECT( window ), "ret", &ret );
438 gtk_widget_realize( window );
442 vbox = ui::VBox( FALSE, 10 );
443 gtk_container_add( GTK_CONTAINER( window ), vbox );
444 gtk_widget_show( vbox );
448 hbox = ui::HBox( FALSE, 10 );
449 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
450 gtk_widget_show( hbox );
455 vbox2 = ui::VBox( FALSE, 10 );
456 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
457 gtk_widget_show( vbox2 );
461 hbox2 = ui::HBox( FALSE, 10 );
462 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
463 gtk_widget_show( hbox2 );
467 text1 = ui::Entry( 256 );
468 gtk_entry_set_text( (GtkEntry*)text1, "3" );
469 gtk_box_pack_start( GTK_BOX( hbox2 ), text1, FALSE, FALSE, 2 );
470 gtk_widget_show( text1 );
472 w = ui::Label( "Number Of Sides" );
473 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
474 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
475 gtk_widget_show( w );
479 hbox2 = ui::HBox( FALSE, 10 );
480 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 );
481 gtk_widget_show( hbox2 );
485 text2 = ui::Entry( 256 );
486 gtk_entry_set_text( (GtkEntry*)text2, "8" );
487 gtk_box_pack_start( GTK_BOX( hbox2 ), text2, FALSE, FALSE, 2 );
488 gtk_widget_show( text2 );
490 w = ui::Label( "Border Width" );
491 gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 );
492 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
493 gtk_widget_show( w );
501 vbox2 = ui::VBox( FALSE, 10 );
502 gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 );
503 gtk_widget_show( vbox2 );
507 check1 = ui::CheckButton( "Use Border" );
508 gtk_box_pack_start( GTK_BOX( vbox2 ), check1, FALSE, FALSE, 0 );
509 gtk_widget_show( check1 );
512 check2 = ui::CheckButton( "Inverse Polygon" );
513 gtk_box_pack_start( GTK_BOX( vbox2 ), check2, FALSE, FALSE, 0 );
514 gtk_widget_show( check2 );
517 check3 = ui::CheckButton( "Align Top Edge" );
518 gtk_box_pack_start( GTK_BOX( vbox2 ), check3, FALSE, FALSE, 0 );
519 gtk_widget_show( check3 );
525 hbox = ui::HBox( FALSE, 10 );
526 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
527 gtk_widget_show( hbox );
531 w = ui::Button( "Ok" );
532 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
533 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
535 gtk_widget_set_can_default( w, true );
536 gtk_widget_grab_default( w );
537 gtk_widget_show( w );
539 w = ui::Button( "Cancel" );
540 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
541 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
542 gtk_widget_show( w );
549 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
550 gtk_widget_show( window );
551 gtk_grab_add( window );
553 bool dialogError = TRUE;
554 while ( dialogError )
558 gtk_main_iteration();
562 if ( ret == eIDOK ) {
563 rs->bUseBorder = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false;
564 rs->bInverse = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false;
565 rs->bAlignTop = gtk_toggle_button_get_active( (GtkToggleButton*)check3 ) ? true : false;
567 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text1 ), 3, 32, "Number Of Sides", &rs->nSides ) ) {
571 if ( rs->bUseBorder ) {
572 if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text2 ), 8, 256, "Border Width", &rs->nBorderWidth ) ) {
579 gtk_grab_remove( window );
580 gtk_widget_destroy( window );
586 // for stair builder stuck as close as i could to the MFC version
587 // obviously feel free to change it at will :)
588 EMessageBoxReturn DoBuildStairsBox( BuildStairsRS* rs ){
589 // i made widgets for just about everything ... i think that's what i need to do dunno tho
590 GtkWidget *window, *w, *vbox, *hbox;
591 GtkWidget *textStairHeight, *textRiserTex, *textMainTex;
592 GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value
593 GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle;
594 GtkWidget *checkUseDetail;
595 GSList *radioDirection, *radioStyle;
596 EMessageBoxReturn ret;
599 char *text = "Please set a value in the boxes below and press 'OK' to build the stairs";
601 window = ui::Window( ui::window_type::TOP );
603 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
604 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
606 gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" );
608 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
610 g_object_set_data( G_OBJECT( window ), "loop", &loop );
611 g_object_set_data( G_OBJECT( window ), "ret", &ret );
613 gtk_widget_realize( window );
616 vbox = ui::VBox( FALSE, 10 );
617 gtk_container_add( GTK_CONTAINER( window ), vbox );
618 gtk_widget_show( vbox );
620 hbox = ui::HBox( FALSE, 10 );
621 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
622 gtk_widget_show( hbox );
624 // dunno if you want this text or not ...
625 w = ui::Label( text );
626 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ...
627 gtk_widget_show( w );
629 w = gtk_hseparator_new();
630 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
631 gtk_widget_show( w );
633 // ------------------------- // indenting == good way of keeping track of lines :)
636 hbox = ui::HBox( FALSE, 10 );
637 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
638 gtk_widget_show( hbox );
640 textStairHeight = ui::Entry( 256 );
641 gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 );
642 gtk_widget_show( textStairHeight );
644 w = ui::Label( "Stair Height" );
645 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
646 gtk_widget_show( w );
648 // ------------------------- //
650 hbox = ui::HBox( FALSE, 10 );
651 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
652 gtk_widget_show( hbox );
654 w = ui::Label( "Direction:" );
655 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
656 gtk_widget_show( w );
658 // -------------------------- //
660 hbox = ui::HBox( FALSE, 10 );
661 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
662 gtk_widget_show( hbox );
664 // radio buttons confuse me ...
665 // but this _looks_ right
667 // djbob: actually it looks very nice :), slightly better than the way i did it
668 // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh
670 radioNorth = gtk_radio_button_new_with_label( NULL, "North" );
671 gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 );
672 gtk_widget_show( radioNorth );
674 radioDirection = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioNorth ) );
676 radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" );
677 gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 );
678 gtk_widget_show( radioSouth );
680 radioDirection = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioSouth ) );
682 radioEast = gtk_radio_button_new_with_label( radioDirection, "East" );
683 gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 );
684 gtk_widget_show( radioEast );
686 radioDirection = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioEast ) );
688 radioWest = gtk_radio_button_new_with_label( radioDirection, "West" );
689 gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 );
690 gtk_widget_show( radioWest );
692 // --------------------------- //
694 hbox = ui::HBox( FALSE, 10 );
695 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
696 gtk_widget_show( hbox );
698 w = ui::Label( "Style:" );
699 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
700 gtk_widget_show( w );
702 // --------------------------- //
704 hbox = ui::HBox( FALSE, 10 );
705 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
706 gtk_widget_show( hbox );
708 radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" );
709 gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 );
710 gtk_widget_show( radioOldStyle );
712 radioStyle = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioOldStyle ) );
714 radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" );
715 gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 );
716 gtk_widget_show( radioBobStyle );
718 radioStyle = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioBobStyle ) );
720 radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" );
721 gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 );
722 gtk_widget_show( radioCornerStyle );
724 // err, the q3r has an if or something so you need bob style checked before this
725 // is "ungreyed out" but you'll need to do that, as i suck :)
727 // djbob: er.... yeah um, im not at all sure how i'm gonna sort this
728 // djbob: think we need some button callback functions or smuffin
729 // FIXME: actually get around to doing what i suggested!!!!
731 checkUseDetail = ui::CheckButton( "Use Detail Brushes" );
732 gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 );
733 gtk_widget_show( checkUseDetail );
735 // --------------------------- //
737 hbox = ui::HBox( FALSE, 10 );
738 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
739 gtk_widget_show( hbox );
741 textMainTex = ui::Entry( 512 );
742 gtk_entry_set_text( GTK_ENTRY( textMainTex ), rs->mainTexture );
743 gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 );
744 gtk_widget_show( textMainTex );
746 w = ui::Label( "Main Texture" );
747 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
748 gtk_widget_show( w );
750 // -------------------------- //
752 hbox = ui::HBox( FALSE, 10 );
753 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
754 gtk_widget_show( hbox );
756 textRiserTex = ui::Entry( 512 );
757 gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 );
758 gtk_widget_show( textRiserTex );
760 w = ui::Label( "Riser Texture" );
761 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
762 gtk_widget_show( w );
764 // -------------------------- //
765 w = gtk_hseparator_new();
766 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
767 gtk_widget_show( w );
769 hbox = ui::HBox( FALSE, 10 );
770 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
771 gtk_widget_show( hbox );
773 w = ui::Button( "OK" );
774 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
775 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
776 gtk_widget_set_can_default( w, true );
777 gtk_widget_grab_default( w );
778 gtk_widget_show( w );
780 w = ui::Button( "Cancel" );
781 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
782 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
783 gtk_widget_show( w );
787 // +djbob: need our "little" modal loop mars :P
788 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
789 gtk_widget_show( window );
790 gtk_grab_add( window );
792 bool dialogError = TRUE;
793 while ( dialogError )
797 gtk_main_iteration();
801 if ( ret == eIDOK ) {
802 rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)checkUseDetail ) ? true : false;
804 strcpy( rs->riserTexture, gtk_entry_get_text( (GtkEntry*)textRiserTex ) );
805 strcpy( rs->mainTexture, gtk_entry_get_text( (GtkEntry*)textMainTex ) );
807 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioNorth ) ) {
808 rs->direction = MOVE_NORTH;
810 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioSouth ) ) {
811 rs->direction = MOVE_SOUTH;
813 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioEast ) ) {
814 rs->direction = MOVE_EAST;
816 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioWest ) ) {
817 rs->direction = MOVE_WEST;
820 if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textStairHeight ), "Stair Height", &rs->stairHeight ) ) {
824 if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioOldStyle ) ) {
825 rs->style = STYLE_ORIGINAL;
827 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioBobStyle ) ) {
828 rs->style = STYLE_BOB;
830 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioCornerStyle ) ) {
831 rs->style = STYLE_CORNER;
836 gtk_grab_remove( window );
837 gtk_widget_destroy( window );
842 // there we go, all done ... on my end at least, not bad for a night's work
845 EMessageBoxReturn DoDoorsBox( DoorRS* rs ){
846 GtkWidget *window, *hbox, *vbox, *w;
847 GtkWidget *textFrontBackTex, *textTrimTex;
848 GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV;
849 GtkWidget *comboMain, *comboTrim;
850 GtkWidget *buttonSetMain, *buttonSetTrim;
851 GtkWidget *radioNS, *radioEW;
852 GSList *radioOrientation;
854 EMessageBoxReturn ret;
857 window = ui::Window( ui::window_type::TOP );
859 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
860 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
862 gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" );
864 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
866 g_object_set_data( G_OBJECT( window ), "loop", &loop );
867 g_object_set_data( G_OBJECT( window ), "ret", &ret );
869 gtk_widget_realize( window );
872 ui::ListStore listMainTextures = ui::ListStore(gtk_list_store_new( 1, G_TYPE_STRING ));
873 ui::ListStore listTrimTextures = ui::ListStore(gtk_list_store_new( 1, G_TYPE_STRING ));
874 LoadGList( GetFilename( buffer, "plugins/bt/door-tex.txt" ), listMainTextures );
875 LoadGList( GetFilename( buffer, "plugins/bt/door-tex-trim.txt" ), listTrimTextures );
877 vbox = ui::VBox( FALSE, 10 );
878 gtk_container_add( GTK_CONTAINER( window ), vbox );
879 gtk_widget_show( vbox );
881 // -------------------------- //
883 hbox = ui::HBox( FALSE, 10 );
884 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
885 gtk_widget_show( hbox );
887 textFrontBackTex = ui::Entry( 512 );
888 gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture );
889 gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 );
890 gtk_widget_show( textFrontBackTex );
892 w = ui::Label( "Door Front/Back Texture" );
893 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
894 gtk_widget_show( w );
896 // ------------------------ //
898 hbox = ui::HBox( FALSE, 10 );
899 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
900 gtk_widget_show( hbox );
902 textTrimTex = ui::Entry( 512 );
903 gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 );
904 gtk_widget_show( textTrimTex );
906 w = ui::Label( "Door Trim Texture" );
907 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
908 gtk_widget_show( w );
910 // ----------------------- //
912 hbox = ui::HBox( FALSE, 10 );
913 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
914 gtk_widget_show( hbox );
916 // sp: horizontally ????
917 // djbob: yes mars, u can spell :]
918 checkScaleMainH = ui::CheckButton( "Scale Main Texture Horizontally" );
919 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE );
920 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 );
921 gtk_widget_show( checkScaleMainH );
923 checkScaleTrimH = ui::CheckButton( "Scale Trim Texture Horizontally" );
924 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE );
925 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 );
926 gtk_widget_show( checkScaleTrimH );
928 // ---------------------- //
930 hbox = ui::HBox( FALSE, 10 );
931 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
932 gtk_widget_show( hbox );
934 checkScaleMainV = ui::CheckButton( "Scale Main Texture Vertically" );
935 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE );
936 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 );
937 gtk_widget_show( checkScaleMainV );
939 checkScaleTrimV = ui::CheckButton( "Scale Trim Texture Vertically" );
940 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 );
941 gtk_widget_show( checkScaleTrimV );
943 // --------------------- //
945 hbox = ui::HBox( FALSE, 10 );
946 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
947 gtk_widget_show( hbox );
949 // djbob: lists added
951 comboMain = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(listMainTextures));
952 gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(comboMain), 0);
953 gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 );
954 gtk_widget_show( comboMain );
956 tw1.one = textFrontBackTex;
957 tw1.two = GTK_COMBO_BOX(comboMain);
959 buttonSetMain = ui::Button( "Set As Main Texture" );
960 g_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", G_CALLBACK( dialog_button_callback_settex ), &tw1 );
961 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 );
962 gtk_widget_show( buttonSetMain );
964 // ------------------- //
966 hbox = ui::HBox( FALSE, 10 );
967 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
968 gtk_widget_show( hbox );
970 comboTrim = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(listTrimTextures));
971 gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(comboMain), 0);
972 gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 );
973 gtk_widget_show( comboTrim );
975 tw2.one = textTrimTex;
976 tw2.two = GTK_COMBO_BOX(comboTrim);
978 buttonSetTrim = ui::Button( "Set As Trim Texture" );
979 g_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", G_CALLBACK( dialog_button_callback_settex ), &tw2 );
980 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 );
981 gtk_widget_show( buttonSetTrim );
983 // ------------------ //
985 hbox = ui::HBox( FALSE, 10 );
986 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
987 gtk_widget_show( hbox );
989 w = ui::Label( "Orientation" );
990 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
991 gtk_widget_show( w );
993 // argh more radio buttons!
994 radioNS = gtk_radio_button_new_with_label( NULL, "North - South" );
995 gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 );
996 gtk_widget_show( radioNS );
998 radioOrientation = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioNS ) );
1000 radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" );
1001 gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 );
1002 gtk_widget_show( radioEW );
1004 // ----------------- //
1006 w = gtk_hseparator_new();
1007 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1008 gtk_widget_show( w );
1010 // ----------------- //
1012 hbox = ui::HBox( FALSE, 10 );
1013 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1014 gtk_widget_show( hbox );
1016 w = ui::Button( "OK" );
1017 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1018 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1019 gtk_widget_set_can_default( w, true );
1020 gtk_widget_grab_default( w );
1021 gtk_widget_show( w );
1023 w = ui::Button( "Cancel" );
1024 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1025 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1026 gtk_widget_show( w );
1029 // ----------------- //
1032 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1033 gtk_widget_show( window );
1034 gtk_grab_add( window );
1037 gtk_main_iteration();
1039 strcpy( rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ) );
1040 strcpy( rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ) );
1042 rs->bScaleMainH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainH ) ) ? true : false;
1043 rs->bScaleMainV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainV ) ) ? true : false;
1044 rs->bScaleTrimH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ) ) ? true : false;
1045 rs->bScaleTrimV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimV ) ) ? true : false;
1047 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioNS ) ) ) {
1048 rs->nOrientation = DIRECTION_NS;
1050 else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioEW ) ) ) {
1051 rs->nOrientation = DIRECTION_EW;
1054 gtk_grab_remove( window );
1055 gtk_widget_destroy( window );
1061 EMessageBoxReturn DoPathPlotterBox( PathPlotterRS* rs ){
1062 GtkWidget *window, *w, *vbox, *hbox;
1064 GtkWidget *text1, *text2, *text3;
1065 GtkWidget *check1, *check2;
1067 EMessageBoxReturn ret;
1070 window = ui::Window( ui::window_type::TOP );
1072 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1073 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1075 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1076 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1078 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1079 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1081 gtk_widget_realize( window );
1085 vbox = ui::VBox( FALSE, 10 );
1086 gtk_container_add( GTK_CONTAINER( window ), vbox );
1087 gtk_widget_show( vbox );
1091 hbox = ui::HBox( FALSE, 10 );
1092 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1093 gtk_widget_show( hbox );
1097 text1 = ui::Entry( 256 );
1098 gtk_entry_set_text( (GtkEntry*)text1, "25" );
1099 gtk_box_pack_start( GTK_BOX( hbox ), text1, FALSE, FALSE, 2 );
1100 gtk_widget_show( text1 );
1102 w = ui::Label( "Number Of Points" );
1103 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1104 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1105 gtk_widget_show( w );
1109 hbox = ui::HBox( FALSE, 10 );
1110 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1111 gtk_widget_show( hbox );
1115 text2 = ui::Entry( 256 );
1116 gtk_entry_set_text( (GtkEntry*)text2, "3" );
1117 gtk_box_pack_start( GTK_BOX( hbox ), text2, FALSE, FALSE, 2 );
1118 gtk_widget_show( text2 );
1120 w = ui::Label( "Multipler" );
1121 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1122 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1123 gtk_widget_show( w );
1127 w = ui::Label( "Path Distance = dist(start -> apex) * multiplier" );
1128 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1129 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1130 gtk_widget_show( w );
1132 hbox = ui::HBox( FALSE, 10 );
1133 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1134 gtk_widget_show( hbox );
1138 text3 = ui::Entry( 256 );
1139 gtk_entry_set_text( (GtkEntry*)text3, "-800" );
1140 gtk_box_pack_start( GTK_BOX( hbox ), text3, FALSE, FALSE, 2 );
1141 gtk_widget_show( text3 );
1143 w = ui::Label( "Gravity" );
1144 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1145 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1146 gtk_widget_show( w );
1150 w = gtk_hseparator_new();
1151 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1152 gtk_widget_show( w );
1154 check1 = ui::CheckButton( "No Dynamic Update" );
1155 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
1156 gtk_widget_show( check1 );
1158 check2 = ui::CheckButton( "Show Bounding Lines" );
1159 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
1160 gtk_widget_show( check2 );
1165 // ----------------- //
1167 w = gtk_hseparator_new();
1168 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1169 gtk_widget_show( w );
1171 // ----------------- //
1173 hbox = ui::HBox( FALSE, 10 );
1174 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1175 gtk_widget_show( hbox );
1177 w = ui::Button( "Enable" );
1178 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1179 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1180 gtk_widget_show( w );
1182 gtk_widget_set_can_default( w, true );
1183 gtk_widget_grab_default( w );
1185 w = ui::Button( "Disable" );
1186 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1187 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) );
1188 gtk_widget_show( w );
1190 w = ui::Button( "Cancel" );
1191 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1192 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1193 gtk_widget_show( w );
1197 // ----------------- //
1199 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1200 gtk_widget_show( window );
1201 gtk_grab_add( window );
1203 bool dialogError = TRUE;
1204 while ( dialogError )
1208 gtk_main_iteration();
1210 dialogError = FALSE;
1212 if ( ret == eIDYES ) {
1213 if ( !ValidateTextIntRange( gtk_entry_get_text( GTK_ENTRY( text1 ) ), 1, 200, "Number Of Points", &rs->nPoints ) ) {
1217 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text2 ) ), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier ) ) {
1221 if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text3 ) ), -10000.0f, -1.0f, "Gravity", &rs->fGravity ) ) {
1225 rs->bNoUpdate = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check1 ) ) ? true : false;
1226 rs->bShowExtra = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2 ) ) ? true : false;
1230 gtk_grab_remove( window );
1231 gtk_widget_destroy( window );
1236 EMessageBoxReturn DoCTFColourChangeBox(){
1237 GtkWidget *window, *w, *vbox, *hbox;
1238 EMessageBoxReturn ret;
1241 window = ui::Window( ui::window_type::TOP );
1243 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1244 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1246 gtk_window_set_title( GTK_WINDOW( window ), "CTF Colour Changer" );
1247 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1249 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1250 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1252 gtk_widget_realize( window );
1256 vbox = ui::VBox( FALSE, 10 );
1257 gtk_container_add( GTK_CONTAINER( window ), vbox );
1258 gtk_widget_show( vbox );
1262 hbox = ui::HBox( FALSE, 10 );
1263 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
1264 gtk_widget_show( hbox );
1266 // ---- hbox ---- ok/cancel buttons
1268 w = ui::Button( "Red->Blue" );
1269 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1270 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1272 gtk_widget_set_can_default( w, true );
1273 gtk_widget_grab_default( w );
1274 gtk_widget_show( w );
1276 w = ui::Button( "Blue->Red" );
1277 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1278 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1279 gtk_widget_show( w );
1281 w = ui::Button( "Cancel" );
1282 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1283 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1284 gtk_widget_show( w );
1291 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1292 gtk_widget_show( window );
1293 gtk_grab_add( window );
1296 gtk_main_iteration();
1298 gtk_grab_remove( window );
1299 gtk_widget_destroy( window );
1304 EMessageBoxReturn DoResetTextureBox( ResetTextureRS* rs ){
1307 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1309 EMessageBoxReturn ret;
1312 window = ui::Window( ui::window_type::TOP );
1314 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1315 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1317 gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" );
1318 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1320 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1321 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1323 gtk_widget_realize( window );
1325 vbox = ui::VBox( FALSE, 10 );
1326 gtk_container_add( GTK_CONTAINER( window ), vbox );
1327 gtk_widget_show( vbox );
1331 hbox = ui::HBox( FALSE, 10 );
1332 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1333 gtk_widget_show( hbox );
1337 texSelected = "Currently Selected Texture: ";
1338 texSelected += GetCurrentTexture();
1340 w = ui::Label( texSelected );
1341 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 );
1342 gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT );
1343 gtk_widget_show( w );
1347 frame = ui::Frame( "Reset Texture Names" );
1348 gtk_widget_show( frame );
1349 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1351 table = ui::Table( 2, 3, TRUE );
1352 gtk_widget_show( table );
1353 gtk_container_add( GTK_CONTAINER( frame ), table );
1354 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1355 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1356 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1360 dlgTexReset.cbTexChange = ui::CheckButton( "Enabled" );
1361 g_signal_connect( GTK_OBJECT( dlgTexReset.cbTexChange ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1362 gtk_widget_show( dlgTexReset.cbTexChange );
1363 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbTexChange, 0, 1, 0, 1,
1364 (GtkAttachOptions) ( GTK_FILL ),
1365 (GtkAttachOptions) ( 0 ), 0, 0 );
1367 w = ui::Label( "Old Name: " );
1368 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1369 (GtkAttachOptions) ( GTK_FILL ),
1370 (GtkAttachOptions) ( 0 ), 0, 0 );
1371 gtk_widget_show( w );
1373 dlgTexReset.editTexOld = ui::Entry( 256 );
1374 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexOld ), rs->textureName );
1375 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexOld, 2, 3, 0, 1,
1376 (GtkAttachOptions) ( GTK_FILL ),
1377 (GtkAttachOptions) ( 0 ), 0, 0 );
1378 gtk_widget_show( dlgTexReset.editTexOld );
1380 w = ui::Label( "New Name: " );
1381 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1382 (GtkAttachOptions) ( GTK_FILL ),
1383 (GtkAttachOptions) ( 0 ), 0, 0 );
1384 gtk_widget_show( w );
1386 dlgTexReset.editTexNew = ui::Entry( 256 );
1387 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexNew ), rs->textureName );
1388 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexNew, 2, 3, 1, 2,
1389 (GtkAttachOptions) ( GTK_FILL ),
1390 (GtkAttachOptions) ( 0 ), 0, 0 );
1391 gtk_widget_show( dlgTexReset.editTexNew );
1395 frame = ui::Frame( "Reset Scales" );
1396 gtk_widget_show( frame );
1397 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1399 table = ui::Table( 2, 3, TRUE );
1400 gtk_widget_show( table );
1401 gtk_container_add( GTK_CONTAINER( frame ), table );
1402 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1403 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1404 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1408 dlgTexReset.cbScaleHor = ui::CheckButton( "Enabled" );
1409 g_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleHor ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1410 gtk_widget_show( dlgTexReset.cbScaleHor );
1411 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleHor, 0, 1, 0, 1,
1412 (GtkAttachOptions) ( GTK_FILL ),
1413 (GtkAttachOptions) ( 0 ), 0, 0 );
1415 w = ui::Label( "New Horizontal Scale: " );
1416 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1417 (GtkAttachOptions) ( GTK_FILL ),
1418 (GtkAttachOptions) ( 0 ), 0, 0 );
1419 gtk_widget_show( w );
1421 dlgTexReset.editScaleHor = ui::Entry( 256 );
1422 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleHor ), "0.5" );
1423 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleHor, 2, 3, 0, 1,
1424 (GtkAttachOptions) ( GTK_FILL ),
1425 (GtkAttachOptions) ( 0 ), 0, 0 );
1426 gtk_widget_show( dlgTexReset.editScaleHor );
1429 dlgTexReset.cbScaleVert = ui::CheckButton( "Enabled" );
1430 g_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleVert ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1431 gtk_widget_show( dlgTexReset.cbScaleVert );
1432 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleVert, 0, 1, 1, 2,
1433 (GtkAttachOptions) ( GTK_FILL ),
1434 (GtkAttachOptions) ( 0 ), 0, 0 );
1436 w = ui::Label( "New Vertical Scale: " );
1437 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1438 (GtkAttachOptions) ( GTK_FILL ),
1439 (GtkAttachOptions) ( 0 ), 0, 0 );
1440 gtk_widget_show( w );
1442 dlgTexReset.editScaleVert = ui::Entry( 256 );
1443 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleVert ), "0.5" );
1444 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleVert, 2, 3, 1, 2,
1445 (GtkAttachOptions) ( GTK_FILL ),
1446 (GtkAttachOptions) ( 0 ), 0, 0 );
1447 gtk_widget_show( dlgTexReset.editScaleVert );
1451 frame = ui::Frame( "Reset Shift" );
1452 gtk_widget_show( frame );
1453 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1455 table = ui::Table( 2, 3, TRUE );
1456 gtk_widget_show( table );
1457 gtk_container_add( GTK_CONTAINER( frame ), table );
1458 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1459 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1460 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1464 dlgTexReset.cbShiftHor = ui::CheckButton( "Enabled" );
1465 g_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftHor ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1466 gtk_widget_show( dlgTexReset.cbShiftHor );
1467 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftHor, 0, 1, 0, 1,
1468 (GtkAttachOptions) ( GTK_FILL ),
1469 (GtkAttachOptions) ( 0 ), 0, 0 );
1471 w = ui::Label( "New Horizontal Shift: " );
1472 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1473 (GtkAttachOptions) ( GTK_FILL ),
1474 (GtkAttachOptions) ( 0 ), 0, 0 );
1475 gtk_widget_show( w );
1477 dlgTexReset.editShiftHor = ui::Entry( 256 );
1478 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftHor ), "0" );
1479 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftHor, 2, 3, 0, 1,
1480 (GtkAttachOptions) ( GTK_FILL ),
1481 (GtkAttachOptions) ( 0 ), 0, 0 );
1482 gtk_widget_show( dlgTexReset.editShiftHor );
1485 dlgTexReset.cbShiftVert = ui::CheckButton( "Enabled" );
1486 g_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftVert ), "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL );
1487 gtk_widget_show( dlgTexReset.cbShiftVert );
1488 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftVert, 0, 1, 1, 2,
1489 (GtkAttachOptions) ( GTK_FILL ),
1490 (GtkAttachOptions) ( 0 ), 0, 0 );
1492 w = ui::Label( "New Vertical Shift: " );
1493 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2,
1494 (GtkAttachOptions) ( GTK_FILL ),
1495 (GtkAttachOptions) ( 0 ), 0, 0 );
1496 gtk_widget_show( w );
1498 dlgTexReset.editShiftVert = ui::Entry( 256 );
1499 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftVert ), "0" );
1500 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftVert, 2, 3, 1, 2,
1501 (GtkAttachOptions) ( GTK_FILL ),
1502 (GtkAttachOptions) ( 0 ), 0, 0 );
1503 gtk_widget_show( dlgTexReset.editShiftVert );
1507 frame = ui::Frame( "Reset Rotation" );
1508 gtk_widget_show( frame );
1509 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1511 table = ui::Table( 1, 3, TRUE );
1512 gtk_widget_show( table );
1513 gtk_container_add( GTK_CONTAINER( frame ), table );
1514 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1515 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1516 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1520 dlgTexReset.cbRotation = ui::CheckButton( "Enabled" );
1521 gtk_widget_show( dlgTexReset.cbRotation );
1522 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbRotation, 0, 1, 0, 1,
1523 (GtkAttachOptions) ( GTK_FILL ),
1524 (GtkAttachOptions) ( 0 ), 0, 0 );
1526 w = ui::Label( "New Rotation Value: " );
1527 gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1,
1528 (GtkAttachOptions) ( GTK_FILL ),
1529 (GtkAttachOptions) ( 0 ), 0, 0 );
1530 gtk_widget_show( w );
1532 dlgTexReset.editRotation = ui::Entry( 256 );
1533 gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editRotation ), "0" );
1534 gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editRotation, 2, 3, 0, 1,
1535 (GtkAttachOptions) ( GTK_FILL ),
1536 (GtkAttachOptions) ( 0 ), 0, 0 );
1537 gtk_widget_show( dlgTexReset.editRotation );
1541 hbox = ui::HBox( FALSE, 10 );
1542 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1543 gtk_widget_show( hbox );
1547 w = ui::Button( "Use Selected Brushes" );
1548 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1549 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1551 gtk_widget_set_can_default( w, true );
1552 gtk_widget_grab_default( w );
1553 gtk_widget_show( w );
1555 w = ui::Button( "Use All Brushes" );
1556 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1557 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) );
1558 gtk_widget_show( w );
1560 w = ui::Button( "Cancel" );
1561 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1562 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1563 gtk_widget_show( w );
1570 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1571 gtk_widget_show( window );
1572 gtk_grab_add( window );
1574 Update_TextureReseter();
1576 bool dialogError = TRUE;
1577 while ( dialogError )
1581 gtk_main_iteration();
1583 dialogError = FALSE;
1585 if ( ret != eIDCANCEL ) {
1586 rs->bResetRotation = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) );
1587 if ( rs->bResetRotation ) {
1588 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editRotation ) ), "Rotation", &rs->rotation ) ) {
1593 rs->bResetScale[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) );
1594 if ( rs->bResetScale[0] ) {
1595 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleHor ) ), "Horizontal Scale", &rs->fScale[0] ) ) {
1600 rs->bResetScale[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) );
1601 if ( rs->bResetScale[1] ) {
1602 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleVert ) ), "Vertical Scale", &rs->fScale[1] ) ) {
1607 rs->bResetShift[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) );
1608 if ( rs->bResetShift[0] ) {
1609 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftHor ) ), "Horizontal Shift", &rs->fShift[0] ) ) {
1614 rs->bResetShift[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) );
1615 if ( rs->bResetShift[1] ) {
1616 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftVert ) ), "Vertical Shift", &rs->fShift[1] ) ) {
1621 rs->bResetTextureName = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) );
1622 if ( rs->bResetTextureName ) {
1623 strcpy( rs->textureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexOld ) ) );
1624 strcpy( rs->newTextureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexNew ) ) );
1629 gtk_grab_remove( window );
1630 gtk_widget_destroy( window );
1635 EMessageBoxReturn DoTrainThingBox( TrainThingRS* rs ){
1638 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
1640 GtkWidget *radiusX, *radiusY;
1641 GtkWidget *angleStart, *angleEnd;
1642 GtkWidget *heightStart, *heightEnd;
1643 GtkWidget *numPoints;
1645 EMessageBoxReturn ret;
1648 window = ui::Window( ui::window_type::TOP );
1650 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1651 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1653 gtk_window_set_title( GTK_WINDOW( window ), "Train Thing" );
1654 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1656 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1657 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1659 gtk_widget_realize( window );
1661 vbox = ui::VBox( FALSE, 10 );
1662 gtk_container_add( GTK_CONTAINER( window ), vbox );
1663 gtk_widget_show( vbox );
1667 hbox = ui::HBox( FALSE, 10 );
1668 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1669 gtk_widget_show( hbox );
1673 frame = ui::Frame( "Radii" );
1674 gtk_widget_show( frame );
1675 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1677 table = ui::Table( 2, 3, TRUE );
1678 gtk_widget_show( table );
1679 gtk_container_add( GTK_CONTAINER( frame ), table );
1680 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1681 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1682 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1686 w = ui::Label( "X: " );
1687 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1688 (GtkAttachOptions) ( GTK_FILL ),
1689 (GtkAttachOptions) ( 0 ), 0, 0 );
1690 gtk_widget_show( w );
1692 radiusX = ui::Entry( 256 );
1693 gtk_entry_set_text( GTK_ENTRY( radiusX ), "100" );
1694 gtk_table_attach( GTK_TABLE( table ), radiusX, 1, 2, 0, 1,
1695 (GtkAttachOptions) ( GTK_FILL ),
1696 (GtkAttachOptions) ( 0 ), 0, 0 );
1697 gtk_widget_show( radiusX );
1701 w = ui::Label( "Y: " );
1702 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1703 (GtkAttachOptions) ( GTK_FILL ),
1704 (GtkAttachOptions) ( 0 ), 0, 0 );
1705 gtk_widget_show( w );
1707 radiusY = ui::Entry( 256 );
1708 gtk_entry_set_text( GTK_ENTRY( radiusY ), "100" );
1709 gtk_table_attach( GTK_TABLE( table ), radiusY, 1, 2, 1, 2,
1710 (GtkAttachOptions) ( GTK_FILL ),
1711 (GtkAttachOptions) ( 0 ), 0, 0 );
1712 gtk_widget_show( radiusY );
1716 frame = ui::Frame( "Angles" );
1717 gtk_widget_show( frame );
1718 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1720 table = ui::Table( 2, 3, TRUE );
1721 gtk_widget_show( table );
1722 gtk_container_add( GTK_CONTAINER( frame ), table );
1723 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1724 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1725 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1729 w = ui::Label( "Start: " );
1730 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1731 (GtkAttachOptions) ( GTK_FILL ),
1732 (GtkAttachOptions) ( 0 ), 0, 0 );
1733 gtk_widget_show( w );
1735 angleStart = ui::Entry( 256 );
1736 gtk_entry_set_text( GTK_ENTRY( angleStart ), "0" );
1737 gtk_table_attach( GTK_TABLE( table ), angleStart, 1, 2, 0, 1,
1738 (GtkAttachOptions) ( GTK_FILL ),
1739 (GtkAttachOptions) ( 0 ), 0, 0 );
1740 gtk_widget_show( angleStart );
1744 w = ui::Label( "End: " );
1745 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1746 (GtkAttachOptions) ( GTK_FILL ),
1747 (GtkAttachOptions) ( 0 ), 0, 0 );
1748 gtk_widget_show( w );
1750 angleEnd = ui::Entry( 256 );
1751 gtk_entry_set_text( GTK_ENTRY( angleEnd ), "90" );
1752 gtk_table_attach( GTK_TABLE( table ), angleEnd, 1, 2, 1, 2,
1753 (GtkAttachOptions) ( GTK_FILL ),
1754 (GtkAttachOptions) ( 0 ), 0, 0 );
1755 gtk_widget_show( angleEnd );
1758 frame = ui::Frame( "Height" );
1759 gtk_widget_show( frame );
1760 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1762 table = ui::Table( 2, 3, TRUE );
1763 gtk_widget_show( table );
1764 gtk_container_add( GTK_CONTAINER( frame ), table );
1765 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1766 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1767 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1771 w = ui::Label( "Start: " );
1772 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1773 (GtkAttachOptions) ( GTK_FILL ),
1774 (GtkAttachOptions) ( 0 ), 0, 0 );
1775 gtk_widget_show( w );
1777 heightStart = ui::Entry( 256 );
1778 gtk_entry_set_text( GTK_ENTRY( heightStart ), "0" );
1779 gtk_table_attach( GTK_TABLE( table ), heightStart, 1, 2, 0, 1,
1780 (GtkAttachOptions) ( GTK_FILL ),
1781 (GtkAttachOptions) ( 0 ), 0, 0 );
1782 gtk_widget_show( heightStart );
1786 w = ui::Label( "End: " );
1787 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2,
1788 (GtkAttachOptions) ( GTK_FILL ),
1789 (GtkAttachOptions) ( 0 ), 0, 0 );
1790 gtk_widget_show( w );
1792 heightEnd = ui::Entry( 256 );
1793 gtk_entry_set_text( GTK_ENTRY( heightEnd ), "0" );
1794 gtk_table_attach( GTK_TABLE( table ), heightEnd, 1, 2, 1, 2,
1795 (GtkAttachOptions) ( GTK_FILL ),
1796 (GtkAttachOptions) ( 0 ), 0, 0 );
1797 gtk_widget_show( heightEnd );
1801 frame = ui::Frame( "Points" );
1802 gtk_widget_show( frame );
1803 gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 );
1805 table = ui::Table( 2, 3, TRUE );
1806 gtk_widget_show( table );
1807 gtk_container_add( GTK_CONTAINER( frame ), table );
1808 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1809 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1810 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1814 w = ui::Label( "Number: " );
1815 gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1,
1816 (GtkAttachOptions) ( GTK_FILL ),
1817 (GtkAttachOptions) ( 0 ), 0, 0 );
1818 gtk_widget_show( w );
1820 numPoints = ui::Entry( 256 );
1821 gtk_entry_set_text( GTK_ENTRY( numPoints ), "0" );
1822 gtk_table_attach( GTK_TABLE( table ), numPoints, 1, 2, 0, 1,
1823 (GtkAttachOptions) ( GTK_FILL ),
1824 (GtkAttachOptions) ( 0 ), 0, 0 );
1825 gtk_widget_show( numPoints );
1828 hbox = ui::HBox( FALSE, 10 );
1829 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 );
1830 gtk_widget_show( hbox );
1834 w = ui::Button( "Ok" );
1835 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1836 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1838 gtk_widget_set_can_default( w, true );
1839 gtk_widget_grab_default( w );
1840 gtk_widget_show( w );
1842 w = ui::Button( "Cancel" );
1843 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1844 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1845 gtk_widget_show( w );
1852 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1853 gtk_widget_show( window );
1854 gtk_grab_add( window );
1856 bool dialogError = TRUE;
1857 while ( dialogError )
1861 gtk_main_iteration();
1863 dialogError = FALSE;
1865 if ( ret != eIDCANCEL ) {
1866 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusX ) ), "Radius (X)", &rs->fRadiusX ) ) {
1870 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusY ) ), "Radius (Y)", &rs->fRadiusY ) ) {
1874 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleStart ) ), "Angle (Start)", &rs->fStartAngle ) ) {
1878 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleEnd ) ), "Angle (End)", &rs->fEndAngle ) ) {
1882 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightStart ) ), "Height (Start)", &rs->fStartHeight ) ) {
1886 if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightEnd ) ), "Height (End)", &rs->fEndHeight ) ) {
1890 if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( numPoints ) ), "Num Points", &rs->iNumPoints ) ) {
1896 gtk_grab_remove( window );
1897 gtk_widget_destroy( window );
1902 // add a simple input for the MakeChain thing..
1903 EMessageBoxReturn DoMakeChainBox( MakeChainRS* rs ){
1904 GtkWidget *window, *w, *vbox, *hbox;
1905 GtkWidget *textlinkNum, *textlinkName;
1906 EMessageBoxReturn ret;
1909 char *text = "Please set a value in the boxes below and press 'OK' to make a chain";
1911 window = ui::Window( ui::window_type::TOP );
1913 g_signal_connect( GTK_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL );
1914 g_signal_connect( GTK_OBJECT( window ), "destroy", G_CALLBACK( gtk_widget_destroy ), NULL );
1916 gtk_window_set_title( GTK_WINDOW( window ), "Make Chain" );
1918 gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
1920 g_object_set_data( G_OBJECT( window ), "loop", &loop );
1921 g_object_set_data( G_OBJECT( window ), "ret", &ret );
1923 gtk_widget_realize( window );
1926 vbox = ui::VBox( FALSE, 10 );
1927 gtk_container_add( GTK_CONTAINER( window ), vbox );
1928 gtk_widget_show( vbox );
1930 hbox = ui::HBox( FALSE, 10 );
1931 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
1932 gtk_widget_show( hbox );
1934 // dunno if you want this text or not ...
1935 w = ui::Label( text );
1936 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1937 gtk_widget_show( w );
1939 w = gtk_hseparator_new();
1940 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1941 gtk_widget_show( w );
1943 // ------------------------- //
1946 hbox = ui::HBox( FALSE, 10 );
1947 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1948 gtk_widget_show( hbox );
1950 textlinkNum = ui::Entry( 256 );
1951 gtk_box_pack_start( GTK_BOX( hbox ), textlinkNum, FALSE, FALSE, 1 );
1952 gtk_widget_show( textlinkNum );
1954 w = ui::Label( "Number of elements in chain" );
1955 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
1956 gtk_widget_show( w );
1958 // -------------------------- //
1960 hbox = ui::HBox( FALSE, 10 );
1961 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1962 gtk_widget_show( hbox );
1964 textlinkName = ui::Entry( 256 );
1965 gtk_box_pack_start( GTK_BOX( hbox ), textlinkName, FALSE, FALSE, 0 );
1966 gtk_widget_show( textlinkName );
1968 w = ui::Label( "Basename for chain's targetnames." );
1969 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
1970 gtk_widget_show( w );
1973 w = ui::Button( "OK" );
1974 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1975 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) );
1976 gtk_widget_set_can_default( w, true );
1977 gtk_widget_grab_default( w );
1978 gtk_widget_show( w );
1980 w = ui::Button( "Cancel" );
1981 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1982 g_signal_connect( GTK_OBJECT( w ), "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) );
1983 gtk_widget_show( w );
1987 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
1988 gtk_widget_show( window );
1989 gtk_grab_add( window );
1991 bool dialogError = TRUE;
1992 while ( dialogError )
1996 gtk_main_iteration();
1998 dialogError = FALSE;
2000 if ( ret == eIDOK ) {
2001 strcpy( rs->linkName, gtk_entry_get_text( (GtkEntry*)textlinkName ) );
2002 if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textlinkNum ), "Elements", &rs->linkNum ) ) {
2008 gtk_grab_remove( window );
2009 gtk_widget_destroy( window );