1 /* Panorama_Tools	-	Generate, Edit and Convert Panoramic Images
2    Copyright (C) 1998,1999 - Helmut Dersch  der@fh-furtwangen.de
3 
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2, or (at your option)
7    any later version.
8 
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13 
14    You should have received a copy of the GNU General Public License
15    along with this software; see the file COPYING.  If not, a copy
16    can be downloaded from http://www.gnu.org/licenses/gpl.html, or
17    obtained by writing to the Free Software Foundation, Inc.,
18    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
19 
20 /*------------------------------------------------------------*/
21 
22 #ifndef SYS_X11_H
23 #define SYS_X11_H
24 
25 #include <libgimp/gimp.h>
26 #include <gtk/gtk.h>
27 
28 
29 #include "filter.h"
30 
31 #define ENTRY_WIDTH 30
32 
33 
34 struct wdata
35 {
36 	GtkWidget 	*widg;
37 	gpointer 	data;
38 };
39 
40 typedef struct wdata wdata;
41 
42 extern int ptools_isOK;
43 
44 void pt_widget_destroy			(GtkWidget *widget);
45 void pt_main_destroy			(GtkWidget *widget);
46 
47 void DispPrg		(GtkWidget *widget, gpointer data);
48 void SetLumOpt		(GtkWidget *widget, gpointer data);
49 void SetCPrefs		(GtkWidget *widget, gpointer data);
50 void SetRadOpt		(GtkWidget *widget, gpointer data);
51 void SetHorOpt		(GtkWidget *widget, gpointer data);
52 void SetVerOpt		(GtkWidget *widget, gpointer data);
53 void SetScOpt		(GtkWidget *widget, gpointer data);
54 void SetShOpt		(GtkWidget *widget, gpointer data);
55 void SetAdPrefs		(GtkWidget *widget, gpointer data);
56 void SetCrOpt		(GtkWidget *widget, gpointer data);
57 void SetPerspPrefs	(GtkWidget *widget, gpointer data);
58 void SetRem			(GtkWidget *widget, gpointer data);
59 void SetSiz			(GtkWidget *widget, gpointer data);
60 void SetIntp		(GtkWidget *widget, gpointer data);
61 void InfoPrg		(GtkWidget *widget, gpointer data);
62 void SetCutOpt		(GtkWidget *widget, gpointer data);
63 void SetPanOpt		(GtkWidget *widget, gpointer data);
64 void SetFrPrefs		(GtkWidget *widget, gpointer data);
65 
66 
67 void ptool_load_callback		(GtkWidget *widget, gpointer data);
68 void ptool_save_callback		(GtkWidget *widget, gpointer data);
69 
70 void pt_set_size_source			(GtkWidget *widget, gpointer data);
71 void pt_load_corr				(GtkWidget *widget, gpointer data);
72 void pt_save_corr				(GtkWidget *widget, gpointer data);
73 void pt_set_file				(GtkWidget *widget, gpointer data);
74 void pt_find_file				(GtkWidget *widget, gpointer data);
75 
76 
77 #define 	CheckButton( kRes, isChecked )											\
78 			gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON (dp[kRes]), isChecked ); \
79 			isBool[kRes]  = ( (isChecked) ? 1 : 2 );
80 
81 #define		SetText( kRes, string, var )											\
82 			sprintf( numString,  string, var);										\
83     		gtk_entry_set_text(GTK_ENTRY(dp[kRes]), numString);
84 
85 #define		SetLbl( kRes, string)													\
86 			gtk_label_set(GTK_LABEL(dp[kRes]), string);
87 
88 
89 #define		GetText( kRes, string, varaddr )										\
90 			sscanf( gtk_entry_get_text(GTK_ENTRY(dp[kRes])), string, varaddr);
91 
92 
93 #define MAKE_TABLE( hor, ver )														\
94     table = gtk_table_new(hor, ver, FALSE); 										\
95     gtk_container_border_width(GTK_CONTAINER(table), 10);							\
96     gtk_container_add(GTK_CONTAINER(frame), table);									\
97     gtk_widget_show(table);															\
98 
99 
100 #define  MAKE_TEXT_WID( kRes , left, right, top, bottom ) 							\
101     dp[kRes] = gtk_entry_new( );													\
102     gtk_widget_set_usize( dp[kRes], ENTRY_WIDTH, 0);								\
103     gtk_table_attach(GTK_TABLE(table), dp[kRes],left, right, top, bottom,			\
104         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);										\
105     gtk_widget_show(dp[kRes]);
106 
107 #define  MAKE_FTEXT_WID( kRes , left, right, top, bottom ) 							\
108     dp[kRes] = gtk_entry_new( );													\
109     gtk_widget_set_usize( dp[kRes], ENTRY_WIDTH, 0);								\
110     gtk_table_attach(GTK_TABLE(ftable), dp[kRes],left, right, top, bottom,			\
111         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);										\
112     gtk_widget_show(dp[kRes]);
113 
114 
115 
116 #define  MAKE_LABEL_WID( kRes , left, right, top, bottom ) 							\
117 	dp[kRes] = gtk_label_new("");													\
118     gtk_table_attach(GTK_TABLE(table),dp[kRes],left, right, top, bottom,     		\
119         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);										\
120     gtk_widget_show(dp[kRes]);
121 
122 #define  MAKE_TEXTLABEL( text , table, left, right, top, bottom ) 					\
123 	label = gtk_label_new(text);													\
124     gtk_table_attach(GTK_TABLE(table),label,left, right, top, bottom,     			\
125         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);										\
126     gtk_widget_show(label);
127 
128 
129 
130 #define MAKE_CHECK_BOX( kRes, label, left, right, top, bottom ) 					\
131 	dp[kRes] = gtk_check_button_new_with_label ( label );							\
132     gtk_table_attach(GTK_TABLE(table),dp[kRes],left, right, top, bottom,     		\
133         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);										\
134     gtk_widget_show(dp[kRes]);
135 
136 #define MAKE_FCHECK_BOX( kRes, label, left, right, top, bottom ) 					\
137 	dp[kRes] = gtk_check_button_new_with_label ( label );							\
138     gtk_table_attach(GTK_TABLE(ftable),dp[kRes],left, right, top, bottom,     		\
139         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);										\
140     gtk_widget_show(dp[kRes]);
141 
142 #define MAKE_RADIO_BUTTON(  kRes, label )											\
143    dp[kRes] = gtk_radio_button_new_with_label( group, label );						\
144    gtk_box_pack_start (GTK_BOX (box), dp[kRes], TRUE, TRUE, 0);						\
145    group = gtk_radio_button_group (GTK_RADIO_BUTTON (dp[kRes]));					\
146    gtk_widget_show (dp[kRes]);
147 
148 #define INSERT_BUTTON(  left, right, top, bottom ) 									\
149    gtk_table_attach(GTK_TABLE(table), button, left, right, top, bottom,       		\
150         GTK_FILL | GTK_EXPAND, GTK_FILL, 1, 1);
151 
152 #define INSERT_FBUTTON(  left, right, top, bottom ) 								\
153    gtk_table_attach(GTK_TABLE(ftable), button, left, right, top, bottom,       		\
154         GTK_FILL | GTK_EXPAND, GTK_FILL, 1, 1);
155 
156 
157 
158 #define   NUMRES	30
159 
160 
161 #define		GenCallBack( VarType,  DlgRes, Title, SetControl,SText, 			\
162 						GText, DlgAction, WinFunc)								\
163 void WinFunc (GtkWidget *widget, gpointer data)									\
164 {																				\
165     static GtkWidget 		*dlg;												\
166     GtkWidget 				*table, *button, *frame, *box, *label;				\
167     GSList 					*group = NULL;										\
168     static int 				isBool[ NUMRES ];									\
169     int i;																		\
170    	static GtkWidget*		dp[ NUMRES ];										\
171 	static VarType 			localPrefs, *thePrefs;								\
172 	char numString[32];															\
173 	static int isMain;															\
174 																				\
175 	if( data != NULL )															\
176 	{																			\
177 		isMain = ( widget == NULL );											\
178 		thePrefs = (VarType*)data;												\
179 		memcpy( &localPrefs, thePrefs, sizeof( VarType ));						\
180     	for(i=0; i<NUMRES; i++) isBool[i] = FALSE;								\
181     																			\
182 																				\
183     	dlg = gtk_dialog_new();													\
184     	gtk_window_set_title(GTK_WINDOW(dlg), Title);							\
185     	gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);				\
186     	gtk_signal_connect_object(GTK_OBJECT(dlg), "destroy",					\
187         	(GtkSignalFunc) (isMain ? pt_main_destroy : pt_widget_destroy), 	\
188         	GTK_OBJECT (dlg) );													\
189 																				\
190     	frame = gtk_frame_new("Parameter Settings");							\
191     	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);		\
192     	gtk_container_border_width(GTK_CONTAINER(frame), 10);					\
193     	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0);\
194 																				\
195   		button = gtk_button_new_with_label ("OK");								\
196   		GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);							\
197   		gtk_signal_connect (GTK_OBJECT (button), "clicked",						\
198                       (GtkSignalFunc) WinFunc,									\
199                       NULL );													\
200   		gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), 			\
201   				button, TRUE, TRUE, 0);											\
202   		gtk_widget_grab_default (button);										\
203   		gtk_widget_show (button);												\
204 																				\
205   		button = gtk_button_new_with_label ("Cancel");							\
206   		GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);							\
207   		gtk_signal_connect_object (GTK_OBJECT (button), "clicked",				\
208         (GtkSignalFunc) (isMain ? pt_main_destroy : pt_widget_destroy),			\
209                              GTK_OBJECT (dlg) );								\
210   		gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), 			\
211   				button, TRUE, TRUE, 0);											\
212   		gtk_widget_show (button);												\
213     	gtk_widget_show(frame);													\
214   																				\
215   		DlgRes																	\
216  		SText																	\
217  		SetControl																\
218 																				\
219     	gtk_widget_show(dlg);													\
220     }																			\
221 	else																		\
222 	{																			\
223 		GText																	\
224 																				\
225  		for(i=0; i < NUMRES; i++)												\
226  		{																		\
227  			if( isBool[i] == 1 )												\
228  			{																	\
229  				switch(i)														\
230  					DlgAction													\
231  			}																	\
232  		}																		\
233  		for(i=0; i < NUMRES; i++)												\
234  		{																		\
235  			if( isBool[i] && (GTK_TOGGLE_BUTTON (dp[i])->active) )				\
236  			{																	\
237  				switch(i)														\
238  					DlgAction													\
239  			}																	\
240  		}																		\
241  		memcpy( thePrefs, &localPrefs, sizeof( VarType) );						\
242  		ptools_isOK =TRUE;														\
243  		if(isMain)  gtk_main_quit();											\
244  		else        gtk_widget_destroy( dlg );									\
245 	}																			\
246 
247 
248 
249 
250 
251 #define		GenDialog( VarType,  DlgRes, Title, SetControl,SText, 				\
252 						GText, DlgAction, WinFunc)								\
253     gchar 			**argv;														\
254     gint 			argc;														\
255 																				\
256    	argc 			= 1;														\
257     argv 			= g_new(gchar *, 1);										\
258     argv[0] 		= g_strdup("dummy");										\
259 																				\
260     gtk_init(&argc, &argv);														\
261     gtk_rc_parse(gimp_gtkrc());													\
262 																				\
263 	WinFunc( NULL, (gpointer) thePrefs );										\
264  																				\
265     gtk_main();																	\
266     gdk_flush();																\
267     return ptools_isOK;															\
268 }																				\
269 	GenCallBack( VarType,  DlgRes, Title, SetControl,SText, 					\
270 						GText, DlgAction, WinFunc)								\
271 
272 
273 
274 //-------------------------- Dialog Resources-----------------------------------------
275 
276 //-------------------------- Dialogs for remap  -------------------------------------------
277 
278 #define		kSetRemapPrefs_InRect				0
279 #define		kSetRemapPrefs_InPano				1
280 #define		kSetRemapPrefs_InErect				2
281 #define		kSetRemapPrefs_InSphereCenter		3
282 #define		kSetRemapPrefs_InSphereTop			4
283 #define		kSetRemapPrefs_OutRect				5
284 #define		kSetRemapPrefs_OutPano				6
285 #define		kSetRemapPrefs_OutErect				7
286 #define		kSetRemapPrefs_OutSphereCenter		8
287 #define		kSetRemapPrefs_OutSphereTop			9
288 #define		kSetRemapPrefs_Hfov					10
289 #define		kSetRemapPrefs_Vfov					11
290 #define		kSetRemapPrefs_InMirror				12
291 #define		kSetRemapPrefs_OutMirror			13
292 #define     kSetRemapPrefs_SetPrefs				14
293 #define		kSetRemapPrefs_dlg						\
294 	{																	\
295     MAKE_TABLE(8, 4) 													\
296 																		\
297     MAKE_TEXTLABEL("HFoV:", 			table, 0, 1, 7, 8);				\
298     MAKE_TEXTLABEL("VFoV:", 			table, 2, 3, 7, 8);				\
299     frame = gtk_frame_new("From:");										\
300     gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
301     	gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
302     gtk_table_attach(GTK_TABLE(table), frame, 0, 2, 1, 7,				\
303         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
304     box = gtk_vbox_new(FALSE, 6);										\
305     gtk_container_border_width(GTK_CONTAINER(box), 5);					\
306     gtk_container_add(GTK_CONTAINER(frame), box);						\
307   	gtk_widget_show (box);												\
308   	gtk_widget_show (frame);											\
309     group = NULL;														\
310     MAKE_RADIO_BUTTON( kSetRemapPrefs_InRect,        "Normal" )			\
311     MAKE_RADIO_BUTTON( kSetRemapPrefs_InPano,        "QTVR" )			\
312     MAKE_RADIO_BUTTON( kSetRemapPrefs_InErect,       "PSphere" )		\
313     MAKE_RADIO_BUTTON( kSetRemapPrefs_InSphereTop,   "Fisheye hor." )	\
314     MAKE_RADIO_BUTTON( kSetRemapPrefs_InSphereCenter,"Fisheye vert.") 	\
315     MAKE_RADIO_BUTTON( kSetRemapPrefs_InMirror, 	 "Convex Mirror")	\
316                                        									\
317     frame = gtk_frame_new("To:");										\
318     gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
319     	gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
320     gtk_table_attach(GTK_TABLE(table), frame, 2, 4, 1, 7,				\
321         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
322     box = gtk_vbox_new(FALSE, 6);										\
323     gtk_container_border_width(GTK_CONTAINER(box), 5);					\
324     gtk_container_add(GTK_CONTAINER(frame), box);						\
325   	gtk_widget_show (box);												\
326   	gtk_widget_show (frame);											\
327     group = NULL;														\
328     MAKE_RADIO_BUTTON( kSetRemapPrefs_OutRect,        "Normal" )		\
329     MAKE_RADIO_BUTTON( kSetRemapPrefs_OutPano,        "QTVR" )			\
330     MAKE_RADIO_BUTTON( kSetRemapPrefs_OutErect,       "PSphere" )		\
331     MAKE_RADIO_BUTTON( kSetRemapPrefs_OutSphereTop,   "Fisheye hor." )	\
332     MAKE_RADIO_BUTTON( kSetRemapPrefs_OutSphereCenter,"Fisheye vert.")	\
333     MAKE_RADIO_BUTTON( kSetRemapPrefs_OutMirror, 	  "Convex Mirror")	\
334                                        									\
335  	MAKE_TEXT_WID( kSetRemapPrefs_Hfov , 		1, 2, 7, 8 );			\
336 	MAKE_TEXT_WID( kSetRemapPrefs_Vfov , 		3, 4, 7, 8 );			\
337     button = gtk_button_new_with_label ("Prefs");						\
338 	INSERT_BUTTON( 3, 4, 0, 1 );										\
339   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
340                              (GtkSignalFunc) SetSiz,					\
341                              (gpointer) gsPrPtr);						\
342     gtk_widget_show(button);											\
343 																		\
344     }
345 
346 
347 
348 //-------------------------- Dialogs for perspective  -------------------------------------------
349 
350 #define		kSetPerspectivePrefs_InRect			0
351 #define		kSetPerspectivePrefs_InSphere		1
352 #define		kSetPerspectivePrefs_Degree			2
353 #define		kSetPerspectivePrefs_Points			3
354 #define		kSetPerspectivePrefs_Keep			4
355 #define		kSetPerspectivePrefs_X				5
356 #define		kSetPerspectivePrefs_Y				6
357 #define		kSetPerspectivePrefs_Gamma			7
358 #define		kSetPerspectivePrefs_Hfov			8
359 #define		kSetPerspectivePrefs_Width			9
360 #define     kSetPerspectivePrefs_Height			10
361 #define		kSetPerspectivePrefs_SetPrefs		11
362 #define		kSetPerspectivePrefs_dlg			\
363 	{																	\
364     MAKE_TABLE(6, 4) 													\
365 																		\
366     MAKE_TEXTLABEL("Format:", 		table, 0, 1, 0, 1);					\
367     MAKE_TEXTLABEL("Turn to:", 		table, 0, 1, 1, 2);					\
368     MAKE_TEXTLABEL("Horizontal:", 	table, 1, 2, 1, 2);					\
369     MAKE_TEXTLABEL("Vertical:", 	table, 1, 2, 2, 3);					\
370     MAKE_TEXTLABEL("Rotate:", 		table, 0, 1, 3, 4);					\
371     MAKE_TEXTLABEL("Size:", 		table, 0, 1, 4, 5);					\
372     MAKE_TEXTLABEL("HFoV:", 		table, 2, 3, 3, 4);					\
373     MAKE_TEXTLABEL("Width:", 		table, 2, 3, 4, 5);					\
374     MAKE_TEXTLABEL("Height:", 		table, 2, 3, 5, 6);					\
375 																		\
376     box = gtk_hbox_new(FALSE, 2);										\
377     gtk_container_border_width(GTK_CONTAINER(box), 5);					\
378     gtk_table_attach(GTK_TABLE(table), box, 1, 3, 0, 1,					\
379         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
380   	gtk_widget_show (box);												\
381     group = NULL;														\
382     MAKE_RADIO_BUTTON( kSetPerspectivePrefs_InSphere, "Fisheye" )		\
383     MAKE_RADIO_BUTTON( kSetPerspectivePrefs_InRect,   "Rectilinear" )	\
384 																		\
385 	MAKE_TEXT_WID( kSetPerspectivePrefs_X , 		2, 3, 1, 2 );		\
386 	MAKE_TEXT_WID( kSetPerspectivePrefs_Y , 		2, 3, 2, 3 );		\
387 	MAKE_TEXT_WID( kSetPerspectivePrefs_Gamma , 	1, 2, 3, 4 );		\
388 	MAKE_TEXT_WID( kSetPerspectivePrefs_Hfov , 		3, 4, 3, 4 );		\
389 	MAKE_TEXT_WID( kSetPerspectivePrefs_Width, 		3, 4, 4, 5 );		\
390 	MAKE_TEXT_WID( kSetPerspectivePrefs_Height , 	3, 4, 5, 6 );		\
391     box = gtk_vbox_new(FALSE, 2);										\
392     gtk_container_border_width(GTK_CONTAINER(box), 5);					\
393     gtk_table_attach(GTK_TABLE(table), box, 3, 4, 1, 3,					\
394         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
395   	gtk_widget_show (box);												\
396     group = NULL;														\
397     MAKE_RADIO_BUTTON( kSetPerspectivePrefs_Points, "Pixels" )			\
398     MAKE_RADIO_BUTTON( kSetPerspectivePrefs_Degree, "Degrees" )			\
399 																		\
400     button = gtk_button_new_with_label ("Prefs");						\
401 	INSERT_BUTTON( 3, 4, 0, 1 )								     		\
402   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
403                              (GtkSignalFunc) SetSiz,					\
404                              (gpointer) gsPrPtr);						\
405     gtk_widget_show(button);											\
406 																		\
407     button = gtk_button_new_with_label ("Source");						\
408     INSERT_BUTTON( 1, 2, 4, 5)											\
409   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
410                              (GtkSignalFunc) pt_set_size_source,		\
411                              (gpointer) dp );							\
412     gtk_widget_show(button);											\
413     }
414 
415 // ------------------------- Dialogs for correct ------------------------------------------------
416 
417 #define		kSetCorrectPrefs_Save				0
418 #define		kSetCorrectPrefs_Load				1
419 #define		kSetCorrectPrefs_Radial				2
420 #define		kSetCorrectPrefs_RadialOption		3
421 #define		kSetCorrectPrefs_Horizontal			4
422 #define		kSetCorrectPrefs_HorizontalOption	5
423 #define		kSetCorrectPrefs_Vertical			6
424 #define		kSetCorrectPrefs_VerticalOption		7
425 #define		kSetCorrectPrefs_Shear				8
426 #define		kSetCorrectPrefs_ShearOption		9
427 #define		kSetCorrectPrefs_Scale				10
428 #define		kSetCorrectPrefs_ScaleOption		11
429 #define		kSetCorrectPrefs_Lum				12
430 #define		kSetCorrectPrefs_LumOpt				13
431 #define		kSetCorrectPrefs_SetPrefs			14
432 #define		kSetCorrectPrefs_CutFrame			15
433 #define		kSetCorrectPrefs_CutOpt         	16
434 #define		kSetCorrectPrefs_Fourier			17
435 #define		kSetCorrectPrefs_FourierOpt         18
436 #define		kSetCorrectPrefs_dlg					\
437 	{																	\
438   	button = gtk_button_new_with_label ("Load");						\
439   	GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);						\
440   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
441                              (GtkSignalFunc) ptool_load_callback,		\
442                              (gpointer) &localPrefs );					\
443   	gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dlg)->action_area), 			\
444   				button, TRUE, TRUE, 0);									\
445   	gtk_widget_show (button);											\
446   	button = gtk_button_new_with_label ("Save");						\
447   	GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);						\
448   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
449                              (GtkSignalFunc) ptool_save_callback,		\
450                              (gpointer) &localPrefs );					\
451   	gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dlg)->action_area), 			\
452   				button, TRUE, TRUE, 0);									\
453   	gtk_widget_show (button);											\
454     MAKE_TABLE(8, 3); 													\
455 																		\
456 	MAKE_CHECK_BOX( kSetCorrectPrefs_Radial,    "Radial",            0, 1, 0, 1 ) 	\
457 	MAKE_CHECK_BOX( kSetCorrectPrefs_Vertical,  "Vertical Shift", 	 0, 1, 1, 2 ) 	\
458 	MAKE_CHECK_BOX( kSetCorrectPrefs_Horizontal,"Horizontal Shift",  0, 1, 2, 3 ) 	\
459 	MAKE_CHECK_BOX( kSetCorrectPrefs_Shear,     "Shear",             0, 1, 3, 4 ) 	\
460 	MAKE_CHECK_BOX( kSetCorrectPrefs_Scale,     "Scale",             0, 1, 4, 5 ) 	\
461 	MAKE_CHECK_BOX( kSetCorrectPrefs_Lum,       "Radial Luminance",  0, 1, 5, 6 ) 	\
462 	MAKE_CHECK_BOX( kSetCorrectPrefs_CutFrame,  "Cut Frame",         0, 1, 6, 7 ) 	\
463 	MAKE_CHECK_BOX( kSetCorrectPrefs_Fourier,  	"Fourier Filter",    0, 1, 7, 8 ) 	\
464 																		\
465     button = gtk_button_new_with_label ("Options");						\
466     INSERT_BUTTON( 1, 2, 0, 1)								      		\
467   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
468                              (GtkSignalFunc) SetRadOpt,					\
469                              (gpointer) &localPrefs);					\
470     gtk_widget_show(button);											\
471 																		\
472     button = gtk_button_new_with_label ("Options");						\
473     INSERT_BUTTON( 1, 2, 1, 2)								     		\
474   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
475                              (GtkSignalFunc) SetVerOpt,					\
476                              (gpointer) &localPrefs);					\
477     gtk_widget_show(button);											\
478 																		\
479     button = gtk_button_new_with_label ("Options");						\
480     INSERT_BUTTON( 1, 2, 2, 3)								     		\
481   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
482                              (GtkSignalFunc) SetHorOpt,					\
483                              (gpointer) &localPrefs);					\
484     gtk_widget_show(button);											\
485 																		\
486     button = gtk_button_new_with_label ("Options");						\
487     INSERT_BUTTON( 1, 2, 3, 4)								     		\
488   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
489                              (GtkSignalFunc) SetShOpt,					\
490                              (gpointer) &localPrefs);					\
491     gtk_widget_show(button);											\
492 																		\
493     button = gtk_button_new_with_label ("Options");						\
494     INSERT_BUTTON( 1, 2, 4, 5)								     		\
495    	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
496                              (GtkSignalFunc) SetScOpt,					\
497                              (gpointer) &localPrefs);					\
498     gtk_widget_show(button);											\
499 																		\
500     button = gtk_button_new_with_label ("Options");						\
501     INSERT_BUTTON( 1, 2, 5, 6)								      		\
502    	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
503                              (GtkSignalFunc) SetLumOpt,					\
504                              (gpointer) &localPrefs);					\
505     gtk_widget_show(button);											\
506 																		\
507     button = gtk_button_new_with_label ("Options");						\
508     INSERT_BUTTON( 1, 2, 6, 7)								      		\
509   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
510                              (GtkSignalFunc) SetCutOpt,					\
511                              (gpointer) &localPrefs);					\
512     gtk_widget_show(button);											\
513 																		\
514     button = gtk_button_new_with_label ("Options");						\
515     INSERT_BUTTON( 1, 2, 7, 8)								      		\
516   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
517                              (GtkSignalFunc) SetFrPrefs,				\
518                              (gpointer) &localPrefs);					\
519     gtk_widget_show(button);											\
520 																		\
521 																		\
522     button = gtk_button_new_with_label ("Prefs");						\
523     INSERT_BUTTON( 2, 3, 0, 1)								      		\
524    	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
525                              (GtkSignalFunc) SetSiz,					\
526                              (gpointer) gsPrPtr);						\
527     gtk_widget_show(button);											\
528     }
529 
530 
531 #define 	kSetLumOptions_Red					0
532 #define 	kSetLumOptions_Green				1
533 #define 	kSetLumOptions_Blue					2
534 #define 	kSetLumOptions_dlg					\
535 	{																	\
536     MAKE_TABLE(3, 2); 													\
537 																		\
538     MAKE_TEXTLABEL("Red:", 			table, 0, 1, 0, 1);					\
539     MAKE_TEXTLABEL("Green:", 		table, 0, 1, 1, 2);					\
540     MAKE_TEXTLABEL("Blue:", 		table, 0, 1, 2, 3);					\
541  																		\
542 																		\
543 	MAKE_TEXT_WID( kSetLumOptions_Red , 		1, 2, 0, 1 );			\
544 	MAKE_TEXT_WID( kSetLumOptions_Green , 		1, 2, 1, 2 );			\
545 	MAKE_TEXT_WID( kSetLumOptions_Blue , 		1, 2, 2, 3 );			\
546     }
547 
548 #define 	kSetRadialOptions_Slit				0
549 #define     kSetRadialOptions_Red0				1
550 #define     kSetRadialOptions_Red1				2
551 #define     kSetRadialOptions_Red2				3
552 #define     kSetRadialOptions_Red3				4
553 #define     kSetRadialOptions_Green0			5
554 #define     kSetRadialOptions_Green1			6
555 #define     kSetRadialOptions_Green2			7
556 #define     kSetRadialOptions_Green3			8
557 #define     kSetRadialOptions_Blue0				9
558 #define     kSetRadialOptions_Blue1				10
559 #define     kSetRadialOptions_Blue2				11
560 #define     kSetRadialOptions_Blue3				12
561 #define 	kSetRadialOptions_dlg				\
562 	{																	\
563     MAKE_TABLE(5, 5); 													\
564 																		\
565     MAKE_TEXTLABEL("Red:", 			table, 0, 1, 1, 2);					\
566     MAKE_TEXTLABEL("Green:", 		table, 0, 1, 2, 3);					\
567     MAKE_TEXTLABEL("Blue:", 		table, 0, 1, 3, 4);					\
568     MAKE_TEXTLABEL("a * r^4 +", 	table, 1, 2, 0, 1);					\
569     MAKE_TEXTLABEL("b * r^3 +", 	table, 2, 3, 0, 1);					\
570     MAKE_TEXTLABEL("c * r^2 +", 	table, 3, 4, 0, 1);					\
571     MAKE_TEXTLABEL("d * r", 		table, 4, 5, 0, 1);					\
572  																		\
573 																		\
574 	MAKE_TEXT_WID( kSetRadialOptions_Red0 , 	4, 5, 1, 2 );			\
575 	MAKE_TEXT_WID( kSetRadialOptions_Red1 , 	3, 4, 1, 2 );			\
576 	MAKE_TEXT_WID( kSetRadialOptions_Red2 , 	2, 3, 1, 2 );			\
577 	MAKE_TEXT_WID( kSetRadialOptions_Red3 , 	1, 2, 1, 2 );			\
578 	MAKE_TEXT_WID( kSetRadialOptions_Green0 , 	4, 5, 2, 3 );			\
579 	MAKE_TEXT_WID( kSetRadialOptions_Green1 , 	3, 4, 2, 3 );			\
580 	MAKE_TEXT_WID( kSetRadialOptions_Green2 , 	2, 3, 2, 3 );			\
581 	MAKE_TEXT_WID( kSetRadialOptions_Green3 , 	1, 2, 2, 3 );			\
582 	MAKE_TEXT_WID( kSetRadialOptions_Blue0 , 	4, 5, 3, 4 );			\
583 	MAKE_TEXT_WID( kSetRadialOptions_Blue1 , 	3, 4, 3, 4 );			\
584 	MAKE_TEXT_WID( kSetRadialOptions_Blue2 , 	2, 3, 3, 4 );			\
585 	MAKE_TEXT_WID( kSetRadialOptions_Blue3 , 	1, 2, 3, 4 );			\
586 																		\
587     MAKE_CHECK_BOX( kSetRadialOptions_Slit,"Scanning Slit", 0, 2, 4, 5) \
588     }
589 
590 
591 #define    	kSetHorizontalOptions_Red			 0
592 #define    	kSetHorizontalOptions_Green			 1
593 #define    	kSetHorizontalOptions_Blue			 2
594 #define 	kSetLumOptions_RedText				 3
595 #define 	kSetLumOptions_GreenText			 4
596 #define 	kSetLumOptions_BlueText				 5
597 #define 	kSetHorizontalOptions_dlg			\
598 	{																	\
599     MAKE_TABLE(3, 2); 													\
600 																		\
601 	MAKE_LABEL_WID( kSetLumOptions_RedText ,   0, 1, 0, 1);				\
602 	MAKE_LABEL_WID( kSetLumOptions_GreenText , 0, 1, 1, 2);				\
603 	MAKE_LABEL_WID( kSetLumOptions_BlueText	 , 0, 1, 2, 3);				\
604 																		\
605 	MAKE_TEXT_WID( kSetHorizontalOptions_Red , 		1, 2, 0, 1 );		\
606 	MAKE_TEXT_WID( kSetHorizontalOptions_Green	 , 	1, 2, 1, 2 );		\
607 	MAKE_TEXT_WID( kSetHorizontalOptions_Blue, 		1, 2, 2, 3 );		\
608     }
609 
610 
611 
612 #define 	kSetShearOptions_vname				 0
613 #define 	kSetShearOptions_vvar				 1
614 #define 	kSetShearOptions_hname				 2
615 #define 	kSetShearOptions_hvar				 3
616 #define 	kSetShearOptions_dlg				\
617 	{																	\
618     MAKE_TABLE(2, 2); 													\
619 																		\
620 	MAKE_LABEL_WID( kSetShearOptions_vname , 0, 1, 0, 1);				\
621 	MAKE_LABEL_WID( kSetShearOptions_hname , 0, 1, 1, 2);				\
622 																		\
623 	MAKE_TEXT_WID( kSetShearOptions_vvar , 	1, 2, 0, 1 );				\
624 	MAKE_TEXT_WID( kSetShearOptions_hvar , 	1, 2, 1, 2 );				\
625     }
626 
627 //-------------------  Dialogs for Adjust --------------------------
628 
629 
630 #define		kSetAdjustPrefs_Insert				0
631 #define		kSetAdjustPrefs_Extract				1
632 #define		kSetAdjustPrefs_SetCtrlPts			2
633 #define		kSetAdjustPrefs_RunOptimizer		3
634 #define		kSetAdjustPrefs_Options  			4
635 #define     kSetAdjustPrefs_Script		    	5
636 #define     kSetAdjustPrefs_FindScript    		6
637 #define		kSetAdjustPrefs_SetOpt				7
638 #define		kSetAdjustPrefs_SetPrefs			8
639 #define		kSetAdjustPrefs_dlg					\
640 	{																	\
641     MAKE_TABLE(5, 4); 													\
642 																		\
643     frame = gtk_frame_new("Action:");									\
644     gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
645     	gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
646     gtk_table_attach(GTK_TABLE(table), frame, 0, 2, 1, 5,				\
647         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
648     box = gtk_vbox_new(FALSE, 4);										\
649     gtk_container_border_width(GTK_CONTAINER(box), 5);					\
650     gtk_container_add(GTK_CONTAINER(frame), box);						\
651   	gtk_widget_show (box);												\
652   	gtk_widget_show (frame);											\
653     group = NULL;														\
654     MAKE_RADIO_BUTTON( kSetAdjustPrefs_Insert,       "Insert  into Panorama" )			\
655     MAKE_RADIO_BUTTON( kSetAdjustPrefs_Extract,      "Extract from Panorama" )		\
656     MAKE_RADIO_BUTTON( kSetAdjustPrefs_SetCtrlPts,   "Read Marked Controlpoints" )	\
657     MAKE_RADIO_BUTTON( kSetAdjustPrefs_RunOptimizer,  "Run Position Optimizer" )	\
658 																		\
659     frame = gtk_frame_new("Parameters:");								\
660     gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
661     	gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
662     gtk_table_attach(GTK_TABLE(table), frame, 2, 3, 1, 3,				\
663         GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
664 	gtk_widget_show (frame);											\
665   	{																	\
666 		GtkWidget 				*ftable;								\
667     	ftable = gtk_table_new(2, 2, FALSE); 							\
668     	gtk_container_border_width(GTK_CONTAINER(ftable), 2);			\
669     	gtk_container_add(GTK_CONTAINER(frame), ftable);				\
670     	gtk_widget_show(ftable);										\
671     	box = gtk_vbox_new(FALSE, 2);									\
672     	gtk_container_border_width(GTK_CONTAINER(box), 2);				\
673     	gtk_table_attach(GTK_TABLE(ftable), box, 0, 1, 0, 2,			\
674         	GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);						\
675  		gtk_widget_show (box);											\
676     	group = NULL;													\
677     	MAKE_RADIO_BUTTON( kSetAdjustPrefs_Options,     "Use Options")	\
678     	MAKE_RADIO_BUTTON( kSetAdjustPrefs_Script,      "Use Script" )	\
679 	 																	\
680 																		\
681     	button = gtk_button_new_with_label ("Set");						\
682     	INSERT_FBUTTON( 1, 2, 0, 1)										\
683   		gtk_signal_connect (GTK_OBJECT (button), "clicked",				\
684                              (GtkSignalFunc) SetCrOpt,					\
685                              (gpointer) &localPrefs );					\
686     	gtk_widget_show(button);										\
687 																		\
688     	button = gtk_button_new_with_label ("Browse");					\
689     	INSERT_FBUTTON( 1, 2, 1, 2)										\
690   		gtk_signal_connect (GTK_OBJECT (button), "clicked",				\
691                              (GtkSignalFunc) pt_find_file,				\
692                              (gpointer) &(localPrefs.scriptFile) );		\
693     	gtk_widget_show(button);										\
694     }																	\
695     button = gtk_button_new_with_label ("Prefs");						\
696     INSERT_BUTTON( 4, 5, 0, 1)								     		\
697    	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
698                             (GtkSignalFunc) SetSiz,						\
699                             (gpointer) gsPrPtr);						\
700     gtk_widget_show(button);											\
701     }
702 
703 
704 
705 #if 0
706     MAKE_TEXTLABEL("Panning:", 			table, 3, 4, 13, 14);			\
707     button = gtk_button_new_with_label ("Set");							\
708     gtk_table_attach(GTK_TABLE(table), button, 3, 4, 14, 15,      		\
709         GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 5);							\
710   	gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
711                              (GtkSignalFunc) pt_set_pan_opt,			\
712                              NULL);										\
713     gtk_widget_show(button);											\
714 
715 #endif
716 
717 
718 #define		kSetCreateOptions_ImR				0
719 #define		kSetCreateOptions_ImP				1
720 #define		kSetCreateOptions_ImFf				2
721 #define		kSetCreateOptions_ImFc				3
722 #define		kSetCreateOptions_ImHfov			4
723 #define		kSetCreateOptions_ImW				5
724 #define		kSetCreateOptions_ImH				6
725 #define		kSetCreateOptions_Correct			7
726 #define		kSetCreateOptions_PRe				8
727 #define		kSetCreateOptions_PPa				9
728 #define		kSetCreateOptions_PSp				10
729 #define		kSetCreateOptions_PCu				11
730 #define		kSetCreateOptions_PHfov				12
731 #define		kSetCreateOptions_PWi				13
732 #define		kSetCreateOptions_PHe				14
733 #define		kSetCreateOptions_PSave				15
734 #define		kSetCreateOptions_TY				16
735 #define		kSetCreateOptions_TP				17
736 #define		kSetCreateOptions_TR				18
737 #define		kSetCreateOptions_SLoad				19
738 #define		kSetCreateOptions_SPaste			20
739 #define		kSetCreateOptions_SBlend			21
740 #define		kSetCreateOptions_SF				22
741 #define		kSetCreateOptions_SIm				23
742 #define		kSetCreateOptions_SBuf				24
743 #define		kSetCreateOptions_Sboth				25
744 #define		kSetCreateOptions_Snone				26
745 #define		kSetCreateOptions_Pan				27
746 #define		kSetCreateOptions_dlg				\
747 	{																	\
748     MAKE_TABLE(2, 2); 													\
749 																		\
750 	{																		\
751 		GtkWidget 				*ftable;									\
752     	frame = gtk_frame_new("Image:");									\
753     	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
754     		gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
755     	gtk_table_attach(GTK_TABLE(table), frame, 0, 1, 0, 1,				\
756         	GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
757   		gtk_widget_show (frame);											\
758     	ftable = gtk_table_new(4, 3, FALSE); 								\
759     	gtk_container_border_width(GTK_CONTAINER(ftable), 2);				\
760     	gtk_container_add(GTK_CONTAINER(frame), ftable);					\
761     	gtk_widget_show(ftable);											\
762      	frame = gtk_frame_new("Format:");									\
763     	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
764     		gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
765     	gtk_table_attach(GTK_TABLE(ftable), frame, 2, 3, 0, 4,				\
766         	GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
767     	box = gtk_vbox_new(FALSE, 4);										\
768     	gtk_container_border_width(GTK_CONTAINER(box), 2);					\
769     	gtk_container_add(GTK_CONTAINER(frame), box);						\
770   		gtk_widget_show (box);												\
771   		gtk_widget_show (frame);											\
772     	group = NULL;														\
773     	MAKE_RADIO_BUTTON( kSetCreateOptions_ImR,     "Rectilinear")		\
774     	MAKE_RADIO_BUTTON( kSetCreateOptions_ImP,     "Panoramic")			\
775     	MAKE_RADIO_BUTTON( kSetCreateOptions_ImFf,    "Fisheye fullfr.")	\
776     	MAKE_RADIO_BUTTON( kSetCreateOptions_ImFc,    "Fisheye circ.")		\
777    		MAKE_TEXTLABEL("HFoV:", 			ftable, 0, 1, 0, 1);			\
778     	MAKE_TEXTLABEL("Width:", 		ftable, 0, 1, 1, 2);				\
779     	MAKE_TEXTLABEL("Height:", 		ftable, 0, 1, 2, 3);				\
780     	button = gtk_button_new_with_label ("Correct");						\
781     	INSERT_FBUTTON( 1, 2, 3, 4)								    		\
782   		gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
783                              (GtkSignalFunc) SetCPrefs,						\
784                              (gpointer) &localPrefs.im.cP);					\
785     	gtk_widget_show(button);											\
786 		MAKE_FTEXT_WID( kSetCreateOptions_ImHfov , 	1, 2, 0, 1 );			\
787 		MAKE_FTEXT_WID( kSetCreateOptions_ImW , 	1, 2, 1, 2 );			\
788 		MAKE_FTEXT_WID( kSetCreateOptions_ImH , 	1, 2, 2, 3 );			\
789   	}																		\
790 	{																		\
791 		GtkWidget 				*ftable;									\
792     	frame = gtk_frame_new("Panorama:");									\
793     	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
794     		gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
795     	gtk_table_attach(GTK_TABLE(table), frame, 0, 1, 1, 2,				\
796         	GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
797   		gtk_widget_show (frame);											\
798     	ftable = gtk_table_new(4, 3, FALSE); 								\
799     	gtk_container_border_width(GTK_CONTAINER(ftable), 2);				\
800     	gtk_container_add(GTK_CONTAINER(frame), ftable);					\
801     	gtk_widget_show(ftable);											\
802      	frame = gtk_frame_new("Format:");									\
803     	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
804     		gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
805     	gtk_table_attach(GTK_TABLE(ftable), frame, 2, 3, 0, 3,				\
806         	GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
807     	box = gtk_vbox_new(FALSE, 3);										\
808     	gtk_container_border_width(GTK_CONTAINER(box), 2);					\
809     	gtk_container_add(GTK_CONTAINER(frame), box);						\
810   		gtk_widget_show (box);												\
811   		gtk_widget_show (frame);											\
812     	group = NULL;														\
813    		MAKE_RADIO_BUTTON( kSetCreateOptions_PRe,  "Rectilinear")			\
814     	MAKE_RADIO_BUTTON( kSetCreateOptions_PPa,  "QTVR-Panorama")			\
815     	MAKE_RADIO_BUTTON( kSetCreateOptions_PSp,  "PSphere")				\
816 		MAKE_FCHECK_BOX(kSetCreateOptions_PSave, "Save to Buffer", 0, 2, 3, 4 ) \
817     	MAKE_TEXTLABEL("HFoV:", 			ftable, 0, 1, 0, 1);			\
818     	MAKE_TEXTLABEL("Width:", 			ftable, 0, 1, 1, 2);			\
819     	MAKE_TEXTLABEL("Height:", 			ftable, 0, 1, 2, 3);			\
820 		MAKE_FTEXT_WID( kSetCreateOptions_PHfov , 	1, 2, 0, 1 );			\
821 		MAKE_FTEXT_WID( kSetCreateOptions_PWi , 	1, 2, 1, 2 );			\
822 		MAKE_FTEXT_WID( kSetCreateOptions_PHe , 	1, 2, 2, 3 );			\
823   	}																		\
824 	{																		\
825 		GtkWidget 				*ftable;									\
826     	frame = gtk_frame_new("Position:");									\
827     	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
828     		gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
829     	gtk_table_attach(GTK_TABLE(table), frame, 1, 2, 0, 1,				\
830         	GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
831   		gtk_widget_show (frame);											\
832     	ftable = gtk_table_new(3, 2, FALSE); 								\
833     	gtk_container_border_width(GTK_CONTAINER(ftable), 2);				\
834     	gtk_container_add(GTK_CONTAINER(frame), ftable);					\
835     	gtk_widget_show(ftable);											\
836     	MAKE_TEXTLABEL("Yaw: -180...+180", 	ftable, 0, 1, 0, 1);			\
837     	MAKE_TEXTLABEL("Pitch: -90...+90", 	ftable, 0, 1, 1, 2);			\
838     	MAKE_TEXTLABEL("Roll:", 				ftable, 0, 1, 2, 3);			\
839 		MAKE_FTEXT_WID( kSetCreateOptions_TY , 		1, 2, 0, 1 );			\
840 		MAKE_FTEXT_WID( kSetCreateOptions_TP , 		1, 2, 1, 2 );			\
841 		MAKE_FTEXT_WID( kSetCreateOptions_TR , 		1, 2, 2, 3 );			\
842   	}																		\
843 	{																		\
844 		GtkWidget 				*ftable;									\
845     	frame = gtk_frame_new("Stitching:");								\
846     	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
847     		gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
848     	gtk_table_attach(GTK_TABLE(table), frame, 1, 2, 1, 2,				\
849         	GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
850   		gtk_widget_show (frame);											\
851     	ftable = gtk_table_new(4, 4, FALSE); 								\
852     	gtk_container_border_width(GTK_CONTAINER(ftable), 2);				\
853     	gtk_container_add(GTK_CONTAINER(frame), ftable);					\
854     	gtk_widget_show(ftable);											\
855 		MAKE_FCHECK_BOX(kSetCreateOptions_SLoad, "Load Buffer and ", 0, 2, 0, 1 ) \
856     	box = gtk_vbox_new(FALSE, 2);										\
857     	gtk_container_border_width(GTK_CONTAINER(box), 2);					\
858     	gtk_table_attach(GTK_TABLE(ftable), box, 0, 2, 1, 3,				\
859         	GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 0);							\
860 		gtk_widget_show (box);												\
861     	group = NULL;														\
862     	MAKE_RADIO_BUTTON(kSetCreateOptions_SBlend,  "blend or")			\
863     	MAKE_RADIO_BUTTON(kSetCreateOptions_SPaste,  "paste")				\
864     	MAKE_TEXTLABEL("Feather:", 			ftable, 0, 1, 3, 4);			\
865 		MAKE_FTEXT_WID( kSetCreateOptions_SF , 		1, 2, 3, 4 );			\
866     	frame = gtk_frame_new("Color Adjustment:");							\
867     	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);	\
868     		gtk_container_border_width(GTK_CONTAINER(frame), 2);			\
869     	gtk_table_attach(GTK_TABLE(ftable), frame, 2, 4, 0, 4,				\
870         	GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);							\
871     	box = gtk_vbox_new(FALSE, 4);										\
872     	gtk_container_border_width(GTK_CONTAINER(box), 2);					\
873     	gtk_container_add(GTK_CONTAINER(frame), box);						\
874   		gtk_widget_show (box);												\
875   		gtk_widget_show (frame);											\
876     	group = NULL;														\
877      	MAKE_RADIO_BUTTON(kSetCreateOptions_SIm,    "Image")				\
878     	MAKE_RADIO_BUTTON(kSetCreateOptions_SBuf,   "Buffer")				\
879     	MAKE_RADIO_BUTTON(kSetCreateOptions_Sboth,  "Both")					\
880     	MAKE_RADIO_BUTTON(kSetCreateOptions_Snone,  "None")					\
881   	}																		\
882     }
883 
884 //-------------------- Interpolator Selection ------------------------------
885 
886 #define kSetIntpPrefs_Poly          0
887 #define kSetIntpPrefs_Sp36          1
888 #define kSetIntpPrefs_Sp64			2
889 #define kSetIntpPrefs_Sinc256		3
890 #define kSetIntpPrefs_AAHammering   4
891 #define kSetIntpPrefs_AAGaussian    5
892 #define kSetIntpPrefs_AAQuadratic   6
893 #define kSetIntpPrefs_AAMitchell    7
894 #define kSetIntpPrefs_AALauczos2    8
895 #define kSetIntpPrefs_AALauczos3    9
896 #define kSetIntpPrefs_FastTNorm		10
897 #define kSetIntpPrefs_FastTMed		11
898 #define kSetIntpPrefs_FastTFast		12
899 #define kSetIntpPrefs_Gamma	        13
900 #define kSetIntpPrefs_SetIntp													\
901 	MAKE_TABLE(3, 6);												\
902                                                                         \
903     MAKE_TEXTLABEL("<- Faster",         table, 2, 3, 1, 2);             \
904     MAKE_TEXTLABEL("Better ->",         table, 2, 3, 2, 3);             \
905                                                                         \
906     box = gtk_vbox_new(FALSE, 4);                                       \
907     gtk_container_border_width(GTK_CONTAINER(box), 5);                  \
908     gtk_table_attach(GTK_TABLE(table), box, 0, 2, 0, 4,                 \
909         GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 0);                         \
910     gtk_widget_show (box);                                              \
911     group = NULL;                                                       \
912 	MAKE_RADIO_BUTTON( kSetIntpPrefs_Poly,	  _("Polynomial 16 pixels"))	\
913 	MAKE_RADIO_BUTTON( kSetIntpPrefs_Sp36,	  _("Spline		36 pixels"))	\
914 	MAKE_RADIO_BUTTON( kSetIntpPrefs_Sp64,	  _("Spline		64 pixels"))	\
915 	MAKE_RADIO_BUTTON( kSetIntpPrefs_Sinc256,  _("Sinc		256 pixels"))	\
916 	MAKE_RADIO_BUTTON( kSetIntpPrefs_AAHammering,  _("Hammering		1.0"))	\
917 	MAKE_RADIO_BUTTON( kSetIntpPrefs_AAGaussian,  _("Gaussian	1.2"))	\
918 	MAKE_RADIO_BUTTON( kSetIntpPrefs_AAQuadratic,  _("Quadratic	1.5"))	\
919 	MAKE_RADIO_BUTTON( kSetIntpPrefs_AAMitchell,  _("Mitchell	2.0"))	\
920 	MAKE_RADIO_BUTTON( kSetIntpPrefs_AALauczos2,  _("Lauczos2	2.0"))	\
921 	MAKE_RADIO_BUTTON( kSetIntpPrefs_AALauczos3,  _("Lauczos3	3.0"))	\
922 																	\
923 	MAKE_BFRAME(table, _("Interpolation speed:"), 0, 2, 4, 5, 3);	\
924 	MAKE_RADIO_BUTTON( kSetIntpPrefs_FastTNorm, _("Normal") )		\
925 	MAKE_RADIO_BUTTON( kSetIntpPrefs_FastTMed,  _("Medium") )		\
926 	MAKE_RADIO_BUTTON( kSetIntpPrefs_FastTFast, _("Fast") )			\
927 																	\
928 	MAKE_TEXTLABEL(_("Gamma:"),		  table, 0, 1, 5, 6);			\
929 	MAKE_TEXT_WID( kSetIntpPrefs_Gamma ,		1, 2, 5, 6 );
930 
931 
932 
933 #define kSetSizePrefs_Crop				0
934 #define kSetSizePrefs_SFile  			1
935 #define kSetSizePrefs_SetInt			2
936 #define kSetSizePrefs_dlg				\
937   	    MAKE_TABLE(3, 3); 															\
938 																					\
939     	MAKE_TEXTLABEL("If source and result size differ:", table, 0, 2, 0, 1);		\
940 																					\
941     	box = gtk_vbox_new(FALSE, 2);												\
942     	gtk_container_border_width(GTK_CONTAINER(box), 5);							\
943     	gtk_table_attach(GTK_TABLE(table), box, 0, 2, 1, 3,							\
944         	GTK_FILL | GTK_EXPAND, GTK_FILL,0, 0);									\
945 		gtk_widget_show (box);														\
946     	group = NULL;																\
947     	MAKE_RADIO_BUTTON( kSetSizePrefs_Crop, "Display cropped/framed image")		\
948     	MAKE_RADIO_BUTTON( kSetSizePrefs_SFile, "Resize image")						\
949      																				\
950     	button = gtk_button_new_with_label ("More");								\
951     	INSERT_BUTTON( 2, 3, 0, 1)								    				\
952   		gtk_signal_connect (GTK_OBJECT (button), "clicked",							\
953                              (GtkSignalFunc) SetIntp,								\
954                              (gpointer) &localPrefs);								\
955     	gtk_widget_show(button);													\
956 
957 
958 #define		kSetFourierOptions_PSDname			0
959 #define		kSetFourierOptions_findPSD			1
960 #define		kSetFourierOptions_addBlur			2
961 #define		kSetFourierOptions_remBlur			3
962 #define		kSetFourierOptions_internal			4
963 #define		kSetFourierOptions_custom			5
964 #define		kSetFourierOptions_findNFF			6
965 #define		kSetFourierOptions_filterfactor		7
966 #define		kSetFourierOptions_fourier_frame	8
967 #define		kSetFourierOptions_dlg				\
968 		MAKE_TABLE(4,7);		\
969     	MAKE_TEXTLABEL("Point Spread Image:", table, 0, 2, 0, 1);			\
970     	button = gtk_button_new_with_label ("Browse");						\
971 		INSERT_BUTTON( 3, 4, 0, 1)								     		\
972   		gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
973                              (GtkSignalFunc) pt_find_file,					\
974                              (gpointer) &(localPrefs.psf) );					\
975     	gtk_widget_show(button);											\
976 																			\
977     	MAKE_TEXTLABEL("Mode:", table, 0, 1, 2, 3);							\
978     	box = gtk_vbox_new(FALSE, 2);										\
979     	gtk_container_border_width(GTK_CONTAINER(box), 5);					\
980     	gtk_table_attach(GTK_TABLE(table), box, 1, 3, 2, 4,					\
981         	GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 0);							\
982 		gtk_widget_show (box);												\
983     	group = NULL;														\
984     	MAKE_RADIO_BUTTON( kSetFourierOptions_addBlur,    "Add Blur")		\
985     	MAKE_RADIO_BUTTON( kSetFourierOptions_remBlur,    "Remove Blur")	\
986     	MAKE_TEXTLABEL("Noise Reduction", table, 0, 1, 4, 5);				\
987     	box = gtk_vbox_new(FALSE, 2);										\
988     	gtk_container_border_width(GTK_CONTAINER(box), 5);					\
989     	gtk_table_attach(GTK_TABLE(table), box, 1, 3, 4, 6,					\
990         	GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 0);							\
991 		gtk_widget_show (box);												\
992     	group = NULL;														\
993     	MAKE_RADIO_BUTTON( kSetFourierOptions_internal,    "Internal")		\
994     	MAKE_RADIO_BUTTON( kSetFourierOptions_custom,    "External")		\
995     	button = gtk_button_new_with_label ("Browse");						\
996 		INSERT_BUTTON( 3, 4, 5, 6)								     		\
997   		gtk_signal_connect (GTK_OBJECT (button), "clicked",					\
998                              (GtkSignalFunc) pt_find_file,					\
999                              (gpointer) &(localPrefs.nff) );				\
1000     	gtk_widget_show(button);											\
1001     	MAKE_TEXTLABEL("Filter Factor:", table, 0, 1, 6, 7);				\
1002 		MAKE_TEXT_WID( kSetFourierOptions_filterfactor , 1, 2, 6, 7 );		\
1003     	MAKE_TEXTLABEL("Frame", table, 2, 3, 6, 7);							\
1004 		MAKE_TEXT_WID( kSetFourierOptions_fourier_frame , 3, 4, 6, 7 );		\
1005 																			\
1006 
1007 
1008 
1009 
1010 
1011 #endif
1012