diff options
author | Jiri Moskovcak <jmoskovc@redhat.com> | 2011-02-13 23:00:40 +0100 |
---|---|---|
committer | Jiri Moskovcak <jmoskovc@redhat.com> | 2011-02-13 23:00:40 +0100 |
commit | 3e1cef334960780cbea2aa8be8ce23eb7e8068fe (patch) | |
tree | b77696eb75910773cb936a43ef038a4c794b9a89 | |
parent | 3c53ecbea96ef837a64edb9fcdd4777c58dacb52 (diff) | |
download | abrt-3e1cef334960780cbea2aa8be8ce23eb7e8068fe.tar.gz abrt-3e1cef334960780cbea2aa8be8ce23eb7e8068fe.tar.xz abrt-3e1cef334960780cbea2aa8be8ce23eb7e8068fe.zip |
gtk wizard
-rw-r--r-- | abrt.spec | 11 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/gtk-wizard/Makefile.am | 35 | ||||
-rw-r--r-- | src/gtk-wizard/main.c | 18 | ||||
-rw-r--r-- | src/gtk-wizard/wizard.c | 122 | ||||
-rw-r--r-- | src/gtk-wizard/wizard.glade | 455 | ||||
-rw-r--r-- | src/gtk-wizard/wizard.h | 1 |
8 files changed, 644 insertions, 1 deletions
@@ -86,6 +86,13 @@ Group: System Environment/Libraries %description -n libreport-python Python bindings for report-libs. +%package -n libreport-gtk +Summary: GTK frontend for libreport +Group: User Interface/Desktops + +%description -n libreport-gtk +Applications for reporting bugs using libreport backend. + %package libs Summary: Libraries for %{name} Group: System Environment/Libraries @@ -402,6 +409,10 @@ fi %defattr(-,root,root,-) %{python_sitearch}/report/* +%files -n libreport-gtk +%defattr(-,root,root,-) +%{_bindir}/bug-reporting-wizard + %files libs %defattr(-,root,root,-) %{_libdir}/libabrt*.so.* diff --git a/configure.ac b/configure.ac index 70ce285f..b78c9768 100644 --- a/configure.ac +++ b/configure.ac @@ -133,6 +133,7 @@ AC_CONFIG_FILES([ src/applet/Makefile src/gui/Makefile src/gui-gtk/Makefile + src/gtk-wizard/Makefile src/cli/Makefile po/Makefile.in icons/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index 638d91ce..61410d6d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1 +1 @@ -SUBDIRS = include lib report-python hooks btparser daemon applet gui gui-gtk cli plugins +SUBDIRS = include lib report-python hooks btparser daemon applet gui gui-gtk cli plugins gtk-wizard diff --git a/src/gtk-wizard/Makefile.am b/src/gtk-wizard/Makefile.am new file mode 100644 index 00000000..c199ad01 --- /dev/null +++ b/src/gtk-wizard/Makefile.am @@ -0,0 +1,35 @@ +bin_PROGRAMS = bug-reporting-wizard + +bug_reporting_wizard_SOURCES = \ + wizard.h wizard.c \ + main.c + +#-Wl,--export-dynamic and lgmodule-2.0 +#is required for gtk_builder_connect_signals() to work correctly +bug_reporting_wizard_CFLAGS = \ + -I$(srcdir)/../include/report -I$(srcdir)/../include \ + -I$(srcdir)/../lib \ + -DBIN_DIR=\"$(bindir)\" \ + -DVAR_RUN=\"$(VAR_RUN)\" \ + -DCONF_DIR=\"$(CONF_DIR)\" \ + -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \ + -DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \ + -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \ + -DICON_DIR=\"${datadir}/abrt/icons/hicolor/48x48/status\" \ + $(GTK_CFLAGS) \ + -D_GNU_SOURCE \ + -g \ + -Wl,--export-dynamic \ + -Wall -Werror + +bug_reporting_wizard_LDADD = \ + ../lib/libreport.la \ + ../lib/libabrt_dbus.la \ + -lglib-2.0 \ + -lgthread-2.0 \ + -lgmodule-2.0 \ + $(GTK_LIBS) + +DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ + +@INTLTOOL_DESKTOP_RULE@ diff --git a/src/gtk-wizard/main.c b/src/gtk-wizard/main.c new file mode 100644 index 00000000..0206d020 --- /dev/null +++ b/src/gtk-wizard/main.c @@ -0,0 +1,18 @@ +#include <gtk/gtk.h> +#include "abrtlib.h" +#include "parse_options.h" +#include "wizard.h" + +int main(int argc, char **argv) +{ + //GtkWidget *assistant; + + gtk_init(&argc, &argv); + + GtkWidget *assistant = create_assistant(); + gtk_widget_show_all(assistant); + + /* Enter main loop */ + gtk_main(); + return 0; +}
\ No newline at end of file diff --git a/src/gtk-wizard/wizard.c b/src/gtk-wizard/wizard.c new file mode 100644 index 00000000..2f04ea65 --- /dev/null +++ b/src/gtk-wizard/wizard.c @@ -0,0 +1,122 @@ +#include <gtk/gtk.h> +#include "abrtlib.h" + +/* THE PAGE FLOW + * page_1: analyze action selection + * page_2: analyze progress + * page_3: reporter selection + * page_4: backtrace editor + * page_5: how to + user comments + * page_6: summary + * page_7: reporting progress + */ + +#define PAGE_ANALYZE_ACTION_SELECTOR "page_1" +#define PAGE_ANALYZE_PROGRESS "page_2" +#define PAGE_REPORTER_SELECTOR "page_3" +#define PAGE_BACKTRACE_APPROVAL "page_4" +#define PAGE_HOWTO "page_5" +#define PAGE_SUMMARY "page_6" +#define PAGE_REPORT "page_7" + + +#define DEFAULT_WIDTH 800 +#define DEFAULT_HEIGHT 500 + +gchar *pages[] = + { "page_1", + "page_2", + "page_3", + "page_4", + "page_5", + "page_6", + "page_7", + NULL + }; + +GtkBuilder *builder; +GtkWidget *assistant; + +void on_b_refresh_clicked(GtkButton *button) +{ + g_print("Refresh clicked!\n"); +} + +void add_pages() +{ + + GError *error = NULL; + gtk_builder_add_objects_from_file(builder, "wizard.glade", pages, &error); + if(error != NULL) + { + g_print(error->message); + g_free(error); + } + + GtkWidget *page; + gchar **page_names; + for(page_names = pages; *page_names != NULL; page_names++) + { + page = GTK_WIDGET(gtk_builder_get_object(builder, *page_names)); + if(page == NULL) + continue; + + gtk_assistant_append_page(GTK_ASSISTANT(assistant), page); + //FIXME: shouldn't be complete until something is selected! + gtk_assistant_set_page_complete(GTK_ASSISTANT(assistant), page, true); + if(strcmp(PAGE_ANALYZE_ACTION_SELECTOR, *page_names) == 0) + { + gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), page, "Select analyzer"); + gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), page, GTK_ASSISTANT_PAGE_INTRO); + + } + if(strcmp(PAGE_ANALYZE_PROGRESS, *page_names) == 0) + { + gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), page, "Analyzing problem"); + gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), page, GTK_ASSISTANT_PAGE_PROGRESS); + } + if(strcmp(PAGE_REPORTER_SELECTOR, *page_names) == 0) + { + gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), page, "Select reporter"); + gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), page, GTK_ASSISTANT_PAGE_CONTENT); + } + if(strcmp(PAGE_BACKTRACE_APPROVAL, *page_names) == 0) + { + gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), page, "Approve the backtrace"); + gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), page, GTK_ASSISTANT_PAGE_CONTENT); + } + + if(strcmp(PAGE_HOWTO, *page_names) == 0) + { + gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), page, "Provide additional information"); + gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), page, GTK_ASSISTANT_PAGE_CONTENT); + } + + if(strcmp(PAGE_SUMMARY, *page_names) == 0) + { + gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), page, "Confirm and send the report"); + gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), page, GTK_ASSISTANT_PAGE_CONFIRM); + } + + if(strcmp(PAGE_REPORT, *page_names) == 0) + { + gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), page, "Approve the backtrace"); + gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), page, GTK_ASSISTANT_PAGE_SUMMARY); + } + g_print("added page: %s\n", *page_names); + } +} + +GtkWidget *create_assistant() +{ + assistant = gtk_assistant_new(); + gtk_window_set_default_size(GTK_WINDOW(assistant), DEFAULT_WIDTH,DEFAULT_HEIGHT); + g_signal_connect(G_OBJECT(assistant), "cancel", G_CALLBACK(gtk_main_quit), NULL); + g_signal_connect(G_OBJECT(assistant), "close", G_CALLBACK(gtk_main_quit), NULL); + builder = gtk_builder_new(); + add_pages(); + gtk_builder_connect_signals(builder, NULL); + + + return assistant; +}
\ No newline at end of file diff --git a/src/gtk-wizard/wizard.glade b/src/gtk-wizard/wizard.glade new file mode 100644 index 00000000..ed81cb5d --- /dev/null +++ b/src/gtk-wizard/wizard.glade @@ -0,0 +1,455 @@ +<?xml version="1.0"?> +<interface> + <requires lib="gtk+" version="2.16"/> + <!-- interface-naming-policy project-wide --> + <object class="GtkWindow" id="window1"> + <property name="width_request">750</property> + <property name="height_request">400</property> + <child> + <object class="GtkVBox" id="page_1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="xalign">0.05000000074505806</property> + <property name="yalign">0.05000000074505806</property> + <property name="label" translatable="yes">It looks like an application from the package <b>APPLICATION</b> has crashed on your system. It is a good idea to send a bug report about this issue. The report will provide software maintainers with information essential in figuring out how to provide a bug fix for you. + +Please review the information that follows and modify it as needed to ensure your bug report does not contain any sensitive data you would rather not share. + +Select where you would like to analyze the bug, and press 'Forward' to continue.</property> + <property name="use_markup">True</property> + <property name="width_chars">80</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vb_analyzers"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkRadioButton" id="radiobutton1"> + <property name="label" translatable="yes">Analyzer 1</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="radiobutton2"> + <property name="label" translatable="yes">Analyzer 2</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <property name="group">radiobutton1</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="radiobutton3"> + <property name="label" translatable="yes">Analyzer 3</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <property name="group">radiobutton1</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <object class="GtkWindow" id="window2"> + <property name="width_request">750</property> + <property name="height_request">400</property> + <child> + <object class="GtkVBox" id="page_2"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="xalign">0.05000000074505806</property> + <property name="yalign">0.05000000074505806</property> + <property name="label" translatable="yes">Please wait while ABRT is analyzing the problem...</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="GtkTextView" id="analyze_log"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="accepts_tab">False</property> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkProgressBar" id="pb_analyze"> + <property name="visible">True</property> + <property name="activity_mode">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + </child> + </object> + <object class="GtkWindow" id="window3"> + <property name="width_request">750</property> + <property name="height_request">400</property> + <child> + <object class="GtkVBox" id="page_3"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="xalign">0.05000000074505806</property> + <property name="yalign">0.05000000074505806</property> + <property name="label" translatable="yes"> +Select where you would like to report the bug, and press 'Forward' to continue.</property> + <property name="use_markup">True</property> + <property name="width_chars">80</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vb_analyzers1"> + <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> + </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> + </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> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <object class="GtkWindow" id="window4"> + <property name="width_request">750</property> + <property name="height_request">400</property> + <child> + <object class="GtkVBox" id="page_4"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="xalign">0.05000000074505806</property> + <property name="yalign">0.05000000074505806</property> + <property name="label" translatable="yes">Below is the backtrace associated with your crash. A crash backtrace provides developers with details about how the crash happened, helping them track down the source of the problem. +Please review the backtrace below and modify it as needed to ensure your bug report does not contain any sensitive data you would rather not share:</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow2"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="GtkTextView" id="textview1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox2"> + <property name="visible">True</property> + <child> + <object class="GtkEntry" id="entry1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="secondary_icon_stock">gtk-find</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkArrow" id="arrow1"> + <property name="visible">True</property> + <property name="arrow_type">up</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkArrow" id="arrow2"> + <property name="visible">True</property> + <property name="arrow_type">down</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox3"> + <property name="visible">True</property> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox4"> + <property name="visible">True</property> + <child> + <object class="GtkButton" id="b_refresh"> + <property name="label" translatable="yes">Refresh</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_b_refresh_clicked"/> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="b_copy"> + <property name="label" translatable="yes">Copy</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkbutton1"> + <property name="label" translatable="yes">I agree with submitting the backtrace</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="fill">False</property> + <property name="position">4</property> + </packing> + </child> + </object> + </child> + </object> + <object class="GtkWindow" id="window5"> + <child> + <object class="GtkVBox" id="page_5"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="label" translatable="yes">Page 5</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <placeholder/> + </child> + </object> + </child> + </object> + <object class="GtkWindow" id="window6"> + <child> + <object class="GtkVBox" id="page_6"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="label" translatable="yes">Page 6</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <placeholder/> + </child> + </object> + </child> + </object> + <object class="GtkWindow" id="window7"> + <child> + <object class="GtkVBox" id="page_7"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="label" translatable="yes">Page 7</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <placeholder/> + </child> + </object> + </child> + </object> +</interface> diff --git a/src/gtk-wizard/wizard.h b/src/gtk-wizard/wizard.h new file mode 100644 index 00000000..daa25eeb --- /dev/null +++ b/src/gtk-wizard/wizard.h @@ -0,0 +1 @@ +GtkWidget *create_assistant(void); |