1 #   include	"appFrameConfig.h"
2 
3 #   include	<stdio.h>
4 
5 #   include	"appFrame.h"
6 
7 #   include	<appDebugon.h>
8 
9 #   ifdef USE_GTK
10 
11 #   include	<gdk/gdkkeysyms.h>
12 
13 /************************************************************************/
14 /*									*/
15 /*  Make a dialog with a vertical organisation.				*/
16 /*									*/
17 /************************************************************************/
18 
appMakeVerticalDialog(AppDialog * ad,APP_WIDGET * pColumn,EditApplication * ea,APP_CLOSE_CALLBACK_T closeCallback,APP_DESTROY_CALLBACK_T destroyCallback,void * through)19 void appMakeVerticalDialog(	AppDialog *		ad,
20 				APP_WIDGET *		pColumn,
21 				EditApplication *	ea,
22 				APP_CLOSE_CALLBACK_T	closeCallback,
23 				APP_DESTROY_CALLBACK_T	destroyCallback,
24 				void *			through )
25     {
26     APP_WIDGET		shell;
27     APP_WIDGET		column;
28 
29 #   if  GTK_MAJOR_VERSION < 2
30     const gboolean	homogeneous= FALSE;
31     const gint		spacing= COLUMN_SPACING_GTK;
32 #   endif
33 
34 #   if GTK_MAJOR_VERSION < 2
35     shell= gtk_window_new( GTK_WINDOW_DIALOG );
36 #   else
37     shell= gtk_dialog_new();
38 #   endif
39 
40     gtk_window_set_position( GTK_WINDOW( shell ), GTK_WIN_POS_CENTER );
41 
42     if  ( closeCallback )
43 	{
44 	gtk_signal_connect( GTK_OBJECT( shell ),
45 					    "delete_event",
46 					    (GtkSignalFunc)closeCallback,
47 					    through );
48 	}
49 
50     if  ( destroyCallback )
51 	{
52 	gtk_signal_connect( GTK_OBJECT( shell ),
53 					    "destroy_event",
54 					    (GtkSignalFunc)destroyCallback,
55 					    through );
56 	}
57 
58     gtk_container_set_border_width( GTK_CONTAINER( shell ), WINDOW_BORDER_GTK );
59 
60 #   if  GTK_MAJOR_VERSION < 2
61     column= gtk_vbox_new( homogeneous, spacing );
62 
63     gtk_container_add( GTK_CONTAINER( shell ), column );
64 
65     gtk_widget_show( column );
66 #   else
67     column= gtk_bin_get_child( GTK_BIN( shell ) );
68 #   endif
69 
70     ad->adAccelGroup= gtk_accel_group_new();
71 #   if GTK_MAJOR_VERSION < 2
72     gtk_accel_group_attach( ad->adAccelGroup, GTK_OBJECT( shell ) );
73 #   else
74     gtk_window_add_accel_group( GTK_WINDOW( shell ), ad->adAccelGroup );
75 #   endif
76 
77     ad->adTopWidget= shell; *pColumn= column;
78     return;
79     }
80 
appGuiGtkDialogBreak(GtkWidget * w,GdkEvent * event,void * voidad)81 static void appGuiGtkDialogBreak(	GtkWidget *		w,
82 					GdkEvent *		event,
83 					void *			voidad )
84     {
85     AppDialog *		ad= (AppDialog *)voidad;
86 
87     ad->adCloseId= 0;
88 
89     gtk_main_quit();
90 
91     return;
92     }
93 
appGuiRunDialog(AppDialog * ad,int initial,EditApplication * ea)94 void appGuiRunDialog(			AppDialog *		ad,
95 					int			initial,
96 					EditApplication *	ea )
97     {
98     gtk_window_set_modal( GTK_WINDOW( ad->adTopWidget ), TRUE );
99 
100     ad->adResponse= initial;
101 
102     ad->adCloseId= gtk_signal_connect( GTK_OBJECT( ad->adTopWidget ),
103 					"delete_event",
104 					(GtkSignalFunc)appGuiGtkDialogBreak,
105 					(void *)ad );
106 
107     gtk_main();
108 
109     if  ( ad->adCloseId )
110 	{
111 	gtk_signal_disconnect( GTK_OBJECT( ad->adTopWidget ), ad->adCloseId );
112 
113 	if  ( ad->adResponse == AQDrespCLOSED )
114 	    { appGuiHideDialog( ad );			}
115 
116 	ad->adCloseId= 0;
117 	}
118 
119     if  ( ad->adResponse != AQDrespCLOSED )
120 	{ gtk_window_set_modal( GTK_WINDOW( ad->adTopWidget ), FALSE );	}
121 
122     return;
123     }
124 
appGuiBreakDialog(AppDialog * ad,int response)125 void appGuiBreakDialog(			AppDialog *		ad,
126 					int			response )
127     {
128     ad->adResponse= response;
129     gtk_main_quit();
130     }
131 
appGuiSetDefaultButtonForDialog(AppDialog * ad,APP_WIDGET button)132 void appGuiSetDefaultButtonForDialog(	AppDialog *		ad,
133 					APP_WIDGET		button )
134     {
135     unsigned int	keyMask= 0;
136     unsigned int	keyCode= GDK_Return;
137 
138     gtk_widget_add_accelerator( button, "clicked", ad->adAccelGroup,
139 					keyCode, keyMask, GTK_ACCEL_VISIBLE );
140     }
141 
appGuiSetCancelButtonForDialog(AppDialog * ad,APP_WIDGET button)142 void appGuiSetCancelButtonForDialog(	AppDialog *		ad,
143 					APP_WIDGET		button )
144     {
145     unsigned int	keyMask= 0;
146     unsigned int	keyCode= GDK_Escape;
147 
148     gtk_widget_add_accelerator( button, "clicked", ad->adAccelGroup,
149 					keyCode, keyMask, GTK_ACCEL_VISIBLE );
150     }
151 
appGuiShowDialog(EditApplication * ea,AppDialog * ad,APP_WIDGET relative)152 void appGuiShowDialog(			EditApplication *	ea,
153 					AppDialog *		ad,
154 					APP_WIDGET		relative )
155     {
156     gint		x;
157     gint		y;
158     gint		wide;
159     gint		high;
160 
161     if  ( relative )
162 	{
163 	gtk_window_set_transient_for(
164 		    GTK_WINDOW( ad->adTopWidget ), GTK_WINDOW( relative ) );
165 
166 	gtk_window_set_position( GTK_WINDOW( ad->adTopWidget ),
167 							GTK_WIN_POS_NONE );
168 
169 	gtk_widget_realize( ad->adTopWidget );
170 
171 	gdk_window_get_position( relative->window, &x, &y );
172 	gdk_window_get_size( relative->window, &wide, &high );
173 
174 	gdk_window_move( ad->adTopWidget->window, x+ wide/5, y+ high/ 5 );
175 	}
176     else{
177 	gtk_window_set_position( GTK_WINDOW( ad->adTopWidget ),
178 							GTK_WIN_POS_CENTER );
179 	}
180 
181     gtk_widget_show( ad->adTopWidget );
182     }
183 
appGuiHideDialog(AppDialog * ad)184 void appGuiHideDialog(			AppDialog *		ad )
185     {
186     gtk_widget_hide( ad->adTopWidget );
187 
188     gtk_window_set_transient_for(
189 			    GTK_WINDOW( ad->adTopWidget ), (GtkWindow *)0 );
190     }
191 
192 #   endif
193