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