Jens Axboe | 4166658 | 2012-03-21 10:25:29 +0100 | [diff] [blame] | 1 | #include <locale.h> |
| 2 | #include <malloc.h> |
| 3 | #include <string.h> |
| 4 | #include <stdarg.h> |
| 5 | |
| 6 | #include <gtk/gtk.h> |
| 7 | |
| 8 | #include "gfio.h" |
| 9 | #include "gerror.h" |
| 10 | |
| 11 | static void on_info_bar_response(GtkWidget *widget, gint response, |
| 12 | gpointer data) |
| 13 | { |
| 14 | struct gui *ui = (struct gui *) data; |
| 15 | |
| 16 | if (response == GTK_RESPONSE_OK) { |
| 17 | gtk_widget_destroy(widget); |
| 18 | ui->error_info_bar = NULL; |
| 19 | } |
| 20 | } |
| 21 | |
| 22 | static void report_error(struct gui_entry *ge, GError *error) |
| 23 | { |
| 24 | struct gui *ui = ge->ui; |
| 25 | |
| 26 | if (ui->error_info_bar == NULL) { |
| 27 | ui->error_info_bar = gtk_info_bar_new_with_buttons(GTK_STOCK_OK, |
| 28 | GTK_RESPONSE_OK, |
| 29 | NULL); |
| 30 | g_signal_connect(ui->error_info_bar, "response", G_CALLBACK(on_info_bar_response), ui); |
| 31 | gtk_info_bar_set_message_type(GTK_INFO_BAR(ui->error_info_bar), |
| 32 | GTK_MESSAGE_ERROR); |
| 33 | |
| 34 | ui->error_label = gtk_label_new(error->message); |
| 35 | GtkWidget *container = gtk_info_bar_get_content_area(GTK_INFO_BAR(ui->error_info_bar)); |
| 36 | gtk_container_add(GTK_CONTAINER(container), ui->error_label); |
| 37 | |
| 38 | gtk_box_pack_start(GTK_BOX(ui->vbox), ui->error_info_bar, FALSE, FALSE, 0); |
| 39 | gtk_widget_show_all(ui->vbox); |
| 40 | } else { |
| 41 | char buffer[256]; |
| 42 | snprintf(buffer, sizeof(buffer), "Failed to open file."); |
| 43 | gtk_label_set(GTK_LABEL(ui->error_label), buffer); |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | void gfio_report_error(struct gui_entry *ge, const char *format, ...) |
| 48 | { |
| 49 | va_list args; |
| 50 | GError *error; |
| 51 | |
| 52 | va_start(args, format); |
| 53 | error = g_error_new_valist(g_quark_from_string("fio"), 1, format, args); |
| 54 | va_end(args); |
| 55 | |
| 56 | report_error(ge, error); |
| 57 | g_error_free(error); |
| 58 | } |
| 59 | |
Jens Axboe | 1252d8f | 2012-03-21 11:13:31 +0100 | [diff] [blame^] | 60 | void gfio_report_info(struct gui *ui, const char *title, const char *message) |
| 61 | { |
| 62 | GtkWidget *dialog, *content, *label; |
Jens Axboe | 4166658 | 2012-03-21 10:25:29 +0100 | [diff] [blame] | 63 | |
Jens Axboe | 1252d8f | 2012-03-21 11:13:31 +0100 | [diff] [blame^] | 64 | dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(ui->window), |
| 65 | GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, |
| 66 | GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); |
| 67 | |
| 68 | content = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); |
| 69 | label = gtk_label_new(message); |
| 70 | gtk_container_add(GTK_CONTAINER(content), label); |
| 71 | gtk_widget_show_all(dialog); |
| 72 | gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); |
| 73 | gtk_dialog_run(GTK_DIALOG(dialog)); |
| 74 | gtk_widget_destroy(dialog); |
| 75 | } |