2 PrtView plugin for GtkRadiant
3 Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com
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
21 // PrtView dialogs done with GTK+
27 // =============================================================================
30 static void dialog_button_callback( GtkWidget *widget, gpointer data ){
34 parent = gtk_widget_get_toplevel( widget );
35 loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" );
36 ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" );
42 static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){
45 gtk_widget_hide( widget );
46 loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" );
52 static void file_sel_callback( GtkWidget *widget, gpointer data ){
57 parent = gtk_widget_get_toplevel( widget );
58 loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" );
59 filename = (char**)g_object_get_data( G_OBJECT( parent ), "filename" );
62 if ( (int)data == IDOK ) {
63 *filename = g_strdup( gtk_file_selection_get_filename( GTK_FILE_SELECTION( parent ) ) );
67 static void change_clicked( GtkWidget *widget, gpointer data ){
69 char* filename = NULL;
72 file_sel = gtk_file_selection_new( "Locate portal (.prt) file" );
73 gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( file_sel )->ok_button ), "clicked",
74 GTK_SIGNAL_FUNC( file_sel_callback ), GINT_TO_POINTER( IDOK ) );
75 gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( file_sel )->cancel_button ), "clicked",
76 GTK_SIGNAL_FUNC( file_sel_callback ), GINT_TO_POINTER( IDCANCEL ) );
77 gtk_signal_connect( GTK_OBJECT( file_sel ), "delete_event",
78 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
79 gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION( file_sel ) );
81 g_object_set_data( G_OBJECT( file_sel ), "loop", &loop );
82 g_object_set_data( G_OBJECT( file_sel ), "filename", &filename );
83 gtk_file_selection_set_filename( GTK_FILE_SELECTION( file_sel ), portals.fn );
85 gtk_grab_add( file_sel );
86 gtk_widget_show( file_sel );
91 gtk_grab_remove( file_sel );
92 gtk_widget_destroy( file_sel );
94 if ( filename != NULL ) {
95 strcpy( portals.fn, filename );
96 gtk_entry_set_text( GTK_ENTRY( data ), filename );
101 // =============================================================================
102 // LoadPortalFile dialog
104 int DoLoadPortalFileDialog(){
105 GtkWidget *dlg, *vbox, *hbox, *button, *entry, *check2d, *check3d;
106 int loop = 1, ret = IDCANCEL;
108 dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL );
109 gtk_window_set_title( GTK_WINDOW( dlg ), "Load .prt" );
110 gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event",
111 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
112 gtk_signal_connect( GTK_OBJECT( dlg ), "destroy",
113 GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
114 g_object_set_data( G_OBJECT( dlg ), "loop", &loop );
115 g_object_set_data( G_OBJECT( dlg ), "ret", &ret );
117 vbox = gtk_vbox_new( FALSE, 5 );
118 gtk_widget_show( vbox );
119 gtk_container_add( GTK_CONTAINER( dlg ), vbox );
120 gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
122 entry = gtk_entry_new();
123 gtk_widget_show( entry );
124 gtk_entry_set_editable( GTK_ENTRY( entry ), FALSE );
125 gtk_box_pack_start( GTK_BOX( vbox ), entry, FALSE, FALSE, 0 );
127 hbox = gtk_hbox_new( FALSE, 5 );
128 gtk_widget_show( hbox );
129 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
131 check3d = gtk_check_button_new_with_label( "Show 3D" );
132 gtk_widget_show( check3d );
133 gtk_box_pack_start( GTK_BOX( hbox ), check3d, FALSE, FALSE, 0 );
135 check2d = gtk_check_button_new_with_label( "Show 2D" );
136 gtk_widget_show( check2d );
137 gtk_box_pack_start( GTK_BOX( hbox ), check2d, FALSE, FALSE, 0 );
139 button = gtk_button_new_with_label( "Change" );
140 gtk_widget_show( button );
141 gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 );
142 gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( change_clicked ), entry );
143 gtk_widget_set_usize( button, 60, -2 );
145 hbox = gtk_hbox_new( FALSE, 5 );
146 gtk_widget_show( hbox );
147 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
149 button = gtk_button_new_with_label( "Cancel" );
150 gtk_widget_show( button );
151 gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 );
152 gtk_signal_connect( GTK_OBJECT( button ), "clicked",
153 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
154 gtk_widget_set_usize( button, 60, -2 );
156 button = gtk_button_new_with_label( "OK" );
157 gtk_widget_show( button );
158 gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 );
159 gtk_signal_connect( GTK_OBJECT( button ), "clicked",
160 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
161 gtk_widget_set_usize( button, 60, -2 );
163 char *fn = g_IBSPTable.m_pfnGetMapName();
164 strcpy( portals.fn, fn );
165 fn = strrchr( portals.fn, '.' );
168 strcat( portals.fn, ".prt" );
171 gtk_entry_set_text( GTK_ENTRY( entry ), portals.fn );
172 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check2d ), portals.show_2d );
173 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check3d ), portals.show_3d );
176 gtk_widget_show( dlg );
179 gtk_main_iteration();
184 portals.show_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check3d ) );
185 portals.show_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2d ) );
188 gtk_grab_remove( dlg );
189 gtk_widget_destroy( dlg );
194 // =============================================================================
198 GtkWidget *dlg, *hbox, *vbox, *button, *label;
199 int loop = 1, ret = IDCANCEL;
201 dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL );
202 gtk_window_set_title( GTK_WINDOW( dlg ), "About Portal Viewer" );
203 gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event",
204 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
205 gtk_signal_connect( GTK_OBJECT( dlg ), "destroy",
206 GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
207 g_object_set_data( G_OBJECT( dlg ), "loop", &loop );
208 g_object_set_data( G_OBJECT( dlg ), "ret", &ret );
210 hbox = gtk_hbox_new( FALSE, 10 );
211 gtk_widget_show( hbox );
212 gtk_container_add( GTK_CONTAINER( dlg ), hbox );
213 gtk_container_set_border_width( GTK_CONTAINER( hbox ), 10 );
215 label = gtk_label_new( "Version 1.000\n\n"
216 "Gtk port by Leonardo Zide\nleo@lokigames.com\n\n"
217 "Written by Geoffrey DeWan\ngdewan@prairienet.org" );
218 gtk_widget_show( label );
219 gtk_box_pack_start( GTK_BOX( hbox ), label, TRUE, TRUE, 0 );
220 gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_LEFT );
222 vbox = gtk_vbox_new( FALSE, 0 );
223 gtk_widget_show( vbox );
224 gtk_box_pack_start( GTK_BOX( hbox ), vbox, FALSE, FALSE, 0 );
226 button = gtk_button_new_with_label( "OK" );
227 gtk_widget_show( button );
228 gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, FALSE, 0 );
229 gtk_signal_connect( GTK_OBJECT( button ), "clicked",
230 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
231 gtk_widget_set_usize( button, 60, -2 );
234 gtk_widget_show( dlg );
237 gtk_main_iteration();
239 gtk_grab_remove( dlg );
240 gtk_widget_destroy( dlg );
243 // =============================================================================
246 static int DoColor( COLORREF *c ){
249 int loop = 1, ret = IDCANCEL;
251 clr[0] = ( (double)GetRValue( *c ) ) / 255.0;
252 clr[1] = ( (double)GetGValue( *c ) ) / 255.0;
253 clr[2] = ( (double)GetBValue( *c ) ) / 255.0;
255 dlg = gtk_color_selection_dialog_new( "Choose Color" );
256 gtk_color_selection_set_color( GTK_COLOR_SELECTION( GTK_COLOR_SELECTION_DIALOG( dlg )->colorsel ), clr );
257 gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event",
258 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
259 gtk_signal_connect( GTK_OBJECT( dlg ), "destroy",
260 GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
261 gtk_signal_connect( GTK_OBJECT( GTK_COLOR_SELECTION_DIALOG( dlg )->ok_button ), "clicked",
262 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
263 gtk_signal_connect( GTK_OBJECT( GTK_COLOR_SELECTION_DIALOG( dlg )->cancel_button ), "clicked",
264 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
265 g_object_set_data( G_OBJECT( dlg ), "loop", &loop );
266 g_object_set_data( G_OBJECT( dlg ), "ret", &ret );
268 gtk_widget_show( dlg );
272 gtk_main_iteration();
274 gtk_color_selection_get_color( GTK_COLOR_SELECTION( GTK_COLOR_SELECTION_DIALOG( dlg )->colorsel ), clr );
276 gtk_grab_remove( dlg );
277 gtk_widget_destroy( dlg );
280 *c = RGB( clr[0] * 255, clr[1] * 255, clr[2] * 255 );
286 static void Set2DText( GtkWidget* label ){
289 sprintf( s, "Line Width = %6.3f", portals.width_2d * 0.5f );
291 gtk_label_set_text( GTK_LABEL( label ), s );
294 static void Set3DText( GtkWidget* label ){
297 sprintf( s, "Line Width = %6.3f", portals.width_3d * 0.5f );
299 gtk_label_set_text( GTK_LABEL( label ), s );
302 static void Set3DTransText( GtkWidget* label ){
305 sprintf( s, "Polygon transparency = %d%%", (int)portals.trans_3d );
307 gtk_label_set_text( GTK_LABEL( label ), s );
310 static void SetClipText( GtkWidget* label ){
313 sprintf( s, "Cubic clip range = %d", (int)portals.clip_range * 64 );
315 gtk_label_set_text( GTK_LABEL( label ), s );
318 static void OnScroll2d( GtkAdjustment *adj, gpointer data ){
319 portals.width_2d = adj->value;
320 Set2DText( GTK_WIDGET( data ) );
322 if ( interfaces_started ) {
323 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D );
327 static void OnScroll3d( GtkAdjustment *adj, gpointer data ){
328 portals.width_3d = adj->value;
329 Set3DText( GTK_WIDGET( data ) );
331 if ( interfaces_started ) {
332 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
336 static void OnScrollTrans( GtkAdjustment *adj, gpointer data ){
337 portals.trans_3d = adj->value;
338 Set3DTransText( GTK_WIDGET( data ) );
340 if ( interfaces_started ) {
341 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
345 static void OnScrollClip( GtkAdjustment *adj, gpointer data ){
346 portals.clip_range = adj->value;
347 SetClipText( GTK_WIDGET( data ) );
349 if ( interfaces_started ) {
350 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
354 static void OnAntiAlias2d( GtkWidget *widget, gpointer data ){
355 portals.aa_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
357 if ( interfaces_started ) {
358 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D );
362 static void OnConfig2d( GtkWidget *widget, gpointer data ){
363 portals.show_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
365 if ( interfaces_started ) {
366 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D );
370 static void OnColor2d( GtkWidget *widget, gpointer data ){
371 if ( DoColor( &portals.color_2d ) == IDOK ) {
374 if ( interfaces_started ) {
375 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D );
380 static void OnConfig3d( GtkWidget *widget, gpointer data ){
381 portals.show_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
383 if ( interfaces_started ) {
384 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
389 static void OnAntiAlias3d( GtkWidget *widget, gpointer data ){
390 portals.aa_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
392 if ( interfaces_started ) {
393 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
397 static void OnColor3d( GtkWidget *widget, gpointer data ){
398 if ( DoColor( &portals.color_3d ) == IDOK ) {
401 if ( interfaces_started ) {
402 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
407 static void OnColorFog( GtkWidget *widget, gpointer data ){
408 if ( DoColor( &portals.color_fog ) == IDOK ) {
411 if ( interfaces_started ) {
412 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
417 static void OnFog( GtkWidget *widget, gpointer data ){
418 portals.fog = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
420 if ( interfaces_started ) {
421 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
425 static void OnSelchangeZbuffer( GtkWidget *widget, gpointer data ){
426 portals.zbuffer = GPOINTER_TO_INT( data );
428 if ( interfaces_started ) {
429 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
433 static void OnPoly( GtkWidget *widget, gpointer data ){
434 portals.polygons = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
436 if ( interfaces_started ) {
437 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
441 static void OnLines( GtkWidget *widget, gpointer data ){
442 portals.lines = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
444 if ( interfaces_started ) {
445 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
449 static void OnClip( GtkWidget *widget, gpointer data ){
450 portals.clip = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
452 if ( interfaces_started ) {
453 g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D );
457 void DoConfigDialog(){
458 GtkWidget *dlg, *hbox, *vbox, *vbox2, *button, *table, *frame;
459 GtkWidget *lw3slider, *lw3label, *lw2slider, *lw2label, *zlist, *menu, *item;
460 GtkWidget *aa2check, *aa3check, *depthcheck, *linescheck, *polyscheck;
461 GtkWidget *transslider, *translabel, *clipslider, *cliplabel;
462 GtkWidget *show2check, *show3check, *portalcheck;
463 int loop = 1, ret = IDCANCEL;
466 dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL );
467 gtk_window_set_title( GTK_WINDOW( dlg ), _( "Portal Viewer Configuration" ) );
468 gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event",
469 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
470 gtk_signal_connect( GTK_OBJECT( dlg ), "destroy",
471 GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
472 g_object_set_data( G_OBJECT( dlg ), "loop", &loop );
473 g_object_set_data( G_OBJECT( dlg ), "ret", &ret );
475 vbox = gtk_vbox_new( FALSE, 5 );
476 gtk_widget_show( vbox );
477 gtk_container_add( GTK_CONTAINER( dlg ), vbox );
478 gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
480 frame = gtk_frame_new( _( "3D View" ) );
481 gtk_widget_show( frame );
482 gtk_box_pack_start( GTK_BOX( vbox ), frame, TRUE, TRUE, 0 );
484 vbox2 = gtk_vbox_new( FALSE, 5 );
485 gtk_widget_show( vbox2 );
486 gtk_container_add( GTK_CONTAINER( frame ), vbox2 );
487 gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 );
489 hbox = gtk_hbox_new( FALSE, 5 );
490 gtk_widget_show( hbox );
491 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, TRUE, 0 );
493 adj = gtk_adjustment_new( portals.width_3d, 2, 40, 1, 1, 1 );
494 lw3slider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) );
495 gtk_widget_show( lw3slider );
496 gtk_box_pack_start( GTK_BOX( hbox ), lw3slider, TRUE, TRUE, 0 );
497 gtk_scale_set_draw_value( GTK_SCALE( lw3slider ), FALSE );
499 lw3label = gtk_label_new( "" );
500 gtk_widget_show( lw3label );
501 gtk_box_pack_start( GTK_BOX( hbox ), lw3label, FALSE, TRUE, 0 );
502 gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScroll3d ), lw3label );
504 table = gtk_table_new( 2, 4, FALSE );
505 gtk_widget_show( table );
506 gtk_box_pack_start( GTK_BOX( vbox2 ), table, TRUE, TRUE, 0 );
507 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
508 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
510 button = gtk_button_new_with_label( _( "Color" ) );
511 gtk_widget_show( button );
512 gtk_table_attach( GTK_TABLE( table ), button, 0, 1, 0, 1,
513 (GtkAttachOptions) ( GTK_FILL ),
514 (GtkAttachOptions) ( 0 ), 0, 0 );
515 gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( OnColor3d ), NULL );
517 button = gtk_button_new_with_label( _( "Depth Color" ) );
518 gtk_widget_show( button );
519 gtk_table_attach( GTK_TABLE( table ), button, 0, 1, 1, 2,
520 (GtkAttachOptions) ( GTK_FILL ),
521 (GtkAttachOptions) ( 0 ), 0, 0 );
522 gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( OnColorFog ), NULL );
524 aa3check = gtk_check_button_new_with_label( _( "Anti-Alias (May not work on some video cards)" ) );
525 gtk_widget_show( aa3check );
526 gtk_table_attach( GTK_TABLE( table ), aa3check, 1, 4, 0, 1,
527 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
528 (GtkAttachOptions) ( 0 ), 0, 0 );
529 gtk_signal_connect( GTK_OBJECT( aa3check ), "toggled", GTK_SIGNAL_FUNC( OnAntiAlias3d ), NULL );
531 depthcheck = gtk_check_button_new_with_label( _( "Depth Cue" ) );
532 gtk_widget_show( depthcheck );
533 gtk_table_attach( GTK_TABLE( table ), depthcheck, 1, 2, 1, 2,
534 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
535 (GtkAttachOptions) ( 0 ), 0, 0 );
536 gtk_signal_connect( GTK_OBJECT( depthcheck ), "toggled", GTK_SIGNAL_FUNC( OnFog ), NULL );
538 linescheck = gtk_check_button_new_with_label( _( "Lines" ) );
539 gtk_widget_show( linescheck );
540 gtk_table_attach( GTK_TABLE( table ), linescheck, 2, 3, 1, 2,
541 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
542 (GtkAttachOptions) ( 0 ), 0, 0 );
543 gtk_signal_connect( GTK_OBJECT( linescheck ), "toggled", GTK_SIGNAL_FUNC( OnLines ), NULL );
545 polyscheck = gtk_check_button_new_with_label( _( "Polygons" ) );
546 gtk_widget_show( polyscheck );
547 gtk_table_attach( GTK_TABLE( table ), polyscheck, 3, 4, 1, 2,
548 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
549 (GtkAttachOptions) ( 0 ), 0, 0 );
550 gtk_signal_connect( GTK_OBJECT( polyscheck ), "toggled", GTK_SIGNAL_FUNC( OnPoly ), NULL );
552 zlist = gtk_option_menu_new();
553 gtk_widget_show( zlist );
554 gtk_box_pack_start( GTK_BOX( vbox2 ), zlist, TRUE, FALSE, 0 );
556 menu = gtk_menu_new();
557 gtk_widget_show( menu );
558 gtk_option_menu_set_menu( GTK_OPTION_MENU( zlist ), menu );
560 item = gtk_menu_item_new_with_label( _( "Z-Buffer Test and Write (recommended for solid or no polygons)" ) );
561 gtk_widget_show( item );
562 gtk_signal_connect( GTK_OBJECT( item ), "activate",
563 GTK_SIGNAL_FUNC( OnSelchangeZbuffer ), GINT_TO_POINTER( 0 ) );
564 gtk_menu_append( GTK_MENU( menu ), item );
566 item = gtk_menu_item_new_with_label( _( "Z-Buffer Test Only (recommended for transparent polygons)" ) );
567 gtk_widget_show( item );
568 gtk_signal_connect( GTK_OBJECT( item ), "activate",
569 GTK_SIGNAL_FUNC( OnSelchangeZbuffer ), GINT_TO_POINTER( 1 ) );
570 gtk_menu_append( GTK_MENU( menu ), item );
572 item = gtk_menu_item_new_with_label( _( "Z-Buffer Off" ) );
573 gtk_widget_show( item );
574 gtk_signal_connect( GTK_OBJECT( item ), "activate",
575 GTK_SIGNAL_FUNC( OnSelchangeZbuffer ), GINT_TO_POINTER( 2 ) );
576 gtk_menu_append( GTK_MENU( menu ), item );
578 table = gtk_table_new( 2, 2, FALSE );
579 gtk_widget_show( table );
580 gtk_box_pack_start( GTK_BOX( vbox2 ), table, TRUE, TRUE, 0 );
581 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
582 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
584 adj = gtk_adjustment_new( portals.trans_3d, 0, 100, 1, 1, 1 );
585 transslider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) );
586 gtk_widget_show( transslider );
587 gtk_table_attach( GTK_TABLE( table ), transslider, 0, 1, 0, 1,
588 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
589 (GtkAttachOptions) ( 0 ), 0, 0 );
590 gtk_scale_set_draw_value( GTK_SCALE( transslider ), FALSE );
592 translabel = gtk_label_new( "" );
593 gtk_widget_show( translabel );
594 gtk_table_attach( GTK_TABLE( table ), translabel, 1, 2, 0, 1,
595 (GtkAttachOptions) ( GTK_FILL ),
596 (GtkAttachOptions) ( 0 ), 0, 0 );
597 gtk_misc_set_alignment( GTK_MISC( translabel ), 0.0, 0.0 );
598 gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScrollTrans ), translabel );
600 adj = gtk_adjustment_new( portals.clip_range, 1, 128, 1, 1, 1 );
601 clipslider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) );
602 gtk_widget_show( clipslider );
603 gtk_table_attach( GTK_TABLE( table ), clipslider, 0, 1, 1, 2,
604 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
605 (GtkAttachOptions) ( 0 ), 0, 0 );
606 gtk_scale_set_draw_value( GTK_SCALE( clipslider ), FALSE );
608 cliplabel = gtk_label_new( "" );
609 gtk_widget_show( cliplabel );
610 gtk_table_attach( GTK_TABLE( table ), cliplabel, 1, 2, 1, 2,
611 (GtkAttachOptions) ( GTK_FILL ),
612 (GtkAttachOptions) ( 0 ), 0, 0 );
613 gtk_misc_set_alignment( GTK_MISC( cliplabel ), 0.0, 0.0 );
614 gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScrollClip ), cliplabel );
616 hbox = gtk_hbox_new( TRUE, 5 );
617 gtk_widget_show( hbox );
618 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 );
620 show3check = gtk_check_button_new_with_label( _( "Show" ) );
621 gtk_widget_show( show3check );
622 gtk_box_pack_start( GTK_BOX( hbox ), show3check, TRUE, TRUE, 0 );
623 gtk_signal_connect( GTK_OBJECT( show3check ), "toggled", GTK_SIGNAL_FUNC( OnConfig3d ), NULL );
625 portalcheck = gtk_check_button_new_with_label( _( "Portal cubic clipper" ) );
626 gtk_widget_show( portalcheck );
627 gtk_box_pack_start( GTK_BOX( hbox ), portalcheck, TRUE, TRUE, 0 );
628 gtk_signal_connect( GTK_OBJECT( portalcheck ), "toggled", GTK_SIGNAL_FUNC( OnClip ), NULL );
630 frame = gtk_frame_new( _( "2D View" ) );
631 gtk_widget_show( frame );
632 gtk_box_pack_start( GTK_BOX( vbox ), frame, TRUE, TRUE, 0 );
634 vbox2 = gtk_vbox_new( FALSE, 5 );
635 gtk_widget_show( vbox2 );
636 gtk_container_add( GTK_CONTAINER( frame ), vbox2 );
637 gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 );
639 hbox = gtk_hbox_new( FALSE, 5 );
640 gtk_widget_show( hbox );
641 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 );
643 adj = gtk_adjustment_new( portals.width_2d, 2, 40, 1, 1, 1 );
644 lw2slider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) );
645 gtk_widget_show( lw2slider );
646 gtk_box_pack_start( GTK_BOX( hbox ), lw2slider, TRUE, TRUE, 0 );
647 gtk_scale_set_draw_value( GTK_SCALE( lw2slider ), FALSE );
649 lw2label = gtk_label_new( "" );
650 gtk_widget_show( lw2label );
651 gtk_box_pack_start( GTK_BOX( hbox ), lw2label, FALSE, TRUE, 0 );
652 gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScroll2d ), lw2label );
654 hbox = gtk_hbox_new( FALSE, 5 );
655 gtk_widget_show( hbox );
656 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 );
658 button = gtk_button_new_with_label( "Color" );
659 gtk_widget_show( button );
660 gtk_box_pack_start( GTK_BOX( hbox ), button, FALSE, FALSE, 0 );
661 gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( OnColor2d ), NULL );
662 gtk_widget_set_usize( button, 60, -2 );
664 aa2check = gtk_check_button_new_with_label( "Anti-Alias (May not work on some video cards)" );
665 gtk_widget_show( aa2check );
666 gtk_box_pack_start( GTK_BOX( hbox ), aa2check, TRUE, TRUE, 0 );
667 gtk_signal_connect( GTK_OBJECT( aa2check ), "toggled", GTK_SIGNAL_FUNC( OnAntiAlias2d ), NULL );
669 hbox = gtk_hbox_new( FALSE, 5 );
670 gtk_widget_show( hbox );
671 gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 );
673 show2check = gtk_check_button_new_with_label( "Show" );
674 gtk_widget_show( show2check );
675 gtk_box_pack_start( GTK_BOX( hbox ), show2check, FALSE, FALSE, 0 );
676 gtk_signal_connect( GTK_OBJECT( show2check ), "toggled", GTK_SIGNAL_FUNC( OnConfig2d ), NULL );
678 hbox = gtk_hbox_new( FALSE, 5 );
679 gtk_widget_show( hbox );
680 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
682 button = gtk_button_new_with_label( "OK" );
683 gtk_widget_show( button );
684 gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 );
685 gtk_signal_connect( GTK_OBJECT( button ), "clicked",
686 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
687 gtk_widget_set_usize( button, 60, -2 );
690 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( show2check ), portals.show_2d );
691 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( aa2check ), portals.aa_2d );
692 Set2DText( lw2label );
694 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( show3check ), portals.show_3d );
695 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( depthcheck ), portals.fog );
696 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( polyscheck ), portals.polygons );
697 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( linescheck ), portals.lines );
698 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( aa3check ), portals.aa_3d );
699 gtk_option_menu_set_history( GTK_OPTION_MENU( zlist ), portals.zbuffer );
700 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( portalcheck ), portals.clip );
702 Set3DText( lw3label );
703 Set3DTransText( translabel );
704 SetClipText( cliplabel );
707 gtk_widget_show( dlg );
710 gtk_main_iteration();
712 gtk_grab_remove( dlg );
713 gtk_widget_destroy( dlg );