2 PrtView plugin for GtkRadiant
\r
3 Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com
\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
21 // PrtView dialogs done with GTK+
\r
27 // =============================================================================
\r
30 static void dialog_button_callback (GtkWidget *widget, gpointer data)
\r
35 parent = gtk_widget_get_toplevel (widget);
\r
36 loop = (int*)g_object_get_data (G_OBJECT (parent), "loop");
\r
37 ret = (int*)g_object_get_data (G_OBJECT (parent), "ret");
\r
43 static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data)
\r
47 gtk_widget_hide (widget);
\r
48 loop = (int*)g_object_get_data (G_OBJECT (widget), "loop");
\r
54 static void file_sel_callback (GtkWidget *widget, gpointer data)
\r
60 parent = gtk_widget_get_toplevel (widget);
\r
61 loop = (int*)g_object_get_data (G_OBJECT (parent), "loop");
\r
62 filename = (char**)g_object_get_data (G_OBJECT (parent), "filename");
\r
65 if ((int)data == IDOK)
\r
66 *filename = g_strdup (gtk_file_selection_get_filename (GTK_FILE_SELECTION (parent)));
\r
69 static void change_clicked (GtkWidget *widget, gpointer data)
\r
71 GtkWidget* file_sel;
\r
72 char* filename = NULL;
\r
75 file_sel = gtk_file_selection_new ("Locate portal (.prt) file");
\r
76 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->ok_button), "clicked",
\r
77 GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDOK));
\r
78 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->cancel_button), "clicked",
\r
79 GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDCANCEL));
\r
80 gtk_signal_connect (GTK_OBJECT (file_sel), "delete_event",
\r
81 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
82 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (file_sel));
\r
84 g_object_set_data (G_OBJECT (file_sel), "loop", &loop);
\r
85 g_object_set_data (G_OBJECT (file_sel), "filename", &filename);
\r
86 gtk_file_selection_set_filename (GTK_FILE_SELECTION (file_sel), portals.fn);
\r
88 gtk_grab_add (file_sel);
\r
89 gtk_widget_show (file_sel);
\r
92 gtk_main_iteration ();
\r
94 gtk_grab_remove (file_sel);
\r
95 gtk_widget_destroy (file_sel);
\r
97 if (filename != NULL)
\r
99 strcpy (portals.fn, filename);
\r
100 gtk_entry_set_text (GTK_ENTRY (data), filename);
\r
105 // =============================================================================
\r
106 // LoadPortalFile dialog
\r
108 int DoLoadPortalFileDialog ()
\r
110 GtkWidget *dlg, *vbox, *hbox, *button, *entry, *check2d, *check3d;
\r
111 int loop = 1, ret = IDCANCEL;
\r
113 dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
114 gtk_window_set_title (GTK_WINDOW (dlg), "Load .prt");
\r
115 gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
\r
116 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
117 gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
\r
118 GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
119 g_object_set_data (G_OBJECT (dlg), "loop", &loop);
\r
120 g_object_set_data (G_OBJECT (dlg), "ret", &ret);
\r
122 vbox = gtk_vbox_new (FALSE, 5);
\r
123 gtk_widget_show (vbox);
\r
124 gtk_container_add (GTK_CONTAINER (dlg), vbox);
\r
125 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
\r
127 entry = gtk_entry_new ();
\r
128 gtk_widget_show (entry);
\r
129 gtk_entry_set_editable (GTK_ENTRY (entry), FALSE);
\r
130 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
\r
132 hbox = gtk_hbox_new (FALSE, 5);
\r
133 gtk_widget_show (hbox);
\r
134 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
\r
136 check3d = gtk_check_button_new_with_label ("Show 3D");
\r
137 gtk_widget_show (check3d);
\r
138 gtk_box_pack_start (GTK_BOX (hbox), check3d, FALSE, FALSE, 0);
\r
140 check2d = gtk_check_button_new_with_label ("Show 2D");
\r
141 gtk_widget_show (check2d);
\r
142 gtk_box_pack_start (GTK_BOX (hbox), check2d, FALSE, FALSE, 0);
\r
144 button = gtk_button_new_with_label ("Change");
\r
145 gtk_widget_show (button);
\r
146 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
\r
147 gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (change_clicked), entry);
\r
148 gtk_widget_set_usize (button, 60, -2);
\r
150 hbox = gtk_hbox_new (FALSE, 5);
\r
151 gtk_widget_show (hbox);
\r
152 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
\r
154 button = gtk_button_new_with_label ("Cancel");
\r
155 gtk_widget_show (button);
\r
156 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
\r
157 gtk_signal_connect (GTK_OBJECT (button), "clicked",
\r
158 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
159 gtk_widget_set_usize (button, 60, -2);
\r
161 button = gtk_button_new_with_label ("OK");
\r
162 gtk_widget_show (button);
\r
163 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
\r
164 gtk_signal_connect (GTK_OBJECT (button), "clicked",
\r
165 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
166 gtk_widget_set_usize (button, 60, -2);
\r
168 char *fn = g_IBSPTable.m_pfnGetMapName();
\r
169 strcpy (portals.fn, fn);
\r
170 fn = strrchr (portals.fn, '.');
\r
174 strcat (portals.fn, ".prt");
\r
177 gtk_entry_set_text (GTK_ENTRY (entry), portals.fn);
\r
178 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check2d), portals.show_2d);
\r
179 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check3d), portals.show_3d);
\r
181 gtk_grab_add (dlg);
\r
182 gtk_widget_show (dlg);
\r
185 gtk_main_iteration ();
\r
191 portals.show_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check3d));
\r
192 portals.show_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check2d));
\r
195 gtk_grab_remove (dlg);
\r
196 gtk_widget_destroy (dlg);
\r
201 // =============================================================================
\r
206 GtkWidget *dlg, *hbox, *vbox, *button, *label;
\r
207 int loop = 1, ret = IDCANCEL;
\r
209 dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
210 gtk_window_set_title (GTK_WINDOW (dlg), "About Portal Viewer");
\r
211 gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
\r
212 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
213 gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
\r
214 GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
215 g_object_set_data (G_OBJECT (dlg), "loop", &loop);
\r
216 g_object_set_data (G_OBJECT (dlg), "ret", &ret);
\r
218 hbox = gtk_hbox_new (FALSE, 10);
\r
219 gtk_widget_show (hbox);
\r
220 gtk_container_add (GTK_CONTAINER (dlg), hbox);
\r
221 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
\r
223 label = gtk_label_new ("Version 1.000\n\n"
\r
224 "Gtk port by Leonardo Zide\nleo@lokigames.com\n\n"
\r
225 "Written by Geoffrey DeWan\ngdewan@prairienet.org");
\r
226 gtk_widget_show (label);
\r
227 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
\r
228 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
\r
230 vbox = gtk_vbox_new (FALSE, 0);
\r
231 gtk_widget_show (vbox);
\r
232 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
\r
234 button = gtk_button_new_with_label ("OK");
\r
235 gtk_widget_show (button);
\r
236 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
\r
237 gtk_signal_connect (GTK_OBJECT (button), "clicked",
\r
238 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
239 gtk_widget_set_usize (button, 60, -2);
\r
241 gtk_grab_add (dlg);
\r
242 gtk_widget_show (dlg);
\r
245 gtk_main_iteration ();
\r
247 gtk_grab_remove (dlg);
\r
248 gtk_widget_destroy (dlg);
\r
251 // =============================================================================
\r
254 static int DoColor (COLORREF *c)
\r
258 int loop = 1, ret = IDCANCEL;
\r
260 clr[0] = ((double)GetRValue (*c)) / 255.0;
\r
261 clr[1] = ((double)GetGValue (*c)) / 255.0;
\r
262 clr[2] = ((double)GetBValue (*c)) / 255.0;
\r
264 dlg = gtk_color_selection_dialog_new ("Choose Color");
\r
265 gtk_color_selection_set_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (dlg)->colorsel), clr);
\r
266 gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
\r
267 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
268 gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
\r
269 GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
270 gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (dlg)->ok_button), "clicked",
\r
271 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
272 gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (dlg)->cancel_button), "clicked",
\r
273 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
274 g_object_set_data (G_OBJECT (dlg), "loop", &loop);
\r
275 g_object_set_data (G_OBJECT (dlg), "ret", &ret);
\r
277 gtk_widget_show(dlg);
\r
281 gtk_main_iteration ();
\r
283 gtk_color_selection_get_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (dlg)->colorsel), clr);
\r
285 gtk_grab_remove (dlg);
\r
286 gtk_widget_destroy (dlg);
\r
290 *c = RGB (clr[0]*255, clr[1]*255, clr[2]*255);
\r
296 static void Set2DText (GtkWidget* label)
\r
300 sprintf(s, "Line Width = %6.3f", portals.width_2d * 0.5f);
\r
302 gtk_label_set_text (GTK_LABEL (label), s);
\r
305 static void Set3DText (GtkWidget* label)
\r
309 sprintf(s, "Line Width = %6.3f", portals.width_3d * 0.5f);
\r
311 gtk_label_set_text (GTK_LABEL (label), s);
\r
314 static void Set3DTransText (GtkWidget* label)
\r
318 sprintf(s, "Polygon transparency = %d%%", (int)portals.trans_3d);
\r
320 gtk_label_set_text (GTK_LABEL (label), s);
\r
323 static void SetClipText (GtkWidget* label)
\r
327 sprintf(s, "Cubic clip range = %d", (int)portals.clip_range * 64);
\r
329 gtk_label_set_text (GTK_LABEL (label), s);
\r
332 static void OnScroll2d (GtkAdjustment *adj, gpointer data)
\r
334 portals.width_2d = adj->value;
\r
335 Set2DText (GTK_WIDGET (data));
\r
337 if(interfaces_started)
\r
338 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
\r
341 static void OnScroll3d (GtkAdjustment *adj, gpointer data)
\r
343 portals.width_3d = adj->value;
\r
344 Set3DText (GTK_WIDGET (data));
\r
346 if(interfaces_started)
\r
347 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
350 static void OnScrollTrans (GtkAdjustment *adj, gpointer data)
\r
352 portals.trans_3d = adj->value;
\r
353 Set3DTransText (GTK_WIDGET (data));
\r
355 if(interfaces_started)
\r
356 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
359 static void OnScrollClip (GtkAdjustment *adj, gpointer data)
\r
361 portals.clip_range = adj->value;
\r
362 SetClipText (GTK_WIDGET (data));
\r
364 if(interfaces_started)
\r
365 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
368 static void OnAntiAlias2d (GtkWidget *widget, gpointer data)
\r
370 portals.aa_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
372 if(interfaces_started)
\r
373 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
\r
376 static void OnConfig2d (GtkWidget *widget, gpointer data)
\r
378 portals.show_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
380 if(interfaces_started)
\r
381 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
\r
384 static void OnColor2d (GtkWidget *widget, gpointer data)
\r
386 if (DoColor (&portals.color_2d) == IDOK)
\r
388 portals.FixColors();
\r
390 if(interfaces_started)
\r
391 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
\r
395 static void OnConfig3d (GtkWidget *widget, gpointer data)
\r
397 portals.show_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
399 if(interfaces_started)
\r
400 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
404 static void OnAntiAlias3d (GtkWidget *widget, gpointer data)
\r
406 portals.aa_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
408 if(interfaces_started)
\r
409 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
412 static void OnColor3d (GtkWidget *widget, gpointer data)
\r
414 if (DoColor (&portals.color_3d) == IDOK)
\r
416 portals.FixColors();
\r
418 if(interfaces_started)
\r
419 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
423 static void OnColorFog (GtkWidget *widget, gpointer data)
\r
425 if (DoColor (&portals.color_fog) == IDOK)
\r
427 portals.FixColors();
\r
429 if(interfaces_started)
\r
430 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
434 static void OnFog (GtkWidget *widget, gpointer data)
\r
436 portals.fog = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
438 if(interfaces_started)
\r
439 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
442 static void OnSelchangeZbuffer (GtkWidget *widget, gpointer data)
\r
444 portals.zbuffer = GPOINTER_TO_INT (data);
\r
446 if(interfaces_started)
\r
447 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
450 static void OnPoly (GtkWidget *widget, gpointer data)
\r
452 portals.polygons = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
454 if(interfaces_started)
\r
455 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
458 static void OnLines (GtkWidget *widget, gpointer data)
\r
460 portals.lines = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
462 if(interfaces_started)
\r
463 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
466 static void OnClip (GtkWidget *widget, gpointer data)
\r
468 portals.clip = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
470 if(interfaces_started)
\r
471 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
\r
474 void DoConfigDialog ()
\r
476 GtkWidget *dlg, *hbox, *vbox, *vbox2, *button, *table, *frame;
\r
477 GtkWidget *lw3slider, *lw3label, *lw2slider, *lw2label, *zlist, *menu, *item;
\r
478 GtkWidget *aa2check, *aa3check, *depthcheck, *linescheck, *polyscheck;
\r
479 GtkWidget *transslider, *translabel, *clipslider, *cliplabel;
\r
480 GtkWidget *show2check, *show3check, *portalcheck;
\r
481 int loop = 1, ret = IDCANCEL;
\r
484 dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
485 gtk_window_set_title (GTK_WINDOW (dlg), "Portal Viewer Configuration");
\r
486 gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
\r
487 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
488 gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
\r
489 GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
\r
490 g_object_set_data (G_OBJECT (dlg), "loop", &loop);
\r
491 g_object_set_data (G_OBJECT (dlg), "ret", &ret);
\r
493 vbox = gtk_vbox_new (FALSE, 5);
\r
494 gtk_widget_show (vbox);
\r
495 gtk_container_add (GTK_CONTAINER (dlg), vbox);
\r
496 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
\r
498 frame = gtk_frame_new ("3D View");
\r
499 gtk_widget_show (frame);
\r
500 gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
\r
502 vbox2 = gtk_vbox_new (FALSE, 5);
\r
503 gtk_widget_show (vbox2);
\r
504 gtk_container_add (GTK_CONTAINER (frame), vbox2);
\r
505 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 5);
\r
507 hbox = gtk_hbox_new (FALSE, 5);
\r
508 gtk_widget_show (hbox);
\r
509 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0);
\r
511 adj = gtk_adjustment_new (portals.width_3d, 2, 40, 1, 1, 1);
\r
512 lw3slider = gtk_hscale_new (GTK_ADJUSTMENT (adj));
\r
513 gtk_widget_show (lw3slider);
\r
514 gtk_box_pack_start (GTK_BOX (hbox), lw3slider, TRUE, TRUE, 0);
\r
515 gtk_scale_set_draw_value (GTK_SCALE (lw3slider), FALSE);
\r
517 lw3label = gtk_label_new ("");
\r
518 gtk_widget_show (lw3label);
\r
519 gtk_box_pack_start (GTK_BOX (hbox), lw3label, FALSE, TRUE, 0);
\r
520 gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScroll3d), lw3label);
\r
522 table = gtk_table_new (2, 4, FALSE);
\r
523 gtk_widget_show (table);
\r
524 gtk_box_pack_start (GTK_BOX (vbox2), table, TRUE, TRUE, 0);
\r
525 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
526 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
528 button = gtk_button_new_with_label ("Color");
\r
529 gtk_widget_show (button);
\r
530 gtk_table_attach (GTK_TABLE (table), button, 0, 1, 0, 1,
\r
531 (GtkAttachOptions) (GTK_FILL),
\r
532 (GtkAttachOptions) (0), 0, 0);
\r
533 gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColor3d), NULL);
\r
535 button = gtk_button_new_with_label ("Depth Color");
\r
536 gtk_widget_show (button);
\r
537 gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2,
\r
538 (GtkAttachOptions) (GTK_FILL),
\r
539 (GtkAttachOptions) (0), 0, 0);
\r
540 gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColorFog), NULL);
\r
542 aa3check = gtk_check_button_new_with_label ("Anti-Alias (May not work on some video cards)");
\r
543 gtk_widget_show (aa3check);
\r
544 gtk_table_attach (GTK_TABLE (table), aa3check, 1, 4, 0, 1,
\r
545 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
546 (GtkAttachOptions) (0), 0, 0);
\r
547 gtk_signal_connect (GTK_OBJECT (aa3check), "toggled", GTK_SIGNAL_FUNC (OnAntiAlias3d), NULL);
\r
549 depthcheck = gtk_check_button_new_with_label ("Depth Cue");
\r
550 gtk_widget_show (depthcheck);
\r
551 gtk_table_attach (GTK_TABLE (table), depthcheck, 1, 2, 1, 2,
\r
552 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
553 (GtkAttachOptions) (0), 0, 0);
\r
554 gtk_signal_connect (GTK_OBJECT (depthcheck), "toggled", GTK_SIGNAL_FUNC (OnFog), NULL);
\r
556 linescheck = gtk_check_button_new_with_label ("Lines");
\r
557 gtk_widget_show (linescheck);
\r
558 gtk_table_attach (GTK_TABLE (table), linescheck, 2, 3, 1, 2,
\r
559 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
560 (GtkAttachOptions) (0), 0, 0);
\r
561 gtk_signal_connect (GTK_OBJECT (linescheck), "toggled", GTK_SIGNAL_FUNC (OnLines), NULL);
\r
563 polyscheck = gtk_check_button_new_with_label ("Polygons");
\r
564 gtk_widget_show (polyscheck);
\r
565 gtk_table_attach (GTK_TABLE (table), polyscheck, 3, 4, 1, 2,
\r
566 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
567 (GtkAttachOptions) (0), 0, 0);
\r
568 gtk_signal_connect (GTK_OBJECT (polyscheck), "toggled", GTK_SIGNAL_FUNC (OnPoly), NULL);
\r
570 zlist = gtk_option_menu_new ();
\r
571 gtk_widget_show (zlist);
\r
572 gtk_box_pack_start (GTK_BOX (vbox2), zlist, TRUE, FALSE, 0);
\r
574 menu = gtk_menu_new ();
\r
575 gtk_widget_show (menu);
\r
576 gtk_option_menu_set_menu (GTK_OPTION_MENU (zlist), menu);
\r
578 item = gtk_menu_item_new_with_label ("Z-Buffer Test and Write (recommended for solid or no polygons)");
\r
579 gtk_widget_show (item);
\r
580 gtk_signal_connect (GTK_OBJECT (item), "activate",
\r
581 GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (0));
\r
582 gtk_menu_append (GTK_MENU (menu), item);
\r
584 item = gtk_menu_item_new_with_label ("Z-Buffer Test Only (recommended for transparent polygons)");
\r
585 gtk_widget_show (item);
\r
586 gtk_signal_connect (GTK_OBJECT (item), "activate",
\r
587 GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (1));
\r
588 gtk_menu_append (GTK_MENU (menu), item);
\r
590 item = gtk_menu_item_new_with_label ("Z-Buffer Off");
\r
591 gtk_widget_show (item);
\r
592 gtk_signal_connect (GTK_OBJECT (item), "activate",
\r
593 GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (2));
\r
594 gtk_menu_append (GTK_MENU (menu), item);
\r
596 table = gtk_table_new (2, 2, FALSE);
\r
597 gtk_widget_show (table);
\r
598 gtk_box_pack_start (GTK_BOX (vbox2), table, TRUE, TRUE, 0);
\r
599 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
600 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
602 adj = gtk_adjustment_new (portals.trans_3d, 0, 100, 1, 1, 1);
\r
603 transslider = gtk_hscale_new (GTK_ADJUSTMENT (adj));
\r
604 gtk_widget_show (transslider);
\r
605 gtk_table_attach (GTK_TABLE (table), transslider, 0, 1, 0, 1,
\r
606 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
607 (GtkAttachOptions) (0), 0, 0);
\r
608 gtk_scale_set_draw_value (GTK_SCALE (transslider), FALSE);
\r
610 translabel = gtk_label_new ("");
\r
611 gtk_widget_show (translabel);
\r
612 gtk_table_attach (GTK_TABLE (table), translabel, 1, 2, 0, 1,
\r
613 (GtkAttachOptions) (GTK_FILL),
\r
614 (GtkAttachOptions) (0), 0, 0);
\r
615 gtk_misc_set_alignment (GTK_MISC (translabel), 0.0, 0.0);
\r
616 gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScrollTrans), translabel);
\r
618 adj = gtk_adjustment_new (portals.clip_range, 1, 128, 1, 1, 1);
\r
619 clipslider = gtk_hscale_new (GTK_ADJUSTMENT (adj));
\r
620 gtk_widget_show (clipslider);
\r
621 gtk_table_attach (GTK_TABLE (table), clipslider, 0, 1, 1, 2,
\r
622 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
623 (GtkAttachOptions) (0), 0, 0);
\r
624 gtk_scale_set_draw_value (GTK_SCALE (clipslider), FALSE);
\r
626 cliplabel = gtk_label_new ("");
\r
627 gtk_widget_show (cliplabel);
\r
628 gtk_table_attach (GTK_TABLE (table), cliplabel, 1, 2, 1, 2,
\r
629 (GtkAttachOptions) (GTK_FILL),
\r
630 (GtkAttachOptions) (0), 0, 0);
\r
631 gtk_misc_set_alignment (GTK_MISC (cliplabel), 0.0, 0.0);
\r
632 gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScrollClip), cliplabel);
\r
634 hbox = gtk_hbox_new (TRUE, 5);
\r
635 gtk_widget_show (hbox);
\r
636 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0);
\r
638 show3check = gtk_check_button_new_with_label ("Show");
\r
639 gtk_widget_show (show3check);
\r
640 gtk_box_pack_start (GTK_BOX (hbox), show3check, TRUE, TRUE, 0);
\r
641 gtk_signal_connect (GTK_OBJECT (show3check), "toggled", GTK_SIGNAL_FUNC (OnConfig3d), NULL);
\r
643 portalcheck = gtk_check_button_new_with_label ("Portal cubic clipper");
\r
644 gtk_widget_show (portalcheck);
\r
645 gtk_box_pack_start (GTK_BOX (hbox), portalcheck, TRUE, TRUE, 0);
\r
646 gtk_signal_connect (GTK_OBJECT (portalcheck), "toggled", GTK_SIGNAL_FUNC (OnClip), NULL);
\r
648 frame = gtk_frame_new ("2D View");
\r
649 gtk_widget_show (frame);
\r
650 gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
\r
652 vbox2 = gtk_vbox_new (FALSE, 5);
\r
653 gtk_widget_show (vbox2);
\r
654 gtk_container_add (GTK_CONTAINER (frame), vbox2);
\r
655 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 5);
\r
657 hbox = gtk_hbox_new (FALSE, 5);
\r
658 gtk_widget_show (hbox);
\r
659 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0);
\r
661 adj = gtk_adjustment_new (portals.width_2d, 2, 40, 1, 1, 1);
\r
662 lw2slider = gtk_hscale_new (GTK_ADJUSTMENT (adj));
\r
663 gtk_widget_show (lw2slider);
\r
664 gtk_box_pack_start (GTK_BOX (hbox), lw2slider, TRUE, TRUE, 0);
\r
665 gtk_scale_set_draw_value (GTK_SCALE (lw2slider), FALSE);
\r
667 lw2label = gtk_label_new ("");
\r
668 gtk_widget_show (lw2label);
\r
669 gtk_box_pack_start (GTK_BOX (hbox), lw2label, FALSE, TRUE, 0);
\r
670 gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScroll2d), lw2label);
\r
672 hbox = gtk_hbox_new (FALSE, 5);
\r
673 gtk_widget_show (hbox);
\r
674 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0);
\r
676 button = gtk_button_new_with_label ("Color");
\r
677 gtk_widget_show (button);
\r
678 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
\r
679 gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColor2d), NULL);
\r
680 gtk_widget_set_usize (button, 60, -2);
\r
682 aa2check = gtk_check_button_new_with_label ("Anti-Alias (May not work on some video cards)");
\r
683 gtk_widget_show (aa2check);
\r
684 gtk_box_pack_start (GTK_BOX (hbox), aa2check, TRUE, TRUE, 0);
\r
685 gtk_signal_connect (GTK_OBJECT (aa2check), "toggled", GTK_SIGNAL_FUNC (OnAntiAlias2d), NULL);
\r
687 hbox = gtk_hbox_new (FALSE, 5);
\r
688 gtk_widget_show (hbox);
\r
689 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0);
\r
691 show2check = gtk_check_button_new_with_label ("Show");
\r
692 gtk_widget_show (show2check);
\r
693 gtk_box_pack_start (GTK_BOX (hbox), show2check, FALSE, FALSE, 0);
\r
694 gtk_signal_connect (GTK_OBJECT (show2check), "toggled", GTK_SIGNAL_FUNC (OnConfig2d), NULL);
\r
696 hbox = gtk_hbox_new (FALSE, 5);
\r
697 gtk_widget_show (hbox);
\r
698 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
\r
700 button = gtk_button_new_with_label ("OK");
\r
701 gtk_widget_show (button);
\r
702 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
\r
703 gtk_signal_connect (GTK_OBJECT (button), "clicked",
\r
704 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
705 gtk_widget_set_usize (button, 60, -2);
\r
707 // initialize dialog
\r
708 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show2check), portals.show_2d);
\r
709 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aa2check), portals.aa_2d);
\r
710 Set2DText (lw2label);
\r
712 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show3check), portals.show_3d);
\r
713 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (depthcheck), portals.fog);
\r
714 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (polyscheck), portals.polygons);
\r
715 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linescheck), portals.lines);
\r
716 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aa3check), portals.aa_3d);
\r
717 gtk_option_menu_set_history (GTK_OPTION_MENU (zlist), portals.zbuffer);
\r
718 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (portalcheck), portals.clip);
\r
720 Set3DText (lw3label);
\r
721 Set3DTransText (translabel);
\r
722 SetClipText (cliplabel);
\r
724 gtk_grab_add (dlg);
\r
725 gtk_widget_show (dlg);
\r
728 gtk_main_iteration ();
\r
730 gtk_grab_remove (dlg);
\r
731 gtk_widget_destroy (dlg);
\r