From 374ad22550f0610f41e127352a3efb2c62689ff0 Mon Sep 17 00:00:00 2001 From: Liming An Date: Mon, 21 May 2012 22:41:21 +0800 Subject: Hob: change the build failure scenario as ui design change the top bar display in build 'issue' page [YOCTO #2183] (Bitbake rev: 0705d3db1ce6d0f29301e2428c990ab0d9b2860e) Signed-off-by: Liming An Signed-off-by: Richard Purdie --- bitbake/lib/bb/ui/crumbs/builddetailspage.py | 99 +++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) (limited to 'bitbake/lib/bb/ui/crumbs/builddetailspage.py') diff --git a/bitbake/lib/bb/ui/crumbs/builddetailspage.py b/bitbake/lib/bb/ui/crumbs/builddetailspage.py index c2d5abc1d4..0052b017e5 100755 --- a/bitbake/lib/bb/ui/crumbs/builddetailspage.py +++ b/bitbake/lib/bb/ui/crumbs/builddetailspage.py @@ -24,10 +24,11 @@ import gtk import pango import gobject from bb.ui.crumbs.progressbar import HobProgressBar -from bb.ui.crumbs.hobwidget import hic, HobNotebook, HobAltButton, HobWarpCellRendererText +from bb.ui.crumbs.hobwidget import hic, HobNotebook, HobAltButton, HobWarpCellRendererText, HobButton from bb.ui.crumbs.runningbuild import RunningBuildTreeView from bb.ui.crumbs.runningbuild import BuildFailureTreeView from bb.ui.crumbs.hobpages import HobPage +from bb.ui.crumbs.hobcolor import HobColors class BuildConfigurationTreeView(gtk.TreeView): def __init__ (self): @@ -198,6 +199,87 @@ class BuildDetailsPage (HobPage): for child in children: self.remove(child) + def update_failures_sum_display(self): + num = 0 + it = self.failure_model.get_iter_first() + while it: + color = self.failure_model.get_value(it, self.builder.handler.build.model.COL_COLOR) + if color == HobColors.ERROR: + num += 1 + it = self.failure_model.iter_next(it) + + return num + + def add_build_fail_top_bar(self, actions): + mainly_action = "Edit %s" % actions + if 'image' in actions: + next_action = "" + else: + next_action = "Create new image" + + #set to issue page + self.notebook.set_page("Issues") + + color = HobColors.ERROR + build_fail_top = gtk.EventBox() + build_fail_top.set_size_request(-1, 260) + build_fail_top.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(color)) + + build_fail_tab = gtk.Table(7, 40, True) + build_fail_top.add(build_fail_tab) + + icon = gtk.Image() + icon_pix_buffer = gtk.gdk.pixbuf_new_from_file(hic.ICON_INDI_ERROR_FILE) + icon.set_from_pixbuf(icon_pix_buffer) + build_fail_tab.attach(icon, 1, 4, 0, 3) + + label = gtk.Label() + label.set_alignment(0.0, 0.5) + label.set_markup("%s" % self.title) + build_fail_tab.attach(label, 4, 20, 0, 3) + + label = gtk.Label() + label.set_alignment(0.0, 0.5) + num_of_fails = self.update_failures_sum_display() + current_fail, recipe_task_status = self.task_status.get_text().split('\n') + label.set_markup(" %d tasks failed, %s, %s" % (num_of_fails, current_fail, recipe_task_status)) + build_fail_tab.attach(label, 4, 40, 2, 4) + + # create button 'Edit packages' + action_button = HobButton(mainly_action) + action_button.set_size_request(-1, 49) + action_button.connect('clicked', self.failure_main_action_button_clicked_cb, mainly_action) + build_fail_tab.attach(action_button, 4, 16, 4, 6) + + if next_action: + next_button = HobAltButton(next_action) + next_button.set_alignment(0.0, 0.5) + next_button.connect('clicked', self.failure_next_action_button_clicked_cb, next_action) + build_fail_tab.attach(next_button, 17, 24, 4, 5) + + file_bug_button = HobAltButton('File a bug') + file_bug_button.set_alignment(0.0, 0.5) + file_bug_button.connect('clicked', self.failure_file_bug_activate_link_cb) + build_fail_tab.attach(file_bug_button, 17, 24, 4 + abs(next_action != ""), 6) + + return build_fail_top + + def show_fail_page(self, title, action_names): + self._remove_all_widget() + self.title = "Hob cannot build your %s" % title + + self.build_fail_bar = self.add_build_fail_top_bar(action_names) + self.pack_start(self.build_fail_bar) + self.pack_start(self.group_align, expand=True, fill=True) + + self.box_group_area.pack_start(self.vbox, expand=True, fill=True) + + self.vbox.pack_start(self.notebook, expand=True, fill=True) + + self.box_group_area.pack_end(self.button_box, expand=False, fill=False) + self.show_all() + self.back_button.hide() + def show_page(self, step): self._remove_all_widget() if step == self.builder.PACKAGE_GENERATING or step == self.builder.FAST_IMAGE_GENERATING: @@ -251,3 +333,18 @@ class BuildDetailsPage (HobPage): def show_configurations(self, configurations, params): self.config_tv.show(configurations, params) + + def failure_main_action_button_clicked_cb(self, button, action): + if "Edit recipes" in action: + self.builder.show_recipes() + elif "Edit packages" in action: + self.builder.show_packages() + elif "Edit image configuration" in action: + self.builder.show_configuration() + + def failure_next_action_button_clicked_cb(self, button, action): + if "Create new image" in action: + self.builder.initiate_new_build_async() + + def failure_file_bug_activate_link_cb(self, button): + button.child.emit('activate-link', "http://bugzilla.yoctoproject.org") -- cgit v1.2.3-54-g00ecf