25 #include <glib/gi18n.h> 27 #include "dialog-utils.h" 29 #include "gnc-gui-query.h" 32 #define INDEX_LABEL "index" 53 gnc_ok_cancel_dialog(GtkWindow *parent,
55 const gchar *format, ...)
57 GtkWidget *dialog = NULL;
65 va_start(args, format);
66 buffer = g_strdup_vprintf(format, args);
67 dialog = gtk_message_dialog_new (parent,
68 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
70 GTK_BUTTONS_OK_CANCEL,
77 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE);
79 gtk_dialog_set_default_response (GTK_DIALOG(dialog), default_result);
80 result = gtk_dialog_run(GTK_DIALOG(dialog));
81 gtk_widget_destroy (dialog);
102 gnc_verify_dialog(GtkWindow *parent, gboolean yes_is_default,
103 const gchar *format, ...)
113 va_start(args, format);
114 buffer = g_strdup_vprintf(format, args);
115 dialog = gtk_message_dialog_new (parent,
116 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
117 GTK_MESSAGE_QUESTION,
125 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE);
127 gtk_dialog_set_default_response(GTK_DIALOG(dialog),
128 (yes_is_default ? GTK_RESPONSE_YES : GTK_RESPONSE_NO));
129 result = gtk_dialog_run(GTK_DIALOG(dialog));
130 gtk_widget_destroy (dialog);
131 return (result == GTK_RESPONSE_YES);
135 gnc_message_dialog_common (GtkWindow *parent,
const gchar *format, GtkMessageType msg_type, va_list args)
137 GtkWidget *dialog = NULL;
143 buffer = g_strdup_vprintf(format, args);
144 dialog = gtk_message_dialog_new (parent,
145 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
153 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE);
155 gtk_dialog_run (GTK_DIALOG (dialog));
156 gtk_widget_destroy (dialog);
171 gnc_info_dialog (GtkWindow *parent,
const gchar *format, ...)
175 va_start(args, format);
176 gnc_message_dialog_common (parent, format, GTK_MESSAGE_INFO, args);
195 gnc_warning_dialog (GtkWindow *parent,
const gchar *format, ...)
199 va_start(args, format);
200 gnc_message_dialog_common (parent, format, GTK_MESSAGE_WARNING, args);
216 void gnc_error_dialog (GtkWindow* parent,
const char* format, ...)
220 va_start(args, format);
221 gnc_message_dialog_common (parent, format, GTK_MESSAGE_ERROR, args);
226 gnc_choose_radio_button_cb(GtkWidget *w, gpointer data)
230 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
231 *result = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w), INDEX_LABEL));
242 gnc_choose_radio_option_dialog(GtkWidget *parent,
245 const char *button_name,
249 int radio_result = 0;
251 GtkWidget *main_vbox;
253 GtkWidget *radio_button;
256 GSList *group = NULL;
260 main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
261 gtk_box_set_homogeneous (GTK_BOX (main_vbox), FALSE);
262 gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 6);
263 gtk_widget_show(main_vbox);
265 label = gtk_label_new(msg);
266 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
267 gtk_box_pack_start(GTK_BOX(main_vbox), label, FALSE, FALSE, 0);
268 gtk_widget_show(label);
270 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
271 gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE);
272 gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
273 gtk_container_add(GTK_CONTAINER(main_vbox), vbox);
274 gtk_widget_show(vbox);
276 for (node = radio_list, i = 0; node; node = node->next, i++)
278 radio_button = gtk_radio_button_new_with_mnemonic(group, node->data);
279 group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button));
280 gtk_widget_set_halign (GTK_WIDGET(radio_button), GTK_ALIGN_START);
282 if (i == default_value)
284 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE);
285 radio_result = default_value;
288 gtk_widget_show(radio_button);
289 gtk_box_pack_start(GTK_BOX(vbox), radio_button, FALSE, FALSE, 0);
290 g_object_set_data(G_OBJECT(radio_button), INDEX_LABEL, GINT_TO_POINTER(i));
291 g_signal_connect(radio_button,
"clicked",
292 G_CALLBACK(gnc_choose_radio_button_cb),
297 button_name = _(
"_OK");
298 dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW(parent),
299 GTK_DIALOG_DESTROY_WITH_PARENT,
300 _(
"_Cancel"), GTK_RESPONSE_CANCEL,
301 button_name, GTK_RESPONSE_OK,
305 gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
307 dvbox = gtk_dialog_get_content_area (GTK_DIALOG(dialog));
309 gtk_box_pack_start(GTK_BOX(dvbox), main_vbox, TRUE, TRUE, 0);
311 if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK)
314 gtk_widget_destroy (dialog);
320 gnc_input_dialog_internal (GtkWidget *parent,
const gchar *title,
const gchar *msg,
const gchar *default_input, gboolean use_entry)
324 GtkTextBuffer *buffer;
325 gchar *user_input = NULL;
326 GtkTextIter start, end;
329 GtkWidget* dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (parent),
330 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
331 _(
"_OK"), GTK_RESPONSE_ACCEPT,
332 _(
"_Cancel"), GTK_RESPONSE_REJECT,
334 GtkWidget* content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
337 GtkWidget* label = gtk_label_new (msg);
338 gtk_box_pack_start(GTK_BOX(content_area), label, FALSE, FALSE, 0);
343 view = gtk_entry_new ();
344 gtk_entry_set_text (GTK_ENTRY (view), default_input);
348 view = gtk_text_view_new ();
349 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD_CHAR);
350 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
351 gtk_text_buffer_set_text (buffer, default_input, -1);
353 gtk_box_pack_start(GTK_BOX(content_area), view, TRUE, TRUE, 0);
356 gtk_widget_show_all (dialog);
357 result = gtk_dialog_run (GTK_DIALOG (dialog));
359 if (result != GTK_RESPONSE_REJECT)
362 user_input = g_strdup (gtk_entry_get_text ((GTK_ENTRY (view))));
365 gtk_text_buffer_get_start_iter (buffer, &start);
366 gtk_text_buffer_get_end_iter (buffer, &end);
367 user_input = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
371 gtk_widget_destroy (dialog);
391 gnc_input_dialog (GtkWidget *parent,
const gchar *title,
const gchar *msg,
const gchar *default_input)
393 return gnc_input_dialog_internal (parent, title, msg, default_input, FALSE);
402 gnc_input_dialog_with_entry (GtkWidget *parent,
const gchar *title,
const gchar *msg,
const gchar *default_input)
404 return gnc_input_dialog_internal (parent, title, msg, default_input, TRUE);
408 gnc_info2_dialog (GtkWidget *parent,
const gchar *title,
const gchar *msg)
411 GtkTextBuffer *buffer;
415 GtkWidget* dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (parent),
416 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
417 _(
"_OK"), GTK_RESPONSE_ACCEPT,
419 GtkWidget* content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
422 GtkWidget* scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
423 gtk_box_pack_start(GTK_BOX(content_area), scrolledwindow, TRUE, TRUE, 0);
426 view = gtk_text_view_new ();
427 gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
428 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
429 gtk_text_buffer_set_text (buffer, msg, -1);
430 gtk_container_add (GTK_CONTAINER (scrolledwindow), view);
435 gtk_window_get_size (GTK_WINDOW(parent), &width, &height);
436 gtk_window_set_default_size (GTK_WINDOW(dialog), width, height);
438 gtk_widget_show_all (dialog);
439 gtk_dialog_run (GTK_DIALOG (dialog));
440 gtk_widget_destroy (dialog);
GtkWindow * gnc_ui_get_main_window(GtkWidget *widget)
Get a pointer to the final GncMainWindow widget is rooted in.