141666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe#include <locale.h> 241666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe#include <malloc.h> 341666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe#include <string.h> 441666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe#include <stdarg.h> 541666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 641666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe#include <gtk/gtk.h> 741666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 841666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe#include "gfio.h" 941666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe#include "gerror.h" 1041666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 1141666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboestatic void on_info_bar_response(GtkWidget *widget, gint response, 123c3ed070502bbfec387ded2c43d5e4559ca24a63Jens Axboe gpointer data) 1341666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe{ 1441666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe struct gui *ui = (struct gui *) data; 1541666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 1641666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe if (response == GTK_RESPONSE_OK) { 1741666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe gtk_widget_destroy(widget); 1841666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe ui->error_info_bar = NULL; 1941666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe } 2041666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe} 2141666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 2241666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboestatic void report_error(struct gui_entry *ge, GError *error) 2341666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe{ 2441666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe struct gui *ui = ge->ui; 2541666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 2641666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe if (ui->error_info_bar == NULL) { 27cab2440c23426b06e7e8327c5353fbd8373dcb5aJens Axboe GtkWidget *container; 28cab2440c23426b06e7e8327c5353fbd8373dcb5aJens Axboe 2941666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe ui->error_info_bar = gtk_info_bar_new_with_buttons(GTK_STOCK_OK, 303c3ed070502bbfec387ded2c43d5e4559ca24a63Jens Axboe GTK_RESPONSE_OK, NULL); 3141666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe g_signal_connect(ui->error_info_bar, "response", G_CALLBACK(on_info_bar_response), ui); 3241666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe gtk_info_bar_set_message_type(GTK_INFO_BAR(ui->error_info_bar), 333c3ed070502bbfec387ded2c43d5e4559ca24a63Jens Axboe GTK_MESSAGE_ERROR); 343c3ed070502bbfec387ded2c43d5e4559ca24a63Jens Axboe 3541666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe ui->error_label = gtk_label_new(error->message); 36cab2440c23426b06e7e8327c5353fbd8373dcb5aJens Axboe container = gtk_info_bar_get_content_area(GTK_INFO_BAR(ui->error_info_bar)); 3741666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe gtk_container_add(GTK_CONTAINER(container), ui->error_label); 383c3ed070502bbfec387ded2c43d5e4559ca24a63Jens Axboe 3941666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe gtk_box_pack_start(GTK_BOX(ui->vbox), ui->error_info_bar, FALSE, FALSE, 0); 4041666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe gtk_widget_show_all(ui->vbox); 4141666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe } else { 4241666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe char buffer[256]; 4341666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe snprintf(buffer, sizeof(buffer), "Failed to open file."); 44f762cef937f69d6a23127baf47f22e8ffaea4c11Jens Axboe gtk_label_set_text(GTK_LABEL(ui->error_label), buffer); 4541666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe } 4641666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe} 4741666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 4841666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboevoid gfio_report_error(struct gui_entry *ge, const char *format, ...) 4941666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe{ 5041666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe va_list args; 5141666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe GError *error; 5241666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 5341666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe va_start(args, format); 5441666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe error = g_error_new_valist(g_quark_from_string("fio"), 1, format, args); 5541666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe va_end(args); 5641666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 5741666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe report_error(ge, error); 5841666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe g_error_free(error); 5941666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe} 6041666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 611252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboevoid gfio_report_info(struct gui *ui, const char *title, const char *message) 621252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe{ 631252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe GtkWidget *dialog, *content, *label; 641252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe 651252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(ui->window), 661252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, 671252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); 6841666588eed4ed830b1fabd0458eb2b0a93f0147Jens Axboe 691252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe content = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); 701252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe label = gtk_label_new(message); 711252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe gtk_container_add(GTK_CONTAINER(content), label); 721252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe gtk_widget_show_all(dialog); 731252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); 741252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe gtk_dialog_run(GTK_DIALOG(dialog)); 751252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe gtk_widget_destroy(dialog); 761252d8f2c1daeb31fdc8c1f63db3ceadf7e20892Jens Axboe} 77