diff options
-rw-r--r-- | lib/bb/ui/crumbs/hoblistmodel.py | 7 | ||||
-rw-r--r-- | lib/bb/ui/crumbs/hobwidget.py | 39 | ||||
-rwxr-xr-x | lib/bb/ui/crumbs/packageselectionpage.py | 26 |
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) + |