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
20 // LoadPortalFileDialog.cpp : implementation file
\r
26 #define new DEBUG_NEW
\r
28 //static char THIS_FILE[] = __FILE__;
\r
33 static void dialog_button_callback (GtkWidget *widget, gpointer data)
\r
38 parent = gtk_widget_get_toplevel (widget);
\r
39 loop = (int*)g_object_get_data (G_OBJECT (parent), "loop");
\r
40 ret = (int*)g_object_get_data (G_OBJECT (parent), "ret");
\r
46 static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data)
\r
50 gtk_widget_hide (widget);
\r
51 loop = (int*)g_object_get_data (G_OBJECT (widget), "loop");
\r
57 static void file_sel_callback (GtkWidget *widget, gpointer data)
\r
63 parent = gtk_widget_get_toplevel (widget);
\r
64 loop = (int*)g_object_get_data (G_OBJECT (parent), "loop");
\r
65 filename = (char**)g_object_get_data (G_OBJECT (parent), "filename");
\r
68 if ((int)data == IDOK)
\r
69 *filename = g_strdup (gtk_file_selection_get_filename (GTK_FILE_SELECTION (parent)));
\r
72 static void change_clicked (GtkWidget *widget, gpointer data)
\r
74 GtkWidget* file_sel;
\r
75 char* filename = NULL;
\r
78 file_sel = gtk_file_selection_new ("Locate portal (.prt) file");
\r
79 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->ok_button), "clicked",
\r
80 GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDOK));
\r
81 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->cancel_button), "clicked",
\r
82 GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDCANCEL));
\r
83 gtk_signal_connect (GTK_OBJECT (file_sel), "delete_event",
\r
84 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
\r
85 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (file_sel));
\r
87 g_object_set_data (G_OBJECT (file_sel), "loop", &loop);
\r
88 g_object_set_data (G_OBJECT (file_sel), "filename", &filename);
\r
89 gtk_file_selection_set_filename (GTK_FILE_SELECTION (file_sel), portals.fn);
\r
91 gtk_grab_add (file_sel);
\r
92 gtk_widget_show (file_sel);
\r
95 gtk_main_iteration ();
\r
97 gtk_grab_remove (file_sel);
\r
98 gtk_widget_destroy (file_sel);
\r
100 if (filename != NULL)
\r
102 strcpy (portals.fn, filename);
\r
103 gtk_entry_set_text (GTK_ENTRY (data), filename);
\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_FuncTable.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)) ? true : false;
\r
192 portals.show_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check2d)) ? true : false;
\r
195 gtk_grab_remove (dlg);
\r
196 gtk_widget_destroy (dlg);
\r
201 #else // GTK_PLUGIN
\r
203 /////////////////////////////////////////////////////////////////////////////
\r
204 // CLoadPortalFileDialog dialog
\r
206 CLoadPortalFileDialog::CLoadPortalFileDialog(CWnd* pParent /*=NULL*/)
\r
207 : CDialog(CLoadPortalFileDialog::IDD, pParent)
\r
209 //{{AFX_DATA_INIT(CLoadPortalFileDialog)
\r
210 // NOTE: the ClassWizard will add member initialization here
\r
215 void CLoadPortalFileDialog::DoDataExchange(CDataExchange* pDX)
\r
217 CDialog::DoDataExchange(pDX);
\r
218 //{{AFX_DATA_MAP(CLoadPortalFileDialog)
\r
219 DDX_Control(pDX, IDC_LOAD_3D, m_3d_ctrl);
\r
220 DDX_Control(pDX, IDC_LOAD_2D, m_2d_ctrl);
\r
221 DDX_Control(pDX, IDC_LOAD_FILE_NAME, m_fn_ctrl);
\r
226 BEGIN_MESSAGE_MAP(CLoadPortalFileDialog, CDialog)
\r
227 //{{AFX_MSG_MAP(CLoadPortalFileDialog)
\r
228 ON_BN_CLICKED(IDC_LOAD_OTHER, OnLoadOther)
\r
233 /////////////////////////////////////////////////////////////////////////////
\r
234 // CLoadPortalFileDialog message handlers
\r
236 qboolean CLoadPortalFileDialog::OnInitDialog()
\r
238 CDialog::OnInitDialog();
\r
240 char fn_drive[_MAX_DRIVE];
\r
241 char fn_dir[_MAX_DIR];
\r
242 char fn_name[_MAX_FNAME];
\r
243 char fn_ext[_MAX_EXT];
\r
245 char *fn = g_IBSPTable.m_pfnGetMapName();
\r
247 _fullpath(portals.fn, fn, _MAX_PATH);
\r
248 _splitpath(fn, fn_drive, fn_dir, fn_name, fn_ext);
\r
250 strcpy(portals.fn, fn_drive);
\r
251 strcat(portals.fn, fn_dir);
\r
252 strcat(portals.fn, fn_name);
\r
253 strcat(portals.fn, ".prt");
\r
255 m_fn_ctrl.SetWindowText(portals.fn);
\r
257 m_2d_ctrl.SetCheck(portals.show_2d);
\r
258 m_3d_ctrl.SetCheck(portals.show_3d);
\r
260 return TRUE; // return TRUE unless you set the focus to a control
\r
261 // EXCEPTION: OCX Property Pages should return FALSE
\r
264 void CLoadPortalFileDialog::OnOK()
\r
268 portals.show_3d = m_3d_ctrl.GetCheck();
\r
269 portals.show_2d = m_2d_ctrl.GetCheck();
\r
274 void CLoadPortalFileDialog::OnLoadOther()
\r
276 CFileDialog dlg(TRUE, "prt", portals.fn, OFN_NOCHANGEDIR | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_FILEMUSTEXIST,
\r
277 "Portal files (*.prt)|*.prt|All Files (*.*)|*.*||", NULL);
\r
279 dlg.m_ofn.lpstrTitle = "Locate portal file";
\r
281 if(IDOK == dlg.DoModal())
\r
283 _fullpath(portals.fn, dlg.GetPathName().GetBuffer(1), _MAX_PATH);
\r
284 m_fn_ctrl.SetWindowText(portals.fn);
\r
288 #endif // GTK_PLUGIN
\r