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
20 // LoadPortalFileDialog.cpp : implementation file
28 //static char THIS_FILE[] = __FILE__;
31 static void dialog_button_callback( GtkWidget *widget, gpointer data ){
35 parent = gtk_widget_get_toplevel( widget );
36 loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" );
37 ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" );
43 static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){
46 gtk_widget_hide( widget );
47 loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" );
53 static void file_sel_callback( GtkWidget *widget, gpointer data ){
58 parent = gtk_widget_get_toplevel( widget );
59 loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" );
60 filename = (char**)g_object_get_data( G_OBJECT( parent ), "filename" );
63 if ( (int)data == IDOK ) {
64 *filename = g_strdup( gtk_file_selection_get_filename( GTK_FILE_SELECTION( parent ) ) );
68 static void change_clicked( GtkWidget *widget, gpointer data ){
70 char* filename = NULL;
73 file_sel = gtk_file_selection_new( "Locate portal (.prt) file" );
74 gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( file_sel )->ok_button ), "clicked",
75 GTK_SIGNAL_FUNC( file_sel_callback ), GINT_TO_POINTER( IDOK ) );
76 gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( file_sel )->cancel_button ), "clicked",
77 GTK_SIGNAL_FUNC( file_sel_callback ), GINT_TO_POINTER( IDCANCEL ) );
78 gtk_signal_connect( GTK_OBJECT( file_sel ), "delete_event",
79 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
80 gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION( file_sel ) );
82 g_object_set_data( G_OBJECT( file_sel ), "loop", &loop );
83 g_object_set_data( G_OBJECT( file_sel ), "filename", &filename );
84 gtk_file_selection_set_filename( GTK_FILE_SELECTION( file_sel ), portals.fn );
86 gtk_grab_add( file_sel );
87 gtk_widget_show( file_sel );
92 gtk_grab_remove( file_sel );
93 gtk_widget_destroy( file_sel );
95 if ( filename != NULL ) {
96 strcpy( portals.fn, filename );
97 gtk_entry_set_text( GTK_ENTRY( data ), filename );
102 int DoLoadPortalFileDialog(){
103 GtkWidget *dlg, *vbox, *hbox, *button, *entry, *check2d, *check3d;
104 int loop = 1, ret = IDCANCEL;
106 dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL );
107 gtk_window_set_title( GTK_WINDOW( dlg ), "Load .prt" );
108 gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event",
109 GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
110 gtk_signal_connect( GTK_OBJECT( dlg ), "destroy",
111 GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
112 g_object_set_data( G_OBJECT( dlg ), "loop", &loop );
113 g_object_set_data( G_OBJECT( dlg ), "ret", &ret );
115 vbox = gtk_vbox_new( FALSE, 5 );
116 gtk_widget_show( vbox );
117 gtk_container_add( GTK_CONTAINER( dlg ), vbox );
118 gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
120 entry = gtk_entry_new();
121 gtk_widget_show( entry );
122 gtk_entry_set_editable( GTK_ENTRY( entry ), FALSE );
123 gtk_box_pack_start( GTK_BOX( vbox ), entry, FALSE, FALSE, 0 );
125 hbox = gtk_hbox_new( FALSE, 5 );
126 gtk_widget_show( hbox );
127 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
129 check3d = gtk_check_button_new_with_label( "Show 3D" );
130 gtk_widget_show( check3d );
131 gtk_box_pack_start( GTK_BOX( hbox ), check3d, FALSE, FALSE, 0 );
133 check2d = gtk_check_button_new_with_label( "Show 2D" );
134 gtk_widget_show( check2d );
135 gtk_box_pack_start( GTK_BOX( hbox ), check2d, FALSE, FALSE, 0 );
137 button = gtk_button_new_with_label( "Change" );
138 gtk_widget_show( button );
139 gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 );
140 gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( change_clicked ), entry );
141 gtk_widget_set_usize( button, 60, -2 );
143 hbox = gtk_hbox_new( FALSE, 5 );
144 gtk_widget_show( hbox );
145 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
147 button = gtk_button_new_with_label( "Cancel" );
148 gtk_widget_show( button );
149 gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 );
150 gtk_signal_connect( GTK_OBJECT( button ), "clicked",
151 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
152 gtk_widget_set_usize( button, 60, -2 );
154 button = gtk_button_new_with_label( "OK" );
155 gtk_widget_show( button );
156 gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 );
157 gtk_signal_connect( GTK_OBJECT( button ), "clicked",
158 GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
159 gtk_widget_set_usize( button, 60, -2 );
161 char *fn = g_FuncTable.m_pfnGetMapName();
162 strcpy( portals.fn, fn );
163 fn = strrchr( portals.fn, '.' );
166 strcat( portals.fn, ".prt" );
169 gtk_entry_set_text( GTK_ENTRY( entry ), portals.fn );
170 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check2d ), portals.show_2d );
171 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check3d ), portals.show_3d );
174 gtk_widget_show( dlg );
177 gtk_main_iteration();
182 portals.show_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check3d ) ) ? true : false;
183 portals.show_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2d ) ) ? true : false;
186 gtk_grab_remove( dlg );
187 gtk_widget_destroy( dlg );