[483] | 1 |
|
---|
[919] | 2 | from .common import *
|
---|
[483] | 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 |
|
---|
[996] | 20 | class BugReportDialog(Gtk.Dialog):
|
---|
[483] | 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,
|
---|
[999] | 26 | Gtk.DialogFlags.MODAL)
|
---|
[483] | 27 |
|
---|
[999] | 28 | self.add_button(xstr("button_cancel"), Gtk.ResponseType.REJECT)
|
---|
| 29 | self._sendButton = self.add_button(xstr("button_send"), Gtk.ResponseType.ACCEPT)
|
---|
[483] | 30 | self._sendButton.set_can_default(True)
|
---|
| 31 | self._gui = gui
|
---|
| 32 |
|
---|
| 33 | contentArea = self.get_content_area()
|
---|
| 34 |
|
---|
[996] | 35 | contentAlignment = Gtk.Alignment(xalign = 0.5, yalign = 0.5,
|
---|
[483] | 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 |
|
---|
[996] | 42 | contentVBox = Gtk.VBox()
|
---|
[483] | 43 | contentAlignment.add(contentVBox)
|
---|
| 44 |
|
---|
[996] | 45 | label = Gtk.Label(xstr("bugreport_summary"))
|
---|
[483] | 46 | label.set_use_underline(True)
|
---|
| 47 | label.set_alignment(0.0, 0.5)
|
---|
| 48 |
|
---|
| 49 | contentVBox.pack_start(label, False, False, 4)
|
---|
| 50 |
|
---|
[996] | 51 | self._summary = summary = Gtk.Entry()
|
---|
[483] | 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 |
|
---|
[996] | 58 | label = Gtk.Label(xstr("bugreport_description"))
|
---|
[483] | 59 | label.set_use_underline(True)
|
---|
| 60 | label.set_alignment(0.0, 0.5)
|
---|
| 61 |
|
---|
| 62 | contentVBox.pack_start(label, False, False, 4)
|
---|
| 63 |
|
---|
[996] | 64 | self._description = description = Gtk.TextView()
|
---|
[483] | 65 | description.set_tooltip_text(xstr("bugreport_description_tooltip"))
|
---|
[999] | 66 | description.set_wrap_mode(Gtk.WrapMode.WORD)
|
---|
[483] | 67 | label.set_mnemonic_widget(description)
|
---|
| 68 |
|
---|
[996] | 69 | scrolledWindow = Gtk.ScrolledWindow()
|
---|
[483] | 70 | scrolledWindow.add(description)
|
---|
| 71 | scrolledWindow.set_size_request(-1, 200)
|
---|
[999] | 72 | scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC,
|
---|
| 73 | Gtk.PolicyType.AUTOMATIC)
|
---|
| 74 | scrolledWindow.set_shadow_type(Gtk.ShadowType.IN)
|
---|
[483] | 75 |
|
---|
[996] | 76 | alignment = Gtk.Alignment(xalign = 0.5, yalign = 0.0, xscale = 1.0, yscale = 1.0)
|
---|
[483] | 77 | alignment.add(scrolledWindow)
|
---|
| 78 |
|
---|
| 79 | contentVBox.pack_start(alignment, True, True, 4)
|
---|
| 80 |
|
---|
[996] | 81 | emailBox = Gtk.HBox()
|
---|
[483] | 82 | contentVBox.pack_start(emailBox, False, False, 4)
|
---|
| 83 |
|
---|
[996] | 84 | label = Gtk.Label(xstr("bugreport_email"))
|
---|
[483] | 85 | label.set_use_underline(True)
|
---|
| 86 | label.set_alignment(0.0, 0.5)
|
---|
| 87 |
|
---|
| 88 | emailBox.pack_start(label, False, False, 0)
|
---|
| 89 |
|
---|
[996] | 90 | alignment = Gtk.Alignment()
|
---|
[483] | 91 | emailBox.pack_start(alignment, False, False, 8)
|
---|
| 92 |
|
---|
[996] | 93 | self._email = email = Gtk.Entry()
|
---|
[483] | 94 | email.set_tooltip_text(xstr("bugreport_email_tooltip"))
|
---|
| 95 | label.set_mnemonic_widget(email)
|
---|
| 96 | emailBox.pack_start(email, True, True, 0)
|
---|
| 97 |
|
---|
| 98 |
|
---|
| 99 | def run(self):
|
---|
| 100 | """Run the checklist editor dialog."""
|
---|
[484] | 101 | self.set_sensitive(True)
|
---|
| 102 | self._description.set_sensitive(True)
|
---|
[483] | 103 | self._updateButtons()
|
---|
| 104 | self._sendButton.grab_default()
|
---|
| 105 | self.show_all()
|
---|
| 106 | response = super(BugReportDialog, self).run()
|
---|
[484] | 107 |
|
---|
[999] | 108 | print("response", response, Gtk.ResponseType.ACCEPT)
|
---|
| 109 | if response==Gtk.ResponseType.ACCEPT:
|
---|
[484] | 110 | self._send()
|
---|
| 111 | else:
|
---|
| 112 | self.hide()
|
---|
[483] | 113 |
|
---|
| 114 | def _summaryChanged(self, entry):
|
---|
| 115 | """Called when the summary has changed."""
|
---|
| 116 | self._updateButtons()
|
---|
| 117 |
|
---|
| 118 | def _updateButtons(self):
|
---|
| 119 | """Update the sensitivity of the buttoms."""
|
---|
| 120 | self._sendButton.set_sensitive(self._summary.get_text()!="")
|
---|
[484] | 121 |
|
---|
| 122 | def _send(self):
|
---|
| 123 | """Send the bug report."""
|
---|
| 124 | descriptionBuffer = self._description.get_buffer()
|
---|
| 125 | description = \
|
---|
| 126 | descriptionBuffer.get_text(descriptionBuffer.get_start_iter(),
|
---|
| 127 | descriptionBuffer.get_end_iter(),
|
---|
| 128 | False)
|
---|
| 129 | self.set_sensitive(False)
|
---|
[954] | 130 | self._gui.sendBugReport(self._summary.get_text(),
|
---|
[484] | 131 | description,
|
---|
[954] | 132 | 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()
|
---|