diff options
Diffstat (limited to 'bitbake/lib/bb/ui/crumbs/hoblistmodel.py')
-rw-r--r-- | bitbake/lib/bb/ui/crumbs/hoblistmodel.py | 107 |
1 files changed, 91 insertions, 16 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/hoblistmodel.py b/bitbake/lib/bb/ui/crumbs/hoblistmodel.py index 0bd9734f48..547c1cade9 100644 --- a/bitbake/lib/bb/ui/crumbs/hoblistmodel.py +++ b/bitbake/lib/bb/ui/crumbs/hoblistmodel.py | |||
@@ -103,25 +103,55 @@ class PackageListModel(gtk.ListStore): | |||
103 | Create, if required, and return a filtered gtk.TreeModelSort | 103 | Create, if required, and return a filtered gtk.TreeModelSort |
104 | containing only the items specified by filter | 104 | containing only the items specified by filter |
105 | """ | 105 | """ |
106 | def tree_model(self, filter, excluded_items_ahead=False, included_items_ahead=True, search_data=None): | 106 | def tree_model(self, filter, excluded_items_ahead=False, included_items_ahead=False, search_data=None, initial=False): |
107 | model = self.filter_new() | 107 | model = self.filter_new() |
108 | self.filtered_nb = 0 | 108 | self.filtered_nb = 0 |
109 | model.set_visible_func(self.tree_model_filter, filter) | 109 | model.set_visible_func(self.tree_model_filter, filter) |
110 | 110 | ||
111 | sort = gtk.TreeModelSort(model) | 111 | sort = gtk.TreeModelSort(model) |
112 | if initial: | ||
113 | sort.set_sort_column_id(PackageListModel.COL_NAME, gtk.SORT_ASCENDING) | ||
114 | sort.set_default_sort_func(None) | ||
115 | |||
112 | if excluded_items_ahead: | 116 | if excluded_items_ahead: |
113 | sort.set_default_sort_func(self.exclude_item_sort_func, search_data) | 117 | sort.set_default_sort_func(self.exclude_item_sort_func, search_data) |
114 | elif included_items_ahead: | 118 | elif included_items_ahead: |
115 | sort.set_default_sort_func(self.include_item_sort_func, search_data) | 119 | sort.set_default_sort_func(self.include_item_sort_func, search_data) |
116 | else: | 120 | else: |
117 | sort.set_sort_column_id(RecipeListModel.COL_NAME, gtk.SORT_ASCENDING) | 121 | if search_data and search_data!='Search recipes by name' and search_data!='Search package groups by name': |
118 | sort.set_default_sort_func(None) | 122 | sort.set_default_sort_func(self.sort_func, search_data) |
123 | else: | ||
124 | sort.set_sort_column_id(PackageListModel.COL_NAME, gtk.SORT_ASCENDING) | ||
125 | sort.set_default_sort_func(None) | ||
126 | |||
127 | sort.set_sort_func(PackageListModel.COL_INC, self.sort_column, PackageListModel.COL_INC) | ||
128 | sort.set_sort_func(PackageListModel.COL_SIZE, self.sort_column, PackageListModel.COL_SIZE) | ||
129 | sort.set_sort_func(PackageListModel.COL_BINB, self.sort_column, PackageListModel.COL_BINB) | ||
130 | sort.set_sort_func(PackageListModel.COL_RCP, self.sort_column, PackageListModel.COL_RCP) | ||
119 | return sort | 131 | return sort |
120 | 132 | ||
133 | def sort_column(self, model, row1, row2, col): | ||
134 | value1 = model.get_value(row1, col) | ||
135 | value2 = model.get_value(row2, col) | ||
136 | if col==PackageListModel.COL_SIZE: | ||
137 | value1 = HobPage._string_to_size(value1) | ||
138 | value2 = HobPage._string_to_size(value2) | ||
139 | |||
140 | cmp_res = cmp(value1, value2) | ||
141 | if cmp_res!=0: | ||
142 | if col==PackageListModel.COL_INC: | ||
143 | return -cmp_res | ||
144 | else: | ||
145 | return cmp_res | ||
146 | else: | ||
147 | name1 = model.get_value(row1, PackageListModel.COL_NAME) | ||
148 | name2 = model.get_value(row2, PackageListModel.COL_NAME) | ||
149 | return cmp(name1,name2) | ||
150 | |||
121 | def exclude_item_sort_func(self, model, iter1, iter2, user_data=None): | 151 | def exclude_item_sort_func(self, model, iter1, iter2, user_data=None): |
122 | if user_data: | 152 | if user_data: |
123 | val1 = model.get_value(iter1, RecipeListModel.COL_NAME) | 153 | val1 = model.get_value(iter1, PackageListModel.COL_NAME) |
124 | val2 = model.get_value(iter2, RecipeListModel.COL_NAME) | 154 | val2 = model.get_value(iter2, PackageListModel.COL_NAME) |
125 | if val1.startswith(user_data) and not val2.startswith(user_data): | 155 | if val1.startswith(user_data) and not val2.startswith(user_data): |
126 | return -1 | 156 | return -1 |
127 | elif not val1.startswith(user_data) and val2.startswith(user_data): | 157 | elif not val1.startswith(user_data) and val2.startswith(user_data): |
@@ -129,14 +159,14 @@ class PackageListModel(gtk.ListStore): | |||
129 | else: | 159 | else: |
130 | return 0 | 160 | return 0 |
131 | else: | 161 | else: |
132 | val1 = model.get_value(iter1, RecipeListModel.COL_FADE_INC) | 162 | val1 = model.get_value(iter1, PackageListModel.COL_FADE_INC) |
133 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | 163 | val2 = model.get_value(iter2, PackageListModel.COL_INC) |
134 | return ((val1 == True) and (val2 == False)) | 164 | return ((val1 == True) and (val2 == False)) |
135 | 165 | ||
136 | def include_item_sort_func(self, model, iter1, iter2, user_data=None): | 166 | def include_item_sort_func(self, model, iter1, iter2, user_data=None): |
137 | if user_data: | 167 | if user_data: |
138 | val1 = model.get_value(iter1, RecipeListModel.COL_NAME) | 168 | val1 = model.get_value(iter1, PackageListModel.COL_NAME) |
139 | val2 = model.get_value(iter2, RecipeListModel.COL_NAME) | 169 | val2 = model.get_value(iter2, PackageListModel.COL_NAME) |
140 | if val1.startswith(user_data) and not val2.startswith(user_data): | 170 | if val1.startswith(user_data) and not val2.startswith(user_data): |
141 | return -1 | 171 | return -1 |
142 | elif not val1.startswith(user_data) and val2.startswith(user_data): | 172 | elif not val1.startswith(user_data) and val2.startswith(user_data): |
@@ -144,10 +174,20 @@ class PackageListModel(gtk.ListStore): | |||
144 | else: | 174 | else: |
145 | return 0 | 175 | return 0 |
146 | else: | 176 | else: |
147 | val1 = model.get_value(iter1, RecipeListModel.COL_INC) | 177 | val1 = model.get_value(iter1, PackageListModel.COL_INC) |
148 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | 178 | val2 = model.get_value(iter2, PackageListModel.COL_INC) |
149 | return ((val1 == False) and (val2 == True)) | 179 | return ((val1 == False) and (val2 == True)) |
150 | 180 | ||
181 | def sort_func(self, model, iter1, iter2, user_data): | ||
182 | val1 = model.get_value(iter1, PackageListModel.COL_NAME) | ||
183 | val2 = model.get_value(iter2, PackageListModel.COL_NAME) | ||
184 | if val1.startswith(user_data) and not val2.startswith(user_data): | ||
185 | return -1 | ||
186 | elif not val1.startswith(user_data) and val2.startswith(user_data): | ||
187 | return 1 | ||
188 | else: | ||
189 | return 0 | ||
190 | |||
151 | def convert_vpath_to_path(self, view_model, view_path): | 191 | def convert_vpath_to_path(self, view_model, view_path): |
152 | # view_model is the model sorted | 192 | # view_model is the model sorted |
153 | # get the path of the model filtered | 193 | # get the path of the model filtered |
@@ -162,7 +202,7 @@ class PackageListModel(gtk.ListStore): | |||
162 | it = view_model.get_iter_first() | 202 | it = view_model.get_iter_first() |
163 | while it: | 203 | while it: |
164 | name = self.find_item_for_path(path) | 204 | name = self.find_item_for_path(path) |
165 | view_name = view_model.get_value(it, RecipeListModel.COL_NAME) | 205 | view_name = view_model.get_value(it, PackageListModel.COL_NAME) |
166 | if view_name == name: | 206 | if view_name == name: |
167 | view_path = view_model.get_path(it) | 207 | view_path = view_model.get_path(it) |
168 | return view_path | 208 | return view_path |
@@ -213,7 +253,6 @@ class PackageListModel(gtk.ListStore): | |||
213 | 253 | ||
214 | # pkgsize is in KB | 254 | # pkgsize is in KB |
215 | size = HobPage._size_to_string(HobPage._string_to_size(pkgsize + ' KB')) | 255 | size = HobPage._size_to_string(HobPage._string_to_size(pkgsize + ' KB')) |
216 | |||
217 | self.set(self.append(), self.COL_NAME, pkg, self.COL_VER, pkgv, | 256 | self.set(self.append(), self.COL_NAME, pkg, self.COL_VER, pkgv, |
218 | self.COL_REV, pkgr, self.COL_RNM, pkg_rename, | 257 | self.COL_REV, pkgr, self.COL_RNM, pkg_rename, |
219 | self.COL_SEC, section, self.COL_SUM, summary, | 258 | self.COL_SEC, section, self.COL_SUM, summary, |
@@ -520,25 +559,61 @@ class RecipeListModel(gtk.ListStore): | |||
520 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) | 559 | val2 = model.get_value(iter2, RecipeListModel.COL_INC) |
521 | return ((val1 == False) and (val2 == True)) | 560 | return ((val1 == False) and (val2 == True)) |
522 | 561 | ||
562 | def sort_func(self, model, iter1, iter2, user_data): | ||
563 | val1 = model.get_value(iter1, RecipeListModel.COL_NAME) | ||
564 | val2 = model.get_value(iter2, RecipeListModel.COL_NAME) | ||
565 | if val1.startswith(user_data) and not val2.startswith(user_data): | ||
566 | return -1 | ||
567 | elif not val1.startswith(user_data) and val2.startswith(user_data): | ||
568 | return 1 | ||
569 | else: | ||
570 | return 0 | ||
571 | |||
523 | """ | 572 | """ |
524 | Create, if required, and return a filtered gtk.TreeModelSort | 573 | Create, if required, and return a filtered gtk.TreeModelSort |
525 | containing only the items specified by filter | 574 | containing only the items specified by filter |
526 | """ | 575 | """ |
527 | def tree_model(self, filter, excluded_items_ahead=False, included_items_ahead=True, search_data=None): | 576 | def tree_model(self, filter, excluded_items_ahead=False, included_items_ahead=False, search_data=None, initial=False): |
528 | model = self.filter_new() | 577 | model = self.filter_new() |
529 | self.filtered_nb = 0 | 578 | self.filtered_nb = 0 |
530 | model.set_visible_func(self.tree_model_filter, filter) | 579 | model.set_visible_func(self.tree_model_filter, filter) |
531 | 580 | ||
532 | sort = gtk.TreeModelSort(model) | 581 | sort = gtk.TreeModelSort(model) |
582 | if initial: | ||
583 | sort.set_sort_column_id(RecipeListModel.COL_NAME, gtk.SORT_ASCENDING) | ||
584 | sort.set_default_sort_func(None) | ||
585 | |||
533 | if excluded_items_ahead: | 586 | if excluded_items_ahead: |
534 | sort.set_default_sort_func(self.exclude_item_sort_func, search_data) | 587 | sort.set_default_sort_func(self.exclude_item_sort_func, search_data) |
535 | elif included_items_ahead: | 588 | elif included_items_ahead: |
536 | sort.set_default_sort_func(self.include_item_sort_func, search_data) | 589 | sort.set_default_sort_func(self.include_item_sort_func, search_data) |
537 | else: | 590 | else: |
538 | sort.set_sort_column_id(RecipeListModel.COL_NAME, gtk.SORT_ASCENDING) | 591 | if search_data and search_data!='Search recipes by name' and search_data!='Search package groups by name': |
539 | sort.set_default_sort_func(None) | 592 | sort.set_default_sort_func(self.sort_func, search_data) |
593 | else: | ||
594 | sort.set_sort_column_id(RecipeListModel.COL_NAME, gtk.SORT_ASCENDING) | ||
595 | sort.set_default_sort_func(None) | ||
596 | |||
597 | sort.set_sort_func(RecipeListModel.COL_INC, self.sort_column, RecipeListModel.COL_INC) | ||
598 | sort.set_sort_func(RecipeListModel.COL_GROUP, self.sort_column, RecipeListModel.COL_GROUP) | ||
599 | sort.set_sort_func(RecipeListModel.COL_BINB, self.sort_column, RecipeListModel.COL_BINB) | ||
600 | sort.set_sort_func(RecipeListModel.COL_LIC, self.sort_column, RecipeListModel.COL_LIC) | ||
540 | return sort | 601 | return sort |
541 | 602 | ||
603 | def sort_column(self, model, row1, row2, col): | ||
604 | value1 = model.get_value(row1, col) | ||
605 | value2 = model.get_value(row2, col) | ||
606 | cmp_res = cmp(value1, value2) | ||
607 | if cmp_res!=0: | ||
608 | if col==RecipeListModel.COL_INC: | ||
609 | return -cmp_res | ||
610 | else: | ||
611 | return cmp_res | ||
612 | else: | ||
613 | name1 = model.get_value(row1, RecipeListModel.COL_NAME) | ||
614 | name2 = model.get_value(row2, RecipeListModel.COL_NAME) | ||
615 | return cmp(name1,name2) | ||
616 | |||
542 | def convert_vpath_to_path(self, view_model, view_path): | 617 | def convert_vpath_to_path(self, view_model, view_path): |
543 | filtered_model_path = view_model.convert_path_to_child_path(view_path) | 618 | filtered_model_path = view_model.convert_path_to_child_path(view_path) |
544 | filtered_model = view_model.get_model() | 619 | filtered_model = view_model.get_model() |