diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2011-02-21 17:14:44 +0100 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2011-02-21 17:14:44 +0100 |
commit | 004882408d093d324cc712c1f45166427589eac5 (patch) | |
tree | 147725a8e668eba1dcae83d7b6d49fe0f578385a /src/gui-wizard-gtk | |
parent | ea1cb02edc2f7b7550ecb1c901d3dcaa3fd485c1 (diff) | |
download | abrt-004882408d093d324cc712c1f45166427589eac5.tar.gz abrt-004882408d093d324cc712c1f45166427589eac5.tar.xz abrt-004882408d093d324cc712c1f45166427589eac5.zip |
gui-wizard-gtk: generate list of reporters
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src/gui-wizard-gtk')
-rw-r--r-- | src/gui-wizard-gtk/main.c | 58 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.c | 26 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.glade | 38 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.h | 12 |
4 files changed, 70 insertions, 64 deletions
diff --git a/src/gui-wizard-gtk/main.c b/src/gui-wizard-gtk/main.c index f2186e70..5fe9a8c7 100644 --- a/src/gui-wizard-gtk/main.c +++ b/src/gui-wizard-gtk/main.c @@ -23,6 +23,31 @@ static void analyze_rb_was_toggled(GtkToggleButton *button, gpointer user_data) } } +static GtkWidget *add_event_buttons(GtkBox *box, char *event_name, GCallback func, bool radio) +{ + GtkWidget *first_button = NULL; + while (event_name[0]) + { + char *event_name_end = strchr(event_name, '\n'); + *event_name_end = '\0'; + + GtkWidget *button = radio + ? gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(first_button), event_name) + : gtk_check_button_new_with_label(event_name); + if (!first_button) + first_button = button; + + *event_name_end = '\n'; + event_name = event_name_end + 1; + + gtk_box_pack_start(box, button, /*expand*/ false, /*fill*/ false, /*padding*/ 0); + + if (func) + g_signal_connect(G_OBJECT(button), "toggled", func, NULL); + } + return first_button; +} + int main(int argc, char **argv) { gtk_init(&argc, &argv); @@ -56,6 +81,7 @@ int main(int argc, char **argv) return 1; cd = create_crash_data_from_dump_dir(dd); char *analyze_events = list_possible_events(dd, g_dump_dir_name, "analyze"); + char *report_events = list_possible_events(dd, g_dump_dir_name, "report"); dd_close(dd); GtkWidget *assistant = create_assistant(); @@ -64,30 +90,30 @@ int main(int argc, char **argv) if (reason) gtk_label_set_text(g_lbl_cd_reason, reason); - GtkWidget *first_rb = NULL; if (analyze_events[0]) { - char *event_name = analyze_events; - while (event_name[0]) + GtkWidget *first_rb = add_event_buttons(g_box_analyzers, analyze_events, G_CALLBACK(analyze_rb_was_toggled), /*radio:*/ true); + if (first_rb) { - char *event_name_end = strchr(event_name, '\n'); - *event_name_end = '\0'; - GtkWidget *rb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(first_rb), event_name); - if (!first_rb) + const char *label = gtk_button_get_label(GTK_BUTTON(first_rb)); + if (label) { - first_rb = rb; free(g_analyze_label_selected); - g_analyze_label_selected = xstrdup(event_name); + g_analyze_label_selected = xstrdup(label); } - *event_name_end = '\n'; - event_name = event_name_end + 1; - - gtk_box_pack_start(GTK_BOX(g_vb_analyzers), rb, /*expand*/ false, /*fill*/ false, /*padding*/ 0); - - g_signal_connect(G_OBJECT(rb), "toggled", G_CALLBACK(analyze_rb_was_toggled), NULL); } } - else { /*???*/ } + else + { + /* No available analyze events, go to reporter selector page */ +//Doesn't work: shows empty page +// gtk_assistant_set_current_page(GTK_ASSISTANT(assistant), PAGENO_REPORTER_SELECTOR); + } + + if (report_events[0]) + { + add_event_buttons(g_box_reporters, report_events, /*callback:*/NULL, /*radio:*/ false); + } gtk_widget_show_all(assistant); diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index 4bdc230e..09fea9b8 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -6,7 +6,8 @@ #define DEFAULT_HEIGHT 500 GtkLabel *g_lbl_cd_reason; -GtkVBox *g_vb_analyzers; +GtkBox *g_box_analyzers; +GtkBox *g_box_reporters; GtkTextView *g_analyze_log; static GtkWidget *assistant; @@ -23,16 +24,6 @@ static GtkBuilder *builder; * page_7: reporting progress */ -enum { - PAGENO_ANALYZE_ACTION_SELECTOR = 0, - PAGENO_ANALYZE_PROGRESS, - PAGENO_REPORTER_SELECTOR, - PAGENO_BACKTRACE_APPROVAL, - PAGENO_HOWTO, - PAGENO_SUMMARY, - PAGENO_REPORT, -}; - /* Use of arrays (instead of, say, #defines to C strings) * allows cheaper page_obj_t->name == PAGE_FOO comparisons * instead of strcmp. @@ -67,7 +58,8 @@ typedef struct static page_obj_t pages[8] = { - {PAGE_ANALYZE_ACTION_SELECTOR, "Select analyzer", GTK_ASSISTANT_PAGE_CONFIRM, NULL}, /* need this type to get "apply" signal */ + /* need this type to get "apply" signal */ + {PAGE_ANALYZE_ACTION_SELECTOR, "Select analyzer", GTK_ASSISTANT_PAGE_CONFIRM, NULL}, {PAGE_ANALYZE_PROGRESS, "Analyzing reporter", GTK_ASSISTANT_PAGE_PROGRESS, NULL}, {PAGE_REPORTER_SELECTOR, "Select reporter", GTK_ASSISTANT_PAGE_CONTENT, NULL}, {PAGE_BACKTRACE_APPROVAL, "Approve the backtrace", GTK_ASSISTANT_PAGE_CONTENT, NULL}, @@ -214,7 +206,8 @@ static void add_pages() /* Set pointer to fields we might need to change */ g_lbl_cd_reason = GTK_LABEL(gtk_builder_get_object(builder, "lbl_cd_reason")); - g_vb_analyzers = GTK_VBOX(gtk_builder_get_object(builder, "vb_analyzers")); + g_box_analyzers = GTK_BOX(gtk_builder_get_object(builder, "vb_analyzers")); + g_box_reporters = GTK_BOX(gtk_builder_get_object(builder, "vb_reporters")); g_analyze_log = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "analyze_log")); } @@ -233,6 +226,13 @@ static gboolean consume_cmd_output(GIOChannel *source, GIOCondition condition, g struct analyze_event_data *evd = data; GtkTextBuffer *tb = gtk_text_view_get_buffer(g_analyze_log); + + /* Ensure we insert text at the end */ + GtkTextIter text_iter; + gtk_text_buffer_get_iter_at_offset(tb, &text_iter, -1); + gtk_text_buffer_place_cursor(tb, &text_iter); + + /* Read and insert the output into the log pane */ char buf[128]; /* usually we get one line, no need to have big buf */ int r; while ((r = read(evd->fd, buf, sizeof(buf))) > 0) diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade index 3c07f0c5..1669e1d2 100644 --- a/src/gui-wizard-gtk/wizard.glade +++ b/src/gui-wizard-gtk/wizard.glade @@ -167,47 +167,17 @@ You can see the progress in the window below.</property> </packing> </child> <child> - <object class="GtkVBox" id="vb_analyzers1"> + <object class="GtkVBox" id="vb_reporters"> <property name="visible">True</property> <property name="orientation">vertical</property> <child> - <object class="GtkCheckButton" id="checkbutton4"> - <property name="label" translatable="yes">reporter_1</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> + <placeholder/> </child> <child> - <object class="GtkCheckButton" id="checkbutton5"> - <property name="label" translatable="yes">Reporter 2</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> + <placeholder/> </child> <child> - <object class="GtkCheckButton" id="checkbutton6"> - <property name="label" translatable="yes">Reporter 3</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">2</property> - </packing> + <placeholder/> </child> </object> <packing> diff --git a/src/gui-wizard-gtk/wizard.h b/src/gui-wizard-gtk/wizard.h index be2a1a8c..6de02b49 100644 --- a/src/gui-wizard-gtk/wizard.h +++ b/src/gui-wizard-gtk/wizard.h @@ -1,5 +1,15 @@ +enum { + PAGENO_ANALYZE_ACTION_SELECTOR = 0, + PAGENO_ANALYZE_PROGRESS, + PAGENO_REPORTER_SELECTOR, + PAGENO_BACKTRACE_APPROVAL, + PAGENO_HOWTO, + PAGENO_SUMMARY, + PAGENO_REPORT, +}; extern GtkLabel *g_lbl_cd_reason; -extern GtkVBox *g_vb_analyzers; +extern GtkBox *g_box_analyzers; +extern GtkBox *g_box_reporters; GtkWidget *create_assistant(void); |