summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/ui/crumbs/hoblistmodel.py
diff options
context:
space:
mode:
authorCristiana Voicu <cristiana.voicu@intel.com>2013-04-11 15:07:59 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-04-15 15:57:31 +0100
commit3cc69d34131351fc9eb8672a838002241af4d329 (patch)
tree73259cafbc673a91f986ae11d3083e89c72ec0fb /bitbake/lib/bb/ui/crumbs/hoblistmodel.py
parent612c25c59718d3b7a259ae72430544c2f6e369fc (diff)
downloadpoky-3cc69d34131351fc9eb8672a838002241af4d329.tar.gz
bitbake: hob: Refine sorting mechanisms in Hob
-refine sorting functions for each column from recipe list page and package list page -sort correctly size column from packages list page -set default sroting order and secondary sorting criteria -make included on included recipes/packages no sortable [YOCTO #2346 & #4194] (Bitbake rev: 56822176e3d5e613654a46c983d2f979d7a9eebc) Signed-off-by: Cristiana Voicu <cristiana.voicu@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/ui/crumbs/hoblistmodel.py')
-rw-r--r--bitbake/lib/bb/ui/crumbs/hoblistmodel.py107
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()