diff options
Diffstat (limited to 'bitbake/lib/bb/ui')
-rw-r--r-- | bitbake/lib/bb/ui/crumbs/hoblistmodel.py | 272 | ||||
-rwxr-xr-x | bitbake/lib/bb/ui/crumbs/packageselectionpage.py | 22 |
2 files changed, 112 insertions, 182 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/hoblistmodel.py b/bitbake/lib/bb/ui/crumbs/hoblistmodel.py index 85c4f51070..06c90d38f7 100644 --- a/bitbake/lib/bb/ui/crumbs/hoblistmodel.py +++ b/bitbake/lib/bb/ui/crumbs/hoblistmodel.py | |||
@@ -27,14 +27,15 @@ from bb.ui.crumbs.hobpages import HobPage | |||
27 | # | 27 | # |
28 | # PackageListModel | 28 | # PackageListModel |
29 | # | 29 | # |
30 | class PackageListModel(gtk.TreeStore): | 30 | class PackageListModel(gtk.ListStore): |
31 | """ | 31 | """ |
32 | This class defines an gtk.TreeStore subclass which will convert the output | 32 | This class defines an gtk.ListStore subclass which will convert the output |
33 | of the bb.event.TargetsTreeGenerated event into a gtk.TreeStore whilst also | 33 | of the bb.event.TargetsTreeGenerated event into a gtk.ListStore whilst also |
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, COL_FONT) = range(13) | 37 | |
38 | (COL_NAME, COL_VER, COL_REV, COL_RNM, COL_SEC, COL_SUM, COL_RDEP, COL_RPROV, COL_SIZE, COL_RCP, COL_BINB, COL_INC, COL_FADE_INC, COL_FONT) = range(14) | ||
38 | 39 | ||
39 | __gsignals__ = { | 40 | __gsignals__ = { |
40 | "package-selection-changed" : (gobject.SIGNAL_RUN_LAST, | 41 | "package-selection-changed" : (gobject.SIGNAL_RUN_LAST, |
@@ -45,15 +46,9 @@ class PackageListModel(gtk.TreeStore): | |||
45 | __toolchain_required_packages__ = ["packagegroup-core-standalone-sdk-target", "packagegroup-core-standalone-sdk-target-dbg"] | 46 | __toolchain_required_packages__ = ["packagegroup-core-standalone-sdk-target", "packagegroup-core-standalone-sdk-target-dbg"] |
46 | 47 | ||
47 | def __init__(self): | 48 | def __init__(self): |
48 | |||
49 | self.contents = None | ||
50 | self.images = None | ||
51 | self.pkgs_size = 0 | ||
52 | self.pn_path = {} | ||
53 | self.pkg_path = {} | ||
54 | self.rprov_pkg = {} | 49 | self.rprov_pkg = {} |
55 | 50 | gtk.ListStore.__init__ (self, | |
56 | gtk.TreeStore.__init__ (self, | 51 | gobject.TYPE_STRING, |
57 | gobject.TYPE_STRING, | 52 | gobject.TYPE_STRING, |
58 | gobject.TYPE_STRING, | 53 | gobject.TYPE_STRING, |
59 | gobject.TYPE_STRING, | 54 | gobject.TYPE_STRING, |
@@ -68,21 +63,20 @@ class PackageListModel(gtk.TreeStore): | |||
68 | gobject.TYPE_BOOLEAN, | 63 | gobject.TYPE_BOOLEAN, |
69 | gobject.TYPE_STRING) | 64 | gobject.TYPE_STRING) |
70 | 65 | ||
71 | |||
72 | """ | 66 | """ |
73 | Find the model path for the item_name | 67 | Find the model path for the item_name |
74 | Returns the path in the model or None | 68 | Returns the path in the model or None |
75 | """ | 69 | """ |
76 | def find_path_for_item(self, item_name): | 70 | def find_path_for_item(self, item_name): |
77 | pkg = item_name | 71 | pkg = item_name |
78 | if item_name not in self.pkg_path.keys(): | 72 | if item_name not in self.pn_path.keys(): |
79 | if item_name not in self.rprov_pkg.keys(): | 73 | if item_name not in self.rprov_pkg.keys(): |
80 | return None | 74 | return None |
81 | pkg = self.rprov_pkg[item_name] | 75 | pkg = self.rprov_pkg[item_name] |
82 | if pkg not in self.pkg_path.keys(): | 76 | if pkg not in self.pn_path.keys(): |
83 | return None | 77 | return None |
84 | 78 | ||
85 | return self.pkg_path[pkg] | 79 | return self.pn_path[pkg] |
86 | 80 | ||
87 | def find_item_for_path(self, item_path): | 81 | def find_item_for_path(self, item_path): |
88 | return self[item_path][self.COL_NAME] | 82 | return self[item_path][self.COL_NAME] |
@@ -106,10 +100,20 @@ class PackageListModel(gtk.TreeStore): | |||
106 | model.set_visible_func(self.tree_model_filter, filter) | 100 | model.set_visible_func(self.tree_model_filter, filter) |
107 | 101 | ||
108 | sort = gtk.TreeModelSort(model) | 102 | sort = gtk.TreeModelSort(model) |
109 | sort.set_sort_column_id(PackageListModel.COL_NAME, gtk.SORT_ASCENDING) | 103 | sort.set_sort_column_id(RecipeListModel.COL_NAME, gtk.SORT_ASCENDING) |
110 | sort.set_default_sort_func(None) | 104 | sort.set_default_sort_func(None) |
111 | return sort | 105 | return sort |
112 | 106 | ||
107 | def exclude_item_sort_func(self, model, iter1, iter2): | ||
108 | val1 = model.get_value(iter1, RecipeListModel.COL_FADE_INC) | ||
109 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | ||
110 | return ((val1 == True) and (val2 == False)) | ||
111 | |||
112 | def include_item_sort_func(self, model, iter1, iter2): | ||
113 | val1 = model.get_value(iter1, RecipeListModel.COL_INC) | ||
114 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | ||
115 | return ((val1 == False) and (val2 == True)) | ||
116 | |||
113 | def convert_vpath_to_path(self, view_model, view_path): | 117 | def convert_vpath_to_path(self, view_model, view_path): |
114 | # view_model is the model sorted | 118 | # view_model is the model sorted |
115 | # get the path of the model filtered | 119 | # get the path of the model filtered |
@@ -121,16 +125,13 @@ class PackageListModel(gtk.TreeStore): | |||
121 | return path | 125 | return path |
122 | 126 | ||
123 | def convert_path_to_vpath(self, view_model, path): | 127 | def convert_path_to_vpath(self, view_model, path): |
124 | name = self.find_item_for_path(path) | ||
125 | it = view_model.get_iter_first() | 128 | it = view_model.get_iter_first() |
126 | while it: | 129 | while it: |
127 | child_it = view_model.iter_children(it) | 130 | name = self.find_item_for_path(path) |
128 | while child_it: | 131 | view_name = view_model.get_value(it, RecipeListModel.COL_NAME) |
129 | view_name = view_model.get_value(child_it, self.COL_NAME) | 132 | if view_name == name: |
130 | if view_name == name: | 133 | view_path = view_model.get_path(it) |
131 | view_path = view_model.get_path(child_it) | 134 | return view_path |
132 | return view_path | ||
133 | child_it = view_model.iter_next(child_it) | ||
134 | it = view_model.iter_next(it) | 135 | it = view_model.iter_next(it) |
135 | return None | 136 | return None |
136 | 137 | ||
@@ -139,11 +140,8 @@ class PackageListModel(gtk.TreeStore): | |||
139 | bb.event.PackageInfo event and populates the package list. | 140 | bb.event.PackageInfo event and populates the package list. |
140 | """ | 141 | """ |
141 | def populate(self, pkginfolist): | 142 | def populate(self, pkginfolist): |
143 | # First clear the model, in case repopulating | ||
142 | self.clear() | 144 | self.clear() |
143 | self.pkgs_size = 0 | ||
144 | self.pn_path = {} | ||
145 | self.pkg_path = {} | ||
146 | self.rprov_pkg = {} | ||
147 | 145 | ||
148 | def getpkgvalue(pkgdict, key, pkgname, defaultval = None): | 146 | def getpkgvalue(pkgdict, key, pkgname, defaultval = None): |
149 | value = pkgdict.get('%s_%s' % (key, pkgname), None) | 147 | value = pkgdict.get('%s_%s' % (key, pkgname), None) |
@@ -155,15 +153,6 @@ class PackageListModel(gtk.TreeStore): | |||
155 | pn = pkginfo['PN'] | 153 | pn = pkginfo['PN'] |
156 | pv = pkginfo['PV'] | 154 | pv = pkginfo['PV'] |
157 | pr = pkginfo['PR'] | 155 | pr = pkginfo['PR'] |
158 | if pn in self.pn_path.keys(): | ||
159 | pniter = self.get_iter(self.pn_path[pn]) | ||
160 | else: | ||
161 | pniter = self.append(None) | ||
162 | self.set(pniter, self.COL_NAME, pn + '-' + pv + '-' + pr, | ||
163 | self.COL_INC, False) | ||
164 | self.pn_path[pn] = self.get_path(pniter) | ||
165 | |||
166 | # PKG is always present | ||
167 | pkg = pkginfo['PKG'] | 156 | pkg = pkginfo['PKG'] |
168 | pkgv = getpkgvalue(pkginfo, 'PKGV', pkg) | 157 | pkgv = getpkgvalue(pkginfo, 'PKGV', pkg) |
169 | pkgr = getpkgvalue(pkginfo, 'PKGR', pkg) | 158 | pkgr = getpkgvalue(pkginfo, 'PKGR', pkg) |
@@ -180,6 +169,8 @@ class PackageListModel(gtk.TreeStore): | |||
180 | for i in rprov.split(): | 169 | for i in rprov.split(): |
181 | self.rprov_pkg[i] = pkg | 170 | self.rprov_pkg[i] = pkg |
182 | 171 | ||
172 | recipe = pn + '-' + pv + '-' + pr | ||
173 | |||
183 | allow_empty = getpkgvalue(pkginfo, 'ALLOW_EMPTY', pkg, "") | 174 | allow_empty = getpkgvalue(pkginfo, 'ALLOW_EMPTY', pkg, "") |
184 | 175 | ||
185 | if pkgsize == "0" and not allow_empty: | 176 | if pkgsize == "0" and not allow_empty: |
@@ -188,20 +179,21 @@ class PackageListModel(gtk.TreeStore): | |||
188 | # pkgsize is in KB | 179 | # pkgsize is in KB |
189 | size = HobPage._size_to_string(HobPage._string_to_size(pkgsize + ' KB')) | 180 | size = HobPage._size_to_string(HobPage._string_to_size(pkgsize + ' KB')) |
190 | 181 | ||
191 | it = self.append(pniter) | 182 | self.set(self.append(), self.COL_NAME, pkg, self.COL_VER, pkgv, |
192 | self.pkg_path[pkg] = self.get_path(it) | ||
193 | self.set(it, self.COL_NAME, pkg, self.COL_VER, pkgv, | ||
194 | self.COL_REV, pkgr, self.COL_RNM, pkg_rename, | 183 | self.COL_REV, pkgr, self.COL_RNM, pkg_rename, |
195 | self.COL_SEC, section, self.COL_SUM, summary, | 184 | self.COL_SEC, section, self.COL_SUM, summary, |
196 | self.COL_RDEP, rdep + ' ' + rrec, | 185 | self.COL_RDEP, rdep + ' ' + rrec, |
197 | self.COL_RPROV, rprov, self.COL_SIZE, size, | 186 | self.COL_RPROV, rprov, self.COL_SIZE, size, |
198 | self.COL_BINB, "", self.COL_INC, False, self.COL_FONT, '10') | 187 | self.COL_RCP, recipe, self.COL_BINB, "", |
188 | self.COL_INC, False, self.COL_FONT, '10') | ||
199 | 189 | ||
200 | """ | 190 | self.pn_path = {} |
201 | Check whether the item at item_path is included or not | 191 | it = self.get_iter_first() |
202 | """ | 192 | while it: |
203 | def path_included(self, item_path): | 193 | pn = self.get_value(it, self.COL_NAME) |
204 | return self[item_path][self.COL_INC] | 194 | path = self.get_path(it) |
195 | self.pn_path[pn] = path | ||
196 | it = self.iter_next(it) | ||
205 | 197 | ||
206 | """ | 198 | """ |
207 | Update the model, send out the notification. | 199 | Update the model, send out the notification. |
@@ -210,48 +202,32 @@ class PackageListModel(gtk.TreeStore): | |||
210 | self.emit("package-selection-changed") | 202 | self.emit("package-selection-changed") |
211 | 203 | ||
212 | """ | 204 | """ |
213 | Mark a certain package as selected. | 205 | Check whether the item at item_path is included or not |
214 | All its dependencies are marked as selected. | 206 | """ |
215 | The recipe provides the package is marked as selected. | 207 | def path_included(self, item_path): |
216 | If user explicitly selects a recipe, all its providing packages are selected | 208 | return self[item_path][self.COL_INC] |
209 | |||
210 | """ | ||
211 | Add this item, and any of its dependencies, to the image contents | ||
217 | """ | 212 | """ |
218 | def include_item(self, item_path, binb=""): | 213 | def include_item(self, item_path, binb=""): |
219 | if self.path_included(item_path): | 214 | if self.path_included(item_path): |
220 | return | 215 | return |
221 | 216 | ||
222 | item_name = self[item_path][self.COL_NAME] | 217 | item_name = self[item_path][self.COL_NAME] |
223 | item_rdep = self[item_path][self.COL_RDEP] | 218 | item_deps = self[item_path][self.COL_RDEP] |
224 | 219 | ||
225 | self[item_path][self.COL_INC] = True | 220 | self[item_path][self.COL_INC] = True |
226 | 221 | ||
227 | it = self.get_iter(item_path) | ||
228 | |||
229 | # If user explicitly selects a recipe, all its providing packages are selected. | ||
230 | if not self[item_path][self.COL_VER] and binb == "User Selected": | ||
231 | child_it = self.iter_children(it) | ||
232 | while child_it: | ||
233 | child_path = self.get_path(child_it) | ||
234 | child_included = self.path_included(child_path) | ||
235 | if not child_included: | ||
236 | self.include_item(child_path, binb="User Selected") | ||
237 | child_it = self.iter_next(child_it) | ||
238 | return | ||
239 | |||
240 | # The recipe provides the package is also marked as selected | ||
241 | parent_it = self.iter_parent(it) | ||
242 | if parent_it: | ||
243 | parent_path = self.get_path(parent_it) | ||
244 | self[parent_path][self.COL_INC] = True | ||
245 | |||
246 | item_bin = self[item_path][self.COL_BINB].split(', ') | 222 | item_bin = self[item_path][self.COL_BINB].split(', ') |
247 | if binb and not binb in item_bin: | 223 | if binb and not binb in item_bin: |
248 | item_bin.append(binb) | 224 | item_bin.append(binb) |
249 | self[item_path][self.COL_BINB] = ', '.join(item_bin).lstrip(', ') | 225 | self[item_path][self.COL_BINB] = ', '.join(item_bin).lstrip(', ') |
250 | 226 | ||
251 | if item_rdep: | 227 | if item_deps: |
252 | # Ensure all of the items deps are included and, where appropriate, | 228 | # Ensure all of the items deps are included and, where appropriate, |
253 | # add this item to their COL_BINB | 229 | # add this item to their COL_BINB |
254 | for dep in item_rdep.split(" "): | 230 | for dep in item_deps.split(" "): |
255 | if dep.startswith('('): | 231 | if dep.startswith('('): |
256 | continue | 232 | continue |
257 | # If the contents model doesn't already contain dep, add it | 233 | # If the contents model doesn't already contain dep, add it |
@@ -270,12 +246,6 @@ class PackageListModel(gtk.TreeStore): | |||
270 | elif not dep_included: | 246 | elif not dep_included: |
271 | self.include_item(dep_path, binb=item_name) | 247 | self.include_item(dep_path, binb=item_name) |
272 | 248 | ||
273 | """ | ||
274 | Mark a certain package as de-selected. | ||
275 | All other packages that depends on this package are marked as de-selected. | ||
276 | If none of the packages provided by the recipe, the recipe should be marked as de-selected. | ||
277 | If user explicitly de-select a recipe, all its providing packages are de-selected. | ||
278 | """ | ||
279 | def exclude_item(self, item_path): | 249 | def exclude_item(self, item_path): |
280 | if not self.path_included(item_path): | 250 | if not self.path_included(item_path): |
281 | return | 251 | return |
@@ -283,37 +253,9 @@ class PackageListModel(gtk.TreeStore): | |||
283 | self[item_path][self.COL_INC] = False | 253 | self[item_path][self.COL_INC] = False |
284 | 254 | ||
285 | item_name = self[item_path][self.COL_NAME] | 255 | item_name = self[item_path][self.COL_NAME] |
286 | item_rdep = self[item_path][self.COL_RDEP] | 256 | item_deps = self[item_path][self.COL_RDEP] |
287 | it = self.get_iter(item_path) | 257 | if item_deps: |
288 | 258 | for dep in item_deps.split(" "): | |
289 | # If user explicitly de-select a recipe, all its providing packages are de-selected. | ||
290 | if not self[item_path][self.COL_VER]: | ||
291 | child_it = self.iter_children(it) | ||
292 | while child_it: | ||
293 | child_path = self.get_path(child_it) | ||
294 | child_included = self[child_path][self.COL_INC] | ||
295 | if child_included: | ||
296 | self.exclude_item(child_path) | ||
297 | child_it = self.iter_next(child_it) | ||
298 | return | ||
299 | |||
300 | # If none of the packages provided by the recipe, the recipe should be marked as de-selected. | ||
301 | parent_it = self.iter_parent(it) | ||
302 | peer_iter = self.iter_children(parent_it) | ||
303 | enabled = 0 | ||
304 | while peer_iter: | ||
305 | peer_path = self.get_path(peer_iter) | ||
306 | if self[peer_path][self.COL_INC]: | ||
307 | enabled = 1 | ||
308 | break | ||
309 | peer_iter = self.iter_next(peer_iter) | ||
310 | if not enabled: | ||
311 | parent_path = self.get_path(parent_it) | ||
312 | self[parent_path][self.COL_INC] = False | ||
313 | |||
314 | # All packages that depends on this package are de-selected. | ||
315 | if item_rdep: | ||
316 | for dep in item_rdep.split(" "): | ||
317 | if dep.startswith('('): | 259 | if dep.startswith('('): |
318 | continue | 260 | continue |
319 | dep_path = self.find_path_for_item(dep) | 261 | dep_path = self.find_path_for_item(dep) |
@@ -333,51 +275,40 @@ class PackageListModel(gtk.TreeStore): | |||
333 | self.exclude_item(binb_path) | 275 | self.exclude_item(binb_path) |
334 | 276 | ||
335 | """ | 277 | """ |
336 | Package model may be incomplete, therefore when calling the | 278 | Empty self.contents by setting the include of each entry to None |
337 | set_selected_packages(), some packages will not be set included. | ||
338 | Return the un-set packages list. | ||
339 | """ | 279 | """ |
340 | def set_selected_packages(self, packagelist, user_selected=False): | 280 | def reset(self): |
341 | left = [] | 281 | it = self.get_iter_first() |
342 | binb = 'User Selected' if user_selected else '' | 282 | while it: |
343 | for pn in packagelist: | 283 | self.set(it, |
344 | if pn in self.pkg_path.keys(): | 284 | self.COL_INC, False, |
345 | path = self.pkg_path[pn] | 285 | self.COL_BINB, "") |
346 | self.include_item(item_path=path, binb=binb) | 286 | it = self.iter_next(it) |
347 | else: | ||
348 | left.append(pn) | ||
349 | 287 | ||
350 | self.selection_change_notification() | 288 | self.selection_change_notification() |
351 | return left | ||
352 | 289 | ||
353 | def get_user_selected_packages(self): | 290 | def get_selected_packages(self): |
354 | packagelist = [] | 291 | packagelist = [] |
355 | 292 | ||
356 | it = self.get_iter_first() | 293 | it = self.get_iter_first() |
357 | while it: | 294 | while it: |
358 | child_it = self.iter_children(it) | 295 | if self.get_value(it, self.COL_INC): |
359 | while child_it: | 296 | name = self.get_value(it, self.COL_NAME) |
360 | if self.get_value(child_it, self.COL_INC): | 297 | packagelist.append(name) |
361 | binb = self.get_value(child_it, self.COL_BINB) | ||
362 | if binb == "User Selected": | ||
363 | name = self.get_value(child_it, self.COL_NAME) | ||
364 | packagelist.append(name) | ||
365 | child_it = self.iter_next(child_it) | ||
366 | it = self.iter_next(it) | 298 | it = self.iter_next(it) |
367 | 299 | ||
368 | return packagelist | 300 | return packagelist |
369 | 301 | ||
370 | def get_selected_packages(self): | 302 | def get_user_selected_packages(self): |
371 | packagelist = [] | 303 | packagelist = [] |
372 | 304 | ||
373 | it = self.get_iter_first() | 305 | it = self.get_iter_first() |
374 | while it: | 306 | while it: |
375 | child_it = self.iter_children(it) | 307 | if self.get_value(it, self.COL_INC): |
376 | while child_it: | 308 | binb = self.get_value(it, self.COL_BINB) |
377 | if self.get_value(child_it, self.COL_INC): | 309 | if binb == "User Selected": |
378 | name = self.get_value(child_it, self.COL_NAME) | 310 | name = self.get_value(it, self.COL_NAME) |
379 | packagelist.append(name) | 311 | packagelist.append(name) |
380 | child_it = self.iter_next(child_it) | ||
381 | it = self.iter_next(it) | 312 | it = self.iter_next(it) |
382 | 313 | ||
383 | return packagelist | 314 | return packagelist |
@@ -388,16 +319,31 @@ class PackageListModel(gtk.TreeStore): | |||
388 | it = self.get_iter_first() | 319 | it = self.get_iter_first() |
389 | while it: | 320 | while it: |
390 | if self.get_value(it, self.COL_INC): | 321 | if self.get_value(it, self.COL_INC): |
391 | child_it = self.iter_children(it) | 322 | name = self.get_value(it, self.COL_NAME) |
392 | while child_it: | 323 | if name.endswith("-dev") or name.endswith("-dbg"): |
393 | name = self.get_value(child_it, self.COL_NAME) | 324 | packagelist.append(name) |
394 | inc = self.get_value(child_it, self.COL_INC) | ||
395 | if inc or name.endswith("-dev") or name.endswith("-dbg"): | ||
396 | packagelist.append(name) | ||
397 | child_it = self.iter_next(child_it) | ||
398 | it = self.iter_next(it) | 325 | it = self.iter_next(it) |
399 | 326 | ||
400 | return list(set(packagelist + self.__toolchain_required_packages__)); | 327 | return list(set(packagelist + self.__toolchain_required_packages__)); |
328 | |||
329 | """ | ||
330 | Package model may be incomplete, therefore when calling the | ||
331 | set_selected_packages(), some packages will not be set included. | ||
332 | Return the un-set packages list. | ||
333 | """ | ||
334 | def set_selected_packages(self, packagelist, user_selected=False): | ||
335 | left = [] | ||
336 | binb = 'User Selected' if user_selected else '' | ||
337 | for pn in packagelist: | ||
338 | if pn in self.pn_path.keys(): | ||
339 | path = self.pn_path[pn] | ||
340 | self.include_item(item_path=path, binb=binb) | ||
341 | else: | ||
342 | left.append(pn) | ||
343 | |||
344 | self.selection_change_notification() | ||
345 | return left | ||
346 | |||
401 | """ | 347 | """ |
402 | Return the selected package size, unit is B. | 348 | Return the selected package size, unit is B. |
403 | """ | 349 | """ |
@@ -405,38 +351,17 @@ class PackageListModel(gtk.TreeStore): | |||
405 | packages_size = 0 | 351 | packages_size = 0 |
406 | it = self.get_iter_first() | 352 | it = self.get_iter_first() |
407 | while it: | 353 | while it: |
408 | child_it = self.iter_children(it) | 354 | if self.get_value(it, self.COL_INC): |
409 | while child_it: | 355 | str_size = self.get_value(it, self.COL_SIZE) |
410 | if self.get_value(child_it, self.COL_INC): | 356 | if not str_size: |
411 | str_size = self.get_value(child_it, self.COL_SIZE) | 357 | continue |
412 | if not str_size: | ||
413 | continue | ||
414 | 358 | ||
415 | packages_size += HobPage._string_to_size(str_size) | 359 | packages_size += HobPage._string_to_size(str_size) |
416 | 360 | ||
417 | child_it = self.iter_next(child_it) | ||
418 | it = self.iter_next(it) | 361 | it = self.iter_next(it) |
419 | return packages_size | 362 | return packages_size |
420 | 363 | ||
421 | """ | 364 | """ |
422 | Empty self.contents by setting the include of each entry to None | ||
423 | """ | ||
424 | def reset(self): | ||
425 | self.pkgs_size = 0 | ||
426 | it = self.get_iter_first() | ||
427 | while it: | ||
428 | self.set(it, self.COL_INC, False) | ||
429 | child_it = self.iter_children(it) | ||
430 | while child_it: | ||
431 | self.set(child_it, | ||
432 | self.COL_INC, False, | ||
433 | self.COL_BINB, "") | ||
434 | child_it = self.iter_next(child_it) | ||
435 | it = self.iter_next(it) | ||
436 | |||
437 | self.selection_change_notification() | ||
438 | |||
439 | """ | ||
440 | Resync the state of included items to a backup column before performing the fadeout visible effect | 365 | Resync the state of included items to a backup column before performing the fadeout visible effect |
441 | """ | 366 | """ |
442 | def resync_fadeout_column(self, model_first_iter=None): | 367 | def resync_fadeout_column(self, model_first_iter=None): |
@@ -444,9 +369,6 @@ class PackageListModel(gtk.TreeStore): | |||
444 | while it: | 369 | while it: |
445 | active = self.get_value(it, self.COL_INC) | 370 | active = self.get_value(it, self.COL_INC) |
446 | self.set(it, self.COL_FADE_INC, active) | 371 | self.set(it, self.COL_FADE_INC, active) |
447 | if self.iter_has_child(it): | ||
448 | self.resync_fadeout_column(self.iter_children(it)) | ||
449 | |||
450 | it = self.iter_next(it) | 372 | it = self.iter_next(it) |
451 | 373 | ||
452 | # | 374 | # |
@@ -533,7 +455,7 @@ class RecipeListModel(gtk.ListStore): | |||
533 | 455 | ||
534 | """ | 456 | """ |
535 | Create, if required, and return a filtered gtk.TreeModelSort | 457 | Create, if required, and return a filtered gtk.TreeModelSort |
536 | containing only the items which are items specified by filter | 458 | containing only the items specified by filter |
537 | """ | 459 | """ |
538 | def tree_model(self, filter, excluded_items_ahead=False, included_items_ahead=True): | 460 | def tree_model(self, filter, excluded_items_ahead=False, included_items_ahead=True): |
539 | model = self.filter_new() | 461 | model = self.filter_new() |
diff --git a/bitbake/lib/bb/ui/crumbs/packageselectionpage.py b/bitbake/lib/bb/ui/crumbs/packageselectionpage.py index b879cc55db..4544543c4b 100755 --- a/bitbake/lib/bb/ui/crumbs/packageselectionpage.py +++ b/bitbake/lib/bb/ui/crumbs/packageselectionpage.py | |||
@@ -52,6 +52,13 @@ class PackageSelectionPage (HobPage): | |||
52 | 'col_max' : 300, | 52 | 'col_max' : 300, |
53 | 'expand' : 'True' | 53 | 'expand' : 'True' |
54 | }, { | 54 | }, { |
55 | 'col_name' : 'Recipe', | ||
56 | 'col_id' : PackageListModel.COL_RCP, | ||
57 | 'col_style': 'text', | ||
58 | 'col_min' : 100, | ||
59 | 'col_max' : 250, | ||
60 | 'expand' : 'True' | ||
61 | }, { | ||
55 | 'col_name' : 'Brought in by (+others)', | 62 | 'col_name' : 'Brought in by (+others)', |
56 | 'col_id' : PackageListModel.COL_BINB, | 63 | 'col_id' : PackageListModel.COL_BINB, |
57 | 'col_style': 'binb', | 64 | 'col_style': 'binb', |
@@ -84,6 +91,13 @@ class PackageSelectionPage (HobPage): | |||
84 | 'col_max' : 500, | 91 | 'col_max' : 500, |
85 | 'expand' : 'True' | 92 | 'expand' : 'True' |
86 | }, { | 93 | }, { |
94 | 'col_name' : 'Recipe', | ||
95 | 'col_id' : PackageListModel.COL_RCP, | ||
96 | 'col_style': 'text', | ||
97 | 'col_min' : 100, | ||
98 | 'col_max' : 250, | ||
99 | 'expand' : 'True' | ||
100 | }, { | ||
87 | 'col_name' : 'Included', | 101 | 'col_name' : 'Included', |
88 | 'col_id' : PackageListModel.COL_INC, | 102 | 'col_id' : PackageListModel.COL_INC, |
89 | 'col_style': 'check toggle', | 103 | 'col_style': 'check toggle', |
@@ -99,7 +113,7 @@ class PackageSelectionPage (HobPage): | |||
99 | def __init__(self, builder): | 113 | def __init__(self, builder): |
100 | super(PackageSelectionPage, self).__init__(builder, "Edit packages") | 114 | super(PackageSelectionPage, self).__init__(builder, "Edit packages") |
101 | 115 | ||
102 | # set invisiable members | 116 | # set invisible members |
103 | self.recipe_model = self.builder.recipe_model | 117 | self.recipe_model = self.builder.recipe_model |
104 | self.package_model = self.builder.package_model | 118 | self.package_model = self.builder.package_model |
105 | 119 | ||
@@ -196,13 +210,7 @@ class PackageSelectionPage (HobPage): | |||
196 | else: | 210 | else: |
197 | self.builder.show_configuration() | 211 | self.builder.show_configuration() |
198 | 212 | ||
199 | def _expand_all(self): | ||
200 | for tab in self.tables: | ||
201 | tab.table_tree.expand_all() | ||
202 | |||
203 | def refresh_selection(self): | 213 | def refresh_selection(self): |
204 | self._expand_all() | ||
205 | |||
206 | self.builder.configuration.selected_packages = self.package_model.get_selected_packages() | 214 | self.builder.configuration.selected_packages = self.package_model.get_selected_packages() |
207 | self.builder.configuration.user_selected_packages = self.package_model.get_user_selected_packages() | 215 | self.builder.configuration.user_selected_packages = self.package_model.get_user_selected_packages() |
208 | selected_packages_num = len(self.builder.configuration.selected_packages) | 216 | selected_packages_num = len(self.builder.configuration.selected_packages) |