diff options
Diffstat (limited to 'bitbake/lib/bb/ui/crumbs/hoblistmodel.py')
-rw-r--r-- | bitbake/lib/bb/ui/crumbs/hoblistmodel.py | 118 |
1 files changed, 89 insertions, 29 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/hoblistmodel.py b/bitbake/lib/bb/ui/crumbs/hoblistmodel.py index 0f37a068c6..9b8db23c79 100644 --- a/bitbake/lib/bb/ui/crumbs/hoblistmodel.py +++ b/bitbake/lib/bb/ui/crumbs/hoblistmodel.py | |||
@@ -85,34 +85,67 @@ class PackageListModel(gtk.ListStore): | |||
85 | Helper function to determine whether an item is an item specified by filter | 85 | Helper function to determine whether an item is an item specified by filter |
86 | """ | 86 | """ |
87 | def tree_model_filter(self, model, it, filter): | 87 | def tree_model_filter(self, model, it, filter): |
88 | for key in filter.keys(): | 88 | name = model.get_value(it, self.COL_NAME) |
89 | if model.get_value(it, key) not in filter[key]: | ||
90 | return False | ||
91 | 89 | ||
90 | for key in filter.keys(): | ||
91 | if key == self.COL_NAME: | ||
92 | if filter[key] != 'Search packages by name': | ||
93 | if filter[key] not in name: | ||
94 | return False | ||
95 | else: | ||
96 | if model.get_value(it, key) not in filter[key]: | ||
97 | return False | ||
98 | self.filtered_nb += 1 | ||
92 | return True | 99 | return True |
93 | 100 | ||
94 | """ | 101 | """ |
95 | Create, if required, and return a filtered gtk.TreeModelSort | 102 | Create, if required, and return a filtered gtk.TreeModelSort |
96 | containing only the items specified by filter | 103 | containing only the items specified by filter |
97 | """ | 104 | """ |
98 | def tree_model(self, filter): | 105 | def tree_model(self, filter, excluded_items_ahead=False, included_items_ahead=True, search_data=None): |
99 | model = self.filter_new() | 106 | model = self.filter_new() |
107 | self.filtered_nb = 0 | ||
100 | model.set_visible_func(self.tree_model_filter, filter) | 108 | model.set_visible_func(self.tree_model_filter, filter) |
101 | 109 | ||
102 | sort = gtk.TreeModelSort(model) | 110 | sort = gtk.TreeModelSort(model) |
103 | sort.set_sort_column_id(RecipeListModel.COL_NAME, gtk.SORT_ASCENDING) | 111 | if excluded_items_ahead: |
104 | sort.set_default_sort_func(None) | 112 | sort.set_default_sort_func(self.exclude_item_sort_func, search_data) |
113 | elif included_items_ahead: | ||
114 | sort.set_default_sort_func(self.include_item_sort_func, search_data) | ||
115 | else: | ||
116 | sort.set_sort_column_id(RecipeListModel.COL_NAME, gtk.SORT_ASCENDING) | ||
117 | sort.set_default_sort_func(None) | ||
105 | return sort | 118 | return sort |
106 | 119 | ||
107 | def exclude_item_sort_func(self, model, iter1, iter2): | 120 | def exclude_item_sort_func(self, model, iter1, iter2, user_data=None): |
108 | val1 = model.get_value(iter1, RecipeListModel.COL_FADE_INC) | 121 | if user_data: |
109 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | 122 | val1 = model.get_value(iter1, RecipeListModel.COL_NAME) |
110 | return ((val1 == True) and (val2 == False)) | 123 | val2 = model.get_value(iter2, RecipeListModel.COL_NAME) |
111 | 124 | if val1.startswith(user_data) and not val2.startswith(user_data): | |
112 | def include_item_sort_func(self, model, iter1, iter2): | 125 | return -1 |
113 | val1 = model.get_value(iter1, RecipeListModel.COL_INC) | 126 | elif not val1.startswith(user_data) and val2.startswith(user_data): |
114 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | 127 | return 1 |
115 | return ((val1 == False) and (val2 == True)) | 128 | else: |
129 | return 0 | ||
130 | else: | ||
131 | val1 = model.get_value(iter1, RecipeListModel.COL_FADE_INC) | ||
132 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | ||
133 | return ((val1 == True) and (val2 == False)) | ||
134 | |||
135 | def include_item_sort_func(self, model, iter1, iter2, user_data=None): | ||
136 | if user_data: | ||
137 | val1 = model.get_value(iter1, RecipeListModel.COL_NAME) | ||
138 | val2 = model.get_value(iter2, RecipeListModel.COL_NAME) | ||
139 | if val1.startswith(user_data) and not val2.startswith(user_data): | ||
140 | return -1 | ||
141 | elif not val1.startswith(user_data) and val2.startswith(user_data): | ||
142 | return 1 | ||
143 | else: | ||
144 | return 0 | ||
145 | else: | ||
146 | val1 = model.get_value(iter1, RecipeListModel.COL_INC) | ||
147 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | ||
148 | return ((val1 == False) and (val2 == True)) | ||
116 | 149 | ||
117 | def convert_vpath_to_path(self, view_model, view_path): | 150 | def convert_vpath_to_path(self, view_model, view_path): |
118 | # view_model is the model sorted | 151 | # view_model is the model sorted |
@@ -444,34 +477,61 @@ class RecipeListModel(gtk.ListStore): | |||
444 | return False | 477 | return False |
445 | 478 | ||
446 | for key in filter.keys(): | 479 | for key in filter.keys(): |
447 | if model.get_value(it, key) not in filter[key]: | 480 | if key == self.COL_NAME: |
448 | return False | 481 | if filter[key] != 'Search recipes by name' and filter[key] != 'Search package groups by name': |
482 | if filter[key] not in name: | ||
483 | return False | ||
484 | else: | ||
485 | if model.get_value(it, key) not in filter[key]: | ||
486 | return False | ||
487 | self.filtered_nb += 1 | ||
449 | 488 | ||
450 | return True | 489 | return True |
451 | 490 | ||
452 | def exclude_item_sort_func(self, model, iter1, iter2): | 491 | def exclude_item_sort_func(self, model, iter1, iter2, user_data=None): |
453 | val1 = model.get_value(iter1, RecipeListModel.COL_FADE_INC) | 492 | if user_data: |
454 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | 493 | val1 = model.get_value(iter1, RecipeListModel.COL_NAME) |
455 | return ((val1 == True) and (val2 == False)) | 494 | val2 = model.get_value(iter2, RecipeListModel.COL_NAME) |
456 | 495 | if val1.startswith(user_data) and not val2.startswith(user_data): | |
457 | def include_item_sort_func(self, model, iter1, iter2): | 496 | return -1 |
458 | val1 = model.get_value(iter1, RecipeListModel.COL_INC) | 497 | elif not val1.startswith(user_data) and val2.startswith(user_data): |
459 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | 498 | return 1 |
460 | return ((val1 == False) and (val2 == True)) | 499 | else: |
500 | return 0 | ||
501 | else: | ||
502 | val1 = model.get_value(iter1, RecipeListModel.COL_FADE_INC) | ||
503 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | ||
504 | return ((val1 == True) and (val2 == False)) | ||
505 | |||
506 | def include_item_sort_func(self, model, iter1, iter2, user_data=None): | ||
507 | if user_data: | ||
508 | val1 = model.get_value(iter1, RecipeListModel.COL_NAME) | ||
509 | val2 = model.get_value(iter2, RecipeListModel.COL_NAME) | ||
510 | if val1.startswith(user_data) and not val2.startswith(user_data): | ||
511 | return -1 | ||
512 | elif not val1.startswith(user_data) and val2.startswith(user_data): | ||
513 | return 1 | ||
514 | else: | ||
515 | return 0 | ||
516 | else: | ||
517 | val1 = model.get_value(iter1, RecipeListModel.COL_INC) | ||
518 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | ||
519 | return ((val1 == False) and (val2 == True)) | ||
461 | 520 | ||
462 | """ | 521 | """ |
463 | Create, if required, and return a filtered gtk.TreeModelSort | 522 | Create, if required, and return a filtered gtk.TreeModelSort |
464 | containing only the items specified by filter | 523 | containing only the items specified by filter |
465 | """ | 524 | """ |
466 | def tree_model(self, filter, excluded_items_ahead=False, included_items_ahead=True): | 525 | def tree_model(self, filter, excluded_items_ahead=False, included_items_ahead=True, search_data=None): |
467 | model = self.filter_new() | 526 | model = self.filter_new() |
527 | self.filtered_nb = 0 | ||
468 | model.set_visible_func(self.tree_model_filter, filter) | 528 | model.set_visible_func(self.tree_model_filter, filter) |
469 | 529 | ||
470 | sort = gtk.TreeModelSort(model) | 530 | sort = gtk.TreeModelSort(model) |
471 | if excluded_items_ahead: | 531 | if excluded_items_ahead: |
472 | sort.set_default_sort_func(self.exclude_item_sort_func) | 532 | sort.set_default_sort_func(self.exclude_item_sort_func, search_data) |
473 | elif included_items_ahead: | 533 | elif included_items_ahead: |
474 | sort.set_default_sort_func(self.include_item_sort_func) | 534 | sort.set_default_sort_func(self.include_item_sort_func, search_data) |
475 | else: | 535 | else: |
476 | sort.set_sort_column_id(RecipeListModel.COL_NAME, gtk.SORT_ASCENDING) | 536 | sort.set_sort_column_id(RecipeListModel.COL_NAME, gtk.SORT_ASCENDING) |
477 | sort.set_default_sort_func(None) | 537 | sort.set_default_sort_func(None) |