コード例 #1
0
ファイル: gtkexcepthook.py プロジェクト: lheckemann/gajim
def _info(type_, value, tb):
    if not _exception_in_progress.acquire(False):
        # Exceptions have piled up, so we use the default exception
        # handler for such exceptions
        _excepthook_save(type_, value, tb)
        return

    dialog = HigDialog(
        None, Gtk.MessageType.WARNING, Gtk.ButtonsType.NONE,
        _('A programming error has been detected'),
        _('It probably is not fatal, but should be reported '
          'to the developers nonetheless.'))

    dialog.set_modal(False)
    #FIXME: add icon to this button
    RESPONSE_REPORT_BUG = 42
    dialog.add_buttons(Gtk.STOCK_CLOSE, Gtk.ButtonsType.CLOSE,
                       _('_Report Bug'), RESPONSE_REPORT_BUG)
    report_button = dialog.action_area.get_children()[0]  # right to left
    report_button.grab_focus()

    # Details
    textview = Gtk.TextView()
    textview.set_editable(False)
    textview.override_font(Pango.FontDescription('Monospace'))
    sw = Gtk.ScrolledWindow()
    sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
    sw.add(textview)
    frame = Gtk.Frame()
    frame.set_shadow_type(Gtk.ShadowType.IN)
    frame.add(sw)
    frame.set_border_width(6)
    textbuffer = textview.get_buffer()
    trace = StringIO()
    traceback.print_exception(type_, value, tb, None, trace)
    textbuffer.set_text(trace.getvalue())
    textview.set_size_request(Gdk.Screen.width() / 3, Gdk.Screen.height() / 4)
    expander = Gtk.Expander(label=_('Details'))
    expander.add(frame)
    dialog.vbox.pack_start(expander, True, True, 0)

    dialog.set_resizable(True)
    # on expand the details the dialog remains centered on screen
    dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS)

    def on_dialog_response(dialog, response):
        if response == RESPONSE_REPORT_BUG:
            url = 'http://trac.gajim.org/wiki/HowToCreateATicket'
            helpers.launch_browser_mailer('url', url)
        else:
            dialog.destroy()

    dialog.connect('response', on_dialog_response)
    dialog.show_all()

    _exception_in_progress.release()
コード例 #2
0
ファイル: gtkexcepthook.py プロジェクト: gajim/gajim
def _info(type_, value, tb):
    if not _exception_in_progress.acquire(False):
        # Exceptions have piled up, so we use the default exception
        # handler for such exceptions
        _excepthook_save(type_, value, tb)
        return

    dialog = HigDialog(None, Gtk.MessageType.WARNING, Gtk.ButtonsType.NONE,
                            _('A programming error has been detected'),
                            _('It probably is not fatal, but should be reported '
                            'to the developers nonetheless.'))

    dialog.set_modal(False)
    #FIXME: add icon to this button
    RESPONSE_REPORT_BUG = 42
    dialog.add_buttons(Gtk.STOCK_CLOSE, Gtk.ButtonsType.CLOSE,
            _('_Report Bug'), RESPONSE_REPORT_BUG)
    report_button = dialog.action_area.get_children()[0] # right to left
    report_button.grab_focus()

    # Details
    textview = Gtk.TextView()
    textview.set_editable(False)
    textview.override_font(Pango.FontDescription('Monospace'))
    sw = Gtk.ScrolledWindow()
    sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
    sw.add(textview)
    frame = Gtk.Frame()
    frame.set_shadow_type(Gtk.ShadowType.IN)
    frame.add(sw)
    frame.set_border_width(6)
    textbuffer = textview.get_buffer()
    trace = StringIO()
    traceback.print_exception(type_, value, tb, None, trace)
    textbuffer.set_text(trace.getvalue())
    textview.set_size_request(
            Gdk.Screen.width() / 3,
            Gdk.Screen.height() / 4)
    expander = Gtk.Expander(label=_('Details'))
    expander.add(frame)
    dialog.vbox.pack_start(expander, True, True, 0)

    dialog.set_resizable(True)
    # on expand the details the dialog remains centered on screen
    dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS)

    def on_dialog_response(dialog, response):
        if response == RESPONSE_REPORT_BUG:
            url = 'http://trac.gajim.org/wiki/HowToCreateATicket'
            helpers.launch_browser_mailer('url', url)
        else:
            dialog.destroy()
    dialog.connect('response', on_dialog_response)
    dialog.show_all()

    _exception_in_progress.release()