Instead of a boring old MessageDialog, display errors in a Dialog with a scrolling text gadget containing errors.

This is a lot of effort for a case that should be rather unlikely; i.e. the user having dozens of errors in their config.

IndentErrors might make this more likely in future.  This may be reverted in future, but at least it'll be here if we need it.
This commit is contained in:
Thomas Hurst 2008-08-28 16:34:34 +01:00
parent 4fa5e1a442
commit 6016f06775
1 changed files with 40 additions and 11 deletions

View File

@ -33,7 +33,7 @@ up, set a default for it first."""
import os, platform, sys, re import os, platform, sys, re
import pwd import pwd
import gtk import gtk, pango
# set this to true to enable debugging output # set this to true to enable debugging output
# These should be moved somewhere better. # These should be moved somewhere better.
@ -65,7 +65,7 @@ Defaults = {
'delete_binding' : 'delete-sequence', 'delete_binding' : 'delete-sequence',
'cursor_blink' : True, 'cursor_blink' : True,
'emulation' : 'xterm', 'emulation' : 'xterm',
'font' : 'Mono 8', 'font' : 'Mono',
'foreground_color' : '#AAAAAA', 'foreground_color' : '#AAAAAA',
'scrollbar_position' : "right", 'scrollbar_position' : "right",
'scroll_background' : True, 'scroll_background' : True,
@ -211,18 +211,47 @@ class TerminatorConfValuestoreRC (TerminatorConfValuestore):
try: try:
ini.parse() ini.parse()
except ParsedWithErrors, e: except ParsedWithErrors, e:
from cgi import escape msg = _("""<big><b>Configuration error</b></big>
msg = _("""Errors were encountered while parsing terminator_config(5) file:
Errors were encountered while parsing terminator_config(5) file:
<b>%s</b> <b>%s</b>
Some lines have been ignored.""") % escape(repr(self.rcfilename)) %d line(s) have been ignored.""") % (self.rcfilename, len(e.errors))
errs = "\n\n".join(map(lambda error:
_(" * %(message)s, line %(lnum)d:\n <tt>%(line)s</tt>\n <tt>%(pad)s^</tt>") % { dialog = gtk.Dialog(_("Configuration error"), None, gtk.DIALOG_MODAL,
'message': error.message, 'file': escape(error.file), 'lnum': error.lnum, (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
'line': escape(error.line.rstrip()), 'pad': '-' * error.pos}, e.errors)) dialog.set_has_separator(False)
dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK) dialog.set_resizable(False)
dialog.set_markup(msg + "\n\n" + errs)
image = gtk.image_new_from_stock(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_DIALOG)
image.set_alignment (0.5, 0)
dmsg = gtk.Label(msg)
dmsg.set_use_markup(True)
dmsg.set_alignment(0, 0.5)
textbuff = gtk.TextBuffer()
textbuff.set_text("\n".join(map(lambda e: str(e), e.errors)))
textview = gtk.TextView(textbuff)
textview.set_editable(False)
textview.modify_font(pango.FontDescription(Defaults['font']))
textscroll = gtk.ScrolledWindow()
textscroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
textscroll.add(textview)
# This should be scaled with the size of the text and font
textscroll.set_size_request(600, 200)
root = gtk.VBox()
root.pack_start(dmsg, padding = 6)
root.pack_start(textscroll, padding = 6)
box = gtk.HBox()
box.pack_start (image, False, False, 6)
box.pack_start (root, False, False, 6)
dialog.vbox.pack_start (box, False, False, 12)
dialog.show_all()
dialog.run() dialog.run()
dialog.destroy() dialog.destroy()