From 15263908a962ff510b97066fed6f6fa541f5ab46 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 19 May 2011 18:22:22 +0200 Subject: gui: fil colors in list; wizard: a bit better navigation Signed-off-by: Denys Vlasenko --- src/gtk-helpers/event_config_dialog.c | 1 + src/gui-gtk/abrt-gtk.c | 26 +++------- src/gui-wizard-gtk/wizard.c | 96 +++++++++++++++++++++++------------ 3 files changed, 71 insertions(+), 52 deletions(-) diff --git a/src/gtk-helpers/event_config_dialog.c b/src/gtk-helpers/event_config_dialog.c index 73f29288..5010e31c 100644 --- a/src/gtk-helpers/event_config_dialog.c +++ b/src/gtk-helpers/event_config_dialog.c @@ -393,6 +393,7 @@ void show_events_list_dialog(GtkWindow *parent) g_hash_table_foreach(g_event_config_list, &add_event_to_liststore, events_list_store); +//TODO: can unref events_list_store? treeview holds one ref. /* Double click/Enter handler */ g_signal_connect(events_tv, "row-activated", G_CALLBACK(on_event_row_activated_cb), NULL); diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c index df94485e..27a14b22 100644 --- a/src/gui-gtk/abrt-gtk.c +++ b/src/gui-gtk/abrt-gtk.c @@ -38,7 +38,6 @@ enum COLUMN_LATEST_CRASH_STR, COLUMN_LATEST_CRASH, COLUMN_DUMP_DIR, - COLUMN_BG, NUM_COLUMNS }; @@ -70,8 +69,6 @@ void add_directory_to_dirlist(const char *dirname) free(msg); char *reason = dd_load_text(dd, FILENAME_REASON); - static bool grey_bg = false; - GtkTreeIter iter; gtk_list_store_append(s_dumps_list_store, &iter); gtk_list_store_set(s_dumps_list_store, &iter, @@ -82,9 +79,7 @@ void add_directory_to_dirlist(const char *dirname) COLUMN_LATEST_CRASH_STR, time_buf, COLUMN_LATEST_CRASH, (int)time, COLUMN_DUMP_DIR, dirname, - COLUMN_BG, grey_bg ? "#EEEEEE" : "#FFFFFF", -1); - grey_bg = !grey_bg; free(reason); dd_close(dd); @@ -254,8 +249,6 @@ static void add_columns(GtkTreeView *treeview) renderer, "stock_id", COLUMN_REPORTED, - "cell-background", - COLUMN_BG, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_sort_column_id(column, COLUMN_REPORTED); @@ -266,8 +259,6 @@ static void add_columns(GtkTreeView *treeview) renderer, "text", COLUMN_REASON, - "cell-background", - COLUMN_BG, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_sort_column_id(column, COLUMN_REASON); @@ -289,8 +280,6 @@ static void add_columns(GtkTreeView *treeview) renderer, "text", COLUMN_LATEST_CRASH_STR, - "cell-background", - COLUMN_BG, NULL); gtk_tree_view_column_set_sort_column_id(column, COLUMN_LATEST_CRASH); gtk_tree_view_append_column(treeview, column); @@ -326,7 +315,6 @@ GtkWidget *create_menu(void) g_signal_connect(plugins_item, "activate", G_CALLBACK(show_events_list_dialog_cb), NULL); - /* help submenu */ GtkWidget *help_submenu = gtk_menu_new(); GtkWidget *online_help_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_HELP, NULL); @@ -343,7 +331,7 @@ GtkWidget *create_menu(void) GtkWidget *create_main_window(void) { - /* main window */ + /* Main window */ g_main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(g_main_window), 700, 700); gtk_window_set_title(GTK_WINDOW(g_main_window), _("Automatic Bug Reporting Tool")); @@ -351,7 +339,7 @@ GtkWidget *create_main_window(void) GtkWidget *main_vbox = gtk_vbox_new(false, 0); - /* scrolled region inside main window */ + /* 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); @@ -363,8 +351,9 @@ GtkWidget *create_main_window(void) gtk_box_pack_start(GTK_BOX(main_vbox), scroll_win, true, true, 0); gtk_container_add(GTK_CONTAINER(g_main_window), main_vbox); - /* tree view inside scrolled region */ + /* Tree view inside scrolled region */ s_treeview = gtk_tree_view_new(); + g_object_set(s_treeview, "rules-hint", 1, NULL); /* use alternating colors */ add_columns(GTK_TREE_VIEW(s_treeview)); gtk_container_add(GTK_CONTAINER(scroll_win), s_treeview); @@ -377,7 +366,7 @@ GtkWidget *create_main_window(void) G_TYPE_STRING, /* dump dir path */ G_TYPE_STRING);/* row background */ - //FIXME: configurable!! + //FIXME: configurable!! gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(s_dumps_list_store), COLUMN_LATEST_CRASH, GTK_SORT_DESCENDING); @@ -395,7 +384,7 @@ GtkWidget *create_main_window(void) gtk_box_pack_start(GTK_BOX(hbox_report_delete), btn_delete, true, true, 0); gtk_box_pack_start(GTK_BOX(hbox_report_delete), btn_report, true, true, 0); - GtkWidget *halign = gtk_alignment_new(1, 0, 0, 0); + GtkWidget *halign = gtk_alignment_new(1, 0, 0, 0); gtk_container_add(GTK_CONTAINER(halign), hbox_report_delete); GtkWidget *hbox_help_close = gtk_hbutton_box_new(); @@ -419,6 +408,7 @@ GtkWidget *create_main_window(void) g_signal_connect(btn_close, "clicked", gtk_main_quit, NULL); /* Show online help */ g_signal_connect(btn_online_help, "clicked", G_CALLBACK(on_btn_online_help_cb), NULL); + return g_main_window; } @@ -458,9 +448,7 @@ void sanitize_cursor(GtkTreePath *preferred_path) /* Did it work? */ gtk_tree_view_get_cursor(GTK_TREE_VIEW(s_treeview), &path, /* GtkTreeViewColumn** */ NULL); if (path) /* yes */ - { goto ret; - } } /* Try to position cursor on 1st element */ diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index bd5d28c4..25208b28 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -97,12 +97,12 @@ static PangoFontDescription *monospace_font; */ enum { PAGENO_SUMMARY, - PAGENO_COMMENT, + PAGENO_EDIT_COMMENT, PAGENO_ANALYZE_SELECTOR, PAGENO_ANALYZE_PROGRESS, PAGENO_REPORTER_SELECTOR, - PAGENO_BACKTRACE_APPROVAL, - PAGENO_REPORT, + PAGENO_EDIT_BACKTRACE, + PAGENO_REVIEW_DATA, PAGENO_REPORT_PROGRESS, PAGENO_REPORT_DONE, PAGENO_NOT_SHOWN, @@ -114,12 +114,12 @@ enum { * instead of strcmp. */ static const gchar PAGE_SUMMARY[] = "page_0"; -static const gchar PAGE_COMMENT[] = "page_1"; +static const gchar PAGE_EDIT_COMMENT[] = "page_1"; static const gchar PAGE_ANALYZE_SELECTOR[] = "page_2"; static const gchar PAGE_ANALYZE_PROGRESS[] = "page_3"; static const gchar PAGE_REPORTER_SELECTOR[] = "page_4_report"; -static const gchar PAGE_BACKTRACE_APPROVAL[] = "page_5"; -static const gchar PAGE_REPORT[] = "page_6_report"; +static const gchar PAGE_EDIT_BACKTRACE[] = "page_5"; +static const gchar PAGE_REVIEW_DATA[] = "page_6_report"; static const gchar PAGE_REPORT_PROGRESS[] = "page_7_report"; static const gchar PAGE_REPORT_DONE[] = "page_8_report"; static const gchar PAGE_NOT_SHOWN[] = "page_9_report"; @@ -127,12 +127,12 @@ static const gchar PAGE_NOT_SHOWN[] = "page_9_report"; static const gchar *const page_names[] = { PAGE_SUMMARY, - PAGE_COMMENT, + PAGE_EDIT_COMMENT, PAGE_ANALYZE_SELECTOR, PAGE_ANALYZE_PROGRESS, PAGE_REPORTER_SELECTOR, - PAGE_BACKTRACE_APPROVAL, - PAGE_REPORT, + PAGE_EDIT_BACKTRACE, + PAGE_REVIEW_DATA, PAGE_REPORT_PROGRESS, PAGE_REPORT_DONE, PAGE_NOT_SHOWN, @@ -150,27 +150,30 @@ typedef struct static page_obj_t pages[] = { /* Page types: - * INTRO: only [Fwd] button is shown * CONTENT: normal page (has all btns: [Cancel] [Last] [Back] [Fwd]) - * (note that we suppress [Cancel] and [Prev] using gtk_assistant_commit) + * INTRO: only [Fwd] button is shown + * (we use these where we want to suppress [Back]-navigation) * CONFIRM: has [Apply] instead of [Fwd] and emits "apply" signal * PROGRESS: skipped on [Back] navigation * SUMMARY: has only [Close] button + * + * Note that we suppress [Cancel] everywhere once and for all + * using gtk_assistant_commit at init time. */ /* glade element name , on-screen text , type */ { PAGE_SUMMARY , "Problem description" , GTK_ASSISTANT_PAGE_CONTENT }, - { PAGE_COMMENT , "Provide additional information", GTK_ASSISTANT_PAGE_CONTENT }, + { PAGE_EDIT_COMMENT,"Provide additional information", GTK_ASSISTANT_PAGE_CONTENT }, { PAGE_ANALYZE_SELECTOR , "Select analyzer" , GTK_ASSISTANT_PAGE_CONFIRM }, - { PAGE_ANALYZE_PROGRESS , "Analyzing" , GTK_ASSISTANT_PAGE_CONTENT }, + { PAGE_ANALYZE_PROGRESS , "Analyzing" , GTK_ASSISTANT_PAGE_INTRO }, /* Some reporters don't need backtrace, we can skip bt page for them. * Therefore we want to know reporters _before_ we go to bt page */ { PAGE_REPORTER_SELECTOR , "Select reporter" , GTK_ASSISTANT_PAGE_CONTENT }, - { PAGE_BACKTRACE_APPROVAL , "Review the backtrace" , GTK_ASSISTANT_PAGE_CONTENT }, - { PAGE_REPORT , "Confirm data to report", GTK_ASSISTANT_PAGE_CONFIRM }, + { PAGE_EDIT_BACKTRACE , "Review the backtrace" , GTK_ASSISTANT_PAGE_CONTENT }, + { PAGE_REVIEW_DATA , "Confirm data to report", GTK_ASSISTANT_PAGE_CONFIRM }, /* Was GTK_ASSISTANT_PAGE_PROGRESS, but we want to allow returning to it */ - { PAGE_REPORT_PROGRESS , "Reporting" , GTK_ASSISTANT_PAGE_CONTENT }, - { PAGE_REPORT_DONE , "Reporting done" , GTK_ASSISTANT_PAGE_INTRO }, + { PAGE_REPORT_PROGRESS , "Reporting" , GTK_ASSISTANT_PAGE_INTRO }, + { PAGE_REPORT_DONE , "Reporting done" , GTK_ASSISTANT_PAGE_CONTENT }, /* We prevent user from reaching this page, as SUMMARY can't be navigated away * (must be always closed) and we don't want that */ @@ -922,8 +925,6 @@ static gboolean consume_cmd_output(GIOChannel *source, GIOCondition condition, g gtk_label_set_text(evd->status_label, msg); free(msg); - /* Hide "Back" button */ - gtk_assistant_commit(g_assistant); /* Enable (un-gray out) navigation buttons */ gtk_widget_set_sensitive(GTK_WIDGET(g_assistant), true); @@ -1104,7 +1105,7 @@ static void check_bt_rating_and_allow_send(void) } gtk_assistant_set_page_complete(g_assistant, - pages[PAGENO_BACKTRACE_APPROVAL].page_widget, + pages[PAGENO_EDIT_BACKTRACE].page_widget, send); if (warn) gtk_widget_show(g_widget_warnings_area); @@ -1120,11 +1121,11 @@ static void on_comment_changed(GtkTextBuffer *buffer, gpointer user_data) bool good = gtk_text_buffer_get_char_count(buffer) >= 10; /* The page doesn't exist with report-only option */ - if (pages[PAGENO_COMMENT].page_widget == NULL) + if (pages[PAGENO_EDIT_COMMENT].page_widget == NULL) return; /* Allow next page only when the comment has at least 10 chars */ - gtk_assistant_set_page_complete(g_assistant, pages[PAGENO_COMMENT].page_widget, good); + gtk_assistant_set_page_complete(g_assistant, pages[PAGENO_EDIT_COMMENT].page_widget, good); /* And show the eventbox with label */ if (good) @@ -1176,7 +1177,7 @@ static void next_page(GtkAssistant *assistant, gpointer user_data) } } - if (added_pages[page_no]->name == PAGE_REPORT) + if (added_pages[page_no]->name == PAGE_REVIEW_DATA) { GList *reporters = NULL; GList *li = g_list_reporters; @@ -1209,9 +1210,40 @@ static void on_show_event_list_cb(GtkWidget *button, gpointer user_data) show_events_list_dialog(GTK_WINDOW(g_assistant)); } +#if 0 +static void log_ready_state() +{ + char buf[NUM_PAGES+1]; + for (int i = 0; i < NUM_PAGES; i++) + { + char ch = '_'; + if (pages[i].page_widget) + ch = gtk_assistant_get_page_complete(g_assistant, pages[i].page_widget) ? '+' : '-'; + buf[i] = ch; + } + buf[NUM_PAGES] = 0; + log("Completeness:[%s]", buf); +} +#endif + static void on_page_prepare(GtkAssistant *assistant, GtkWidget *page, gpointer user_data) { - if (pages[PAGENO_BACKTRACE_APPROVAL].page_widget == page) + //int page_no = gtk_assistant_get_current_page(g_assistant); + //log_ready_state(); + + /* This suppresses [Last] button: assistant thinks that + * we never have this page ready unless we are on it + * -> therefore there is at least one non-ready page + * -> therefore it won't show [Last] + */ + // Doesn't work: if Completeness:[++++++-+++], + // then [Last] btn will still be shown. + //gtk_assistant_set_page_complete(g_assistant, + // pages[PAGENO_REVIEW_DATA].page_widget, + // pages[PAGENO_REVIEW_DATA].page_widget == page + //); + + if (pages[PAGENO_EDIT_BACKTRACE].page_widget == page) { check_bt_rating_and_allow_send(); } @@ -1221,7 +1253,7 @@ static void on_page_prepare(GtkAssistant *assistant, GtkWidget *page, gpointer u save_text_from_text_view(g_tv_comment, FILENAME_COMMENT); if (pages[PAGENO_SUMMARY].page_widget == page - || pages[PAGENO_REPORT].page_widget == page + || pages[PAGENO_REVIEW_DATA].page_widget == page ) { GtkWidget *w = GTK_WIDGET(g_tv_details); GtkContainer *c = GTK_CONTAINER(gtk_widget_get_parent(w)); @@ -1233,11 +1265,9 @@ static void on_page_prepare(GtkAssistant *assistant, GtkWidget *page, gpointer u ); } - if (pages[PAGENO_COMMENT].page_widget == page) + if (pages[PAGENO_EDIT_COMMENT].page_widget == page) on_comment_changed(gtk_text_view_get_buffer(g_tv_comment), NULL); - - if (pages[PAGENO_REPORT_DONE].page_widget == page) - gtk_assistant_commit(g_assistant); + //log_ready_state(); } static gint select_next_page_no(gint current_page_no, gpointer data) @@ -1254,13 +1284,13 @@ static gint select_next_page_no(gint current_page_no, gpointer data) switch (current_page_no) { #if 0 - case PAGENO_COMMENT: + case PAGENO_EDIT_COMMENT: if (get_problem_item_content_or_NULL(g_cd, FILENAME_COMMENT)) goto again; /* no comment, skip this page */ break; #endif - case PAGENO_BACKTRACE_APPROVAL: + case PAGENO_EDIT_BACKTRACE: if (!get_problem_item_content_or_NULL(g_cd, FILENAME_BACKTRACE)) goto again; /* no backtrace, skip this page */ break; @@ -1466,8 +1496,8 @@ static void add_pages() gtk_widget_modify_font(GTK_WIDGET(g_tv_backtrace), monospace_font); fix_all_wrapped_labels(GTK_WIDGET(g_assistant)); - if (pages[PAGENO_BACKTRACE_APPROVAL].page_widget != NULL) - gtk_assistant_set_page_complete(g_assistant, pages[PAGENO_BACKTRACE_APPROVAL].page_widget, + if (pages[PAGENO_EDIT_BACKTRACE].page_widget != NULL) + gtk_assistant_set_page_complete(g_assistant, pages[PAGENO_EDIT_BACKTRACE].page_widget, gtk_toggle_button_get_active(g_tb_approve_bt)); /* Configure btn on select analyzers page */ -- cgit