summaryrefslogtreecommitdiffstats
path: root/src/gui-wizard-gtk
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-02-21 17:14:44 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2011-02-21 17:14:44 +0100
commit004882408d093d324cc712c1f45166427589eac5 (patch)
tree147725a8e668eba1dcae83d7b6d49fe0f578385a /src/gui-wizard-gtk
parentea1cb02edc2f7b7550ecb1c901d3dcaa3fd485c1 (diff)
downloadabrt-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.c58
-rw-r--r--src/gui-wizard-gtk/wizard.c26
-rw-r--r--src/gui-wizard-gtk/wizard.glade38
-rw-r--r--src/gui-wizard-gtk/wizard.h12
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);