Hob Notebook Implementation and Others
v4 cover Hob Notebook Implementation and Others
This patchset is
- to implement Hob self-defined notebook, and use it in the build details page.
- to clean up the code per the comments from the community.
(In order to make it readable, we did them in separate patches)
Compared with V3 version, this version temporarily removed the patches for
- to improve the build log with the animation of the refresh icon.
- to add proxy support in the Settings dialog.
Because the updated patches are not ready so far per the comments from the community.
The following changes since commit fd3514f35adc938c2c405aae0e283a9df1395c9b:
blktrace: update to version 1.0.5 (2012-03-19 20:28:48 +0000)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib shane/hob2-v0.70
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=shane/hob2-v0.70
Liming An (6):
Hob: remove the invalid code in hobwidget.py
Hob: Fixed the hobwidget code and make it like a pythonista
Hob: add auto adjust background area function for long issue text
Hob: change HobNoteBook tab edge color from green to gray
Hob: fix static variable "self.search" to parameter "search" in
signal callback function
Hob: fixed the tabbar search entry retaining focus when user has
clicked off it issue
Shane Wang (5):
Hob: implement a self-defined notebook visual component for Hob
Hob: use HobNotebook to implement a notebook in build details page
Hob: show indicators on the tabs of the Hob notebook
Hob: change the code style to enumerate a list in a for-loop
Hob: fix '!= None' and '== None' in the code
bitbake/lib/bb/ui/crumbs/builddetailspage.py | 40 ++- bitbake/lib/bb/ui/crumbs/builder.py | 5 + bitbake/lib/bb/ui/crumbs/hobcolor.py | 3 + bitbake/lib/bb/ui/crumbs/hobeventhandler.py | 4 +- bitbake/lib/bb/ui/crumbs/hoblistmodel.py | 2 +- bitbake/lib/bb/ui/crumbs/hobpages.py | 4 +- bitbake/lib/bb/ui/crumbs/hobwidget.py | 528 ++++++++++++++++++---- bitbake/lib/bb/ui/crumbs/imagedetailspage.py | 12 +- bitbake/lib/bb/ui/crumbs/packageselectionpage.py | 27 +- bitbake/lib/bb/ui/crumbs/recipeselectionpage.py | 29 +- bitbake/lib/bb/ui/crumbs/runningbuild.py | 69 +++ 11 files changed, 571 insertions(+), 152 deletions(-)
Signature · 1 line
1.7.6
PATCH v4 1/11 Hob: implement a self-defined notebook visual component for Hob
In recipe selection page, package selection page, and build details page, etc, there is a notebook component which is not gtk.Notebook in the design video. We implement the visual component with a drawing area, and use it to replace the old notebook in recipe selection page and package selection page. The reasons why we do it are:
1) General speaking, gtk.Notebook doesn't look like the designer worked out. (see https://wiki.yoctoproject.org/wiki/File:Hob1.2-screencast2.mov)
2) And the designer version looks better, for example, there is an indicator to show how many recipes or packages are included, and how many issues happened when building? Very straightforward. But technically, gtk.Notebook can't implement that, as far as we know.
3) Moreover, there is an entry for "search recipes", and "search packages". How to make it horizontal to the tabs is a problem to us.
Regarding those, we give up gtk.Notebook and use our own.
--- bitbake/lib/bb/ui/crumbs/hobcolor.py | 1 + bitbake/lib/bb/ui/crumbs/hobwidget.py | 468 ++++++++++++++++++---- bitbake/lib/bb/ui/crumbs/packageselectionpage.py | 17 +- bitbake/lib/bb/ui/crumbs/recipeselectionpage.py | 19 +- 4 files changed, 394 insertions(+), 111 deletions(-)
bitbake/lib/bb/ui/crumbs/hobcolor.py +1 -0
@@ -28,6 +28,7 @@ class HobColors: DARK = "#3c3b37" BLACK = "#000000" LIGHT_ORANGE = "#f7a787" + YELLOW = "#ffff00" OK = WHITE RUNNING = PALE_GREEN
bitbake/lib/bb/ui/crumbs/hobwidget.py +383 -85
487 lines not on this page · raw message
bitbake/lib/bb/ui/crumbs/packageselectionpage.py +5 -12
@@ -23,7 +23,7 @@ import gtk import glib from bb.ui.crumbs.hobcolor import HobColors -from bb.ui.crumbs.hobwidget import HobViewBar, HobViewTable +from bb.ui.crumbs.hobwidget import HobViewTable, HobNotebook from bb.ui.crumbs.hoblistmodel import PackageListModel from bb.ui.crumbs.hobpages import HobPage
@@ -102,11 +102,7 @@ class PackageSelectionPage (HobPage): self.pack_start(self.group_align, expand=True, fill=True) # set visiable members - self.grid = gtk.Table(10, 1, True) - self.grid.set_col_spacings(3) - - self.ins = gtk.Notebook() - self.ins.set_show_tabs(False) + self.ins = HobNotebook() self.tables = [] # we need to modify table when the dialog is shown # append the tab for i in range(len(self.pages)):
@@ -122,16 +118,13 @@ class PackageSelectionPage (HobPage): self.ins.append_page(tab, label) self.tables.append(tab) - self.grid.attach(self.ins, 0, 1, 1, 10, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1) - # a black bar associated with the notebook - self.topbar = HobViewBar(self.ins) - self.grid.attach(self.topbar, 0, 1, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1) + self.ins.set_entry("Search packages:") # set the search entry for each table for tab in self.tables: - tab.set_search_entry(0, self.topbar.search) + tab.set_search_entry(0, self.ins.search) # add all into the dialog - self.box_group_area.add(self.grid) + self.box_group_area.pack_start(self.ins, expand=True, fill=True) button_box = gtk.HBox(False, 6) self.box_group_area.pack_start(button_box, expand=False, fill=False)
bitbake/lib/bb/ui/crumbs/recipeselectionpage.py +5 -14
@@ -23,7 +23,7 @@ import gtk import glib from bb.ui.crumbs.hobcolor import HobColors -from bb.ui.crumbs.hobwidget import HobViewBar, HobViewTable +from bb.ui.crumbs.hobwidget import HobViewTable, HobNotebook from bb.ui.crumbs.hoblistmodel import RecipeListModel from bb.ui.crumbs.hobpages import HobPage
@@ -124,13 +124,7 @@ class RecipeSelectionPage (HobPage): self.pack_start(self.group_align, expand=True, fill=True) # set visiable members - self.grid = gtk.Table(10, 1, True) - self.grid.set_col_spacings(3) - - # draw the left part of the window - # a notebook - self.ins = gtk.Notebook() - self.ins.set_show_tabs(False) + self.ins = HobNotebook() self.tables = [] # we need modify table when the dialog is shown # append the tabs in order for i in range(len(self.pages)):
@@ -146,16 +140,13 @@ class RecipeSelectionPage (HobPage): self.ins.append_page(tab, label) self.tables.append(tab) - self.grid.attach(self.ins, 0, 1, 1, 10, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND) - # a black bar associated with the notebook - self.topbar = HobViewBar(self.ins) - self.grid.attach(self.topbar, 0, 1, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND) + self.ins.set_entry("Search recipes:") # set the search entry for each table for tab in self.tables: - tab.set_search_entry(0, self.topbar.search) + tab.set_search_entry(0, self.ins.search) # add all into the window - self.box_group_area.add(self.grid) + self.box_group_area.pack_start(self.ins, expand=True, fill=True) button_box = gtk.HBox(False, 6) self.box_group_area.pack_end(button_box, expand=False, fill=False)
Signature · 1 line
1.7.6
PATCH v4 3/11 Hob: show indicators on the tabs of the Hob notebook
This patch is to show the indicators (e.g., the number of the issues) in the build details page to highlight.
--- bitbake/lib/bb/ui/crumbs/builddetailspage.py | 10 ++++++++++ bitbake/lib/bb/ui/crumbs/builder.py | 5 +++++ bitbake/lib/bb/ui/crumbs/hobwidget.py | 14 ++++++++++++++ bitbake/lib/bb/ui/crumbs/runningbuild.py | 4 ++++ 4 files changed, 33 insertions(+), 0 deletions(-)
bitbake/lib/bb/ui/crumbs/builddetailspage.py +10 -0
@@ -37,6 +37,8 @@ class BuildDetailsPage (HobPage): def __init__(self, builder): super(BuildDetailsPage, self).__init__(builder, "Building ...") + self.num_of_issues = 0 + # create visual elements self.create_visual_elements()
@@ -80,6 +82,14 @@ class BuildDetailsPage (HobPage): self.back_button.connect("clicked", self.back_button_clicked_cb) self.button_box.pack_start(self.back_button, expand=False, fill=False) + def show_issues(self): + self.num_of_issues += 1 + self.notebook.show_indicator_icon("Issues", self.num_of_issues) + + def reset_issues(self): + self.num_of_issues = 0 + self.notebook.hide_indicator_icon("Issues") + def _remove_all_widget(self): children = self.vbox.get_children() or [] for child in children:
bitbake/lib/bb/ui/crumbs/builder.py +5 -0
@@ -212,6 +212,7 @@ class Builder(gtk.Window): self.handler.build.connect("build-succeeded", self.handler_build_succeeded_cb) self.handler.build.connect("build-failed", self.handler_build_failed_cb) self.handler.build.connect("task-started", self.handler_task_started_cb) + self.handler.build.connect("log-error", self.handler_build_failure_cb) self.handler.connect("generating-data", self.handler_generating_data_cb) self.handler.connect("data-generated", self.handler_data_generated_cb) self.handler.connect("command-succeeded", self.handler_command_succeeded_cb)
@@ -533,6 +534,7 @@ class Builder(gtk.Window): elif self.current_step == self.PACKAGE_GENERATING: fraction = 0 self.build_details_page.update_progress_bar("Build Started: ", fraction) + self.build_details_page.reset_issues() def build_succeeded(self): if self.current_step == self.FAST_IMAGE_GENERATING:
@@ -600,6 +602,9 @@ class Builder(gtk.Window): fraction = 0.2 + 0.8 * fraction self.build_details_page.update_progress_bar(title + ": ", fraction) + def handler_build_failure_cb(self, running_build): + self.build_details_page.show_issues() + def destroy_window_cb(self, widget, event): lbl = "<b>Do you really want to exit the Hob image creator?</b>" dialog = CrumbsMessageDialog(self, lbl, gtk.STOCK_DIALOG_INFO)
bitbake/lib/bb/ui/crumbs/hobwidget.py +14 -0
@@ -619,6 +619,20 @@ class HobNotebook(gtk.VBox): self.tb.show() + def show_indicator_icon(self, title, number): + for i, child in enumerate(self.tabbar.children): + if child["toggled_page"] == -1: + continue + if child["title"] == title: + self.tabbar.show_indicator_icon(i, number) + + def hide_indicator_icon(self, title): + for i, child in enumerate(self.tabbar.children): + if child["toggled_page"] == -1: + continue + if child["title"] == title: + self.tabbar.hide_indicator_icon(i) + def tab_switched_cb(self, widget, page): self.notebook.set_current_page(page)
bitbake/lib/bb/ui/crumbs/runningbuild.py +4 -0
@@ -84,6 +84,9 @@ class RunningBuild (gobject.GObject): 'task-started' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)), + 'log-error' : (gobject.SIGNAL_RUN_LAST, + gobject.TYPE_NONE, + ()), } pids_to_task = {} tasks_to_iter = {}
@@ -134,6 +137,7 @@ class RunningBuild (gobject.GObject): if event.levelno >= logging.ERROR: icon = "dialog-error" color = HobColors.ERROR + self.emit("log-error") elif event.levelno >= logging.WARNING: icon = "dialog-warning" color = HobColors.WARNING
Signature · 1 line
1.7.6
PATCH v4 4/11 Hob: change the code style to enumerate a list in a for-loop
In reply to Shane WangWe use the more common style to enumerate a list in a for-loop
(http://docs.python.org/library/functions.html#enumerate), that is:
try to use
for item in mylist,
and try to use
for i, item in enumerate(list)
rather than
for i in range(len(mylist))
--- bitbake/lib/bb/ui/crumbs/hobwidget.py | 30 +++++++++++----------- bitbake/lib/bb/ui/crumbs/packageselectionpage.py | 10 +++--- bitbake/lib/bb/ui/crumbs/recipeselectionpage.py | 10 +++--- 3 files changed, 25 insertions(+), 25 deletions(-)
bitbake/lib/bb/ui/crumbs/hobwidget.py +15 -15
@@ -109,38 +109,38 @@ class HobViewTable (gtk.VBox): self.toggle_columns = [] self.table_tree.connect("row-activated", self.row_activated_cb) - for i in range(len(columns)): - col = gtk.TreeViewColumn(columns[i]['col_name']) + for i, column in enumerate(columns): + col = gtk.TreeViewColumn(column['col_name']) col.set_clickable(True) col.set_resizable(True) - col.set_sort_column_id(columns[i]['col_id']) - if 'col_min' in columns[i].keys(): - col.set_min_width(columns[i]['col_min']) - if 'col_max' in columns[i].keys(): - col.set_max_width(columns[i]['col_max']) + col.set_sort_column_id(column['col_id']) + if 'col_min' in column.keys(): + col.set_min_width(column['col_min']) + if 'col_max' in column.keys(): + col.set_max_width(column['col_max']) self.table_tree.append_column(col) - if (not 'col_style' in columns[i].keys()) or columns[i]['col_style'] == 'text': + if (not 'col_style' in column.keys()) or column['col_style'] == 'text': cell = gtk.CellRendererText() col.pack_start(cell, True) - col.set_attributes(cell, text=columns[i]['col_id']) - elif columns[i]['col_style'] == 'check toggle': + col.set_attributes(cell, text=column['col_id']) + elif column['col_style'] == 'check toggle': cell = gtk.CellRendererToggle() cell.set_property('activatable', True) cell.connect("toggled", self.toggled_cb, i, self.table_tree) self.toggle_id = i col.pack_end(cell, True) - col.set_attributes(cell, active=columns[i]['col_id']) - self.toggle_columns.append(columns[i]['col_name']) - elif columns[i]['col_style'] == 'radio toggle': + col.set_attributes(cell, active=column['col_id']) + self.toggle_columns.append(column['col_name']) + elif column['col_style'] == 'radio toggle': cell = gtk.CellRendererToggle() cell.set_property('activatable', True) cell.set_radio(True) cell.connect("toggled", self.toggled_cb, i, self.table_tree) self.toggle_id = i col.pack_end(cell, True) - col.set_attributes(cell, active=columns[i]['col_id']) - self.toggle_columns.append(columns[i]['col_name']) + col.set_attributes(cell, active=column['col_id']) + self.toggle_columns.append(column['col_name']) scroll = gtk.ScrolledWindow() scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
bitbake/lib/bb/ui/crumbs/packageselectionpage.py +5 -5
@@ -105,16 +105,16 @@ class PackageSelectionPage (HobPage): self.ins = HobNotebook() self.tables = [] # we need to modify table when the dialog is shown # append the tab - for i in range(len(self.pages)): - columns = self.pages[i]['columns'] + for page in self.pages: + columns = page['columns'] tab = HobViewTable(columns) - filter = self.pages[i]['filter'] + filter = page['filter'] tab.set_model(self.package_model.tree_model(filter)) tab.connect("toggled", self.table_toggled_cb) - if self.pages[i]['name'] == "Included": + if page['name'] == "Included": tab.connect("row-activated", self.tree_row_activated_cb) - label = gtk.Label(self.pages[i]['name']) + label = gtk.Label(page['name']) self.ins.append_page(tab, label) self.tables.append(tab)
bitbake/lib/bb/ui/crumbs/recipeselectionpage.py +5 -5
@@ -127,16 +127,16 @@ class RecipeSelectionPage (HobPage): self.ins = HobNotebook() self.tables = [] # we need modify table when the dialog is shown # append the tabs in order - for i in range(len(self.pages)): - columns = self.pages[i]['columns'] + for page in self.pages: + columns = page['columns'] tab = HobViewTable(columns) - filter = self.pages[i]['filter'] + filter = page['filter'] tab.set_model(self.recipe_model.tree_model(filter)) tab.connect("toggled", self.table_toggled_cb) - if self.pages[i]['name'] == "Included": + if page['name'] == "Included": tab.connect("row-activated", self.tree_row_activated_cb) - label = gtk.Label(self.pages[i]['name']) + label = gtk.Label(page['name']) self.ins.append_page(tab, label) self.tables.append(tab)
Signature · 1 line
1.7.6
PATCH v4 6/11 Hob: remove the invalid code in hobwidget.py
In reply to Shane WangFrom: Liming An <[email protected]>
To delete some code which is not used
--- bitbake/lib/bb/ui/crumbs/hobwidget.py | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-)
bitbake/lib/bb/ui/crumbs/hobwidget.py +0 -2
@@ -516,7 +516,6 @@ class HobTabBar(gtk.DrawingArea): cr.fill() def draw_indicator(self, cr, i): - style = self.get_style() tab_x = self.children[i]["x"] tab_y = self.children[i]["y"] number = self.children[i]["indicator_number"]
@@ -528,7 +527,6 @@ class HobTabBar(gtk.DrawingArea): # x position is offset(tab_width*3/4 - icon_width/2) + start_pos(tab_x) x = tab_x + self.tab_width * 3/4 - dest_w/2 y = tab_y + self.tab_height/2 - dest_h/2 - cr.move_to(tab_x, tab_y) r = min(dest_w, dest_h)/2 color = cr.set_source_color(gtk.gdk.color_parse(HobColors.ORANGE)) cr.arc(x + r, y + r, r, 0, 2*math.pi)
Signature · 1 line
1.7.6
PATCH v4 5/11 Hob: fix '!= None' and '== None' in the code
In reply to Shane WangThis patch is to fix the following:
if foo != None -----> if foo
if foo == None -----> if not foo
--- bitbake/lib/bb/ui/crumbs/hobeventhandler.py | 4 ++-- bitbake/lib/bb/ui/crumbs/hoblistmodel.py | 2 +- bitbake/lib/bb/ui/crumbs/hobpages.py | 4 ++-- bitbake/lib/bb/ui/crumbs/hobwidget.py | 6 +++--- bitbake/lib/bb/ui/crumbs/imagedetailspage.py | 12 ++++++------ bitbake/lib/bb/ui/crumbs/runningbuild.py | 4 ++-- 6 files changed, 16 insertions(+), 16 deletions(-)
bitbake/lib/bb/ui/crumbs/hobeventhandler.py +2 -2
@@ -119,7 +119,7 @@ class HobHandler(gobject.GObject): self.generating = False def run_next_command(self, initcmd=None): - if initcmd != None: + if initcmd: self.initcmd = initcmd if self.commands_async:
@@ -127,7 +127,7 @@ class HobHandler(gobject.GObject): next_command = self.commands_async.pop(0) else: self.clear_busy() - if self.initcmd != None: + if self.initcmd: self.emit("command-succeeded", self.initcmd) return
bitbake/lib/bb/ui/crumbs/hoblistmodel.py +1 -1
@@ -713,7 +713,7 @@ class RecipeListModel(gtk.ListStore): return None def set_selected_image(self, img): - if img == None: + if not img: return path = self.find_path_for_item(img) self.include_item(item_path=path,
bitbake/lib/bb/ui/crumbs/hobpages.py +2 -2
@@ -34,7 +34,7 @@ class HobPage (gtk.VBox): self.builder = builder self.builder_width, self.builder_height = self.builder.size_request() - if title == None: + if not title: self.title = "HOB -- Image Creator" else: self.title = title
@@ -62,7 +62,7 @@ class HobPage (gtk.VBox): label.set_markup("<span font_desc=\'14\'>%s</span>" % self.title) hbox.pack_start(label, expand=False, fill=False, padding=20) - if widget != None: + if widget: # add the widget in the event box hbox.pack_end(widget, expand=False, fill=False, padding=padding) eventbox.add(hbox)
bitbake/lib/bb/ui/crumbs/hobwidget.py +3 -3
@@ -366,7 +366,7 @@ class HobTabBar(gtk.DrawingArea): child["x"] = self.tab_x + i * self.tab_width child["y"] = self.tab_y - if self.blank_rectangle != None: + if self.blank_rectangle: self.resize_blank_rectangle() def resize_blank_rectangle(self):
@@ -553,7 +553,7 @@ class HobTabBar(gtk.DrawingArea): self.queue_draw() def set_blank_size(self, x, y, w, h): - if self.blank_rectangle == None or self.blank_rectangle.x != x or self.blank_rectangle.width != w: + if not self.blank_rectangle or self.blank_rectangle.x != x or self.blank_rectangle.width != w: self.emit("blank-area-changed", x, y, w, h) return gtk.gdk.Rectangle(x, y, w, h)
@@ -640,7 +640,7 @@ class HobNotebook(gtk.VBox): if not notebook: return title = notebook.get_tab_label_text(notebook_child) - if title == None: + if not title: return for child in self.tabbar.children: if child["title"] == title:
bitbake/lib/bb/ui/crumbs/imagedetailspage.py +6 -6
@@ -64,9 +64,9 @@ class ImageDetailsPage (HobPage): self.hbox.set_border_width(15) self.add(self.hbox) - if widget != None: + if widget: row = 1 - elif varlist != None and vallist != None: + elif varlist and vallist: # pack the icon and the text on the left row = len(varlist) self.table = gtk.Table(row, 20, True)
@@ -75,18 +75,18 @@ class ImageDetailsPage (HobPage): colid = 0 self.line_widgets = {} - if icon != None: + if icon: self.table.attach(icon, colid, colid + 2, 0, 1) colid = colid + 2 - if widget != None: + if widget: self.table.attach(widget, colid, 20, 0, 1) - elif varlist != None and vallist != None: + elif varlist and vallist: for line in range(0, row): self.line_widgets[varlist[line]] = self.text2label(varlist[line], vallist[line]) self.table.attach(self.line_widgets[varlist[line]], colid, 20, line, line + 1) # pack the button on the right - if button != None: + if button: self.hbox.pack_end(button, expand=False, fill=False) def update_line_widgets(self, variable, value):
bitbake/lib/bb/ui/crumbs/runningbuild.py +2 -2
@@ -43,7 +43,7 @@ class RunningBuildModel (gtk.TreeStore): def config_model_filter(self, model, it): msg = model.get(it, self.COL_MESSAGE)[0] - if msg == None or type(msg) != str: + if not msg or type(msg) != str: return False if msg.startswith("\nOE Build Configuration:\n"): return True
@@ -51,7 +51,7 @@ class RunningBuildModel (gtk.TreeStore): def failure_model_filter(self, model, it): color = model.get(it, self.COL_COLOR)[0] - if color == None: + if not color: return False if color == HobColors.ERROR: return True
Signature · 1 line
1.7.6
PATCH v4 2/11 Hob: use HobNotebook to implement a notebook in build details page
In reply to Shane WangThis patch is to use HobNotebook we defined to implement the notebook in the build details page.
--- bitbake/lib/bb/ui/crumbs/builddetailspage.py | 30 ++++++++++-- bitbake/lib/bb/ui/crumbs/runningbuild.py | 65 ++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 5 deletions(-)
bitbake/lib/bb/ui/crumbs/builddetailspage.py +25 -5
@@ -22,8 +22,10 @@ import gtk from bb.ui.crumbs.progressbar import HobProgressBar -from bb.ui.crumbs.hobwidget import hic +from bb.ui.crumbs.hobwidget import hic, HobNotebook from bb.ui.crumbs.runningbuild import RunningBuildTreeView +from bb.ui.crumbs.runningbuild import BuildConfigurationTreeView +from bb.ui.crumbs.runningbuild import BuildFailureTreeView from bb.ui.crumbs.hobpages import HobPage #
@@ -49,11 +51,29 @@ class BuildDetailsPage (HobPage): self.stop_button.connect("clicked", self.stop_button_clicked_cb) self.progress_box.pack_end(self.stop_button, expand=False, fill=False) + self.notebook = HobNotebook() + self.config_tv = BuildConfigurationTreeView() + self.config_model = self.builder.handler.build.model.config_model() + self.config_tv.set_model(self.config_model) + self.scrolled_view_config = gtk.ScrolledWindow () + self.scrolled_view_config.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.scrolled_view_config.add(self.config_tv) + self.notebook.append_page(self.scrolled_view_config, gtk.Label("Build Configuration")) + + self.failure_tv = BuildFailureTreeView() + self.failure_model = self.builder.handler.build.model.failure_model() + self.failure_tv.set_model(self.failure_model) + self.scrolled_view_failure = gtk.ScrolledWindow () + self.scrolled_view_failure.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.scrolled_view_failure.add(self.failure_tv) + self.notebook.append_page(self.scrolled_view_failure, gtk.Label("Issues")) + self.build_tv = RunningBuildTreeView(readonly=True) self.build_tv.set_model(self.builder.handler.build.model) - self.scrolled_view = gtk.ScrolledWindow () - self.scrolled_view.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - self.scrolled_view.add(self.build_tv) + self.scrolled_view_build = gtk.ScrolledWindow () + self.scrolled_view_build.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.scrolled_view_build.add(self.build_tv) + self.notebook.append_page(self.scrolled_view_build, gtk.Label("Log")) self.button_box = gtk.HBox(False, 6) self.back_button = gtk.LinkButton("Go back to Image Configuration screen", "<< Back to image configuration")
@@ -86,7 +106,7 @@ class BuildDetailsPage (HobPage): self.progress_bar.reset() self.vbox.pack_start(self.progress_box, expand=False, fill=False) - self.vbox.pack_start(self.scrolled_view, 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()
bitbake/lib/bb/ui/crumbs/runningbuild.py +65 -0
80 lines not on this page · raw message
Signature · 1 line
1.7.6
PATCH v4 7/11 Hob: Fixed the hobwidget code and make it like a pythonista
In reply to Shane WangFrom: Liming An <[email protected]>
fixed the 'for..in..' range dance code, and use the 'iterator' approach to replaced the index for quote the 'children' list
--- bitbake/lib/bb/ui/crumbs/hobwidget.py | 63 ++++++++++++++++++--------------- 1 files changed, 34 insertions(+), 29 deletions(-)
bitbake/lib/bb/ui/crumbs/hobwidget.py +34 -29
@@ -309,7 +309,7 @@ class HobTabBar(gtk.DrawingArea): self.tab_h_ratio = 52 * 1.0/53 self.set_size_request(self.width, self.height) - self.current_child = 0 + self.current_child = None self.font = self.get_style().font_desc self.font.set_size(pango.SCALE * 13) self.update_children_text_layout_and_bg_color()
@@ -339,10 +339,10 @@ class HobTabBar(gtk.DrawingArea): if self.is_focus() or event.type == gtk.gdk.BUTTON_PRESS: x, y = event.get_coords() # check which tab be clicked - for i, child in enumerate(self.children): + for child in self.children: if (child["x"] < x) and (x < child["x"] + self.tab_width) \ and (child["y"] < y) and (y < child["y"] + self.tab_height): - self.current_child = i + self.current_child = child result = True break
@@ -353,7 +353,7 @@ class HobTabBar(gtk.DrawingArea): self.grab_focus() if result == True: - page = self.children[self.current_child]["toggled_page"] + page = self.current_child["toggled_page"] self.emit("tab-switched", page) self.tab_pressed = True self.queue_draw()
@@ -383,16 +383,16 @@ class HobTabBar(gtk.DrawingArea): pangolayout = self.create_pango_layout(child["title"]) pangolayout.set_font_description(self.font) child["title_layout"] = pangolayout - child[i]["r"] = color.red - child[i]["g"] = color.green - child[i]["b"] = color.blue + child["r"] = color.red + child["g"] = color.green + child["b"] = color.blue def append_tab_child(self, title, page): num = len(self.children) + 1 self.tab_width = self.tab_width * len(self.children) / num i = 0 - for child in self.children: + for i, child in enumerate(self.children): child["x"] = self.tab_x + i * self.tab_width i += 1
@@ -414,6 +414,9 @@ class HobTabBar(gtk.DrawingArea): "indicator_number" : 0, } self.children.append(new_one) + # set the default current child + if not self.current_child: + self.current_child = new_one def on_draw(self, widget, event): cr = widget.window.cairo_create()
@@ -425,11 +428,12 @@ class HobTabBar(gtk.DrawingArea): self.draw_background(cr) self.draw_toggled_tab(cr) - self.draw_tab_text(cr) - for i, child in enumerate(self.children): + for child in self.children: if child["indicator_show"] == True: - self.draw_indicator(cr, i) + self.draw_indicator(cr, child) + + self.draw_tab_text(cr) def draw_background(self, cr): style = self.get_style()
@@ -476,14 +480,15 @@ class HobTabBar(gtk.DrawingArea): # center pos off_x = (self.tab_width - fontw) / 2 off_y = (self.tab_height - fonth) / 2 - x = child[i]["x"] + off_x - y = child[i]["y"] + off_y + x = child["x"] + off_x + y = child["y"] + off_y self.window.draw_layout(self.style.fg_gc[gtk.STATE_NORMAL], int(x), int(y), pangolayout) def draw_toggled_tab(self, cr): - i = self.current_child - x = self.children[i]["x"] - y = self.children[i]["y"] + if not self.current_child: + return + x = self.current_child["x"] + y = self.current_child["y"] width = self.tab_width height = self.tab_height style = self.get_style()
@@ -515,10 +520,10 @@ class HobTabBar(gtk.DrawingArea): cr.arc(x + r, y + r, r, math.pi, 1.5*math.pi) cr.fill() - def draw_indicator(self, cr, i): - tab_x = self.children[i]["x"] - tab_y = self.children[i]["y"] - number = self.children[i]["indicator_number"] + def draw_indicator(self, cr, child): + tab_x = child["x"] + tab_y = child["y"] + number = child["indicator_number"] dest_w = int(32 * self.tab_w_ratio) dest_h = int(32 * self.tab_h_ratio) if dest_h < self.tab_height:
@@ -541,13 +546,13 @@ class HobTabBar(gtk.DrawingArea): cr.move_to(x, y) self.window.draw_layout(self.style.fg_gc[gtk.STATE_NORMAL], int(x), int(y), layout) - def show_indicator_icon(self, i, number): - self.children[i]["indicator_show"] = True - self.children[i]["indicator_number"] = number + def show_indicator_icon(self, child, number): + child["indicator_show"] = True + child["indicator_number"] = number self.queue_draw() - def hide_indicator_icon(self, i): - self.children[i]["indicator_show"] = False + def hide_indicator_icon(self, child): + child["indicator_show"] = False self.queue_draw() def set_blank_size(self, x, y, w, h):
@@ -618,18 +623,18 @@ class HobNotebook(gtk.VBox): self.tb.show() def show_indicator_icon(self, title, number): - for i, child in enumerate(self.tabbar.children): + for child in self.tabbar.children: if child["toggled_page"] == -1: continue if child["title"] == title: - self.tabbar.show_indicator_icon(i, number) + self.tabbar.show_indicator_icon(child, number) def hide_indicator_icon(self, title): - for i, child in enumerate(self.tabbar.children): + for child in self.tabbar.children: if child["toggled_page"] == -1: continue if child["title"] == title: - self.tabbar.hide_indicator_icon(i) + self.tabbar.hide_indicator_icon(child) def tab_switched_cb(self, widget, page): self.notebook.set_current_page(page)
Signature · 1 line
1.7.6
PATCH v4 8/11 Hob: add auto adjust background area function for long issue text
In reply to Shane WangFrom: Liming An <[email protected]>
To add auto expand the background area function for long issue text input.
--- bitbake/lib/bb/ui/crumbs/hobwidget.py | 30 +++++++++++++++++++++--------- 1 files changed, 21 insertions(+), 9 deletions(-)
bitbake/lib/bb/ui/crumbs/hobwidget.py +21 -9
@@ -521,26 +521,38 @@ class HobTabBar(gtk.DrawingArea): cr.fill() def draw_indicator(self, cr, child): + text = ("%d" % child["indicator_number"]) + layout = self.create_pango_layout(text) + layout.set_font_description(self.font) + textw, texth = layout.get_pixel_size() + # draw the back round area tab_x = child["x"] tab_y = child["y"] - number = child["indicator_number"] dest_w = int(32 * self.tab_w_ratio) dest_h = int(32 * self.tab_h_ratio) if dest_h < self.tab_height: dest_w = dest_h - # x position is offset(tab_width*3/4 - icon_width/2) + start_pos(tab_x) x = tab_x + self.tab_width * 3/4 - dest_w/2 y = tab_y + self.tab_height/2 - dest_h/2 + r = min(dest_w, dest_h)/2 color = cr.set_source_color(gtk.gdk.color_parse(HobColors.ORANGE)) - cr.arc(x + r, y + r, r, 0, 2*math.pi) - cr.fill() - - text = ("%d" % number) - layout = self.create_pango_layout(text) - layout.set_font_description(self.font) - textw, texth = layout.get_pixel_size() + # check round back area can contain the text or not + back_round_can_contain_width = float(2 * r * 0.707) + if float(textw) > back_round_can_contain_width: + xoff = (textw - int(back_round_can_contain_width)) / 2 + cr.move_to(x + r - xoff, y + r + r) + cr.arc((x + r - xoff), (y + r), r, 0.5*math.pi, 1.5*math.pi) + cr.fill() # left half round + cr.rectangle((x + r - xoff), y, 2 * xoff, 2 * r) + cr.fill() # center rectangle + cr.arc((x + r + xoff), (y + r), r, 1.5*math.pi, 0.5*math.pi) + cr.fill() # right half round + else: + cr.arc((x + r), (y + r), r, 0, 2*math.pi) + cr.fill() + # draw the number text x = x + (dest_w/2)-(textw/2) y = y + (dest_h/2) - (texth/2) cr.move_to(x, y)
Signature · 1 line
1.7.6
PATCH v4 9/11 Hob: change HobNoteBook tab edge color from green to gray
In reply to Shane WangFrom: Liming An <[email protected]>
To change the notebook tab pressed edge color from green to gray.
--- bitbake/lib/bb/ui/crumbs/hobcolor.py | 2 ++ bitbake/lib/bb/ui/crumbs/hobwidget.py | 13 ++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-)
bitbake/lib/bb/ui/crumbs/hobcolor.py +2 -0
@@ -25,6 +25,8 @@ class HobColors: PALE_RED = "#ffaaaa" GRAY = "#aaaaaa" LIGHT_GRAY = "#dddddd" + DEEP_GRAY = "#7c7c77" + SLIGHT_DARK = "#5f5f5f" DARK = "#3c3b37" BLACK = "#000000" LIGHT_ORANGE = "#f7a787"
bitbake/lib/bb/ui/crumbs/hobwidget.py +8 -5
@@ -496,16 +496,19 @@ class HobTabBar(gtk.DrawingArea): r = height / 10 if self.tab_pressed == True: - for xoff, yoff in [(1, 0), (2, 0)]: - cr.set_source_color(gtk.gdk.color_parse(HobColors.PALE_GREEN)) + for xoff, yoff, c1, c2 in [(1, 0, HobColors.SLIGHT_DARK, HobColors.DARK), (2, 0, HobColors.GRAY, HobColors.LIGHT_GRAY)]: + cr.set_source_color(gtk.gdk.color_parse(c1)) + cr.move_to(x + xoff, y + height + yoff) + cr.line_to(x + xoff, r + yoff) + cr.arc(x + r + xoff, y + r + yoff, r, math.pi, 1.5*math.pi) cr.move_to(x + r + xoff, y + yoff) cr.line_to(x + width - r + xoff, y + yoff) - cr.arc(x + width - r+ xoff, y + r + yoff, r, 1.5*math.pi, 2*math.pi) + cr.arc(x + width - r + xoff, y + r + yoff, r, 1.5*math.pi, 2*math.pi) + cr.stroke() + cr.set_source_color(gtk.gdk.color_parse(c2)) cr.move_to(x + width + xoff, r + yoff) cr.line_to(x + width + xoff, y + height + yoff) cr.line_to(x + xoff, y + height + yoff) - cr.line_to(x + xoff, r + yoff) - cr.arc(x + r + xoff, y + r + yoff, r, math.pi, 1.5*math.pi) cr.stroke() x = x + 2 y = y + 2
Signature · 1 line
1.7.6
PATCH v4 10/11 Hob: fix static variable "self.search" to parameter "search" in signal callback function
In reply to Shane WangFrom: Liming An <[email protected]>
To fix the signal callback function code, and make the temp parameter to replaced the static global variable, as required.
--- bitbake/lib/bb/ui/crumbs/hobwidget.py | 31 ++++++++++++++----------------- 1 files changed, 14 insertions(+), 17 deletions(-)
bitbake/lib/bb/ui/crumbs/hobwidget.py +14 -17
@@ -673,20 +673,17 @@ class HobNotebook(gtk.VBox): def blank_area_resize_cb(self, widget, request_x, request_y, request_width, request_height): self.search.set_size_request(request_width, request_height) - widget.modify_bg(gtk.STATE_SELECTED, gtk.gdk.color_parse(HobColors.YELLOW)) - - def set_search_entry_editable_cb(self, widget, event): - if self.search: - self.search.set_editable(True) - self.search.set_text("") - style = self.search.get_style() - style.text[gtk.STATE_NORMAL] = self.get_colormap().alloc_color(HobColors.BLACK, False, False) - self.search.set_style(style) - - def set_search_entry_reset_cb(self, widget, event): - if self.search: - style = self.search.get_style() - style.text[gtk.STATE_NORMAL] = self.get_colormap().alloc_color(HobColors.GRAY, False, False) - self.search.set_style(style) - self.search.set_text(self.search_name) - self.search.set_editable(False) + + def set_search_entry_editable_cb(self, search, event): + search.set_editable(True) + search.set_text("") + style = self.search.get_style() + style.text[gtk.STATE_NORMAL] = self.get_colormap().alloc_color(HobColors.BLACK, False, False) + search.set_style(style) + + def set_search_entry_reset_cb(self, search, event): + style = search.get_style() + style.text[gtk.STATE_NORMAL] = self.get_colormap().alloc_color(HobColors.GRAY, False, False) + search.set_style(style) + search.set_text(self.search_name) + search.set_editable(False)
Signature · 1 line
1.7.6
PATCH v4 11/11 Hob: fixed the tabbar search entry retaining focus when user has clicked off it issue
In reply to Shane WangFrom: Liming An <[email protected]>
Add reset focus code to fixed the search entry retaining focus issue
--- bitbake/lib/bb/ui/crumbs/hobwidget.py | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
bitbake/lib/bb/ui/crumbs/hobwidget.py +1 -0
@@ -344,6 +344,7 @@ class HobTabBar(gtk.DrawingArea): and (child["y"] < y) and (y < child["y"] + self.tab_height): self.current_child = child result = True + self.grab_focus() break # check the blank area is focus in or not
Signature · 1 line
1.7.6
Richard Purdie
AppliedQuoted 10 lines · Shane Wang
This patchset is
- to implement Hob self-defined notebook, and use it in the build details page.
- to clean up the code per the comments from the community.
(In order to make it readable, we did them in separate patches)Compared with V3 version, this version temporarily removed the patches for
- to improve the build log with the animation of the refresh icon.
- to add proxy support in the Settings dialog.Because the updated patches are not ready so far per the comments from the community.
Merged to master, thanks!
Richard
See them. Thanks.
--
Shane
Richard Purdie wrote on 2012-03-20:
Quoted 16 lines · Shane Wang
Quoted 6 lines
This patchset is
- to implement Hob self-defined notebook, and use it in the build details page. - to clean up the code per the comments from the community.
(In order to make it readable, we did them in separate patches)
Compared with V3 version, this version temporarily removed the patchesfor
Quoted 3 lines
- to improve the build log with the animation of the refresh icon.
- to add proxy support in the Settings dialog.
Because the updated patches are not ready so far per the comments fromthe community.
Merged to master, thanks!
Richard