summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristian Iorga <cristian.iorga@intel.com>2012-09-28 18:05:53 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-09-28 16:41:36 +0100
commitbe8bf02f2b347edf5514cafc6cb6a44f71118736 (patch)
treedea9a5ccfdbd56e72379b6ca2591f91049dc35b2
parent660a449bdfd154fed556024f166e69c6931ff634 (diff)
downloadbitbake-be8bf02f2b347edf5514cafc6cb6a44f71118736.tar.gz
hob: Error reports are done in a clearer way
For long errors (bigger than 200 letters), the text box is scrollable and resizable and text is selectable. Additionaly, all message dialogs are modal. Otherwise, a user could still interact with hob even in an error case, leading to potential problems. See design details in related bugs. Fixes [YOCTO #2960], [YOCTO #2983] Signed-off-by: Cristian Iorga <cristian.iorga@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-xlib/bb/ui/crumbs/builder.py5
-rw-r--r--lib/bb/ui/crumbs/hig.py59
2 files changed, 46 insertions, 18 deletions
diff --git a/lib/bb/ui/crumbs/builder.py b/lib/bb/ui/crumbs/builder.py
index e952aa820..fd555b0e7 100755
--- a/lib/bb/ui/crumbs/builder.py
+++ b/lib/bb/ui/crumbs/builder.py
@@ -849,9 +849,8 @@ class Builder(gtk.Window):
self.generate_image_async(True)
def show_error_dialog(self, msg):
- lbl = "<b>Error</b>\n"
- lbl = lbl + "%s\n\n" % glib.markup_escape_text(msg)
- dialog = CrumbsMessageDialog(self, lbl, gtk.STOCK_DIALOG_ERROR)
+ lbl = "<b>Hob found an error</b>\n"
+ dialog = CrumbsMessageDialog(self, lbl, gtk.STOCK_DIALOG_ERROR, msg)
button = dialog.add_button("Close", gtk.RESPONSE_OK)
HobButton.style_button(button)
response = dialog.run()
diff --git a/lib/bb/ui/crumbs/hig.py b/lib/bb/ui/crumbs/hig.py
index bdb3702e2..3c8c1c9e8 100644
--- a/lib/bb/ui/crumbs/hig.py
+++ b/lib/bb/ui/crumbs/hig.py
@@ -21,6 +21,7 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import glob
+import glib
import gtk
import gobject
import hashlib
@@ -236,18 +237,18 @@ class CrumbsMessageDialog(CrumbsDialog):
A GNOME HIG compliant dialog widget.
Add buttons with gtk.Dialog.add_button or gtk.Dialog.add_buttons
"""
- def __init__(self, parent=None, label="", icon=gtk.STOCK_INFO):
- super(CrumbsMessageDialog, self).__init__("", parent, gtk.DIALOG_DESTROY_WITH_PARENT)
+ def __init__(self, parent=None, label="", icon=gtk.STOCK_INFO, msg=""):
+ super(CrumbsMessageDialog, self).__init__("", parent, gtk.DIALOG_MODAL)
self.set_border_width(6)
self.vbox.set_property("spacing", 12)
self.action_area.set_property("spacing", 12)
self.action_area.set_property("border-width", 6)
- first_row = gtk.HBox(spacing=12)
- first_row.set_property("border-width", 6)
- first_row.show()
- self.vbox.add(first_row)
+ first_column = gtk.HBox(spacing=12)
+ first_column.set_property("border-width", 6)
+ first_column.show()
+ self.vbox.add(first_column)
self.icon = gtk.Image()
# We have our own Info icon which should be used in preference of the stock icon
@@ -255,15 +256,43 @@ class CrumbsMessageDialog(CrumbsDialog):
self.icon.set_from_stock(self.icon_chk.check_stock_icon(icon), gtk.ICON_SIZE_DIALOG)
self.icon.set_property("yalign", 0.00)
self.icon.show()
- first_row.add(self.icon)
-
- self.label = gtk.Label()
- self.label.set_use_markup(True)
- self.label.set_line_wrap(True)
- self.label.set_markup(label)
- self.label.set_property("yalign", 0.00)
- self.label.show()
- first_row.add(self.label)
+ first_column.pack_start(self.icon, expand=False, fill=True, padding=0)
+
+ if 0 <= len(msg) < 200:
+ lbl = label + "%s" % glib.markup_escape_text(msg)
+ self.label_short = gtk.Label()
+ self.label_short.set_use_markup(True)
+ self.label_short.set_line_wrap(True)
+ self.label_short.set_markup(lbl)
+ self.label_short.set_property("yalign", 0.00)
+ self.label_short.show()
+ first_column.add(self.label_short)
+ else:
+ second_row = gtk.VBox(spacing=12)
+ second_row.set_property("border-width", 6)
+ self.label_long = gtk.Label()
+ self.label_long.set_use_markup(True)
+ self.label_long.set_line_wrap(True)
+ self.label_long.set_markup(label)
+ self.label_long.set_alignment(0.0, 0.0)
+ second_row.pack_start(self.label_long, expand=False, fill=False, padding=0)
+ self.label_long.show()
+ self.textWindow = gtk.ScrolledWindow()
+ self.textWindow.set_shadow_type(gtk.SHADOW_IN)
+ self.msgView = gtk.TextView()
+ self.msgView.set_editable(False)
+ self.msgView.set_wrap_mode(gtk.WRAP_WORD)
+ self.msgView.set_cursor_visible(False)
+ self.msgView.set_size_request(300, 300)
+ self.buf = gtk.TextBuffer()
+ self.buf.set_text(msg)
+ self.msgView.set_buffer(self.buf)
+ self.textWindow.add(self.msgView)
+ self.msgView.show()
+ second_row.add(self.textWindow)
+ self.textWindow.show()
+ first_column.add(second_row)
+ second_row.show()
#
# SimpleSettings Dialog