[483] | 1 |
|
---|
| 2 | from common import *
|
---|
| 3 |
|
---|
| 4 | from mlx.i18n import xstr
|
---|
| 5 | import mlx.const as const
|
---|
| 6 | import mlx.config as config
|
---|
| 7 |
|
---|
| 8 | import os
|
---|
| 9 |
|
---|
| 10 | #------------------------------------------------------------------------------
|
---|
| 11 |
|
---|
| 12 | ## @package mlx.gui.bugreport
|
---|
| 13 | #
|
---|
| 14 | # The bug report dialog
|
---|
| 15 | #
|
---|
| 16 | # This module implements the bug report dialog.
|
---|
| 17 |
|
---|
| 18 | #------------------------------------------------------------------------------
|
---|
| 19 |
|
---|
| 20 | class BugReportDialog(gtk.Dialog):
|
---|
| 21 | """The dialog to report a bug."""
|
---|
| 22 | def __init__(self, gui):
|
---|
| 23 | super(BugReportDialog, self).__init__(WINDOW_TITLE_BASE + " - " +
|
---|
| 24 | xstr("bugreport_title"),
|
---|
| 25 | gui.mainWindow,
|
---|
| 26 | DIALOG_MODAL)
|
---|
| 27 |
|
---|
| 28 | self.add_button(xstr("button_cancel"), RESPONSETYPE_REJECT)
|
---|
| 29 | self._sendButton = self.add_button(xstr("button_send"), RESPONSETYPE_ACCEPT)
|
---|
| 30 | self._sendButton.set_can_default(True)
|
---|
| 31 | self._gui = gui
|
---|
| 32 |
|
---|
| 33 | contentArea = self.get_content_area()
|
---|
| 34 |
|
---|
| 35 | contentAlignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
|
---|
| 36 | xscale = 0.0, yscale = 0.0)
|
---|
| 37 | contentAlignment.set_padding(padding_top = 4, padding_bottom = 16,
|
---|
| 38 | padding_left = 8, padding_right = 8)
|
---|
| 39 |
|
---|
| 40 | contentArea.pack_start(contentAlignment, False, False, 0)
|
---|
| 41 |
|
---|
| 42 | contentVBox = gtk.VBox()
|
---|
| 43 | contentAlignment.add(contentVBox)
|
---|
| 44 |
|
---|
| 45 | label = gtk.Label(xstr("bugreport_summary"))
|
---|
| 46 | label.set_use_underline(True)
|
---|
| 47 | label.set_alignment(0.0, 0.5)
|
---|
| 48 |
|
---|
| 49 | contentVBox.pack_start(label, False, False, 4)
|
---|
| 50 |
|
---|
| 51 | self._summary = summary = gtk.Entry()
|
---|
| 52 | summary.connect("changed", self._summaryChanged)
|
---|
| 53 | summary.set_tooltip_text(xstr("bugreport_summary_tooltip"))
|
---|
| 54 | summary.set_width_chars(80)
|
---|
| 55 | label.set_mnemonic_widget(summary)
|
---|
| 56 | contentVBox.pack_start(summary, True, True, 4)
|
---|
| 57 |
|
---|
| 58 | label = gtk.Label(xstr("bugreport_description"))
|
---|
| 59 | label.set_use_underline(True)
|
---|
| 60 | label.set_alignment(0.0, 0.5)
|
---|
| 61 |
|
---|
| 62 | contentVBox.pack_start(label, False, False, 4)
|
---|
| 63 |
|
---|
| 64 | self._description = description = gtk.TextView()
|
---|
| 65 | description.set_tooltip_text(xstr("bugreport_description_tooltip"))
|
---|
[492] | 66 | description.set_wrap_mode(WRAP_WORD)
|
---|
[483] | 67 | label.set_mnemonic_widget(description)
|
---|
| 68 |
|
---|
| 69 | scrolledWindow = gtk.ScrolledWindow()
|
---|
| 70 | scrolledWindow.add(description)
|
---|
| 71 | scrolledWindow.set_size_request(-1, 200)
|
---|
| 72 | scrolledWindow.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)
|
---|
| 73 | scrolledWindow.set_shadow_type(SHADOW_IN)
|
---|
| 74 |
|
---|
| 75 | alignment = gtk.Alignment(xalign = 0.5, yalign = 0.0, xscale = 1.0, yscale = 1.0)
|
---|
| 76 | alignment.add(scrolledWindow)
|
---|
| 77 |
|
---|
| 78 | contentVBox.pack_start(alignment, True, True, 4)
|
---|
| 79 |
|
---|
| 80 | emailBox = gtk.HBox()
|
---|
| 81 | contentVBox.pack_start(emailBox, False, False, 4)
|
---|
| 82 |
|
---|
| 83 | label = gtk.Label(xstr("bugreport_email"))
|
---|
| 84 | label.set_use_underline(True)
|
---|
| 85 | label.set_alignment(0.0, 0.5)
|
---|
| 86 |
|
---|
| 87 | emailBox.pack_start(label, False, False, 0)
|
---|
| 88 |
|
---|
| 89 | alignment = gtk.Alignment()
|
---|
| 90 | emailBox.pack_start(alignment, False, False, 8)
|
---|
| 91 |
|
---|
| 92 | self._email = email = gtk.Entry()
|
---|
| 93 | email.set_tooltip_text(xstr("bugreport_email_tooltip"))
|
---|
| 94 | label.set_mnemonic_widget(email)
|
---|
| 95 | emailBox.pack_start(email, True, True, 0)
|
---|
| 96 |
|
---|
| 97 |
|
---|
| 98 | def run(self):
|
---|
| 99 | """Run the checklist editor dialog."""
|
---|
[484] | 100 | self.set_sensitive(True)
|
---|
| 101 | self._description.set_sensitive(True)
|
---|
[483] | 102 | self._updateButtons()
|
---|
| 103 | self._sendButton.grab_default()
|
---|
| 104 | self.show_all()
|
---|
| 105 | response = super(BugReportDialog, self).run()
|
---|
[484] | 106 |
|
---|
| 107 | print "response", response, RESPONSETYPE_ACCEPT
|
---|
| 108 | if response==RESPONSETYPE_ACCEPT:
|
---|
| 109 | self._send()
|
---|
| 110 | else:
|
---|
| 111 | self.hide()
|
---|
[483] | 112 |
|
---|
| 113 | def _summaryChanged(self, entry):
|
---|
| 114 | """Called when the summary has changed."""
|
---|
| 115 | self._updateButtons()
|
---|
| 116 |
|
---|
| 117 | def _updateButtons(self):
|
---|
| 118 | """Update the sensitivity of the buttoms."""
|
---|
| 119 | self._sendButton.set_sensitive(self._summary.get_text()!="")
|
---|
[484] | 120 |
|
---|
| 121 | def _send(self):
|
---|
| 122 | """Send the bug report."""
|
---|
| 123 | descriptionBuffer = self._description.get_buffer()
|
---|
| 124 | description = \
|
---|
| 125 | descriptionBuffer.get_text(descriptionBuffer.get_start_iter(),
|
---|
| 126 | descriptionBuffer.get_end_iter(),
|
---|
| 127 | False)
|
---|
[490] | 128 | description = text2unicode(description)
|
---|
[484] | 129 | self.set_sensitive(False)
|
---|
[490] | 130 | self._gui.sendBugReport(text2unicode(self._summary.get_text()),
|
---|
[484] | 131 | description,
|
---|
[490] | 132 | text2unicode(self._email.get_text()),
|
---|
[484] | 133 | self._bugReportSent)
|
---|
| 134 |
|
---|
| 135 | def _bugReportSent(self, returned, result):
|
---|
| 136 | """Called when the bug report was sent."""
|
---|
| 137 | self.set_sensitive(True)
|
---|
| 138 | self._description.set_sensitive(True)
|
---|
| 139 | if returned and result.success:
|
---|
| 140 | self.hide()
|
---|
| 141 | self._summary.set_text("")
|
---|
| 142 | self._description.get_buffer().set_text("")
|
---|
| 143 | self._email.set_text("")
|
---|
| 144 | else:
|
---|
| 145 | self.run()
|
---|