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);
86 gnc_action_dialog (GtkWindow *parent,
const gchar *action,
87 gboolean action_default,
const gchar *format, ...)
89 g_return_val_if_fail (action, FALSE);
95 va_start(args, format);
96 gchar *buffer = g_strdup_vprintf(format, args);
99 GtkWidget *dialog = gtk_message_dialog_new (parent,
100 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
101 GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
104 gtk_dialog_add_button (GTK_DIALOG(dialog), action, GTK_RESPONSE_ACCEPT);
105 gtk_dialog_add_button (GTK_DIALOG(dialog), _(
"_Cancel"), GTK_RESPONSE_CANCEL);
106 gtk_dialog_set_default_response (GTK_DIALOG(dialog), action_default ?
107 GTK_RESPONSE_ACCEPT : GTK_RESPONSE_CANCEL);
109 gint result = gtk_dialog_run(GTK_DIALOG(dialog));
111 gtk_widget_destroy (dialog);
114 return result == GTK_RESPONSE_ACCEPT;
132 gnc_verify_dialog(GtkWindow *parent, gboolean yes_is_default,
133 const gchar *format, ...)
143 va_start(args, format);
144 buffer = g_strdup_vprintf(format, args);
145 dialog = gtk_message_dialog_new (parent,
146 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
147 GTK_MESSAGE_QUESTION,
155 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE);
157 gtk_dialog_set_default_response(GTK_DIALOG(dialog),
158 (yes_is_default ? GTK_RESPONSE_YES : GTK_RESPONSE_NO));
159 result = gtk_dialog_run(GTK_DIALOG(dialog));
160 gtk_widget_destroy (dialog);
161 return (result == GTK_RESPONSE_YES);
165 gnc_message_dialog_common (GtkWindow *parent,
const gchar *format, GtkMessageType msg_type, va_list args)
167 GtkWidget *dialog = NULL;
173 buffer = g_strdup_vprintf(format, args);
174 dialog = gtk_message_dialog_new (parent,
175 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
183 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE);
185 gtk_dialog_run (GTK_DIALOG (dialog));
186 gtk_widget_destroy (dialog);
201 gnc_info_dialog (GtkWindow *parent,
const gchar *format, ...)
205 va_start(args, format);
206 gnc_message_dialog_common (parent, format, GTK_MESSAGE_INFO, args);
225 gnc_warning_dialog (GtkWindow *parent,
const gchar *format, ...)
229 va_start(args, format);
230 gnc_message_dialog_common (parent, format, GTK_MESSAGE_WARNING, args);
246 void gnc_error_dialog (GtkWindow* parent,
const char* format, ...)
250 va_start(args, format);
251 gnc_message_dialog_common (parent, format, GTK_MESSAGE_ERROR, args);
256 gnc_choose_radio_button_cb(GtkWidget *w, gpointer data)
260 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
261 *result = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w), INDEX_LABEL));
272 gnc_choose_radio_option_dialog(GtkWidget *parent,
275 const char *button_name,
279 int radio_result = 0;
281 GtkWidget *main_vbox;
283 GtkWidget *radio_button;
286 GSList *group = NULL;
290 main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
291 gtk_box_set_homogeneous (GTK_BOX (main_vbox), FALSE);
292 gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 6);
293 gtk_widget_show(main_vbox);
295 label = gtk_label_new(msg);
296 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
297 gtk_box_pack_start(GTK_BOX(main_vbox), label, FALSE, FALSE, 0);
298 gtk_widget_show(label);
300 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
301 gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE);
302 gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
303 gtk_container_add(GTK_CONTAINER(main_vbox), vbox);
304 gtk_widget_show(vbox);
306 for (node = radio_list, i = 0; node; node = node->next, i++)
308 radio_button = gtk_radio_button_new_with_mnemonic(group, node->data);
309 group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button));
310 gtk_widget_set_halign (GTK_WIDGET(radio_button), GTK_ALIGN_START);
312 if (i == default_value)
314 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE);
315 radio_result = default_value;
318 gtk_widget_show(radio_button);
319 gtk_box_pack_start(GTK_BOX(vbox), radio_button, FALSE, FALSE, 0);
320 g_object_set_data(G_OBJECT(radio_button), INDEX_LABEL, GINT_TO_POINTER(i));
321 g_signal_connect(radio_button,
"clicked",
322 G_CALLBACK(gnc_choose_radio_button_cb),
327 button_name = _(
"_OK");
328 dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW(parent),
329 GTK_DIALOG_DESTROY_WITH_PARENT,
330 _(
"_Cancel"), GTK_RESPONSE_CANCEL,
331 button_name, GTK_RESPONSE_OK,
335 gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
337 dvbox = gtk_dialog_get_content_area (GTK_DIALOG(dialog));
339 gtk_box_pack_start(GTK_BOX(dvbox), main_vbox, TRUE, TRUE, 0);
341 if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK)
344 gtk_widget_destroy (dialog);
350 gnc_input_dialog_internal (GtkWidget *parent,
const gchar *title,
const gchar *msg,
const gchar *default_input, gboolean use_entry)
354 GtkTextBuffer *buffer;
355 gchar *user_input = NULL;
356 GtkTextIter start, end;
359 GtkWidget* dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (parent),
360 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
361 _(
"_OK"), GTK_RESPONSE_ACCEPT,
362 _(
"_Cancel"), GTK_RESPONSE_REJECT,
364 GtkWidget* content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
367 GtkWidget* label = gtk_label_new (msg);
368 gtk_box_pack_start(GTK_BOX(content_area), label, FALSE, FALSE, 0);
373 view = gtk_entry_new ();
374 gtk_entry_set_text (GTK_ENTRY (view), default_input);
378 view = gtk_text_view_new ();
379 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD_CHAR);
380 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
381 gtk_text_buffer_set_text (buffer, default_input, -1);
383 gtk_box_pack_start(GTK_BOX(content_area), view, TRUE, TRUE, 0);
386 gtk_widget_show_all (dialog);
387 result = gtk_dialog_run (GTK_DIALOG (dialog));
389 if (result != GTK_RESPONSE_REJECT)
392 user_input = g_strdup (gtk_entry_get_text ((GTK_ENTRY (view))));
395 gtk_text_buffer_get_start_iter (buffer, &start);
396 gtk_text_buffer_get_end_iter (buffer, &end);
397 user_input = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
401 gtk_widget_destroy (dialog);
421 gnc_input_dialog (GtkWidget *parent,
const gchar *title,
const gchar *msg,
const gchar *default_input)
423 return gnc_input_dialog_internal (parent, title, msg, default_input, FALSE);
432 gnc_input_dialog_with_entry (GtkWidget *parent,
const gchar *title,
const gchar *msg,
const gchar *default_input)
434 return gnc_input_dialog_internal (parent, title, msg, default_input, TRUE);
438 gnc_info2_dialog (GtkWidget *parent,
const gchar *title,
const gchar *msg)
441 GtkTextBuffer *buffer;
445 GtkWidget* dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (parent),
446 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
447 _(
"_OK"), GTK_RESPONSE_ACCEPT,
449 GtkWidget* content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
452 GtkWidget* scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
453 gtk_box_pack_start(GTK_BOX(content_area), scrolledwindow, TRUE, TRUE, 0);
456 view = gtk_text_view_new ();
457 gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
458 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
459 gtk_text_buffer_set_text (buffer, msg, -1);
460 gtk_container_add (GTK_CONTAINER (scrolledwindow), view);
465 gtk_window_get_size (GTK_WINDOW(parent), &width, &height);
466 gtk_window_set_default_size (GTK_WINDOW(dialog), width, height);
468 gtk_widget_show_all (dialog);
469 gtk_dialog_run (GTK_DIALOG (dialog));
470 gtk_widget_destroy (dialog);
GtkWindow * gnc_ui_get_main_window(GtkWidget *widget)
Get a pointer to the final GncMainWindow widget is rooted in.