2 BobToolz plugin for GtkRadiant
\r
3 Copyright (C) 2001 Gordon Biggans
\r
5 This library is free software; you can redistribute it and/or
\r
6 modify it under the terms of the GNU Lesser General Public
\r
7 License as published by the Free Software Foundation; either
\r
8 version 2.1 of the License, or (at your option) any later version.
\r
10 This library is distributed in the hope that it will be useful,
\r
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
\r
13 Lesser General Public License for more details.
\r
15 You should have received a copy of the GNU Lesser General Public
\r
16 License along with this library; if not, write to the Free Software
\r
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\r
20 #include "../StdAfx.h"
\r
21 #include "dialogs-gtk.h"
\r
22 #include "../funchandlers.h"
\r
23 #include "../lists.h"
\r
24 #include "../misc.h"
\r
26 /*--------------------------------
\r
28 ---------------------------------*/
\r
31 GtkWidget *cbTexChange;
\r
32 GtkWidget *editTexOld, *editTexNew;
\r
34 GtkWidget *cbScaleHor, *cbScaleVert;
\r
35 GtkWidget *editScaleHor, *editScaleVert;
\r
37 GtkWidget *cbShiftHor, *cbShiftVert;
\r
38 GtkWidget *editShiftHor, *editShiftVert;
\r
40 GtkWidget *cbRotation;
\r
41 GtkWidget *editRotation;
\r
44 dlg_texReset_t dlgTexReset;
\r
46 void Update_TextureReseter();
\r
48 static void dialog_button_callback_texreset_update (GtkWidget *widget, gpointer data)
\r
50 Update_TextureReseter();
\r
53 void Update_TextureReseter()
\r
57 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ));
\r
58 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexNew), check);
\r
59 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexOld), check);
\r
61 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ));
\r
62 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleHor), check);
\r
64 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ));
\r
65 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleVert), check);
\r
67 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ));
\r
68 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftHor), check);
\r
70 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ));
\r
71 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftVert), check);
\r
73 check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ));
\r
74 gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editRotation), check);
\r
77 static void dialog_button_callback (GtkWidget *widget, gpointer data)
\r
82 parent = gtk_widget_get_toplevel (widget);
\r
83 loop = (int*)g_object_get_data (G_OBJECT (parent), "loop");
\r
84 ret = (int*)g_object_get_data (G_OBJECT (parent), "ret");
\r
90 static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data)
\r
94 gtk_widget_hide (widget);
\r
95 loop = (int*)g_object_get_data (G_OBJECT (widget), "loop");
\r
101 static void dialog_button_callback_settex (GtkWidget *widget, gpointer data)
\r
103 TwinWidget* tw = (TwinWidget*)data;
\r
105 GtkEntry* entry = GTK_ENTRY( tw->one );
\r
106 GtkCombo* combo = GTK_COMBO( tw->two );
\r
108 const gchar* tex = gtk_entry_get_text(GTK_ENTRY( combo->entry ));
\r
109 gtk_entry_set_text( entry, tex);
\r
112 /*--------------------------------
\r
113 Data validation Routines
\r
114 ---------------------------------*/
\r
116 bool ValidateTextFloat(const char* pData, char* error_title, float* value)
\r
120 float testNum = (float)atof(pData);
\r
122 if((testNum == 0.0f) && strcmp(pData, "0"))
\r
124 DoMessageBox("Please Enter A Floating Point Number", error_title, MB_OK);
\r
134 DoMessageBox("Please Enter A Floating Point Number", error_title, MB_OK);
\r
138 bool ValidateTextFloatRange(const char* pData, float min, float max, char* error_title, float* value)
\r
140 char error_buffer[256];
\r
141 sprintf(error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max);
\r
145 float testNum = (float)atof(pData);
\r
147 if((testNum < min) || (testNum > max))
\r
149 DoMessageBox(error_buffer, error_title, MB_OK);
\r
159 DoMessageBox(error_buffer, error_title, MB_OK);
\r
163 bool ValidateTextIntRange(const char* pData, int min, int max, char* error_title, int* value)
\r
165 char error_buffer[256];
\r
166 sprintf(error_buffer, "Please Enter An Integer Between %i and %i", min, max);
\r
170 int testNum = atoi(pData);
\r
172 if((testNum < min) || (testNum > max))
\r
174 DoMessageBox(error_buffer, error_title, MB_OK);
\r
184 DoMessageBox(error_buffer, error_title, MB_OK);
\r
188 bool ValidateTextInt(const char* pData, char* error_title, int* value)
\r
192 int testNum = atoi(pData);
\r
194 if((testNum == 0) && strcmp(pData, "0"))
\r
196 DoMessageBox("Please Enter An Integer", error_title, MB_OK);
\r
206 DoMessageBox("Please Enter An Integer", error_title, MB_OK);
\r
210 /*--------------------------------
\r
212 ---------------------------------*/
\r
216 Major clean up of variable names etc required, excluding Mars's ones,
\r
217 which are nicely done :)
\r
221 int DoMessageBox (const char* lpText, const char* lpCaption, guint32 uType)
\r
223 GtkWidget *window, *w, *vbox, *hbox;
\r
224 int mode = (uType & MB_TYPEMASK), ret, loop = 1;
\r
226 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
227 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
\r
228 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
229 gtk_signal_connect (GTK_OBJECT (window), "destroy",
\r
230 GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
231 gtk_window_set_title (GTK_WINDOW (window), lpCaption);
\r
232 gtk_container_border_width (GTK_CONTAINER (window), 10);
\r
233 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
234 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
235 gtk_widget_realize (window);
\r
237 vbox = gtk_vbox_new (FALSE, 10);
\r
238 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
239 gtk_widget_show (vbox);
\r
241 w = gtk_label_new (lpText);
\r
242 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
\r
243 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
\r
244 gtk_widget_show (w);
\r
246 w = gtk_hseparator_new ();
\r
247 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
\r
248 gtk_widget_show (w);
\r
250 hbox = gtk_hbox_new (FALSE, 10);
\r
251 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
252 gtk_widget_show (hbox);
\r
256 w = gtk_button_new_with_label ("Ok");
\r
257 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
258 gtk_signal_connect (GTK_OBJECT (w), "clicked",
\r
259 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
260 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
\r
261 gtk_widget_grab_default (w);
\r
262 gtk_widget_show (w);
\r
265 else if (mode == MB_OKCANCEL)
\r
267 w = gtk_button_new_with_label ("Ok");
\r
268 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
269 gtk_signal_connect (GTK_OBJECT (w), "clicked",
\r
270 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
271 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
\r
272 gtk_widget_grab_default (w);
\r
273 gtk_widget_show (w);
\r
275 w = gtk_button_new_with_label ("Cancel");
\r
276 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
277 gtk_signal_connect (GTK_OBJECT (w), "clicked",
\r
278 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
279 gtk_widget_show (w);
\r
282 else if (mode == MB_YESNOCANCEL)
\r
284 w = gtk_button_new_with_label ("Yes");
\r
285 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
286 gtk_signal_connect (GTK_OBJECT (w), "clicked",
\r
287 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES));
\r
288 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
\r
289 gtk_widget_grab_default (w);
\r
290 gtk_widget_show (w);
\r
292 w = gtk_button_new_with_label ("No");
\r
293 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
294 gtk_signal_connect (GTK_OBJECT (w), "clicked",
\r
295 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDNO));
\r
296 gtk_widget_show (w);
\r
298 w = gtk_button_new_with_label ("Cancel");
\r
299 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
300 gtk_signal_connect (GTK_OBJECT (w), "clicked",
\r
301 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
302 gtk_widget_show (w);
\r
305 else /* if (mode == MB_YESNO) */
\r
307 w = gtk_button_new_with_label ("Yes");
\r
308 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
309 gtk_signal_connect (GTK_OBJECT (w), "clicked",
\r
310 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES));
\r
311 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
\r
312 gtk_widget_grab_default (w);
\r
313 gtk_widget_show (w);
\r
315 w = gtk_button_new_with_label ("No");
\r
316 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
317 gtk_signal_connect (GTK_OBJECT (w), "clicked",
\r
318 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDNO));
\r
319 gtk_widget_show (w);
\r
323 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
324 gtk_widget_show (window);
\r
325 gtk_grab_add (window);
\r
328 gtk_main_iteration ();
\r
330 gtk_grab_remove (window);
\r
331 gtk_widget_destroy (window);
\r
336 int DoIntersectBox (IntersectRS* rs)
\r
338 GtkWidget *window, *w, *vbox, *hbox;
\r
339 GtkWidget *radio1, *radio2;
\r
340 GtkWidget *check1, *check2;
\r
343 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
345 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
346 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
348 gtk_window_set_title (GTK_WINDOW (window), "Intersect");
\r
349 gtk_container_border_width (GTK_CONTAINER (window), 10);
\r
351 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
352 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
354 gtk_widget_realize (window);
\r
358 vbox = gtk_vbox_new (FALSE, 10);
\r
359 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
360 gtk_widget_show (vbox);
\r
364 radio1 = gtk_radio_button_new_with_label(NULL, "Use Whole Map");
\r
365 gtk_box_pack_start (GTK_BOX (vbox), radio1, FALSE, FALSE, 2);
\r
366 gtk_widget_show (radio1);
\r
368 radio2 = gtk_radio_button_new_with_label(((GtkRadioButton*)radio1)->group, "Use Selected Brushes");
\r
369 gtk_box_pack_start (GTK_BOX (vbox), radio2, FALSE, FALSE, 2);
\r
370 gtk_widget_show (radio2);
\r
372 w = gtk_hseparator_new ();
\r
373 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
\r
374 gtk_widget_show (w);
\r
376 check1 = gtk_check_button_new_with_label("Include Detail Brushes");
\r
377 gtk_box_pack_start (GTK_BOX (vbox), check1, FALSE, FALSE, 0);
\r
378 gtk_widget_show (check1);
\r
380 check2 = gtk_check_button_new_with_label("Select Duplicate Brushes Only");
\r
381 gtk_box_pack_start (GTK_BOX (vbox), check2, FALSE, FALSE, 0);
\r
382 gtk_widget_show (check2);
\r
384 hbox = gtk_hbox_new (FALSE, 10);
\r
385 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
386 gtk_widget_show (hbox);
\r
388 // ---- hbox ---- ok/cancel buttons
\r
390 w = gtk_button_new_with_label ("Ok");
\r
391 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
392 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
394 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
\r
395 gtk_widget_grab_default (w);
\r
396 gtk_widget_show (w);
\r
398 w = gtk_button_new_with_label ("Cancel");
\r
399 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
400 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
401 gtk_widget_show (w);
\r
408 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
409 gtk_widget_show (window);
\r
410 gtk_grab_add (window);
\r
413 gtk_main_iteration ();
\r
415 if(gtk_toggle_button_get_active((GtkToggleButton*)radio1))
\r
416 rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP;
\r
417 else if(gtk_toggle_button_get_active((GtkToggleButton*)radio2))
\r
418 rs->nBrushOptions = BRUSH_OPT_SELECTED;
\r
420 rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false;
\r
421 rs->bDuplicateOnly = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false;
\r
423 gtk_grab_remove (window);
\r
424 gtk_widget_destroy (window);
\r
429 int DoPolygonBox (PolygonRS* rs)
\r
431 GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2;
\r
433 GtkWidget *check1, *check2, *check3;
\r
434 GtkWidget *text1, *text2;
\r
438 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
440 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
441 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
443 gtk_window_set_title (GTK_WINDOW (window), "Polygon Builder");
\r
444 gtk_container_border_width (GTK_CONTAINER (window), 10);
\r
446 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
447 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
449 gtk_widget_realize (window);
\r
453 vbox = gtk_vbox_new (FALSE, 10);
\r
454 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
455 gtk_widget_show (vbox);
\r
459 hbox = gtk_hbox_new (FALSE, 10);
\r
460 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
461 gtk_widget_show (hbox);
\r
466 vbox2 = gtk_vbox_new (FALSE, 10);
\r
467 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2);
\r
468 gtk_widget_show (vbox2);
\r
472 hbox2 = gtk_hbox_new (FALSE, 10);
\r
473 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2);
\r
474 gtk_widget_show (hbox2);
\r
478 text1 = gtk_entry_new_with_max_length(256);
\r
479 gtk_entry_set_text((GtkEntry*)text1, "3");
\r
480 gtk_box_pack_start (GTK_BOX (hbox2), text1, FALSE, FALSE, 2);
\r
481 gtk_widget_show (text1);
\r
483 w = gtk_label_new ("Number Of Sides");
\r
484 gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2);
\r
485 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
\r
486 gtk_widget_show (w);
\r
488 // ---- /hbox2 ----
\r
490 hbox2 = gtk_hbox_new (FALSE, 10);
\r
491 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2);
\r
492 gtk_widget_show (hbox2);
\r
496 text2 = gtk_entry_new_with_max_length(256);
\r
497 gtk_entry_set_text((GtkEntry*)text2, "8");
\r
498 gtk_box_pack_start (GTK_BOX (hbox2), text2, FALSE, FALSE, 2);
\r
499 gtk_widget_show (text2);
\r
501 w = gtk_label_new ("Border Width");
\r
502 gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2);
\r
503 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
\r
504 gtk_widget_show (w);
\r
506 // ---- /hbox2 ----
\r
508 // ---- /vbox2 ----
\r
512 vbox2 = gtk_vbox_new (FALSE, 10);
\r
513 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2);
\r
514 gtk_widget_show (vbox2);
\r
518 check1 = gtk_check_button_new_with_label("Use Border");
\r
519 gtk_box_pack_start (GTK_BOX (vbox2), check1, FALSE, FALSE, 0);
\r
520 gtk_widget_show (check1);
\r
523 check2 = gtk_check_button_new_with_label("Inverse Polygon");
\r
524 gtk_box_pack_start (GTK_BOX (vbox2), check2, FALSE, FALSE, 0);
\r
525 gtk_widget_show (check2);
\r
528 check3 = gtk_check_button_new_with_label("Align Top Edge");
\r
529 gtk_box_pack_start (GTK_BOX (vbox2), check3, FALSE, FALSE, 0);
\r
530 gtk_widget_show (check3);
\r
532 // ---- /vbox2 ----
\r
536 hbox = gtk_hbox_new (FALSE, 10);
\r
537 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
538 gtk_widget_show (hbox);
\r
542 w = gtk_button_new_with_label ("Ok");
\r
543 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
544 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
546 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
\r
547 gtk_widget_grab_default (w);
\r
548 gtk_widget_show (w);
\r
550 w = gtk_button_new_with_label ("Cancel");
\r
551 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
552 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
553 gtk_widget_show (w);
\r
560 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
561 gtk_widget_show (window);
\r
562 gtk_grab_add (window);
\r
564 bool dialogError = TRUE;
\r
565 while (dialogError)
\r
569 gtk_main_iteration ();
\r
571 dialogError = FALSE;
\r
575 rs->bUseBorder = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false;
\r
576 rs->bInverse = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false;
\r
577 rs->bAlignTop = gtk_toggle_button_get_active((GtkToggleButton*)check3) ? true : false;
\r
579 if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text1), 3, 32, "Number Of Sides", &rs->nSides))
\r
580 dialogError = TRUE;
\r
584 if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text2), 8, 256, "Border Width", &rs->nBorderWidth))
\r
585 dialogError = TRUE;
\r
590 gtk_grab_remove (window);
\r
591 gtk_widget_destroy (window);
\r
597 // for stair builder stuck as close as i could to the MFC version
\r
598 // obviously feel free to change it at will :)
\r
599 int DoBuildStairsBox(BuildStairsRS* rs)
\r
601 // i made widgets for just about everything ... i think that's what i need to do dunno tho
\r
602 GtkWidget *window, *w, *vbox, *hbox;
\r
603 GtkWidget *textStairHeight, *textRiserTex, *textMainTex;
\r
604 GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value
\r
605 GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle;
\r
606 GtkWidget *checkUseDetail;
\r
607 GSList *radioDirection, *radioStyle;
\r
612 char *text = "Please set a value in the boxes below and press 'OK' to build the stairs";
\r
614 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
\r
616 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
617 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
619 gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" );
\r
621 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
\r
623 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
624 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
626 gtk_widget_realize (window);
\r
629 vbox = gtk_vbox_new( FALSE, 10 );
\r
630 gtk_container_add( GTK_CONTAINER( window ), vbox );
\r
631 gtk_widget_show( vbox );
\r
633 hbox = gtk_hbox_new( FALSE, 10 );
\r
634 gtk_container_add( GTK_CONTAINER( vbox ), hbox );
\r
635 gtk_widget_show( hbox );
\r
637 // dunno if you want this text or not ...
\r
638 w = gtk_label_new( text );
\r
639 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ...
\r
640 gtk_widget_show( w );
\r
642 w = gtk_hseparator_new();
\r
643 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
\r
644 gtk_widget_show( w );
\r
646 // ------------------------- // indenting == good way of keeping track of lines :)
\r
649 hbox = gtk_hbox_new( FALSE, 10 );
\r
650 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
651 gtk_widget_show( hbox );
\r
653 textStairHeight = gtk_entry_new_with_max_length( 256 );
\r
654 gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 );
\r
655 gtk_widget_show( textStairHeight );
\r
657 w = gtk_label_new( "Stair Height" );
\r
658 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
\r
659 gtk_widget_show( w );
\r
661 // ------------------------- //
\r
663 hbox = gtk_hbox_new( FALSE, 10 );
\r
664 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
665 gtk_widget_show( hbox );
\r
667 w = gtk_label_new( "Direction:" );
\r
668 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
\r
669 gtk_widget_show( w );
\r
671 // -------------------------- //
\r
673 hbox = gtk_hbox_new( FALSE, 10 );
\r
674 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
675 gtk_widget_show( hbox );
\r
677 // radio buttons confuse me ...
\r
678 // but this _looks_ right
\r
680 // djbob: actually it looks very nice :), slightly better than the way i did it
\r
681 // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh
\r
683 radioNorth = gtk_radio_button_new_with_label( NULL, "North" );
\r
684 gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 );
\r
685 gtk_widget_show( radioNorth );
\r
687 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) );
\r
689 radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" );
\r
690 gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 );
\r
691 gtk_widget_show( radioSouth );
\r
693 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) );
\r
695 radioEast = gtk_radio_button_new_with_label( radioDirection, "East" );
\r
696 gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 );
\r
697 gtk_widget_show( radioEast );
\r
699 radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) );
\r
701 radioWest = gtk_radio_button_new_with_label( radioDirection, "West" );
\r
702 gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 );
\r
703 gtk_widget_show( radioWest );
\r
705 // --------------------------- //
\r
707 hbox = gtk_hbox_new( FALSE, 10 );
\r
708 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
709 gtk_widget_show( hbox );
\r
711 w = gtk_label_new( "Style:" );
\r
712 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 );
\r
713 gtk_widget_show( w );
\r
715 // --------------------------- //
\r
717 hbox = gtk_hbox_new( FALSE, 10 );
\r
718 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
719 gtk_widget_show( hbox );
\r
721 radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" );
\r
722 gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 );
\r
723 gtk_widget_show( radioOldStyle );
\r
725 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) );
\r
727 radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" );
\r
728 gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 );
\r
729 gtk_widget_show( radioBobStyle );
\r
731 radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) );
\r
733 radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" );
\r
734 gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 );
\r
735 gtk_widget_show( radioCornerStyle );
\r
737 // err, the q3r has an if or something so you need bob style checked before this
\r
738 // is "ungreyed out" but you'll need to do that, as i suck :)
\r
740 // djbob: er.... yeah um, im not at all sure how i'm gonna sort this
\r
741 // djbob: think we need some button callback functions or smuffin
\r
742 // FIXME: actually get around to doing what i suggested!!!!
\r
744 checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" );
\r
745 gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 );
\r
746 gtk_widget_show( checkUseDetail );
\r
748 // --------------------------- //
\r
750 hbox = gtk_hbox_new( FALSE, 10 );
\r
751 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
752 gtk_widget_show( hbox );
\r
754 textMainTex = gtk_entry_new_with_max_length( 512 );
\r
755 gtk_entry_set_text(GTK_ENTRY(textMainTex), rs->mainTexture);
\r
756 gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 );
\r
757 gtk_widget_show( textMainTex );
\r
759 w = gtk_label_new( "Main Texture" );
\r
760 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
\r
761 gtk_widget_show( w );
\r
763 // -------------------------- //
\r
765 hbox = gtk_hbox_new( FALSE, 10 );
\r
766 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
767 gtk_widget_show( hbox );
\r
769 textRiserTex = gtk_entry_new_with_max_length( 512 );
\r
770 gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 );
\r
771 gtk_widget_show( textRiserTex );
\r
773 w = gtk_label_new( "Riser Texture" );
\r
774 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 );
\r
775 gtk_widget_show( w );
\r
777 // -------------------------- //
\r
778 w = gtk_hseparator_new();
\r
779 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
\r
780 gtk_widget_show( w );
\r
782 hbox = gtk_hbox_new( FALSE, 10 );
\r
783 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
784 gtk_widget_show( hbox );
\r
786 w = gtk_button_new_with_label( "OK" );
\r
787 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
\r
788 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
\r
789 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
\r
790 gtk_widget_grab_default( w );
\r
791 gtk_widget_show( w );
\r
793 w = gtk_button_new_with_label( "Cancel" );
\r
794 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
\r
795 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
\r
796 gtk_widget_show( w );
\r
800 // +djbob: need our "little" modal loop mars :P
\r
801 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
802 gtk_widget_show (window);
\r
803 gtk_grab_add (window);
\r
805 bool dialogError = TRUE;
\r
806 while (dialogError)
\r
810 gtk_main_iteration ();
\r
812 dialogError = FALSE;
\r
816 rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)checkUseDetail) ? true : false;
\r
818 strcpy(rs->riserTexture, gtk_entry_get_text((GtkEntry*)textRiserTex));
\r
819 strcpy(rs->mainTexture, gtk_entry_get_text((GtkEntry*)textMainTex));
\r
821 if(gtk_toggle_button_get_active((GtkToggleButton*)radioNorth))
\r
822 rs->direction = MOVE_NORTH;
\r
823 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioSouth))
\r
824 rs->direction = MOVE_SOUTH;
\r
825 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioEast))
\r
826 rs->direction = MOVE_EAST;
\r
827 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioWest))
\r
828 rs->direction = MOVE_WEST;
\r
830 if(!ValidateTextInt(gtk_entry_get_text((GtkEntry*)textStairHeight), "Stair Height", &rs->stairHeight))
\r
831 dialogError = TRUE;
\r
833 if(gtk_toggle_button_get_active((GtkToggleButton*)radioOldStyle))
\r
834 rs->style = STYLE_ORIGINAL;
\r
835 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioBobStyle))
\r
836 rs->style = STYLE_BOB;
\r
837 else if(gtk_toggle_button_get_active((GtkToggleButton*)radioCornerStyle))
\r
838 rs->style = STYLE_CORNER;
\r
842 gtk_grab_remove (window);
\r
843 gtk_widget_destroy (window);
\r
848 // there we go, all done ... on my end at least, not bad for a night's work
\r
851 int DoDoorsBox(DoorRS* rs)
\r
853 GtkWidget *window, *hbox, *vbox, *w;
\r
854 GtkWidget *textFrontBackTex, *textTrimTex;
\r
855 GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV;
\r
856 GtkWidget *comboMain, *comboTrim;
\r
857 GtkWidget *buttonSetMain, *buttonSetTrim;
\r
858 GtkWidget *radioNS, *radioEW;
\r
859 GSList *radioOrientation;
\r
860 TwinWidget tw1, tw2;
\r
865 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
\r
867 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
868 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
870 gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" );
\r
872 gtk_container_border_width( GTK_CONTAINER( window ), 10 );
\r
874 g_object_set_data( G_OBJECT( window ), "loop", &loop );
\r
875 g_object_set_data( G_OBJECT( window ), "ret", &ret );
\r
877 gtk_widget_realize (window);
\r
880 GList *listMainTextures = NULL;
\r
881 GList *listTrimTextures = NULL;
\r
882 LoadGList(GetFilename(buffer, "plugins/bt/door-tex.txt"), &listMainTextures);
\r
883 LoadGList(GetFilename(buffer, "plugins/bt/door-tex-trim.txt"), &listTrimTextures);
\r
885 vbox = gtk_vbox_new( FALSE, 10 );
\r
886 gtk_container_add( GTK_CONTAINER( window ), vbox );
\r
887 gtk_widget_show( vbox );
\r
889 // -------------------------- //
\r
891 hbox = gtk_hbox_new( FALSE, 10 );
\r
892 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
893 gtk_widget_show( hbox );
\r
895 textFrontBackTex = gtk_entry_new_with_max_length( 512 );
\r
896 gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture);
\r
897 gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 );
\r
898 gtk_widget_show( textFrontBackTex );
\r
900 w = gtk_label_new( "Door Front/Back Texture" );
\r
901 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
902 gtk_widget_show( w );
\r
904 // ------------------------ //
\r
906 hbox = gtk_hbox_new( FALSE, 10 );
\r
907 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
908 gtk_widget_show( hbox );
\r
910 textTrimTex = gtk_entry_new_with_max_length( 512 );
\r
911 gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 );
\r
912 gtk_widget_show( textTrimTex );
\r
914 w = gtk_label_new( "Door Trim Texture" );
\r
915 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
916 gtk_widget_show( w );
\r
918 // ----------------------- //
\r
920 hbox = gtk_hbox_new( FALSE, 10 );
\r
921 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
922 gtk_widget_show( hbox );
\r
924 // sp: horizontally ????
\r
925 // djbob: yes mars, u can spell :]
\r
926 checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" );
\r
927 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE);
\r
928 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 );
\r
929 gtk_widget_show( checkScaleMainH );
\r
931 checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" );
\r
932 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE);
\r
933 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 );
\r
934 gtk_widget_show( checkScaleTrimH );
\r
936 // ---------------------- //
\r
938 hbox = gtk_hbox_new( FALSE, 10 );
\r
939 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
940 gtk_widget_show( hbox );
\r
942 checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" );
\r
943 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE);
\r
944 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 );
\r
945 gtk_widget_show( checkScaleMainV );
\r
947 checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" );
\r
948 gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 );
\r
949 gtk_widget_show( checkScaleTrimV );
\r
951 // --------------------- //
\r
953 hbox = gtk_hbox_new( FALSE, 10 );
\r
954 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
955 gtk_widget_show( hbox );
\r
957 // djbob: lists added
\r
959 comboMain = gtk_combo_new();
\r
960 gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 );
\r
961 gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures );
\r
962 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
\r
963 gtk_widget_show( comboMain );
\r
965 tw1.one = textFrontBackTex;
\r
966 tw1.two = comboMain;
\r
968 buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" );
\r
969 gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 );
\r
970 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 );
\r
971 gtk_widget_show( buttonSetMain );
\r
973 // ------------------- //
\r
975 hbox = gtk_hbox_new( FALSE, 10 );
\r
976 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
977 gtk_widget_show( hbox );
\r
979 comboTrim = gtk_combo_new();
\r
980 gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 );
\r
981 gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures );
\r
982 gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 );
\r
983 gtk_widget_show( comboTrim );
\r
985 tw2.one = textTrimTex;
\r
986 tw2.two = comboTrim;
\r
988 buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" );
\r
989 gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 );
\r
990 gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 );
\r
991 gtk_widget_show( buttonSetTrim );
\r
993 // ------------------ //
\r
995 hbox = gtk_hbox_new( FALSE, 10 );
\r
996 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
997 gtk_widget_show( hbox );
\r
999 w = gtk_label_new( "Orientation" );
\r
1000 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1001 gtk_widget_show( w );
\r
1003 // argh more radio buttons!
\r
1004 radioNS = gtk_radio_button_new_with_label( NULL, "North - South" );
\r
1005 gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 );
\r
1006 gtk_widget_show( radioNS );
\r
1008 radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) );
\r
1010 radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" );
\r
1011 gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 );
\r
1012 gtk_widget_show( radioEW );
\r
1014 // ----------------- //
\r
1016 w = gtk_hseparator_new();
\r
1017 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
\r
1018 gtk_widget_show( w );
\r
1020 // ----------------- //
\r
1022 hbox = gtk_hbox_new( FALSE, 10 );
\r
1023 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1024 gtk_widget_show( hbox );
\r
1026 w = gtk_button_new_with_label( "OK" );
\r
1027 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
\r
1028 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
\r
1029 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
\r
1030 gtk_widget_grab_default( w );
\r
1031 gtk_widget_show( w );
\r
1033 w = gtk_button_new_with_label( "Cancel" );
\r
1034 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
\r
1035 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
\r
1036 gtk_widget_show( w );
\r
1039 // ----------------- //
\r
1042 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
1043 gtk_widget_show (window);
\r
1044 gtk_grab_add (window);
\r
1047 gtk_main_iteration ();
\r
1049 strcpy(rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ));
\r
1050 strcpy(rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ));
\r
1052 rs->bScaleMainH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainH)) ? true : false;
\r
1053 rs->bScaleMainV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainV)) ? true : false;
\r
1054 rs->bScaleTrimH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimH)) ? true : false;
\r
1055 rs->bScaleTrimV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimV)) ? true : false;
\r
1057 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioNS)))
\r
1058 rs->nOrientation = DIRECTION_NS;
\r
1059 else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioEW)))
\r
1060 rs->nOrientation = DIRECTION_EW;
\r
1062 gtk_grab_remove (window);
\r
1063 gtk_widget_destroy (window);
\r
1069 int DoPathPlotterBox(PathPlotterRS* rs)
\r
1071 GtkWidget *window, *w, *vbox, *hbox;
\r
1073 GtkWidget *text1, *text2, *text3;
\r
1074 GtkWidget *check1, *check2;
\r
1076 int ret, loop = 1;
\r
1078 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
1080 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
1081 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
1083 gtk_window_set_title (GTK_WINDOW (window), "Texture Reset");
\r
1084 gtk_container_border_width (GTK_CONTAINER (window), 10);
\r
1086 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
1087 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
1089 gtk_widget_realize (window);
\r
1093 vbox = gtk_vbox_new (FALSE, 10);
\r
1094 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
1095 gtk_widget_show (vbox);
\r
1099 hbox = gtk_hbox_new (FALSE, 10);
\r
1100 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
1101 gtk_widget_show (hbox);
\r
1105 text1 = gtk_entry_new_with_max_length(256);
\r
1106 gtk_entry_set_text((GtkEntry*)text1, "25");
\r
1107 gtk_box_pack_start (GTK_BOX (hbox), text1, FALSE, FALSE, 2);
\r
1108 gtk_widget_show (text1);
\r
1110 w = gtk_label_new ("Number Of Points");
\r
1111 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
\r
1112 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
\r
1113 gtk_widget_show (w);
\r
1115 // ---- /hbox ----
\r
1117 hbox = gtk_hbox_new (FALSE, 10);
\r
1118 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
1119 gtk_widget_show (hbox);
\r
1123 text2 = gtk_entry_new_with_max_length(256);
\r
1124 gtk_entry_set_text((GtkEntry*)text2, "3");
\r
1125 gtk_box_pack_start (GTK_BOX (hbox), text2, FALSE, FALSE, 2);
\r
1126 gtk_widget_show (text2);
\r
1128 w = gtk_label_new ("Multipler");
\r
1129 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
\r
1130 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
\r
1131 gtk_widget_show (w);
\r
1133 // ---- /hbox ----
\r
1135 w = gtk_label_new ("Path Distance = dist(start -> apex) * multiplier");
\r
1136 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
\r
1137 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
\r
1138 gtk_widget_show (w);
\r
1140 hbox = gtk_hbox_new (FALSE, 10);
\r
1141 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
1142 gtk_widget_show (hbox);
\r
1146 text3 = gtk_entry_new_with_max_length(256);
\r
1147 gtk_entry_set_text((GtkEntry*)text3, "-800");
\r
1148 gtk_box_pack_start (GTK_BOX (hbox), text3, FALSE, FALSE, 2);
\r
1149 gtk_widget_show (text3);
\r
1151 w = gtk_label_new ("Gravity");
\r
1152 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
\r
1153 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
\r
1154 gtk_widget_show (w);
\r
1156 // ---- /hbox ----
\r
1158 w = gtk_hseparator_new();
\r
1159 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
\r
1160 gtk_widget_show( w );
\r
1162 check1 = gtk_check_button_new_with_label( "No Dynamic Update" );
\r
1163 gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 );
\r
1164 gtk_widget_show( check1 );
\r
1166 check2 = gtk_check_button_new_with_label( "Show Bounding Lines" );
\r
1167 gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 );
\r
1168 gtk_widget_show( check2 );
\r
1170 // ---- /vbox ----
\r
1173 // ----------------- //
\r
1175 w = gtk_hseparator_new();
\r
1176 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
\r
1177 gtk_widget_show( w );
\r
1179 // ----------------- //
\r
1181 hbox = gtk_hbox_new( FALSE, 10 );
\r
1182 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1183 gtk_widget_show( hbox );
\r
1185 w = gtk_button_new_with_label( "Enable" );
\r
1186 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
\r
1187 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) );
\r
1188 gtk_widget_show( w );
\r
1190 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
\r
1191 gtk_widget_grab_default( w );
\r
1193 w = gtk_button_new_with_label( "Disable" );
\r
1194 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0);
\r
1195 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDNO ) );
\r
1196 gtk_widget_show( w );
\r
1198 w = gtk_button_new_with_label( "Cancel" );
\r
1199 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
\r
1200 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
\r
1201 gtk_widget_show( w );
\r
1205 // ----------------- //
\r
1207 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
1208 gtk_widget_show (window);
\r
1209 gtk_grab_add (window);
\r
1211 bool dialogError = TRUE;
\r
1212 while (dialogError)
\r
1216 gtk_main_iteration ();
\r
1218 dialogError = FALSE;
\r
1222 if(!ValidateTextIntRange(gtk_entry_get_text(GTK_ENTRY(text1)), 1, 200, "Number Of Points", &rs->nPoints))
\r
1223 dialogError = TRUE;
\r
1225 if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text2)), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier))
\r
1226 dialogError = TRUE;
\r
1228 if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text3)), -10000.0f, -1.0f, "Gravity", &rs->fGravity))
\r
1229 dialogError = TRUE;
\r
1231 rs->bNoUpdate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check1)) ? true : false;
\r
1232 rs->bShowExtra = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check2)) ? true : false;
\r
1236 gtk_grab_remove (window);
\r
1237 gtk_widget_destroy (window);
\r
1242 int DoCTFColourChangeBox ()
\r
1244 GtkWidget *window, *w, *vbox, *hbox;
\r
1245 int ret, loop = 1;
\r
1247 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
1249 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
1250 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
1252 gtk_window_set_title (GTK_WINDOW (window), "CTF Colour Changer");
\r
1253 gtk_container_border_width (GTK_CONTAINER (window), 10);
\r
1255 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
1256 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
1258 gtk_widget_realize (window);
\r
1262 vbox = gtk_vbox_new (FALSE, 10);
\r
1263 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
1264 gtk_widget_show (vbox);
\r
1268 hbox = gtk_hbox_new( FALSE, 10 );
\r
1269 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
\r
1270 gtk_widget_show( hbox );
\r
1272 // ---- hbox ---- ok/cancel buttons
\r
1274 w = gtk_button_new_with_label ("Red->Blue");
\r
1275 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
1276 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
1278 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
\r
1279 gtk_widget_grab_default (w);
\r
1280 gtk_widget_show (w);
\r
1282 w = gtk_button_new_with_label ("Blue->Red");
\r
1283 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
1284 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES));
\r
1285 gtk_widget_show (w);
\r
1287 w = gtk_button_new_with_label ("Cancel");
\r
1288 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
1289 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
1290 gtk_widget_show (w);
\r
1293 // ---- /hbox ----
\r
1295 // ---- /vbox ----
\r
1297 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
1298 gtk_widget_show (window);
\r
1299 gtk_grab_add (window);
\r
1302 gtk_main_iteration ();
\r
1304 gtk_grab_remove (window);
\r
1305 gtk_widget_destroy (window);
\r
1310 int DoResetTextureBox (ResetTextureRS* rs)
\r
1314 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
\r
1316 int ret, loop = 1;
\r
1318 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
1320 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
1321 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
1323 gtk_window_set_title (GTK_WINDOW (window), "Texture Reset");
\r
1324 gtk_container_border_width (GTK_CONTAINER (window), 10);
\r
1326 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
1327 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
1329 gtk_widget_realize (window);
\r
1331 vbox = gtk_vbox_new (FALSE, 10);
\r
1332 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
1333 gtk_widget_show (vbox);
\r
1337 hbox = gtk_hbox_new (FALSE, 10);
\r
1338 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
1339 gtk_widget_show (hbox);
\r
1343 texSelected = "Currently Selected Face: ";
\r
1344 if(g_SelectedFaceTable.m_pfnGetSelectedFaceCount() == 1) {
\r
1345 texSelected += GetCurrentTexture();
\r
1348 w = gtk_label_new (texSelected);
\r
1349 gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2);
\r
1350 gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
\r
1351 gtk_widget_show (w);
\r
1353 // ---- /hbox ----
\r
1355 frame = gtk_frame_new ("Reset Texture Names");
\r
1356 gtk_widget_show (frame);
\r
1357 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
\r
1359 table = gtk_table_new (2, 3, TRUE);
\r
1360 gtk_widget_show (table);
\r
1361 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1362 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1363 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1364 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1366 // ---- frame ----
\r
1368 dlgTexReset.cbTexChange = gtk_check_button_new_with_label("Enabled");
\r
1369 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbTexChange), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
\r
1370 gtk_widget_show (dlgTexReset.cbTexChange);
\r
1371 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbTexChange, 0, 1, 0, 1,
\r
1372 (GtkAttachOptions) (GTK_FILL),
\r
1373 (GtkAttachOptions) (0), 0, 0);
\r
1375 w = gtk_label_new ("Old Name: ");
\r
1376 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
\r
1377 (GtkAttachOptions) (GTK_FILL),
\r
1378 (GtkAttachOptions) (0), 0, 0);
\r
1379 gtk_widget_show (w);
\r
1381 dlgTexReset.editTexOld = gtk_entry_new_with_max_length(256);
\r
1382 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexOld), rs->textureName);
\r
1383 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexOld, 2, 3, 0, 1,
\r
1384 (GtkAttachOptions) (GTK_FILL),
\r
1385 (GtkAttachOptions) (0), 0, 0);
\r
1386 gtk_widget_show (dlgTexReset.editTexOld);
\r
1388 w = gtk_label_new ("New Name: ");
\r
1389 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,
\r
1390 (GtkAttachOptions) (GTK_FILL),
\r
1391 (GtkAttachOptions) (0), 0, 0);
\r
1392 gtk_widget_show (w);
\r
1394 dlgTexReset.editTexNew = gtk_entry_new_with_max_length(256);
\r
1395 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexNew), rs->textureName);
\r
1396 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexNew, 2, 3, 1, 2,
\r
1397 (GtkAttachOptions) (GTK_FILL),
\r
1398 (GtkAttachOptions) (0), 0, 0);
\r
1399 gtk_widget_show (dlgTexReset.editTexNew);
\r
1401 // ---- /frame ----
\r
1403 frame = gtk_frame_new ("Reset Scales");
\r
1404 gtk_widget_show (frame);
\r
1405 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
\r
1407 table = gtk_table_new (2, 3, TRUE);
\r
1408 gtk_widget_show (table);
\r
1409 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1410 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1411 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1412 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1414 // ---- frame ----
\r
1416 dlgTexReset.cbScaleHor = gtk_check_button_new_with_label("Enabled");
\r
1417 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
\r
1418 gtk_widget_show (dlgTexReset.cbScaleHor);
\r
1419 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleHor, 0, 1, 0, 1,
\r
1420 (GtkAttachOptions) (GTK_FILL),
\r
1421 (GtkAttachOptions) (0), 0, 0);
\r
1423 w = gtk_label_new ("New Horizontal Scale: ");
\r
1424 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
\r
1425 (GtkAttachOptions) (GTK_FILL),
\r
1426 (GtkAttachOptions) (0), 0, 0);
\r
1427 gtk_widget_show (w);
\r
1429 dlgTexReset.editScaleHor = gtk_entry_new_with_max_length(256);
\r
1430 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleHor), "0.5");
\r
1431 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleHor, 2, 3, 0, 1,
\r
1432 (GtkAttachOptions) (GTK_FILL),
\r
1433 (GtkAttachOptions) (0), 0, 0);
\r
1434 gtk_widget_show (dlgTexReset.editScaleHor);
\r
1437 dlgTexReset.cbScaleVert = gtk_check_button_new_with_label("Enabled");
\r
1438 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
\r
1439 gtk_widget_show (dlgTexReset.cbScaleVert);
\r
1440 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleVert, 0, 1, 1, 2,
\r
1441 (GtkAttachOptions) (GTK_FILL),
\r
1442 (GtkAttachOptions) (0), 0, 0);
\r
1444 w = gtk_label_new ("New Vertical Scale: ");
\r
1445 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,
\r
1446 (GtkAttachOptions) (GTK_FILL),
\r
1447 (GtkAttachOptions) (0), 0, 0);
\r
1448 gtk_widget_show (w);
\r
1450 dlgTexReset.editScaleVert = gtk_entry_new_with_max_length(256);
\r
1451 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleVert), "0.5");
\r
1452 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleVert, 2, 3, 1, 2,
\r
1453 (GtkAttachOptions) (GTK_FILL),
\r
1454 (GtkAttachOptions) (0), 0, 0);
\r
1455 gtk_widget_show (dlgTexReset.editScaleVert);
\r
1457 // ---- /frame ----
\r
1459 frame = gtk_frame_new ("Reset Shift");
\r
1460 gtk_widget_show (frame);
\r
1461 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
\r
1463 table = gtk_table_new (2, 3, TRUE);
\r
1464 gtk_widget_show (table);
\r
1465 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1466 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1467 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1468 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1470 // ---- frame ----
\r
1472 dlgTexReset.cbShiftHor = gtk_check_button_new_with_label("Enabled");
\r
1473 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
\r
1474 gtk_widget_show (dlgTexReset.cbShiftHor);
\r
1475 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftHor, 0, 1, 0, 1,
\r
1476 (GtkAttachOptions) (GTK_FILL),
\r
1477 (GtkAttachOptions) (0), 0, 0);
\r
1479 w = gtk_label_new ("New Horizontal Shift: ");
\r
1480 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
\r
1481 (GtkAttachOptions) (GTK_FILL),
\r
1482 (GtkAttachOptions) (0), 0, 0);
\r
1483 gtk_widget_show (w);
\r
1485 dlgTexReset.editShiftHor = gtk_entry_new_with_max_length(256);
\r
1486 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftHor), "0");
\r
1487 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftHor, 2, 3, 0, 1,
\r
1488 (GtkAttachOptions) (GTK_FILL),
\r
1489 (GtkAttachOptions) (0), 0, 0);
\r
1490 gtk_widget_show (dlgTexReset.editShiftHor);
\r
1493 dlgTexReset.cbShiftVert = gtk_check_button_new_with_label("Enabled");
\r
1494 gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL);
\r
1495 gtk_widget_show (dlgTexReset.cbShiftVert);
\r
1496 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftVert, 0, 1, 1, 2,
\r
1497 (GtkAttachOptions) (GTK_FILL),
\r
1498 (GtkAttachOptions) (0), 0, 0);
\r
1500 w = gtk_label_new ("New Vertical Shift: ");
\r
1501 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2,
\r
1502 (GtkAttachOptions) (GTK_FILL),
\r
1503 (GtkAttachOptions) (0), 0, 0);
\r
1504 gtk_widget_show (w);
\r
1506 dlgTexReset.editShiftVert = gtk_entry_new_with_max_length(256);
\r
1507 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftVert), "0");
\r
1508 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftVert, 2, 3, 1, 2,
\r
1509 (GtkAttachOptions) (GTK_FILL),
\r
1510 (GtkAttachOptions) (0), 0, 0);
\r
1511 gtk_widget_show (dlgTexReset.editShiftVert);
\r
1513 // ---- /frame ----
\r
1515 frame = gtk_frame_new ("Reset Rotation");
\r
1516 gtk_widget_show (frame);
\r
1517 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
\r
1519 table = gtk_table_new (1, 3, TRUE);
\r
1520 gtk_widget_show (table);
\r
1521 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1522 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1523 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1524 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1526 // ---- frame ----
\r
1528 dlgTexReset.cbRotation = gtk_check_button_new_with_label("Enabled");
\r
1529 gtk_widget_show (dlgTexReset.cbRotation);
\r
1530 gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbRotation, 0, 1, 0, 1,
\r
1531 (GtkAttachOptions) (GTK_FILL),
\r
1532 (GtkAttachOptions) (0), 0, 0);
\r
1534 w = gtk_label_new ("New Rotation Value: ");
\r
1535 gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1,
\r
1536 (GtkAttachOptions) (GTK_FILL),
\r
1537 (GtkAttachOptions) (0), 0, 0);
\r
1538 gtk_widget_show (w);
\r
1540 dlgTexReset.editRotation = gtk_entry_new_with_max_length(256);
\r
1541 gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editRotation), "0");
\r
1542 gtk_table_attach (GTK_TABLE (table), dlgTexReset.editRotation, 2, 3, 0, 1,
\r
1543 (GtkAttachOptions) (GTK_FILL),
\r
1544 (GtkAttachOptions) (0), 0, 0);
\r
1545 gtk_widget_show (dlgTexReset.editRotation);
\r
1547 // ---- /frame ----
\r
1549 hbox = gtk_hbox_new (FALSE, 10);
\r
1550 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
1551 gtk_widget_show (hbox);
\r
1555 w = gtk_button_new_with_label ("Use Selected Brushes");
\r
1556 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
1557 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
1559 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
\r
1560 gtk_widget_grab_default (w);
\r
1561 gtk_widget_show (w);
\r
1563 w = gtk_button_new_with_label ("Use All Brushes");
\r
1564 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
1565 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES));
\r
1566 gtk_widget_show (w);
\r
1568 w = gtk_button_new_with_label ("Cancel");
\r
1569 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
1570 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
1571 gtk_widget_show (w);
\r
1574 // ---- /hbox ----
\r
1576 // ---- /vbox ----
\r
1578 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
1579 gtk_widget_show (window);
\r
1580 gtk_grab_add (window);
\r
1582 Update_TextureReseter();
\r
1584 bool dialogError = TRUE;
\r
1585 while (dialogError)
\r
1589 gtk_main_iteration ();
\r
1591 dialogError = FALSE;
\r
1593 if(ret != IDCANCEL)
\r
1595 rs->bResetRotation = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ));
\r
1596 if(rs->bResetRotation)
\r
1597 if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editRotation)), "Rotation", &rs->rotation))
\r
1598 dialogError = TRUE;
\r
1600 rs->bResetScale[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ));
\r
1601 if(rs->bResetScale[0])
\r
1602 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleHor)), "Horizontal Scale", &rs->fScale[0]))
\r
1603 dialogError = TRUE;
\r
1605 rs->bResetScale[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ));
\r
1606 if(rs->bResetScale[1])
\r
1607 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleVert)), "Vertical Scale", &rs->fScale[1]))
\r
1608 dialogError = TRUE;
\r
1610 rs->bResetShift[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ));
\r
1611 if(rs->bResetShift[0])
\r
1612 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftHor)), "Horizontal Shift", &rs->fShift[0]))
\r
1613 dialogError = TRUE;
\r
1615 rs->bResetShift[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ));
\r
1616 if(rs->bResetShift[1])
\r
1617 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftVert)), "Vertical Shift", &rs->fShift[1]))
\r
1618 dialogError = TRUE;
\r
1620 rs->bResetTextureName = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ));
\r
1621 if(rs->bResetTextureName)
\r
1623 strcpy(rs->textureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexOld )));
\r
1624 strcpy(rs->newTextureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexNew )));
\r
1629 gtk_grab_remove (window);
\r
1630 gtk_widget_destroy (window);
\r
1635 int DoTrainThingBox (TrainThingRS* rs)
\r
1639 GtkWidget *window, *w, *vbox, *hbox, *frame, *table;
\r
1641 GtkWidget *radiusX, *radiusY;
\r
1642 GtkWidget *angleStart, *angleEnd;
\r
1643 GtkWidget *heightStart, *heightEnd;
\r
1644 GtkWidget *numPoints;
\r
1646 int ret, loop = 1;
\r
1648 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
1650 gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
1651 gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
1653 gtk_window_set_title (GTK_WINDOW (window), "Train Thing");
\r
1654 gtk_container_border_width (GTK_CONTAINER (window), 10);
\r
1656 gtk_object_set_data (GTK_OBJECT (window), "loop", &loop);
\r
1657 gtk_object_set_data (GTK_OBJECT (window), "ret", &ret);
\r
1659 gtk_widget_realize (window);
\r
1661 vbox = gtk_vbox_new (FALSE, 10);
\r
1662 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
1663 gtk_widget_show (vbox);
\r
1667 hbox = gtk_hbox_new (FALSE, 10);
\r
1668 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
1669 gtk_widget_show (hbox);
\r
1671 // ---- /hbox ----
\r
1673 frame = gtk_frame_new ("Radii");
\r
1674 gtk_widget_show (frame);
\r
1675 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
\r
1677 table = gtk_table_new (2, 3, TRUE);
\r
1678 gtk_widget_show (table);
\r
1679 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1680 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1681 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1682 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1684 // ---- frame ----
\r
1686 w = gtk_label_new ("X: ");
\r
1687 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
\r
1688 (GtkAttachOptions) (GTK_FILL),
\r
1689 (GtkAttachOptions) (0), 0, 0);
\r
1690 gtk_widget_show (w);
\r
1692 radiusX = gtk_entry_new_with_max_length(256);
\r
1693 gtk_entry_set_text(GTK_ENTRY(radiusX), "100");
\r
1694 gtk_table_attach (GTK_TABLE (table), radiusX, 1, 2, 0, 1,
\r
1695 (GtkAttachOptions) (GTK_FILL),
\r
1696 (GtkAttachOptions) (0), 0, 0);
\r
1697 gtk_widget_show (radiusX);
\r
1701 w = gtk_label_new ("Y: ");
\r
1702 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,
\r
1703 (GtkAttachOptions) (GTK_FILL),
\r
1704 (GtkAttachOptions) (0), 0, 0);
\r
1705 gtk_widget_show (w);
\r
1707 radiusY = gtk_entry_new_with_max_length(256);
\r
1708 gtk_entry_set_text(GTK_ENTRY(radiusY), "100");
\r
1709 gtk_table_attach (GTK_TABLE (table), radiusY, 1, 2, 1, 2,
\r
1710 (GtkAttachOptions) (GTK_FILL),
\r
1711 (GtkAttachOptions) (0), 0, 0);
\r
1712 gtk_widget_show (radiusY);
\r
1716 frame = gtk_frame_new ("Angles");
\r
1717 gtk_widget_show (frame);
\r
1718 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
\r
1720 table = gtk_table_new (2, 3, TRUE);
\r
1721 gtk_widget_show (table);
\r
1722 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1723 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1724 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1725 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1727 // ---- frame ----
\r
1729 w = gtk_label_new ("Start: ");
\r
1730 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
\r
1731 (GtkAttachOptions) (GTK_FILL),
\r
1732 (GtkAttachOptions) (0), 0, 0);
\r
1733 gtk_widget_show (w);
\r
1735 angleStart = gtk_entry_new_with_max_length(256);
\r
1736 gtk_entry_set_text(GTK_ENTRY(angleStart), "0");
\r
1737 gtk_table_attach (GTK_TABLE (table), angleStart, 1, 2, 0, 1,
\r
1738 (GtkAttachOptions) (GTK_FILL),
\r
1739 (GtkAttachOptions) (0), 0, 0);
\r
1740 gtk_widget_show (angleStart);
\r
1744 w = gtk_label_new ("End: ");
\r
1745 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,
\r
1746 (GtkAttachOptions) (GTK_FILL),
\r
1747 (GtkAttachOptions) (0), 0, 0);
\r
1748 gtk_widget_show (w);
\r
1750 angleEnd = gtk_entry_new_with_max_length(256);
\r
1751 gtk_entry_set_text(GTK_ENTRY(angleEnd), "90");
\r
1752 gtk_table_attach (GTK_TABLE (table), angleEnd, 1, 2, 1, 2,
\r
1753 (GtkAttachOptions) (GTK_FILL),
\r
1754 (GtkAttachOptions) (0), 0, 0);
\r
1755 gtk_widget_show (angleEnd);
\r
1758 frame = gtk_frame_new ("Height");
\r
1759 gtk_widget_show (frame);
\r
1760 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
\r
1762 table = gtk_table_new (2, 3, TRUE);
\r
1763 gtk_widget_show (table);
\r
1764 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1765 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1766 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1767 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1769 // ---- frame ----
\r
1771 w = gtk_label_new ("Start: ");
\r
1772 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
\r
1773 (GtkAttachOptions) (GTK_FILL),
\r
1774 (GtkAttachOptions) (0), 0, 0);
\r
1775 gtk_widget_show (w);
\r
1777 heightStart = gtk_entry_new_with_max_length(256);
\r
1778 gtk_entry_set_text(GTK_ENTRY(heightStart), "0");
\r
1779 gtk_table_attach (GTK_TABLE (table), heightStart, 1, 2, 0, 1,
\r
1780 (GtkAttachOptions) (GTK_FILL),
\r
1781 (GtkAttachOptions) (0), 0, 0);
\r
1782 gtk_widget_show (heightStart);
\r
1786 w = gtk_label_new ("End: ");
\r
1787 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2,
\r
1788 (GtkAttachOptions) (GTK_FILL),
\r
1789 (GtkAttachOptions) (0), 0, 0);
\r
1790 gtk_widget_show (w);
\r
1792 heightEnd = gtk_entry_new_with_max_length(256);
\r
1793 gtk_entry_set_text(GTK_ENTRY(heightEnd), "0");
\r
1794 gtk_table_attach (GTK_TABLE (table), heightEnd, 1, 2, 1, 2,
\r
1795 (GtkAttachOptions) (GTK_FILL),
\r
1796 (GtkAttachOptions) (0), 0, 0);
\r
1797 gtk_widget_show (heightEnd);
\r
1801 frame = gtk_frame_new ("Points");
\r
1802 gtk_widget_show (frame);
\r
1803 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
\r
1805 table = gtk_table_new (2, 3, TRUE);
\r
1806 gtk_widget_show (table);
\r
1807 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1808 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1809 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1810 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1812 // ---- frame ----
\r
1814 w = gtk_label_new ("Number: ");
\r
1815 gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
\r
1816 (GtkAttachOptions) (GTK_FILL),
\r
1817 (GtkAttachOptions) (0), 0, 0);
\r
1818 gtk_widget_show (w);
\r
1820 numPoints = gtk_entry_new_with_max_length(256);
\r
1821 gtk_entry_set_text(GTK_ENTRY(numPoints), "0");
\r
1822 gtk_table_attach (GTK_TABLE (table), numPoints, 1, 2, 0, 1,
\r
1823 (GtkAttachOptions) (GTK_FILL),
\r
1824 (GtkAttachOptions) (0), 0, 0);
\r
1825 gtk_widget_show (numPoints);
\r
1828 hbox = gtk_hbox_new (FALSE, 10);
\r
1829 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
\r
1830 gtk_widget_show (hbox);
\r
1834 w = gtk_button_new_with_label ("Ok");
\r
1835 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
1836 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
1838 GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
\r
1839 gtk_widget_grab_default (w);
\r
1840 gtk_widget_show (w);
\r
1842 w = gtk_button_new_with_label ("Cancel");
\r
1843 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
1844 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
1845 gtk_widget_show (w);
\r
1848 // ---- /hbox ----
\r
1852 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
1853 gtk_widget_show (window);
\r
1854 gtk_grab_add (window);
\r
1856 bool dialogError = TRUE;
\r
1857 while (dialogError)
\r
1861 gtk_main_iteration ();
\r
1863 dialogError = FALSE;
\r
1865 if(ret != IDCANCEL)
\r
1867 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusX)), "Radius (X)", &rs->fRadiusX))
\r
1868 dialogError = TRUE;
\r
1870 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusY)), "Radius (Y)", &rs->fRadiusY))
\r
1871 dialogError = TRUE;
\r
1873 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleStart)), "Angle (Start)", &rs->fStartAngle))
\r
1874 dialogError = TRUE;
\r
1876 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleEnd)), "Angle (End)", &rs->fEndAngle))
\r
1877 dialogError = TRUE;
\r
1879 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightStart)), "Height (Start)", &rs->fStartHeight))
\r
1880 dialogError = TRUE;
\r
1882 if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightEnd)), "Height (End)", &rs->fEndHeight))
\r
1883 dialogError = TRUE;
\r
1885 if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(numPoints)), "Num Points", &rs->iNumPoints))
\r
1886 dialogError = TRUE;
\r
1890 gtk_grab_remove (window);
\r
1891 gtk_widget_destroy (window);
\r