summaryrefslogtreecommitdiffstats
path: root/src/Gui
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2010-01-19 14:37:49 +0100
committerJiri Moskovcak <jmoskovc@redhat.com>2010-01-19 14:37:49 +0100
commit4383eaf83bba4fd021471dcfd751b7f98990854a (patch)
tree5824bcf6723ec3412e48ecd95c57c0e6bba5bd2b /src/Gui
parent7c3acc81d9a4f83e8252779fa96703e1a72dd3db (diff)
downloadabrt-4383eaf83bba4fd021471dcfd751b7f98990854a.tar.gz
abrt-4383eaf83bba4fd021471dcfd751b7f98990854a.tar.xz
abrt-4383eaf83bba4fd021471dcfd751b7f98990854a.zip
GUI: redesign of reporter dialog
Diffstat (limited to 'src/Gui')
-rw-r--r--src/Gui/CCReporterDialog.py226
-rw-r--r--src/Gui/report.glade648
2 files changed, 612 insertions, 262 deletions
diff --git a/src/Gui/CCReporterDialog.py b/src/Gui/CCReporterDialog.py
index ab6ad0fa..47cf9089 100644
--- a/src/Gui/CCReporterDialog.py
+++ b/src/Gui/CCReporterDialog.py
@@ -36,10 +36,11 @@ class ReporterDialog():
self.report = report
#Set the Glade file
# FIXME add to path
- self.gladefile = "%s%sreport.glade" % (sys.path[0],"/")
- self.wTree = gtk.glade.XML(self.gladefile)
+ builderfile = "%s%sreport.glade" % (sys.path[0],"/")
+ self.builder = gtk.Builder()
+ self.builder.add_from_file(builderfile)
#Get the Main Window, and connect the "destroy" event
- self.window = self.wTree.get_widget("reporter_dialog")
+ self.window = self.builder.get_object("reporter_dialog")
self.window.set_default_size(640, 480)
self.window.connect("response", self.on_response, daemon)
if parent:
@@ -47,60 +48,89 @@ class ReporterDialog():
self.window.set_modal(True)
# comment textview
- self.tvComment = self.wTree.get_widget("tvComment")
+ self.tvComment = self.builder.get_object("tvComment")
self.tvComment.connect("focus-in-event", self.on_comment_focus_cb)
self.comment_changed = False
# "how to reproduce" textview
- self.tevHowToReproduce = self.wTree.get_widget("tevHowToReproduce")
+ self.tevHowToReproduce = self.builder.get_object("tevHowToReproduce")
self.how_to_changed = False
- self.tvReport = self.wTree.get_widget("tvReport")
-
- self.reportListStore = gtk.ListStore(str, str, bool, bool, bool)
- # set filter
- #self.modelfilter = self.reportListStore.filter_new()
- #self.modelfilter.set_visible_func(self.filter_reports, None)
- self.tvReport.set_model(self.reportListStore)
- renderer = gtk.CellRendererText()
- column = gtk.TreeViewColumn('Item', renderer, text=0)
- self.tvReport.append_column(column)
-
- renderer = CellRenderers.MultilineCellRenderer()
- renderer.props.editable = True
- renderer.props.wrap_mode = pango.WRAP_WORD
- renderer.props.wrap_width = 800
-
- #renderer.props.wrap_mode = pango.WRAP_WORD
- #renderer.props.wrap_width = 600
- column = gtk.TreeViewColumn('Value', renderer, text=1, editable=2)
- self.tvReport.append_column(column)
- renderer.connect('edited',self.column_edited,self.reportListStore)
- # toggle
- toggle_renderer = gtk.CellRendererToggle()
- toggle_renderer.set_property('activatable', True)
- toggle_renderer.connect( 'toggled', self.on_send_toggled, self.reportListStore )
- column = gtk.TreeViewColumn('Send', toggle_renderer)
- column.add_attribute(toggle_renderer, "active", 3)
- column.add_attribute(toggle_renderer, "visible", 4)
- self.tvReport.insert_column(column,0)
- # connect the signals
- self.tvReport.connect_after("size-allocate", self.on_window_resize)
- # start with the warning hidden, so it's not visible when there is no rating
- self.wTree.get_widget("ebErrors").hide()
- self.wTree.get_widget("bLog").connect("clicked", self.show_log_cb, log)
+ self.builder.get_object("ebErrors").hide()
+ self.builder.get_object("bLog").connect("clicked", self.show_log_cb, log)
+ self.builder.get_object("cbSendBacktrace").connect("toggled", self.on_send_backtrace_toggled)
+ self.allow_send()
self.hydrate()
-
+
+ def check_backtrace(self):
+ print "checking backtrace"
+
+ def warn_user(self, warnings):
+ # FIXME: show in lError
+ ebErrors = self.builder.get_object("ebErrors")
+ lErrors = self.builder.get_object("lErrors")
+ warning_lbl = None
+ for warning in warnings:
+ if warning_lbl:
+ warning_lbl += "\n* %s" % warning
+ else:
+ warning_lbl = "* %s" % warning
+ lErrors.set_label(warning_lbl)
+ ebErrors.show_all()
+
+ def hide_warning(self):
+ ebErrors = self.builder.get_object("ebErrors")
+ lErrors = self.builder.get_object("lErrors")
+ ebErrors.hide()
+
+ def allow_send(self):
+ self.hide_warning()
+ bSend = self.builder.get_object("bSend")
+ SendBacktrace = self.builder.get_object("cbSendBacktrace").get_active()
+ send = True
+ error_msgs = []
+ try:
+ rating = self.report["rating"]
+ except:
+ rating = None
+ # active buttons acording to required fields
+ # if an backtrace has rating use it
+ if not SendBacktrace:
+ send = False
+ error_msgs.append(_("You must agree with submitting the backtrace."))
+ # we have both SendBacktrace and rating
+ elif rating:
+ try:
+ package = self.report["package"][CD_CONTENT]
+ # if we don't have package for some reason
+ except:
+ package = None
+ # not usable report
+ if int(self.report["rating"][CD_CONTENT]) < 3:
+ if package:
+ error_msgs.append(_("Reporting disabled because the backtrace is unusable.\nPlease try to install debuginfo manually using command: <b>debuginfo-install %s</b> \nthen use Refresh button to regenerate the backtrace." % package[0:package.rfind('-',0,package.rfind('-'))]))
+ else:
+ error_msgs.append(_("The backtrace is unusable, you can't report this!"))
+ # probably usable 3
+ elif int(self.report["rating"][CD_CONTENT]) < 4:
+ error_msgs.append(_("The backtrace is incomplete, please make sure you provide good steps to reproduce."))
+
+ if error_msgs:
+ self.warn_user(error_msgs)
+ bSend.set_sensitive(send)
+
+ def on_send_backtrace_toggled(self, toggle_button):
+ self.allow_send()
+
def show_log_cb(self, widget, log):
show_log(log, parent=self.window)
# this callback is called when user press Cancel or Report button in Report dialog
def on_response(self, dialog, response_id, daemon):
# the button has been pressed (probably)
- # print "response_id", response_id
if response_id == gtk.RESPONSE_APPLY:
if not (self.check_settings(daemon) and self.check_report()):
dialog.stop_emission("response")
- self.wTree.get_widget("bSend").stop_emission("clicked")
+ self.builder.get_object("bSend").stop_emission("clicked")
if response_id == SHOW_LOG:
# prevent dialog from quitting the run()
dialog.stop_emission("response")
@@ -113,16 +143,6 @@ class ReporterDialog():
widget.set_buffer(gtk.TextBuffer())
self.comment_changed = True
- def on_window_resize(self, treeview, allocation):
- # multine support
- pass
- #print allocation
-
- def column_edited(self, cell, path, new_text, model):
- # 1 means the second cell
- model[path][1] = new_text
- return
-
def on_config_plugin_clicked(self, button, plugin, image):
ui = PluginSettingsUI(plugin, parent=self.window)
ui.hydrate()
@@ -154,7 +174,6 @@ class ReporterDialog():
if reporter.Settings.check() == False:
wrong_conf_plugs.append(reporter)
- #gui_error_message(_("%s is not properly set!\nPlease check the settings and try to report again." % reporter))
if wrong_conf_plugs:
gladefile = "%s%ssettings_wizard.glade" % (sys.path[0],"/")
builder = gtk.Builder()
@@ -187,8 +206,13 @@ class ReporterDialog():
def hydrate(self):
self.editable = []
- self.reportListStore.clear()
for item in self.report:
+ if item == "backtrace":
+ buff = gtk.TextBuffer()
+ tvBacktrace = self.builder.get_object("tvBacktrace")
+ buff.set_text(self.report[item][CD_CONTENT])
+ tvBacktrace.set_buffer(buff)
+ continue
if item == "Comment":
buff = gtk.TextBuffer()
comment = _("Brief description how to reproduce this or what you did...")
@@ -217,60 +241,36 @@ class ReporterDialog():
self.tevHowToReproduce.set_buffer(buff)
continue
- # if an backtrace has rating use it
- if item == "rating":
- try:
- package = self.report["package"][CD_CONTENT]
- # if we don't have package for some reason
- except:
- package = None
- ebErrors = self.wTree.get_widget("ebErrors")
- fReproducer = self.wTree.get_widget("fReproducer")
- fComments = self.wTree.get_widget("fComments")
- lErrors = self.wTree.get_widget("lErrors")
- bSend = self.wTree.get_widget("bSend")
- # not usable report
- if int(self.report[item][CD_CONTENT]) < 3:
- ebErrors.show()
- fReproducer.hide()
- fComments.hide()
- if package:
- lErrors.set_markup(
- _("Reporting disabled because the backtrace is unusable.\nPlease try to install debuginfo manually using command: <b>debuginfo-install %s</b> \nthen use Refresh button to regenerate the backtrace." % package[0:package.rfind('-',0,package.rfind('-'))]))
- else:
- lErrors.set_markup(_("The backtrace is unusable, you can't report this!"))
- bSend.set_sensitive(False)
- # probably usable 3
- elif int(self.report[item][CD_CONTENT]) < 4:
- ebErrors.show()
- lErrors.set_markup(_("The backtrace is incomplete, please make sure you provide good steps to reproduce."))
- bSend.set_sensitive(True)
- else:
- ebErrors.hide()
- fReproducer.show()
- fComments.show()
- bSend.set_sensitive(True)
if self.report[item][CD_TYPE] != CD_SYS:
# item name 0| value 1| editable? 2| toggled? 3| visible?(attachment)4
- if self.report[item][CD_EDITABLE] == 'y':
- self.editable.append(item)
- self.row_dict[item] = self.reportListStore.append([item, self.report[item][CD_CONTENT],
- item in self.editable, True,
- self.report[item][CD_TYPE] in [CD_ATT,CD_BIN]])
+ # FIXME: handle editable fields
+ if self.report[item][CD_TYPE] in [CD_ATT,CD_BIN]:
+ self.builder.get_object("fAttachment").show()
+ vbAttachments = self.builder.get_object("vbAttachments")
+ toggle = gtk.CheckButton(self.report[item][CD_CONTENT])
+ vbAttachments.pack_start(toggle)
+ # bind item to checkbox
+ toggle.item = item
+ toggle.show()
+ continue
+ item_label = self.builder.get_object("l%s" % item)
+ if item_label:
+ item_label.set_text(self.report[item][CD_CONTENT])
+ else:
+ # no widget to show this item
+ # probably some new item need to adjust the GUI!
+ # FIXME: add some window+button to show all the info
+ # in raw form (smth like the old report dialog)
+ pass
def dehydrate(self):
- attributes = ["item", "content", "editable", "send", "attachment"]
- for row in self.reportListStore:
- rowe = dict(zip(attributes, row))
- if not rowe["editable"] and not rowe["attachment"]:
- self.report[rowe["item"]][CD_CONTENT] = rowe["content"]
- elif rowe["editable"] and not rowe["attachment"]:
- self.report[rowe["item"]][CD_CONTENT] = rowe["content"]
- elif (rowe["attachment"] or (rowe["editable"] and rowe["attachment"])) and rowe["send"]:
- self.report[rowe["item"]][CD_CONTENT] = rowe["content"]
- else:
- del self.report[rowe["item"]]
+ # handle attachments
+ vbAttachments = self.builder.get_object("vbAttachments")
+ for attachment in vbAttachments.get_children():
+ #print "%s file %s" % (["not sending","sending"][attachment.get_active()], attachment.get_label())
+ del self.report[attachment.item]
+
# handle comment
if self.comment_changed:
buff = self.tvComment.get_buffer()
@@ -283,22 +283,14 @@ class ReporterDialog():
self.report["How to reproduce"] = [CD_TXT, 'y', buff.get_text(buff.get_start_iter(),buff.get_end_iter())]
else:
del self.report["How to reproduce"]
+ #handle backtrace
+ tev_backtrace = self.builder.get_object("tvBacktrace")
+ buff = tev_backtrace.get_buffer()
+ self.report["backtrace"] = [CD_TXT, 'y', buff.get_text(buff.get_start_iter(),buff.get_end_iter())]
def check_report(self):
- # FIXME: what to do if user press "Not to send BT and then press cancel"
- # it uncheck the backtrace and let him to edit it, and then user might
- # not noticed, that he is not sending the BT, so should we warn user about this
- # or check the BT automatically?
- attributes = ["item", "content", "editable", "send", "attachment"]
- for row in self.reportListStore:
- rowe = dict(zip(attributes, row))
- if (rowe["attachment"] or (rowe["editable"] and rowe["attachment"])) and rowe["send"]:
- result = gui_question_dialog(_("<b>WARNING</b>, you're about to send data which might contain sensitive information.\n"
- "Do you really want to send <b>%s</b>?\n" % rowe["item"]), self.window)
- if result == gtk.RESPONSE_NO:
- row[attributes.index("send")] = False
- if result in (gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT):
- return False
+ # FIXME: check the report for passwords and some other potentially
+ # sensitive info
self.dehydrate()
return True
diff --git a/src/Gui/report.glade b/src/Gui/report.glade
index 0eae1f16..d3bf5eb0 100644
--- a/src/Gui/report.glade
+++ b/src/Gui/report.glade
@@ -1,225 +1,580 @@
<?xml version="1.0"?>
-<glade-interface>
- <!-- interface-requires gtk+ 2.16 -->
- <!-- interface-naming-policy toplevel-contextual -->
- <widget class="GtkDialog" id="reporter_dialog">
- <property name="border_width">6</property>
- <property name="title" translatable="yes">Report</property>
- <property name="modal">True</property>
- <property name="window_position">center-on-parent</property>
- <property name="default_width">400</property>
- <property name="default_height">400</property>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkDialog" id="reporter_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Automatic Bug Reporting Tool</property>
<property name="type_hint">normal</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox4">
+ <object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="spacing">12</property>
+ <property name="spacing">2</property>
<child>
- <widget class="GtkVBox" id="vbox1">
+ <object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="spacing">12</property>
<child>
- <widget class="GtkVBox" id="vboxNonError">
+ <object class="GtkFrame" id="fSysInfo">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
<child>
- <widget class="GtkFrame" id="frame1">
+ <object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
+ <property name="left_padding">12</property>
<child>
- <widget class="GtkAlignment" id="alignment3">
+ <object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
- <property name="left_padding">12</property>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow5">
+ <object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
+ <property name="orientation">vertical</property>
<child>
- <widget class="GtkTreeView" id="tvReport">
+ <object class="GtkLabel" id="l">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- </widget>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;span fgcolor="blue"&gt;Package:&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;span fgcolor="blue"&gt;Component:&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;span fgcolor="blue"&gt;Executable:&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
</child>
- </widget>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;span fgcolor="blue"&gt;Cmdline:&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
</child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Following items will be sent&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
+ <child>
+ <object class="GtkVBox" id="vbox4">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkLabel" id="lpackage">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">N/A</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lcomponent">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">N/A</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lexecutable">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">N/A</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lcmdline">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">N/A</property>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox5">
+ <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</property>
+ <property name="label" translatable="yes">&lt;span fgcolor="blue"&gt;Architecture:&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;span fgcolor="blue"&gt;Kernel:&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label11">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;span fgcolor="blue"&gt;Release:&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;span fgcolor="blue"&gt;Reason:&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox6">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="larchitecture">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">N/A</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lkernel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">N/A</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lrelease">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">N/A</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lreason">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">N/A</property>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
</child>
- </widget>
- <packing>
- <property name="position">0</property>
- </packing>
+ </object>
</child>
+ <child type="label">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="ypad">5</property>
+ <property name="label" translatable="yes">&lt;b&gt;General information&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="fBacktrace">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
<child>
- <widget class="GtkFrame" id="fReproducer">
+ <object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
+ <property name="left_padding">12</property>
<child>
- <widget class="GtkAlignment" id="alignment1">
+ <object class="GtkVBox" id="vbox7">
<property name="visible">True</property>
- <property name="left_padding">12</property>
+ <property name="orientation">vertical</property>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow3">
+ <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>
- <widget class="GtkViewport" id="viewport1">
+ <object class="GtkTextView" id="tvBacktrace">
+ <property name="height_request">200</property>
<property name="visible">True</property>
- <property name="resize_mode">queue</property>
- <child>
- <widget class="GtkTextView" id="tevHowToReproduce">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="wrap_mode">word-char</property>
- </widget>
- </child>
- </widget>
+ <property name="can_focus">True</property>
+ </object>
</child>
- </widget>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
</child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;How to reproduce (in a few simple steps)&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
+ <child>
+ <object class="GtkCheckButton" id="cbSendBacktrace">
+ <property name="label" translatable="yes">I agree to submit this backtrace, which could contain sensitive data</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>
+ </object>
</child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
+ </object>
</child>
+ <child type="label">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="ypad">5</property>
+ <property name="label" translatable="yes">&lt;b&gt;Backtrace&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
<child>
- <widget class="GtkFrame" id="fComments">
+ <object class="GtkAlignment" id="alignment3">
<property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
+ <property name="left_padding">12</property>
<child>
- <widget class="GtkAlignment" id="alignment2">
+ <object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
- <property name="left_padding">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow2">
+ <object class="GtkVBox" id="vboxNonError">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkFrame" id="fReproducer">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment5">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow3">
+ <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="GtkViewport" id="viewport1">
+ <property name="visible">True</property>
+ <property name="resize_mode">queue</property>
+ <child>
+ <object class="GtkTextView" id="tevHowToReproduce">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="wrap_mode">word-char</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;How to reproduce (in a few simple steps)&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
<child>
- <widget class="GtkViewport" id="viewport2">
+ <object class="GtkFrame" id="fComments">
<property name="visible">True</property>
- <property name="resize_mode">queue</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
<child>
- <widget class="GtkTextView" id="tvComment">
+ <object class="GtkAlignment" id="alignment6">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="wrap_mode">word-char</property>
- </widget>
+ <property name="left_padding">12</property>
+ <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="GtkViewport" id="viewport2">
+ <property name="visible">True</property>
+ <property name="resize_mode">queue</property>
+ <child>
+ <object class="GtkTextView" id="tvComment">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="wrap_mode">word-char</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
</child>
- </widget>
+ <child type="label">
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Comment&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
</child>
- </widget>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
</child>
- </widget>
+ </object>
</child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="ypad">5</property>
+ <property name="label" translatable="yes">&lt;b&gt;User information&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="fAttachment">
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment4">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
<child>
- <widget class="GtkLabel" id="label2">
+ <object class="GtkVBox" id="vbAttachments">
<property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Comment&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
</child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="fAttachments">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Attachments&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
</child>
- </widget>
+ </object>
<packing>
- <property name="position">0</property>
+ <property name="position">3</property>
</packing>
</child>
<child>
- <widget class="GtkHBox" id="ebErrors">
+ <object class="GtkHBox" id="ebErrors">
<property name="visible">True</property>
- <property name="spacing">12</property>
<child>
- <widget class="GtkImage" id="image1">
+ <object class="GtkAlignment" id="alignment7">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="stock">gtk-dialog-warning</property>
<property name="icon-size">6</property>
- </widget>
+ </object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">0</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="lErrors">
+ <object class="GtkVBox" id="vbox8">
<property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- <property name="use_markup">True</property>
- </widget>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label12">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Please fix the following problems&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lErrors">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"> </property>
+ <property name="use_markup">True</property>
+ <property name="selectable">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
<packing>
- <property name="position">1</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment8">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">3</property>
</packing>
</child>
- </widget>
+ </object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">4</property>
</packing>
</child>
- </widget>
+ </object>
<packing>
- <property name="position">0</property>
+ <property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area4">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="layout_style">end</property>
<child>
- <widget class="GtkButton" id="bLog">
+ <object class="GtkButton" id="bLog">
<property name="label" translatable="yes">Log</property>
- <property name="response_id">-60</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- </widget>
+ </object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
@@ -227,14 +582,13 @@
</packing>
</child>
<child>
- <widget class="GtkButton" id="bCancel">
+ <object class="GtkButton" id="bCancel">
<property name="label">gtk-cancel</property>
- <property name="response_id">-6</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
- </widget>
+ </object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
@@ -242,14 +596,13 @@
</packing>
</child>
<child>
- <widget class="GtkButton" id="bRefresh">
+ <object class="GtkButton" id="bRefresh">
<property name="label">gtk-refresh</property>
- <property name="response_id">-50</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
- </widget>
+ </object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
@@ -257,27 +610,32 @@
</packing>
</child>
<child>
- <widget class="GtkButton" id="bSend">
+ <object class="GtkButton" id="bSend">
<property name="label" translatable="yes">Send</property>
- <property name="response_id">-10</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- </widget>
+ </object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
- </widget>
+ </object>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
- <property name="position">1</property>
+ <property name="position">0</property>
</packing>
</child>
- </widget>
+ </object>
</child>
- </widget>
-</glade-interface>
+ <action-widgets>
+ <action-widget response="-60">bLog</action-widget>
+ <action-widget response="-6">bCancel</action-widget>
+ <action-widget response="-50">bRefresh</action-widget>
+ <action-widget response="-10">bSend</action-widget>
+ </action-widgets>
+ </object>
+</interface>