summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/ui/crumbs/hoblistmodel.py
diff options
context:
space:
mode:
authorCristiana Voicu <cristiana.voicu@intel.com>2013-03-20 14:35:06 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-03-22 16:54:39 +0000
commit860f826753cab81b1d1d9b2ecafa630a96676d9e (patch)
tree6f5da66864b05ded2f96c76ce9299a3386fa9c1f /bitbake/lib/bb/ui/crumbs/hoblistmodel.py
parentab7d8bd172f61e14266a020bd6633d33d79e3d8f (diff)
downloadpoky-860f826753cab81b1d1d9b2ecafa630a96676d9e.tar.gz
bitbake: hob: implementation of search functionality in Hob
Implemented the search functionality for recipes and packages using filters on the listmodel. I have used the design which can be found in bugzilla. [YOCTO #3529] (Bitbake rev: b77166ad7b8571895f73a84f7789d93fbd4f6d04) 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.py118
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)