aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/bb/ui/crumbs/hoblistmodel.py7
-rw-r--r--lib/bb/ui/crumbs/hobwidget.py39
-rwxr-xr-xlib/bb/ui/crumbs/packageselectionpage.py26
3 files changed, 65 insertions, 7 deletions
diff --git a/lib/bb/ui/crumbs/hoblistmodel.py b/lib/bb/ui/crumbs/hoblistmodel.py
index 3f534328a..0b54f91a1 100644
--- a/lib/bb/ui/crumbs/hoblistmodel.py
+++ b/lib/bb/ui/crumbs/hoblistmodel.py
@@ -34,7 +34,7 @@ class PackageListModel(gtk.TreeStore):
providing convenience functions to access gtk.TreeModel subclasses which
provide filtered views of the data.
"""
- (COL_NAME, COL_VER, COL_REV, COL_RNM, COL_SEC, COL_SUM, COL_RDEP, COL_RPROV, COL_SIZE, COL_BINB, COL_INC, COL_FADE_INC) = range(12)
+ (COL_NAME, COL_VER, COL_REV, COL_RNM, COL_SEC, COL_SUM, COL_RDEP, COL_RPROV, COL_SIZE, COL_BINB, COL_INC, COL_FADE_INC, COL_FONT) = range(13)
__gsignals__ = {
"package-selection-changed" : (gobject.SIGNAL_RUN_LAST,
@@ -65,7 +65,8 @@ class PackageListModel(gtk.TreeStore):
gobject.TYPE_STRING,
gobject.TYPE_STRING,
gobject.TYPE_BOOLEAN,
- gobject.TYPE_BOOLEAN)
+ gobject.TYPE_BOOLEAN,
+ gobject.TYPE_STRING)
"""
@@ -189,7 +190,7 @@ class PackageListModel(gtk.TreeStore):
self.COL_SEC, section, self.COL_SUM, summary,
self.COL_RDEP, rdep + ' ' + rrec,
self.COL_RPROV, rprov, self.COL_SIZE, size,
- self.COL_BINB, "", self.COL_INC, False)
+ self.COL_BINB, "", self.COL_INC, False, self.COL_FONT, '10')
"""
Check whether the item at item_path is included or not
diff --git a/lib/bb/ui/crumbs/hobwidget.py b/lib/bb/ui/crumbs/hobwidget.py
index 6cf73b074..39428270a 100644
--- a/lib/bb/ui/crumbs/hobwidget.py
+++ b/lib/bb/ui/crumbs/hobwidget.py
@@ -119,6 +119,7 @@ class HobViewTable (gtk.VBox):
self.table_tree.set_headers_clickable(True)
self.table_tree.set_enable_search(True)
self.table_tree.set_rules_hint(True)
+ self.table_tree.set_enable_tree_lines(True)
self.table_tree.get_selection().set_mode(gtk.SELECTION_SINGLE)
self.toggle_columns = []
self.table_tree.connect("row-activated", self.row_activated_cb)
@@ -140,6 +141,8 @@ class HobViewTable (gtk.VBox):
cell = gtk.CellRendererText()
col.pack_start(cell, True)
col.set_attributes(cell, text=column['col_id'])
+ if 'col_t_id' in column.keys():
+ col.add_attribute(cell, 'font', column['col_t_id'])
elif column['col_style'] == 'check toggle':
cell = HobCellRendererToggle()
cell.set_property('activatable', True)
@@ -149,6 +152,8 @@ class HobViewTable (gtk.VBox):
col.pack_end(cell, True)
col.set_attributes(cell, active=column['col_id'])
self.toggle_columns.append(column['col_name'])
+ if 'col_group' in column.keys():
+ col.set_cell_data_func(cell, self.set_group_number_cb)
elif column['col_style'] == 'radio toggle':
cell = gtk.CellRendererToggle()
cell.set_property('activatable', True)
@@ -162,6 +167,8 @@ class HobViewTable (gtk.VBox):
cell = gtk.CellRendererText()
col.pack_start(cell, True)
col.set_cell_data_func(cell, self.display_binb_cb, column['col_id'])
+ if 'col_t_id' in column.keys():
+ col.add_attribute(cell, 'font', column['col_t_id'])
scroll = gtk.ScrolledWindow()
scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
@@ -204,6 +211,15 @@ class HobViewTable (gtk.VBox):
def stop_cell_fadeinout_cb(self, ctrl, cell, tree):
self.emit("cell-fadeinout-stopped", ctrl, cell, tree)
+ def set_group_number_cb(self, col, cell, model, iter):
+ if model and (model.iter_parent(iter) == None):
+ cell.cell_attr["number_of_children"] = model.iter_n_children(iter)
+ else:
+ cell.cell_attr["number_of_children"] = 0
+
+ def connect_group_selection(self, cb_func):
+ self.table_tree.get_selection().connect("changed", cb_func)
+
"""
A method to calculate a softened value for the colour of widget when in the
provided state.
@@ -1084,11 +1100,17 @@ class HobCellRendererToggle(gtk.CellRendererToggle):
gtk.CellRendererToggle.__init__(self)
self.ctrl = HobCellRendererController(is_draw_row=True)
self.ctrl.running_mode = self.ctrl.MODE_ONE_SHORT
- self.cell_attr = {"fadeout": False}
+ self.cell_attr = {"fadeout": False, "number_of_children": 0}
def do_render(self, window, widget, background_area, cell_area, expose_area, flags):
if (not self.ctrl) or (not widget):
return
+
+ if flags & gtk.CELL_RENDERER_SELECTED:
+ state = gtk.STATE_SELECTED
+ else:
+ state = gtk.STATE_NORMAL
+
if self.ctrl.is_active():
path = widget.get_path_at_pos(cell_area.x + cell_area.width/2, cell_area.y + cell_area.height/2)
# sometimes the parameters of cell_area will be a negative number,such as pull up down the scroll bar
@@ -1097,14 +1119,23 @@ class HobCellRendererToggle(gtk.CellRendererToggle):
path = path[0]
if path in self.ctrl.running_cell_areas:
cr = window.cairo_create()
- color = gtk.gdk.Color(HobColors.WHITE)
+ color = widget.get_style().base[state]
row_x, _, row_width, _ = widget.get_visible_rect()
border_y = self.get_property("ypad")
self.ctrl.on_draw_fadeinout_cb(cr, color, row_x, cell_area.y - border_y, row_width, \
cell_area.height + border_y * 2, self.cell_attr["fadeout"])
-
- return gtk.CellRendererToggle.do_render(self, window, widget, background_area, cell_area, expose_area, flags)
+ # draw number of a group
+ if self.cell_attr["number_of_children"]:
+ text = "%d pkg" % self.cell_attr["number_of_children"]
+ pangolayout = widget.create_pango_layout(text)
+ textw, texth = pangolayout.get_pixel_size()
+ x = cell_area.x + (cell_area.width/2) - (textw/2)
+ y = cell_area.y + (cell_area.height/2) - (texth/2)
+
+ widget.style.paint_layout(window, state, True, cell_area, widget, "checkbox", x, y, pangolayout)
+ else:
+ return gtk.CellRendererToggle.do_render(self, window, widget, background_area, cell_area, expose_area, flags)
'''delay: normally delay time is 1000ms
cell_list: whilch cells need to be render
diff --git a/lib/bb/ui/crumbs/packageselectionpage.py b/lib/bb/ui/crumbs/packageselectionpage.py
index 104d49d10..238e2f977 100755
--- a/lib/bb/ui/crumbs/packageselectionpage.py
+++ b/lib/bb/ui/crumbs/packageselectionpage.py
@@ -39,6 +39,7 @@ class PackageSelectionPage (HobPage):
'columns' : [{
'col_name' : 'Package name',
'col_id' : PackageListModel.COL_NAME,
+ 'col_t_id' : PackageListModel.COL_FONT,
'col_style': 'text',
'col_min' : 100,
'col_max' : 300,
@@ -46,6 +47,7 @@ class PackageSelectionPage (HobPage):
}, {
'col_name' : 'Brought in by',
'col_id' : PackageListModel.COL_BINB,
+ 'col_t_id' : PackageListModel.COL_FONT,
'col_style': 'binb',
'col_min' : 100,
'col_max' : 350,
@@ -53,6 +55,7 @@ class PackageSelectionPage (HobPage):
}, {
'col_name' : 'Size',
'col_id' : PackageListModel.COL_SIZE,
+ 'col_t_id' : PackageListModel.COL_FONT,
'col_style': 'text',
'col_min' : 100,
'col_max' : 300,
@@ -60,7 +63,9 @@ class PackageSelectionPage (HobPage):
}, {
'col_name' : 'Included',
'col_id' : PackageListModel.COL_INC,
+ 'col_t_id' : PackageListModel.COL_FONT,
'col_style': 'check toggle',
+ 'col_group': 'tree store group',
'col_min' : 100,
'col_max' : 100
}]
@@ -70,6 +75,7 @@ class PackageSelectionPage (HobPage):
'columns' : [{
'col_name' : 'Package name',
'col_id' : PackageListModel.COL_NAME,
+ 'col_t_id' : PackageListModel.COL_FONT,
'col_style': 'text',
'col_min' : 100,
'col_max' : 400,
@@ -77,6 +83,7 @@ class PackageSelectionPage (HobPage):
}, {
'col_name' : 'Size',
'col_id' : PackageListModel.COL_SIZE,
+ 'col_t_id' : PackageListModel.COL_FONT,
'col_style': 'text',
'col_min' : 100,
'col_max' : 500,
@@ -85,6 +92,7 @@ class PackageSelectionPage (HobPage):
'col_name' : 'Included',
'col_id' : PackageListModel.COL_INC,
'col_style': 'check toggle',
+ 'col_group': 'tree store group',
'col_min' : 100,
'col_max' : 100
}]
@@ -117,6 +125,7 @@ class PackageSelectionPage (HobPage):
filter = page['filter']
tab.set_model(self.package_model.tree_model(filter))
tab.connect("toggled", self.table_toggled_cb, page['name'])
+ tab.connect_group_selection(self.table_selected_cb)
if page['name'] == "Included":
tab.connect("button-release-event", self.button_click_cb)
tab.connect("cell-fadeinout-stopped", self.after_fadeout_checkin_include)
@@ -247,3 +256,20 @@ class PackageSelectionPage (HobPage):
def after_fadeout_checkin_include(self, table, ctrl, cell, tree):
tree.set_model(self.package_model.tree_model(self.pages[0]['filter']))
tree.expand_all()
+
+ def foreach_cell_change_font(self, model, path, iter, paths=None):
+ # Changed the font for a group cells
+ if path and iter and path[0] == paths[0]:
+ self.package_model.set(iter, self.package_model.COL_FONT, "bold")
+ else:
+ if iter and model.iter_parent(iter) == None:
+ self.package_model.set(iter, self.package_model.COL_FONT, '11')
+ else:
+ self.package_model.set(iter, self.package_model.COL_FONT, '10')
+
+ def table_selected_cb(self, selection):
+ model, paths = selection.get_selected_rows()
+ if paths:
+ child_path = self.package_model.convert_vpath_to_path(model, paths[0])
+ self.package_model.foreach(self.foreach_cell_change_font, child_path)
+