From 7a1dd1fc7d0f37a7605f362b2998964aca689411 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 9 Feb 2011 17:04:28 +0100 Subject: abrt-gtk: remove (unimplemented) info pane; clean up code a bit Signed-off-by: Denys Vlasenko --- src/gui-gtk/abrt-gtk.c | 154 +++++++++++++++++++++---------------------------- 1 file changed, 67 insertions(+), 87 deletions(-) (limited to 'src/gui-gtk') diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c index 313b6633..7e10e8fe 100644 --- a/src/gui-gtk/abrt-gtk.c +++ b/src/gui-gtk/abrt-gtk.c @@ -3,7 +3,6 @@ #include "abrt-gtk.h" static GtkListStore *dumps_list_store; -static GtkTreeIter iter___; enum { @@ -16,30 +15,6 @@ enum NUM_COLUMNS }; -/* -void gtk_tree_model_get_value(GtkTreeModel *tree_model, - GtkTreeIter *iter, - gint column, - GValue *value); -*/ - -static void on_row_activated_cb(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) -{ - GtkTreeSelection *selection = gtk_tree_view_get_selection(tree_view); - if (selection) - { - GtkTreeIter iter; - GtkTreeModel *dump_list_store = gtk_tree_view_get_model(tree_view); - gtk_tree_model_get_iter(dump_list_store, &iter, path); - GValue d_dir = { 0 }; - if (gtk_tree_selection_get_selected(selection, &dump_list_store, &iter) == TRUE) - { - gtk_tree_model_get_value(dump_list_store, &iter, COLUMN_DUMP_DIR, &d_dir); - g_print("CALL: run_event(%s)\n", g_value_get_string(&d_dir)); - } - } -} - void add_directory_to_dirlist(const char *dirname) { struct dump_dir *dd = dd_opendir(dirname, DD_OPEN_READONLY); @@ -47,25 +22,59 @@ void add_directory_to_dirlist(const char *dirname) return; time_t time = atoi(dd_load_text(dd, FILENAME_TIME)); - struct tm * ptm = localtime(&time); + struct tm *ptm = localtime(&time); char time_buf[60]; - size_t time_len = strftime(time_buf, 59, "%c", ptm); + size_t time_len = strftime(time_buf, sizeof(time_buf)-1, "%c", ptm); time_buf[time_len] = '\0'; - gtk_list_store_append(dumps_list_store, &iter___); - gtk_list_store_set(dumps_list_store, &iter___, - COLUMN_REPORTED, "??", - COLUMN_APPLICATION, dd_load_text(dd, FILENAME_EXECUTABLE), - COLUMN_HOSTNAME, dd_load_text(dd, FILENAME_HOSTNAME), + char *msg = dd_load_text_ext(dd, FILENAME_MESSAGE, 0 + | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE + | DD_FAIL_QUIETLY + ); + const char *reported = (msg ? "Yes" : "No"); + free(msg); + char *executable = dd_load_text(dd, FILENAME_EXECUTABLE); + char *hostname = dd_load_text(dd, FILENAME_HOSTNAME); + + GtkTreeIter iter; + gtk_list_store_append(dumps_list_store, &iter); + gtk_list_store_set(dumps_list_store, &iter, + COLUMN_REPORTED, reported, + COLUMN_APPLICATION, executable, + COLUMN_HOSTNAME, hostname, //OPTION: time format COLUMN_LATEST_CRASH_STR, time_buf, COLUMN_LATEST_CRASH, (int)time, COLUMN_DUMP_DIR, dirname, -1); + + free(hostname); + free(executable); + dd_close(dd); VERB1 log("added: %s\n", dirname); } + +/* create_main_window and helpers */ + +static void on_row_activated_cb(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) +{ + GtkTreeSelection *selection = gtk_tree_view_get_selection(tree_view); + if (selection) + { + GtkTreeIter iter; + GtkTreeModel *dump_list_store = gtk_tree_view_get_model(tree_view); + gtk_tree_model_get_iter(dump_list_store, &iter, path); + GValue d_dir = { 0 }; + if (gtk_tree_selection_get_selected(selection, &dump_list_store, &iter) == TRUE) + { + gtk_tree_model_get_value(dump_list_store, &iter, COLUMN_DUMP_DIR, &d_dir); + g_print("CALL: run_event(%s)\n", g_value_get_string(&d_dir)); + } + } +} + static void add_columns(GtkTreeView *treeview) { GtkCellRenderer *renderer; @@ -111,74 +120,45 @@ static void add_columns(GtkTreeView *treeview) NULL); gtk_tree_view_column_set_sort_column_id(column, COLUMN_LATEST_CRASH); gtk_tree_view_append_column(treeview, column); - } GtkWidget *create_main_window(void) { /* main window */ - GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - if (!window) - die_out_of_memory(); - - gtk_window_set_default_size(GTK_WINDOW(window), 600, 700); - gtk_window_set_title(GTK_WINDOW(window), _("Automatic Bug Reporting Tool")); - gtk_window_set_icon_name(GTK_WINDOW(window), "abrt"); - //quit when user closes the main window - g_signal_connect(window, "destroy", gtk_main_quit, NULL); - - /* main pane - * holds the textview with dump list and a vbox with bug details - * and bug details (icon, comment, howto, cmdline, etc ...) - */ - GtkWidget *main_pane = gtk_vpaned_new(); - GtkWidget *dump_list_sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(dump_list_sw), - GTK_SHADOW_ETCHED_IN); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(dump_list_sw), + GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_default_size(GTK_WINDOW(main_window), 600, 700); + gtk_window_set_title(GTK_WINDOW(main_window), _("Automatic Bug Reporting Tool")); + gtk_window_set_icon_name(GTK_WINDOW(main_window), "abrt"); + + /* scrolled region inside main window */ + GtkWidget *scroll_win = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll_win), + GTK_SHADOW_ETCHED_IN); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - GtkWidget *dump_tv = gtk_tree_view_new(); - add_columns(GTK_TREE_VIEW(dump_tv)); + gtk_container_add(GTK_CONTAINER(main_window), scroll_win); + + /* tree view inside scrolled region */ + GtkWidget *treeview = gtk_tree_view_new(); + add_columns(GTK_TREE_VIEW(treeview)); + gtk_container_add(GTK_CONTAINER(scroll_win), treeview); + + /* Create data store for the list and attach it */ dumps_list_store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, /* reported */ G_TYPE_STRING, /* executable */ G_TYPE_STRING, /* hostname */ G_TYPE_STRING, /* time */ G_TYPE_INT, /* unix time - used for sort */ G_TYPE_STRING);/* dump dir path */ - //if (dumps_list_store == NULL) - // return NULL; - gtk_tree_view_set_model(GTK_TREE_VIEW(dump_tv), GTK_TREE_MODEL(dumps_list_store)); - g_signal_connect(dump_tv, "row-activated", G_CALLBACK(on_row_activated_cb), NULL); - gtk_container_add(GTK_CONTAINER(dump_list_sw), dump_tv); - - /* dump details */ - GtkWidget *dump_details_sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(dump_details_sw), - GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); - - GtkWidget *details_vbox = gtk_vbox_new(false, 0); - GtkWidget *icon_name_hbox = gtk_hbox_new(false, 0); - GtkWidget *details_hbox = gtk_hbox_new(true, 0); - GtkWidget *package_icon = gtk_image_new_from_stock("gtk-missing-image", GTK_ICON_SIZE_DIALOG); - - - gtk_box_pack_start(GTK_BOX(icon_name_hbox), package_icon, FALSE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(details_vbox), icon_name_hbox, FALSE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(details_vbox), details_hbox, FALSE, TRUE, 0); - - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(dump_details_sw), details_vbox); - - /* add dump list and dump details to pane */ - gtk_paned_pack1(GTK_PANED(main_pane), dump_list_sw, FALSE, FALSE); - gtk_paned_pack2(GTK_PANED(main_pane), dump_details_sw, FALSE, FALSE); - - + gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(dumps_list_store)); + /* Double click/Enter handler */ + g_signal_connect(treeview, "row-activated", G_CALLBACK(on_row_activated_cb), NULL); + /* Delete handler */ + //g_signal_connect(treeview, "??????", G_CALLBACK(on_row_deleted_cb), NULL); + /* Quit when user closes the main window */ + g_signal_connect(main_window, "destroy", gtk_main_quit, NULL); - GtkWidget *main_vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(main_vbox), main_pane, TRUE, TRUE, 0); - gtk_container_add(GTK_CONTAINER(window), main_vbox); - return window; + return main_window; } -- cgit