diff options
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/hoblistmodel.py | 7 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/hobwidget.py | 39 | ||||
| -rwxr-xr-x | bitbake/lib/bb/ui/crumbs/packageselectionpage.py | 26 |
3 files changed, 65 insertions, 7 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/hoblistmodel.py b/bitbake/lib/bb/ui/crumbs/hoblistmodel.py index 3f534328ae..0b54f91a12 100644 --- a/bitbake/lib/bb/ui/crumbs/hoblistmodel.py +++ b/bitbake/lib/bb/ui/crumbs/hoblistmodel.py | |||
| @@ -34,7 +34,7 @@ class PackageListModel(gtk.TreeStore): | |||
| 34 | providing convenience functions to access gtk.TreeModel subclasses which | 34 | providing convenience functions to access gtk.TreeModel subclasses which |
| 35 | provide filtered views of the data. | 35 | provide filtered views of the data. |
| 36 | """ | 36 | """ |
| 37 | (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) | 37 | (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) |
| 38 | 38 | ||
| 39 | __gsignals__ = { | 39 | __gsignals__ = { |
| 40 | "package-selection-changed" : (gobject.SIGNAL_RUN_LAST, | 40 | "package-selection-changed" : (gobject.SIGNAL_RUN_LAST, |
| @@ -65,7 +65,8 @@ class PackageListModel(gtk.TreeStore): | |||
| 65 | gobject.TYPE_STRING, | 65 | gobject.TYPE_STRING, |
| 66 | gobject.TYPE_STRING, | 66 | gobject.TYPE_STRING, |
| 67 | gobject.TYPE_BOOLEAN, | 67 | gobject.TYPE_BOOLEAN, |
| 68 | gobject.TYPE_BOOLEAN) | 68 | gobject.TYPE_BOOLEAN, |
| 69 | gobject.TYPE_STRING) | ||
| 69 | 70 | ||
| 70 | 71 | ||
| 71 | """ | 72 | """ |
| @@ -189,7 +190,7 @@ class PackageListModel(gtk.TreeStore): | |||
| 189 | self.COL_SEC, section, self.COL_SUM, summary, | 190 | self.COL_SEC, section, self.COL_SUM, summary, |
| 190 | self.COL_RDEP, rdep + ' ' + rrec, | 191 | self.COL_RDEP, rdep + ' ' + rrec, |
| 191 | self.COL_RPROV, rprov, self.COL_SIZE, size, | 192 | self.COL_RPROV, rprov, self.COL_SIZE, size, |
| 192 | self.COL_BINB, "", self.COL_INC, False) | 193 | self.COL_BINB, "", self.COL_INC, False, self.COL_FONT, '10') |
| 193 | 194 | ||
| 194 | """ | 195 | """ |
| 195 | Check whether the item at item_path is included or not | 196 | Check whether the item at item_path is included or not |
diff --git a/bitbake/lib/bb/ui/crumbs/hobwidget.py b/bitbake/lib/bb/ui/crumbs/hobwidget.py index 6cf73b0747..39428270a8 100644 --- a/bitbake/lib/bb/ui/crumbs/hobwidget.py +++ b/bitbake/lib/bb/ui/crumbs/hobwidget.py | |||
| @@ -119,6 +119,7 @@ class HobViewTable (gtk.VBox): | |||
| 119 | self.table_tree.set_headers_clickable(True) | 119 | self.table_tree.set_headers_clickable(True) |
| 120 | self.table_tree.set_enable_search(True) | 120 | self.table_tree.set_enable_search(True) |
| 121 | self.table_tree.set_rules_hint(True) | 121 | self.table_tree.set_rules_hint(True) |
| 122 | self.table_tree.set_enable_tree_lines(True) | ||
| 122 | self.table_tree.get_selection().set_mode(gtk.SELECTION_SINGLE) | 123 | self.table_tree.get_selection().set_mode(gtk.SELECTION_SINGLE) |
| 123 | self.toggle_columns = [] | 124 | self.toggle_columns = [] |
| 124 | self.table_tree.connect("row-activated", self.row_activated_cb) | 125 | self.table_tree.connect("row-activated", self.row_activated_cb) |
| @@ -140,6 +141,8 @@ class HobViewTable (gtk.VBox): | |||
| 140 | cell = gtk.CellRendererText() | 141 | cell = gtk.CellRendererText() |
| 141 | col.pack_start(cell, True) | 142 | col.pack_start(cell, True) |
| 142 | col.set_attributes(cell, text=column['col_id']) | 143 | col.set_attributes(cell, text=column['col_id']) |
| 144 | if 'col_t_id' in column.keys(): | ||
| 145 | col.add_attribute(cell, 'font', column['col_t_id']) | ||
| 143 | elif column['col_style'] == 'check toggle': | 146 | elif column['col_style'] == 'check toggle': |
| 144 | cell = HobCellRendererToggle() | 147 | cell = HobCellRendererToggle() |
| 145 | cell.set_property('activatable', True) | 148 | cell.set_property('activatable', True) |
| @@ -149,6 +152,8 @@ class HobViewTable (gtk.VBox): | |||
| 149 | col.pack_end(cell, True) | 152 | col.pack_end(cell, True) |
| 150 | col.set_attributes(cell, active=column['col_id']) | 153 | col.set_attributes(cell, active=column['col_id']) |
| 151 | self.toggle_columns.append(column['col_name']) | 154 | self.toggle_columns.append(column['col_name']) |
| 155 | if 'col_group' in column.keys(): | ||
| 156 | col.set_cell_data_func(cell, self.set_group_number_cb) | ||
| 152 | elif column['col_style'] == 'radio toggle': | 157 | elif column['col_style'] == 'radio toggle': |
| 153 | cell = gtk.CellRendererToggle() | 158 | cell = gtk.CellRendererToggle() |
| 154 | cell.set_property('activatable', True) | 159 | cell.set_property('activatable', True) |
| @@ -162,6 +167,8 @@ class HobViewTable (gtk.VBox): | |||
| 162 | cell = gtk.CellRendererText() | 167 | cell = gtk.CellRendererText() |
| 163 | col.pack_start(cell, True) | 168 | col.pack_start(cell, True) |
| 164 | col.set_cell_data_func(cell, self.display_binb_cb, column['col_id']) | 169 | col.set_cell_data_func(cell, self.display_binb_cb, column['col_id']) |
| 170 | if 'col_t_id' in column.keys(): | ||
| 171 | col.add_attribute(cell, 'font', column['col_t_id']) | ||
| 165 | 172 | ||
| 166 | scroll = gtk.ScrolledWindow() | 173 | scroll = gtk.ScrolledWindow() |
| 167 | scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS) | 174 | scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS) |
| @@ -204,6 +211,15 @@ class HobViewTable (gtk.VBox): | |||
| 204 | def stop_cell_fadeinout_cb(self, ctrl, cell, tree): | 211 | def stop_cell_fadeinout_cb(self, ctrl, cell, tree): |
| 205 | self.emit("cell-fadeinout-stopped", ctrl, cell, tree) | 212 | self.emit("cell-fadeinout-stopped", ctrl, cell, tree) |
| 206 | 213 | ||
| 214 | def set_group_number_cb(self, col, cell, model, iter): | ||
| 215 | if model and (model.iter_parent(iter) == None): | ||
| 216 | cell.cell_attr["number_of_children"] = model.iter_n_children(iter) | ||
| 217 | else: | ||
| 218 | cell.cell_attr["number_of_children"] = 0 | ||
| 219 | |||
| 220 | def connect_group_selection(self, cb_func): | ||
| 221 | self.table_tree.get_selection().connect("changed", cb_func) | ||
| 222 | |||
| 207 | """ | 223 | """ |
| 208 | A method to calculate a softened value for the colour of widget when in the | 224 | A method to calculate a softened value for the colour of widget when in the |
| 209 | provided state. | 225 | provided state. |
| @@ -1084,11 +1100,17 @@ class HobCellRendererToggle(gtk.CellRendererToggle): | |||
| 1084 | gtk.CellRendererToggle.__init__(self) | 1100 | gtk.CellRendererToggle.__init__(self) |
| 1085 | self.ctrl = HobCellRendererController(is_draw_row=True) | 1101 | self.ctrl = HobCellRendererController(is_draw_row=True) |
| 1086 | self.ctrl.running_mode = self.ctrl.MODE_ONE_SHORT | 1102 | self.ctrl.running_mode = self.ctrl.MODE_ONE_SHORT |
| 1087 | self.cell_attr = {"fadeout": False} | 1103 | self.cell_attr = {"fadeout": False, "number_of_children": 0} |
| 1088 | 1104 | ||
| 1089 | def do_render(self, window, widget, background_area, cell_area, expose_area, flags): | 1105 | def do_render(self, window, widget, background_area, cell_area, expose_area, flags): |
| 1090 | if (not self.ctrl) or (not widget): | 1106 | if (not self.ctrl) or (not widget): |
| 1091 | return | 1107 | return |
| 1108 | |||
| 1109 | if flags & gtk.CELL_RENDERER_SELECTED: | ||
| 1110 | state = gtk.STATE_SELECTED | ||
| 1111 | else: | ||
| 1112 | state = gtk.STATE_NORMAL | ||
| 1113 | |||
| 1092 | if self.ctrl.is_active(): | 1114 | if self.ctrl.is_active(): |
| 1093 | path = widget.get_path_at_pos(cell_area.x + cell_area.width/2, cell_area.y + cell_area.height/2) | 1115 | path = widget.get_path_at_pos(cell_area.x + cell_area.width/2, cell_area.y + cell_area.height/2) |
| 1094 | # sometimes the parameters of cell_area will be a negative number,such as pull up down the scroll bar | 1116 | # 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): | |||
| 1097 | path = path[0] | 1119 | path = path[0] |
| 1098 | if path in self.ctrl.running_cell_areas: | 1120 | if path in self.ctrl.running_cell_areas: |
| 1099 | cr = window.cairo_create() | 1121 | cr = window.cairo_create() |
| 1100 | color = gtk.gdk.Color(HobColors.WHITE) | 1122 | color = widget.get_style().base[state] |
| 1101 | 1123 | ||
| 1102 | row_x, _, row_width, _ = widget.get_visible_rect() | 1124 | row_x, _, row_width, _ = widget.get_visible_rect() |
| 1103 | border_y = self.get_property("ypad") | 1125 | border_y = self.get_property("ypad") |
| 1104 | self.ctrl.on_draw_fadeinout_cb(cr, color, row_x, cell_area.y - border_y, row_width, \ | 1126 | self.ctrl.on_draw_fadeinout_cb(cr, color, row_x, cell_area.y - border_y, row_width, \ |
| 1105 | cell_area.height + border_y * 2, self.cell_attr["fadeout"]) | 1127 | cell_area.height + border_y * 2, self.cell_attr["fadeout"]) |
| 1106 | 1128 | # draw number of a group | |
| 1107 | return gtk.CellRendererToggle.do_render(self, window, widget, background_area, cell_area, expose_area, flags) | 1129 | if self.cell_attr["number_of_children"]: |
| 1130 | text = "%d pkg" % self.cell_attr["number_of_children"] | ||
| 1131 | pangolayout = widget.create_pango_layout(text) | ||
| 1132 | textw, texth = pangolayout.get_pixel_size() | ||
| 1133 | x = cell_area.x + (cell_area.width/2) - (textw/2) | ||
| 1134 | y = cell_area.y + (cell_area.height/2) - (texth/2) | ||
| 1135 | |||
| 1136 | widget.style.paint_layout(window, state, True, cell_area, widget, "checkbox", x, y, pangolayout) | ||
| 1137 | else: | ||
| 1138 | return gtk.CellRendererToggle.do_render(self, window, widget, background_area, cell_area, expose_area, flags) | ||
| 1108 | 1139 | ||
| 1109 | '''delay: normally delay time is 1000ms | 1140 | '''delay: normally delay time is 1000ms |
| 1110 | cell_list: whilch cells need to be render | 1141 | cell_list: whilch cells need to be render |
diff --git a/bitbake/lib/bb/ui/crumbs/packageselectionpage.py b/bitbake/lib/bb/ui/crumbs/packageselectionpage.py index 104d49d108..238e2f9771 100755 --- a/bitbake/lib/bb/ui/crumbs/packageselectionpage.py +++ b/bitbake/lib/bb/ui/crumbs/packageselectionpage.py | |||
| @@ -39,6 +39,7 @@ class PackageSelectionPage (HobPage): | |||
| 39 | 'columns' : [{ | 39 | 'columns' : [{ |
| 40 | 'col_name' : 'Package name', | 40 | 'col_name' : 'Package name', |
| 41 | 'col_id' : PackageListModel.COL_NAME, | 41 | 'col_id' : PackageListModel.COL_NAME, |
| 42 | 'col_t_id' : PackageListModel.COL_FONT, | ||
| 42 | 'col_style': 'text', | 43 | 'col_style': 'text', |
| 43 | 'col_min' : 100, | 44 | 'col_min' : 100, |
| 44 | 'col_max' : 300, | 45 | 'col_max' : 300, |
| @@ -46,6 +47,7 @@ class PackageSelectionPage (HobPage): | |||
| 46 | }, { | 47 | }, { |
| 47 | 'col_name' : 'Brought in by', | 48 | 'col_name' : 'Brought in by', |
| 48 | 'col_id' : PackageListModel.COL_BINB, | 49 | 'col_id' : PackageListModel.COL_BINB, |
| 50 | 'col_t_id' : PackageListModel.COL_FONT, | ||
| 49 | 'col_style': 'binb', | 51 | 'col_style': 'binb', |
| 50 | 'col_min' : 100, | 52 | 'col_min' : 100, |
| 51 | 'col_max' : 350, | 53 | 'col_max' : 350, |
| @@ -53,6 +55,7 @@ class PackageSelectionPage (HobPage): | |||
| 53 | }, { | 55 | }, { |
| 54 | 'col_name' : 'Size', | 56 | 'col_name' : 'Size', |
| 55 | 'col_id' : PackageListModel.COL_SIZE, | 57 | 'col_id' : PackageListModel.COL_SIZE, |
| 58 | 'col_t_id' : PackageListModel.COL_FONT, | ||
| 56 | 'col_style': 'text', | 59 | 'col_style': 'text', |
| 57 | 'col_min' : 100, | 60 | 'col_min' : 100, |
| 58 | 'col_max' : 300, | 61 | 'col_max' : 300, |
| @@ -60,7 +63,9 @@ class PackageSelectionPage (HobPage): | |||
| 60 | }, { | 63 | }, { |
| 61 | 'col_name' : 'Included', | 64 | 'col_name' : 'Included', |
| 62 | 'col_id' : PackageListModel.COL_INC, | 65 | 'col_id' : PackageListModel.COL_INC, |
| 66 | 'col_t_id' : PackageListModel.COL_FONT, | ||
| 63 | 'col_style': 'check toggle', | 67 | 'col_style': 'check toggle', |
| 68 | 'col_group': 'tree store group', | ||
| 64 | 'col_min' : 100, | 69 | 'col_min' : 100, |
| 65 | 'col_max' : 100 | 70 | 'col_max' : 100 |
| 66 | }] | 71 | }] |
| @@ -70,6 +75,7 @@ class PackageSelectionPage (HobPage): | |||
| 70 | 'columns' : [{ | 75 | 'columns' : [{ |
| 71 | 'col_name' : 'Package name', | 76 | 'col_name' : 'Package name', |
| 72 | 'col_id' : PackageListModel.COL_NAME, | 77 | 'col_id' : PackageListModel.COL_NAME, |
| 78 | 'col_t_id' : PackageListModel.COL_FONT, | ||
| 73 | 'col_style': 'text', | 79 | 'col_style': 'text', |
| 74 | 'col_min' : 100, | 80 | 'col_min' : 100, |
| 75 | 'col_max' : 400, | 81 | 'col_max' : 400, |
| @@ -77,6 +83,7 @@ class PackageSelectionPage (HobPage): | |||
| 77 | }, { | 83 | }, { |
| 78 | 'col_name' : 'Size', | 84 | 'col_name' : 'Size', |
| 79 | 'col_id' : PackageListModel.COL_SIZE, | 85 | 'col_id' : PackageListModel.COL_SIZE, |
| 86 | 'col_t_id' : PackageListModel.COL_FONT, | ||
| 80 | 'col_style': 'text', | 87 | 'col_style': 'text', |
| 81 | 'col_min' : 100, | 88 | 'col_min' : 100, |
| 82 | 'col_max' : 500, | 89 | 'col_max' : 500, |
| @@ -85,6 +92,7 @@ class PackageSelectionPage (HobPage): | |||
| 85 | 'col_name' : 'Included', | 92 | 'col_name' : 'Included', |
| 86 | 'col_id' : PackageListModel.COL_INC, | 93 | 'col_id' : PackageListModel.COL_INC, |
| 87 | 'col_style': 'check toggle', | 94 | 'col_style': 'check toggle', |
| 95 | 'col_group': 'tree store group', | ||
| 88 | 'col_min' : 100, | 96 | 'col_min' : 100, |
| 89 | 'col_max' : 100 | 97 | 'col_max' : 100 |
| 90 | }] | 98 | }] |
| @@ -117,6 +125,7 @@ class PackageSelectionPage (HobPage): | |||
| 117 | filter = page['filter'] | 125 | filter = page['filter'] |
| 118 | tab.set_model(self.package_model.tree_model(filter)) | 126 | tab.set_model(self.package_model.tree_model(filter)) |
| 119 | tab.connect("toggled", self.table_toggled_cb, page['name']) | 127 | tab.connect("toggled", self.table_toggled_cb, page['name']) |
| 128 | tab.connect_group_selection(self.table_selected_cb) | ||
| 120 | if page['name'] == "Included": | 129 | if page['name'] == "Included": |
| 121 | tab.connect("button-release-event", self.button_click_cb) | 130 | tab.connect("button-release-event", self.button_click_cb) |
| 122 | tab.connect("cell-fadeinout-stopped", self.after_fadeout_checkin_include) | 131 | tab.connect("cell-fadeinout-stopped", self.after_fadeout_checkin_include) |
| @@ -247,3 +256,20 @@ class PackageSelectionPage (HobPage): | |||
| 247 | def after_fadeout_checkin_include(self, table, ctrl, cell, tree): | 256 | def after_fadeout_checkin_include(self, table, ctrl, cell, tree): |
| 248 | tree.set_model(self.package_model.tree_model(self.pages[0]['filter'])) | 257 | tree.set_model(self.package_model.tree_model(self.pages[0]['filter'])) |
| 249 | tree.expand_all() | 258 | tree.expand_all() |
| 259 | |||
| 260 | def foreach_cell_change_font(self, model, path, iter, paths=None): | ||
| 261 | # Changed the font for a group cells | ||
| 262 | if path and iter and path[0] == paths[0]: | ||
| 263 | self.package_model.set(iter, self.package_model.COL_FONT, "bold") | ||
| 264 | else: | ||
| 265 | if iter and model.iter_parent(iter) == None: | ||
| 266 | self.package_model.set(iter, self.package_model.COL_FONT, '11') | ||
| 267 | else: | ||
| 268 | self.package_model.set(iter, self.package_model.COL_FONT, '10') | ||
| 269 | |||
| 270 | def table_selected_cb(self, selection): | ||
| 271 | model, paths = selection.get_selected_rows() | ||
| 272 | if paths: | ||
| 273 | child_path = self.package_model.convert_vpath_to_path(model, paths[0]) | ||
| 274 | self.package_model.foreach(self.foreach_cell_change_font, child_path) | ||
| 275 | |||
