1
|
1 /*
|
|
2 * GQview image viewer
|
3
|
3 * (C)2000 John Ellis
|
1
|
4 *
|
|
5 * Author: John Ellis
|
|
6 *
|
|
7 */
|
|
8
|
|
9 #include "gqview.h"
|
3
|
10 #include "image.h"
|
1
|
11
|
|
12 static void warning_dialog_close(GtkWidget *w, gpointer data);
|
|
13 static void warning_dialog_destroy(GtkWidget *w, GdkEvent *event, gpointer data);
|
|
14
|
|
15 static void confirm_dialog_click_cb(GtkWidget *w, gpointer data);
|
|
16 static void confirm_dialog_delete_cb(GtkWidget *w, GdkEvent *event, gpointer data);
|
|
17
|
|
18 static void generic_dialog_delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data);
|
|
19
|
|
20
|
|
21 /*
|
|
22 *-----------------------------------------------------------------------------
|
|
23 * warning dialog routines
|
|
24 *-----------------------------------------------------------------------------
|
|
25 */
|
|
26
|
|
27 static void warning_dialog_close(GtkWidget *w, gpointer data)
|
|
28 {
|
|
29 GtkWidget *warning_window = data;
|
|
30 gtk_widget_destroy(warning_window);
|
|
31 }
|
|
32
|
|
33 static void warning_dialog_destroy(GtkWidget *w, GdkEvent *event, gpointer data)
|
|
34 {
|
|
35 warning_dialog_close(NULL, data);
|
|
36 }
|
|
37
|
|
38 void warning_dialog(gchar *title, gchar *message)
|
|
39 {
|
|
40 GtkWidget *warning_window;
|
|
41 GtkWidget *hbox;
|
|
42 GtkWidget *vbox;
|
|
43 GtkWidget *label;
|
|
44 GtkWidget *button;
|
|
45
|
|
46 warning_window = gtk_window_new(GTK_WINDOW_DIALOG);
|
|
47 gtk_signal_connect (GTK_OBJECT (warning_window), "delete_event",(GtkSignalFunc) warning_dialog_destroy, warning_window);
|
|
48 gtk_window_set_policy (GTK_WINDOW(warning_window), FALSE, FALSE, TRUE);
|
|
49 gtk_window_set_title (GTK_WINDOW (warning_window), title);
|
|
50 gtk_container_border_width (GTK_CONTAINER (warning_window), 10);
|
|
51
|
|
52 vbox = gtk_vbox_new(FALSE, 5);
|
|
53 gtk_container_add(GTK_CONTAINER(warning_window),vbox);
|
|
54 gtk_widget_show(vbox);
|
|
55
|
|
56 label = gtk_label_new(message);
|
|
57 gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
|
|
58 gtk_widget_show(label);
|
|
59
|
|
60 label = gtk_hseparator_new();
|
|
61 gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
|
|
62 gtk_widget_show(label);
|
|
63
|
|
64 hbox = gtk_hbox_new(TRUE, 5);
|
|
65 gtk_container_add(GTK_CONTAINER(vbox),hbox);
|
|
66 gtk_widget_show(hbox);
|
|
67
|
|
68 button = gtk_button_new_with_label(_(" Ok "));
|
|
69 gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) warning_dialog_close, warning_window);
|
|
70 gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,0);
|
|
71 gtk_widget_show(button);
|
|
72
|
|
73 gtk_widget_show(warning_window);
|
|
74 }
|
|
75
|
|
76 /*
|
|
77 *-----------------------------------------------------------------------------
|
|
78 * confirmation dialog
|
|
79 *-----------------------------------------------------------------------------
|
|
80 */
|
|
81
|
|
82 static void confirm_dialog_click_cb(GtkWidget *w, gpointer data)
|
|
83 {
|
|
84 ConfirmDialog *cd = data;
|
|
85 gtk_widget_destroy(cd->dialog);
|
|
86 g_free(cd);
|
|
87 }
|
|
88
|
|
89 static void confirm_dialog_delete_cb(GtkWidget *w, GdkEvent *event, gpointer data)
|
|
90 {
|
|
91 ConfirmDialog *cd = data;
|
|
92 cd->cancel_cb(NULL, cd->data);
|
|
93 confirm_dialog_click_cb(w, data);
|
|
94 }
|
|
95
|
|
96 void confirm_dialog_add(ConfirmDialog *cd, gchar *text, void (*func_cb)(GtkWidget *, gpointer))
|
|
97 {
|
|
98 GtkWidget *button;
|
|
99 button = gtk_button_new_with_label(text);
|
|
100 gtk_signal_connect(GTK_OBJECT(button), "clicked", func_cb, cd->data);
|
|
101 gtk_signal_connect(GTK_OBJECT(button), "clicked", confirm_dialog_click_cb, cd);
|
|
102 gtk_box_pack_end(GTK_BOX(cd->hbox), button, TRUE, TRUE, 0);
|
|
103 gtk_widget_grab_focus(button);
|
|
104 gtk_widget_show(button);
|
|
105 }
|
|
106
|
|
107 ConfirmDialog *confirm_dialog_new(gchar *title, gchar *message, void (*cancel_cb)(GtkWidget *, gpointer), gpointer data)
|
|
108 {
|
|
109 ConfirmDialog *cd;
|
|
110 GtkWidget *vbox;
|
|
111 GtkWidget *label;
|
|
112
|
|
113 cd = g_new0(ConfirmDialog, 1);
|
|
114 cd->data = data;
|
|
115 cd->cancel_cb = cancel_cb;
|
|
116
|
|
117 cd->dialog = gtk_window_new(GTK_WINDOW_DIALOG);
|
|
118 gtk_signal_connect (GTK_OBJECT (cd->dialog), "delete_event", confirm_dialog_delete_cb, cd);
|
|
119 gtk_window_set_policy (GTK_WINDOW(cd->dialog), FALSE, FALSE, TRUE);
|
|
120 gtk_window_set_title (GTK_WINDOW (cd->dialog), title);
|
|
121 gtk_container_border_width (GTK_CONTAINER (cd->dialog), 10);
|
|
122
|
|
123 vbox = gtk_vbox_new(FALSE, 15);
|
|
124 gtk_container_add(GTK_CONTAINER(cd->dialog),vbox);
|
|
125 gtk_widget_show(vbox);
|
|
126
|
|
127 label = gtk_label_new(message);
|
|
128 gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
|
|
129 gtk_widget_show(label);
|
|
130
|
3
|
131 cd->util_hbox = gtk_hbox_new(FALSE, 0);
|
|
132 gtk_box_pack_start(GTK_BOX(vbox), cd->util_hbox, TRUE, TRUE, 0);
|
|
133 gtk_widget_show(cd->util_hbox);
|
|
134
|
1
|
135 label = gtk_hseparator_new();
|
3
|
136 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
|
1
|
137 gtk_widget_show(label);
|
|
138
|
|
139 cd->hbox = gtk_hbox_new(TRUE, 15);
|
3
|
140 gtk_box_pack_start(GTK_BOX(vbox), cd->hbox, FALSE, FALSE, 0);
|
1
|
141 gtk_widget_show(cd->hbox);
|
|
142
|
|
143 gtk_widget_show(cd->dialog);
|
|
144
|
|
145 confirm_dialog_add(cd, _("Cancel"), cd->cancel_cb);
|
|
146
|
|
147 return cd;
|
|
148 }
|
|
149
|
3
|
150 ConfirmDialog *confirm_dialog_new_with_image(gchar *title, gchar *message,
|
|
151 gchar *img_path1, gchar *img_path2,
|
|
152 void (*cancel_cb)(GtkWidget *, gpointer), gpointer data)
|
|
153 {
|
|
154 ConfirmDialog *cd;
|
|
155 GtkWidget *vbox;
|
|
156 GtkWidget *label;
|
|
157 ImageWindow *image1;
|
|
158 ImageWindow *image2;
|
|
159
|
|
160 cd = confirm_dialog_new(title, message, cancel_cb, data);
|
|
161
|
|
162 gtk_widget_set_usize (cd->dialog, 600, 450);
|
|
163 gtk_window_set_policy (GTK_WINDOW(cd->dialog), FALSE, TRUE, FALSE);
|
|
164
|
|
165 gtk_box_set_homogeneous(GTK_BOX(cd->util_hbox), TRUE);
|
|
166
|
|
167 if (img_path1)
|
|
168 {
|
|
169 vbox = gtk_vbox_new(FALSE, 5);
|
|
170 gtk_box_pack_start(GTK_BOX(cd->util_hbox), vbox, TRUE, TRUE, 0);
|
|
171 gtk_widget_show(vbox);
|
|
172
|
|
173 image1 = image_area_new(NULL);
|
|
174 gtk_box_pack_start(GTK_BOX(vbox), image1->eventbox, TRUE, TRUE, 0);
|
|
175 image_area_set_image (image1, img_path1, ZOOM_RESET_ORIGINAL);
|
|
176 gtk_widget_show_all(image1->eventbox);
|
|
177 gtk_object_set_data_full(GTK_OBJECT(image1->eventbox), "image1", image1,
|
|
178 (GtkDestroyNotify)image_area_free);
|
|
179
|
|
180 label = gtk_label_new(img_path1);
|
|
181 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
|
|
182 gtk_widget_show(label);
|
|
183 }
|
|
184
|
|
185 if (img_path2)
|
|
186 {
|
|
187 vbox = gtk_vbox_new(FALSE, 5);
|
|
188 gtk_box_pack_start(GTK_BOX(cd->util_hbox), vbox, TRUE, TRUE, 0);
|
|
189 gtk_widget_show(vbox);
|
|
190
|
|
191 image2 = image_area_new(NULL);
|
|
192 gtk_box_pack_start(GTK_BOX(vbox), image2->eventbox, TRUE, TRUE, 0);
|
|
193 image_area_set_image (image2, img_path2, ZOOM_RESET_ORIGINAL);
|
|
194 gtk_widget_show_all(image2->eventbox);
|
|
195 gtk_object_set_data_full(GTK_OBJECT(image2->eventbox), "image2", image2,
|
|
196 (GtkDestroyNotify)image_area_free);
|
|
197
|
|
198 label = gtk_label_new(img_path2);
|
|
199 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
|
|
200 gtk_widget_show(label);
|
|
201 }
|
|
202
|
|
203 return cd;
|
|
204 }
|
|
205
|
1
|
206 /*
|
|
207 *-----------------------------------------------------------------------------
|
|
208 * generic file ops dialog routines
|
|
209 *-----------------------------------------------------------------------------
|
|
210 */
|
|
211
|
|
212 void generic_dialog_close(GtkWidget *widget, gpointer data)
|
|
213 {
|
|
214 FileDialog *fd = data;
|
|
215 if(fd->dialog) gtk_widget_destroy(fd->dialog);
|
|
216 g_free(fd->source_path);
|
|
217 g_free(fd->dest_path);
|
|
218 if (fd->source_list) free_selected_list(fd->source_list);
|
|
219 g_free(fd);
|
|
220 }
|
|
221
|
|
222 static void generic_dialog_delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
|
|
223 {
|
|
224 generic_dialog_close(NULL, data);
|
|
225 }
|
|
226
|
|
227 FileDialog *generic_dialog_new(gchar *title, gchar *text, gchar *btn1, gchar *btn2,
|
|
228 void (*btn1_cb)(GtkWidget *, gpointer),
|
|
229 void (*btn2_cb)(GtkWidget *, gpointer))
|
|
230 {
|
|
231 FileDialog *fd = NULL;
|
|
232 GtkWidget *button;
|
|
233 GtkWidget *hbox;
|
|
234 GtkWidget *label;
|
|
235
|
|
236 fd = g_new0(FileDialog, 1);
|
|
237
|
|
238 fd->dialog = gtk_window_new(GTK_WINDOW_DIALOG);
|
|
239 gtk_signal_connect (GTK_OBJECT (fd->dialog), "delete_event", (GtkSignalFunc)generic_dialog_delete_cb, fd);
|
|
240 gtk_window_set_policy (GTK_WINDOW(fd->dialog), FALSE, TRUE, FALSE);
|
|
241 gtk_window_set_title (GTK_WINDOW (fd->dialog), title);
|
|
242 gtk_container_border_width (GTK_CONTAINER (fd->dialog), 10);
|
|
243
|
|
244 fd->vbox = gtk_vbox_new(FALSE,5);
|
|
245 gtk_container_add (GTK_CONTAINER(fd->dialog), fd->vbox);
|
|
246 gtk_widget_show(fd->vbox);
|
|
247
|
|
248 if (text)
|
|
249 {
|
|
250 label = gtk_label_new(text);
|
|
251 gtk_box_pack_start(GTK_BOX(fd->vbox), label, FALSE, FALSE, 0);
|
|
252 gtk_widget_show(label);
|
|
253 }
|
|
254
|
|
255 if (btn1_cb || btn2_cb)
|
|
256 {
|
|
257 GtkWidget *sep;
|
|
258 hbox = gtk_hbox_new(TRUE, 15);
|
|
259 gtk_box_pack_end(GTK_BOX(fd->vbox), hbox, FALSE, FALSE, 5);
|
|
260 gtk_widget_show(hbox);
|
|
261
|
|
262 sep = gtk_hseparator_new();
|
|
263 gtk_box_pack_end(GTK_BOX(fd->vbox), sep, FALSE, FALSE, 0);
|
|
264 gtk_widget_show(sep);
|
|
265 }
|
|
266
|
|
267 if (btn1_cb)
|
|
268 {
|
|
269 button = gtk_button_new_with_label(btn1);
|
|
270 gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) btn1_cb, fd);
|
|
271 gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
|
|
272 gtk_widget_grab_focus(button);
|
|
273 gtk_widget_show(button);
|
|
274 }
|
|
275
|
|
276 if (btn2_cb)
|
|
277 {
|
|
278 button = gtk_button_new_with_label(btn2);
|
|
279 gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) btn2_cb, fd);
|
|
280 gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
|
|
281 gtk_widget_show(button);
|
|
282 }
|
|
283
|
|
284 gtk_widget_show(fd->dialog);
|
|
285 return fd;
|
|
286 }
|
|
287
|